あまり見ない気がするので書きました。特徴は、
- lint, testなどの各ジョブが並列に動く(ジョブ実行数を多くしてないとdocker containerの立ち上げ分むしろ全体時間はロスになることもあるが…)。
- Travis CI のマトリクスビルド に近いことを、
parameters:
を使ってやっている。
rust-toolchain
ファイル に書かれたバージョンと、 .circleci/config.yml
に書かれた MSRV (Minimum Supported Rust Version) の2つでビルドしている。
cargo-readme
を使ってrustdocとREADMEを比較し、どちらかがメンテされていない場合にエラーにする(お好みで)。
- キャッシュ使う。
あたりです。見慣れなさそうなところはインラインコメント付けましたので参考にしてください 💁♀️
更新履歴
.circleci/config.yml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
| version: 2.1
executors: default: docker: - image: circleci/rust:latest working_directory: ~/app
commands: record_build_env: steps: - run: name: Record build environment to use as cache key command: | echo $OS_VERSION | tee /tmp/build-env rustc --version | tee /tmp/build-env
save_cache_: steps: - save_cache: key: cache-cargo-target-{{ .Environment.CIRCLECI_CACHE_VERSION }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/build-env" }}-{{ checksum "Cargo.lock" }} paths: - ~/.cargo - target
restore_cache_: steps: - restore_cache: keys: - cache-cargo-target-{{ .Environment.CIRCLECI_CACHE_VERSION }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/build-env" }}-{{ checksum "Cargo.lock" }}
- cache-cargo-target-{{ .Environment.CIRCLECI_CACHE_VERSION }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/build-env" }}
jobs: lint: executor: name: default steps: - checkout
- record_build_env - restore_cache_
- run: name: rustup component add command: rustup component add clippy rustfmt
- run: name: fmt command: cargo fmt --all -- --check - run: name: clippy command: cargo clippy --all-targets --all-features -- -D warnings
- save_cache_
readme: executor: name: default steps: - checkout
- record_build_env - restore_cache_
- run: name: Install cargo-readme command: cargo install cargo-readme - run: name: Check diff between rustdoc & README command: | cargo readme | tee /tmp/README.md diff /tmp/README.md README.md
- save_cache_
test: parameters: rust_version: type: string default: "" executor: name: default steps: - checkout - run: name: rustup version command: rustup --version
- when: condition: << parameters.rust_version >> steps: - run: name: Install & select $rust_version if specified command: | rustup install << parameters.rust_version >> rustup override set << parameters.rust_version >>
- record_build_env - restore_cache_
- run: name: build & test command: RUST_BACKTRACE=1 cargo test --verbose --all -- --nocapture
- save_cache_
workflows: version: 2 test: jobs: - readme - lint
- test: name: MSRV (Minimum Supported Rust Version) rust_version: 1.40.0
- test: name: Rust Version from `rust-toolchain`
|