From c27d7b96b61b79d923f4135eb0ca956aa37414d1 Mon Sep 17 00:00:00 2001 From: Nick Groenen Date: Sat, 23 Sep 2023 13:22:00 +0200 Subject: [PATCH] Optimize GitHub Actions workflows Most notably: - Stop using unmaintained setup-rust action - Cache cargo and target directories - Use sccache (https://github.com/mozilla/sccache/) --- .github/workflows/release.yml | 71 ++++++++++------- .github/workflows/test.yml | 138 ++++++++++++++++++++++++---------- 2 files changed, 143 insertions(+), 66 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f60e222..740c3c4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,9 +1,12 @@ +name: Create release on: push: tags: - "v*" -name: Create release +env: + SCCACHE_GHA_ENABLED: "true" + RUSTC_WRAPPER: "sccache" jobs: create-release: @@ -28,17 +31,21 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions-rs/toolchain@v1 + - uses: dtolnay/rust-toolchain@stable + id: setup_rust + - uses: actions/cache@v3 with: - profile: minimal - toolchain: stable - override: true - - - uses: actions-rs/cargo@v1 - with: - command: build - args: --release --locked + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: "cargo-build-linux-${{ steps.setup_rust.outputs.cachekey }}" + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@v0.0.3 + - run: cargo build --release --locked - run: strip target/release/obsidian-export - uses: actions/upload-artifact@v3 @@ -62,17 +69,21 @@ jobs: runs-on: windows-latest steps: - uses: actions/checkout@v4 - - uses: actions-rs/toolchain@v1 + - uses: dtolnay/rust-toolchain@stable + id: setup_rust + - uses: actions/cache@v3 with: - profile: minimal - toolchain: stable - override: true - - - uses: actions-rs/cargo@v1 - with: - command: build - args: --release --locked + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: "cargo-build-linux-${{ steps.setup_rust.outputs.cachekey }}" + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@v0.0.3 + - run: cargo build --release --locked - run: strip target/release/obsidian-export.exe - uses: actions/upload-artifact@v3 @@ -96,17 +107,21 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 - - uses: actions-rs/toolchain@v1 + - uses: dtolnay/rust-toolchain@stable + id: setup_rust + - uses: actions/cache@v3 with: - profile: minimal - toolchain: stable - override: true - - - uses: actions-rs/cargo@v1 - with: - command: build - args: --release --locked + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: "cargo-build-linux-${{ steps.setup_rust.outputs.cachekey }}" + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@v0.0.3 + - run: cargo build --release --locked - run: strip target/release/obsidian-export - uses: actions/upload-artifact@v3 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 99b9ee8..898556d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,74 +1,136 @@ +name: CI tests on: [push, pull_request] -name: CI tests +env: + SCCACHE_GHA_ENABLED: "true" + RUSTC_WRAPPER: "sccache" jobs: - linting: - name: Run lints + build: + name: Build project runs-on: ubuntu-latest + outputs: + rustc_cache_key: ${{ steps.setup_rust.outputs.cachekey }} steps: - uses: actions/checkout@v4 - - uses: actions-rs/toolchain@v1 + - uses: dtolnay/rust-toolchain@stable + id: setup_rust with: - profile: minimal - toolchain: stable - override: true + components: "rustfmt, clippy" + - uses: actions/cache@v3 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: "cargo-base-${{ steps.setup_rust.outputs.cachekey }}-${{ hashFiles('**/Cargo.lock') }}" + restore-keys: | + cargo-base-${{ env.RUSTC_CACHEKEY }} + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@v0.0.3 + - run: cargo build --locked --all-targets - - run: rustup component add rustfmt - - uses: actions-rs/cargo@v1 + lint: + name: Run lints + runs-on: ubuntu-latest + needs: build + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v3 with: - command: fmt - args: --all -- --check + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: "cargo-lint-${{ needs.build.outputs.rustc_cache_key }}-${{ hashFiles('**/Cargo.lock') }}" + restore-keys: | + cargo-lint-${{ env.RUSTC_CACHEKEY }} + cargo-base-${{ env.RUSTC_CACHEKEY }} + fail-on-cache-miss: true + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@v0.0.3 - - uses: actions-rs/cargo@v1 - with: - command: check - - - run: rustup component add clippy - - uses: actions-rs/cargo@v1 - with: - command: clippy - args: -- -D warnings + - run: cargo fmt --all -- --check + - run: cargo check + - run: cargo clippy -- -D warnings test-linux: name: Test on Linux runs-on: ubuntu-latest + needs: build steps: - uses: actions/checkout@v4 - - uses: actions-rs/toolchain@v1 + - uses: actions/cache@v3 with: - profile: minimal - toolchain: stable - override: true - - uses: actions-rs/cargo@v1 - with: - command: test + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: "cargo-test-${{ needs.build.outputs.rustc_cache_key }}-${{ hashFiles('**/Cargo.lock') }}" + restore-keys: | + cargo-test-${{ env.RUSTC_CACHEKEY }} + cargo-base-${{ env.RUSTC_CACHEKEY }} + fail-on-cache-miss: true + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@v0.0.3 + + - run: cargo test test-windows: name: Test on Windows runs-on: windows-latest + needs: build steps: - run: git config --system core.autocrlf false && git config --system core.eol lf - uses: actions/checkout@v4 - - uses: actions-rs/toolchain@v1 + - uses: dtolnay/rust-toolchain@stable + id: setup_rust + - uses: actions/cache@v3 with: - profile: minimal - toolchain: stable - override: true - - uses: actions-rs/cargo@v1 - with: - command: test + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: "cargo-windows-${{ needs.build.outputs.rustc_cache_key }}-${{ hashFiles('**/Cargo.lock') }}" + restore-keys: | + cargo-windows-${{ env.RUSTC_CACHEKEY }} + cargo-base-${{ env.RUSTC_CACHEKEY }} + fail-on-cache-miss: true + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@v0.0.3 + + - run: cargo test coverage: name: Code coverage runs-on: ubuntu-latest + needs: build steps: - uses: actions/checkout@v4 - - uses: actions-rs/toolchain@v1 + - uses: actions/cache@v3 with: - profile: minimal - toolchain: stable - override: true + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: "cargo-coverage-${{ needs.build.outputs.rustc_cache_key }}-${{ hashFiles('**/Cargo.lock') }}" + restore-keys: | + cargo-coverage-${{ env.RUSTC_CACHEKEY }} + cargo-base-${{ env.RUSTC_CACHEKEY }} + fail-on-cache-miss: true + - name: Run sccache-cache + uses: mozilla-actions/sccache-action@v0.0.3 + - uses: actions-rs/tarpaulin@v0.1 with: # Constrained by https://github.com/actions-rs/tarpaulin/pull/23