ci.sh 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #!/usr/bin/env bash
  2. set -eox pipefail
  3. export DEFMT_LOG=trace
  4. MSRV="1.65.0"
  5. RUSTC_VERSIONS=(
  6. $MSRV
  7. "stable"
  8. "nightly"
  9. )
  10. FEATURES_TEST=(
  11. "default"
  12. "std,proto-ipv4"
  13. "std,medium-ethernet,phy-raw_socket,proto-ipv6,socket-udp,socket-dns"
  14. "std,medium-ethernet,phy-tuntap_interface,proto-ipv6,socket-udp"
  15. "std,medium-ethernet,proto-ipv4,proto-ipv4-fragmentation,socket-raw,socket-dns"
  16. "std,medium-ethernet,proto-ipv4,proto-igmp,socket-raw,socket-dns"
  17. "std,medium-ethernet,proto-ipv4,socket-udp,socket-tcp,socket-dns"
  18. "std,medium-ethernet,proto-ipv4,proto-dhcpv4,socket-udp"
  19. "std,medium-ethernet,medium-ip,medium-ieee802154,proto-ipv6,socket-udp,socket-dns"
  20. "std,medium-ethernet,proto-ipv6,socket-tcp"
  21. "std,medium-ethernet,medium-ip,proto-ipv4,socket-icmp,socket-tcp"
  22. "std,medium-ip,proto-ipv6,socket-icmp,socket-tcp"
  23. "std,medium-ieee802154,proto-sixlowpan,socket-udp"
  24. "std,medium-ieee802154,proto-sixlowpan,proto-sixlowpan-fragmentation,socket-udp"
  25. "std,medium-ieee802154,proto-rpl,proto-sixlowpan,proto-sixlowpan-fragmentation,socket-udp"
  26. "std,medium-ip,proto-ipv4,proto-ipv6,socket-tcp,socket-udp"
  27. "std,medium-ethernet,medium-ip,medium-ieee802154,proto-ipv4,proto-ipv6,socket-raw,socket-udp,socket-tcp,socket-icmp,socket-dns,async"
  28. )
  29. FEATURES_TEST_NIGHTLY=(
  30. "alloc,medium-ethernet,proto-ipv4,proto-ipv6,socket-raw,socket-udp,socket-tcp,socket-icmp"
  31. )
  32. FEATURES_CHECK=(
  33. "medium-ip,medium-ethernet,medium-ieee802154,proto-ipv6,proto-ipv6,proto-igmp,proto-dhcpv4,socket-raw,socket-udp,socket-tcp,socket-icmp,socket-dns,async"
  34. "defmt,medium-ip,medium-ethernet,proto-ipv6,proto-ipv6,proto-igmp,proto-dhcpv4,socket-raw,socket-udp,socket-tcp,socket-icmp,socket-dns,async"
  35. "defmt,alloc,medium-ip,medium-ethernet,proto-ipv6,proto-ipv6,proto-igmp,proto-dhcpv4,socket-raw,socket-udp,socket-tcp,socket-icmp,socket-dns,async"
  36. )
  37. test() {
  38. local version=$1
  39. rustup toolchain install $version
  40. for features in ${FEATURES_TEST[@]}; do
  41. cargo +$version test --no-default-features --features "$features"
  42. done
  43. if [[ $version == "nightly" ]]; then
  44. for features in ${FEATURES_TEST_NIGHTLY[@]}; do
  45. cargo +$version test --no-default-features --features "$features"
  46. done
  47. fi
  48. }
  49. check() {
  50. local version=$1
  51. rustup toolchain install $version
  52. export DEFMT_LOG="trace"
  53. for features in ${FEATURES_CHECK[@]}; do
  54. cargo +$version check --no-default-features --features "$features"
  55. done
  56. }
  57. clippy() {
  58. rustup toolchain install $MSRV
  59. rustup component add clippy --toolchain=$MSRV
  60. cargo +$MSRV clippy --tests --examples -- -D warnings
  61. }
  62. coverage() {
  63. for features in ${FEATURES_TEST[@]}; do
  64. cargo llvm-cov --no-report --no-default-features --features "$features"
  65. done
  66. cargo llvm-cov report --lcov --output-path lcov.info
  67. }
  68. if [[ $1 == "test" || $1 == "all" ]]; then
  69. if [[ -n $2 ]]; then
  70. if [[ $2 == "msrv" ]]; then
  71. test $MSRV
  72. else
  73. test $2
  74. fi
  75. else
  76. for version in ${RUSTC_VERSIONS[@]}; do
  77. test $version
  78. done
  79. fi
  80. fi
  81. if [[ $1 == "check" || $1 == "all" ]]; then
  82. if [[ -n $2 ]]; then
  83. if [[ $2 == "msrv" ]]; then
  84. check $MSRV
  85. else
  86. check $2
  87. fi
  88. else
  89. for version in ${RUSTC_VERSIONS[@]}; do
  90. check $version
  91. done
  92. fi
  93. fi
  94. if [[ $1 == "clippy" || $1 == "all" ]]; then
  95. clippy
  96. fi
  97. if [[ $1 == "coverage" || $1 == "all" ]]; then
  98. coverage
  99. fi