diff --git a/.github/workflows/weekly.yml b/.github/workflows/weekly.yml new file mode 100644 index 0000000000..7bf55f041f --- /dev/null +++ b/.github/workflows/weekly.yml @@ -0,0 +1,108 @@ +name: Weekly beta compile test + +on: + schedule: + # New versions of rust release on Thursdays. We test on Mondays to get at least 3 days of warning before all our CI breaks again. + # https://forge.rust-lang.org/release/process.html#release-day-thursday + - cron: '0 12 * * 1' + workflow_dispatch: + +env: + CARGO_TERM_COLOR: always + NIGHTLY_TOOLCHAIN: nightly + +jobs: + test: + strategy: + matrix: + os: [windows-latest, ubuntu-latest, macos-latest] + runs-on: ${{ matrix.os }} + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@beta + - name: Install alsa and udev + run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev + if: runner.os == 'linux' + - name: Build & run tests + # See tools/ci/src/main.rs for the commands this runs + run: cargo run -p ci -- test + env: + CARGO_INCREMENTAL: 0 + RUSTFLAGS: "-C debuginfo=0 -D warnings" + + lint: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@beta + with: + components: rustfmt, clippy + - name: Install alsa and udev + run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev libwayland-dev libxkbcommon-dev + - name: Run lints + # See tools/ci/src/main.rs for the commands this runs + run: cargo run -p ci -- lints + + check-compiles: + runs-on: ubuntu-latest + timeout-minutes: 30 + needs: ci + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@beta + - name: Install alsa and udev + run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev + - name: Check compile test + # See tools/ci/src/main.rs for the commands this runs + run: cargo run -p ci -- compile + + check-doc: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@beta + - name: Install alsa and udev + run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev libwayland-dev libxkbcommon-dev + - name: Build and check docs + # See tools/ci/src/main.rs for the commands this runs + run: cargo run -p ci -- doc + env: + CARGO_INCREMENTAL: 0 + RUSTFLAGS: "-C debuginfo=0" + + open-issue: + name: Warn that weekly CI fails + runs-on: ubuntu-latest + needs: [test, lint, check-compiles, check-doc] + permissions: + issues: write + # Use always() so the job doesn't get canceled if any other jobs fail + if: ${{ always() && contains(needs.*.result, 'failure') }} + steps: + - name: Create issue + run: | + previous_issue_number=$(gh issue list \ + --search "$TITLE in:title" \ + --json number \ + --jq '.[0].number') + if [[ -n $previous_issue_number ]]; then + gh issue comment $previous_issue_number \ + --body "Weekly pipeline still fails: $FAILED_RUN" + else + gh issue create \ + --title "$TITLE" \ + --label "$LABELS" \ + --body "$BODY" + fi + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + TITLE: Main branch fails to compile on Rust beta. + LABELS: C-Bug,S-Needs-Triage + FAILED_RUN: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + BODY: | + ## Weekly CI run has failed. + [The offending run.]($FAILED_RUN)