ci: Add automated upstream sync workflow (#61) #24
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: rust-ci | |
| on: | |
| pull_request: {} | |
| push: | |
| branches: [main, dev] | |
| jobs: | |
| checks: | |
| name: ${{ matrix.name }} | |
| runs-on: ${{ matrix.runner }} | |
| timeout-minutes: 20 | |
| defaults: | |
| run: | |
| working-directory: codex-rs | |
| env: | |
| CARGO_INCREMENTAL: "0" | |
| SCCACHE_CACHE_SIZE: 10G | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - runner: ubuntu-24.04 | |
| target: x86_64-unknown-linux-gnu | |
| name: Linux checks | |
| - runner: macos-14 | |
| target: aarch64-apple-darwin | |
| name: macOS checks | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: dtolnay/rust-toolchain@1.90 | |
| with: | |
| targets: ${{ matrix.target }} | |
| components: clippy | |
| - name: Install nightly rustfmt | |
| run: rustup toolchain install nightly --component rustfmt --profile minimal | |
| # sccache setup | |
| - name: Install sccache | |
| uses: taiki-e/install-action@44c6d64aa62cd779e873306675c7a58e86d6d532 # v2 | |
| with: | |
| tool: sccache | |
| version: 0.7.5 | |
| - name: Configure sccache backend | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| if [[ -n "${ACTIONS_CACHE_URL:-}" && -n "${ACTIONS_RUNTIME_TOKEN:-}" ]]; then | |
| echo "SCCACHE_GHA_ENABLED=true" >> "$GITHUB_ENV" | |
| echo "Using sccache GitHub backend" | |
| else | |
| echo "SCCACHE_GHA_ENABLED=false" >> "$GITHUB_ENV" | |
| echo "SCCACHE_DIR=${{ github.workspace }}/.sccache" >> "$GITHUB_ENV" | |
| echo "Using sccache local disk fallback" | |
| fi | |
| - name: Enable sccache wrapper | |
| shell: bash | |
| run: echo "RUSTC_WRAPPER=sccache" >> "$GITHUB_ENV" | |
| - name: Restore sccache cache (fallback) | |
| if: ${{ env.SCCACHE_GHA_ENABLED != 'true' }} | |
| uses: actions/cache/restore@v4 | |
| with: | |
| path: ${{ github.workspace }}/.sccache/ | |
| key: sccache-${{ matrix.runner }}-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}-${{ github.run_id }} | |
| restore-keys: | | |
| sccache-${{ matrix.runner }}-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}- | |
| sccache-${{ matrix.runner }}-${{ matrix.target }}- | |
| # CI checks | |
| - name: cargo check | |
| run: cargo check --target ${{ matrix.target }} --all-features | |
| - name: cargo fmt | |
| run: cargo +nightly fmt -- --check | |
| - name: cargo clippy | |
| run: cargo clippy --target ${{ matrix.target }} --all-features -- -D warnings | |
| - name: cargo test | |
| continue-on-error: true # TODO: Fix pre-existing test failures in codex-app-server | |
| run: cargo test --target ${{ matrix.target }} --all-features | |
| # Save sccache | |
| - name: Save sccache cache (fallback) | |
| if: always() && !cancelled() && env.SCCACHE_GHA_ENABLED != 'true' | |
| continue-on-error: true | |
| uses: actions/cache/save@v4 | |
| with: | |
| path: ${{ github.workspace }}/.sccache/ | |
| key: sccache-${{ matrix.runner }}-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}-${{ github.run_id }} | |
| - name: sccache stats | |
| if: always() | |
| continue-on-error: true | |
| run: sccache --show-stats || true |