diff --git a/.github/workflows/lintcheck.yml b/.github/workflows/lintcheck.yml new file mode 100644 index 000000000000..4c358d160e60 --- /dev/null +++ b/.github/workflows/lintcheck.yml @@ -0,0 +1,107 @@ +name: Lintcheck + +on: pull_request + +env: + RUST_BACKTRACE: 1 + CARGO_INCREMENTAL: 0 + +concurrency: + # For a given workflow, if we push to the same PR, cancel all previous builds on that PR. + group: "${{ github.workflow }}-${{ github.event.pull_request.number}}" + cancel-in-progress: true + +jobs: + base: + runs-on: ubuntu-latest + + outputs: + key: ${{ steps.key.outputs.key }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Checkout merge base + run: git checkout ${{ github.event.pull_request.base.sha }} + + - name: Checkout current lintcheck + run: | + rm -rf lintcheck + git checkout ${{ github.sha }} -- lintcheck + + - name: Create cache key + id: key + run: echo "key=lintcheck-base-${{ hashfiles('lintcheck/**') }}-${{ github.event.pull_request.base.sha }}" >> "$GITHUB_OUTPUT" + + - name: Cache results + id: cache + uses: actions/cache@v4 + with: + path: lintcheck-logs/base.json + key: ${{ steps.key.outputs.key }} + + - name: Run lintcheck + if: steps.cache.outputs.cache-hit != 'true' + run: cargo lintcheck --json + + - name: Rename JSON file + if: steps.cache.outputs.cache-hit != 'true' + run: mv lintcheck-logs/lintcheck_crates_logs.json lintcheck-logs/base.json + + head: + runs-on: ubuntu-latest + + outputs: + key: ${{ steps.key.outputs.key }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Create cache key + id: key + run: echo "key=lintcheck-head-${{ github.sha }}" >> "$GITHUB_OUTPUT" + + - name: Cache results + id: cache + uses: actions/cache@v4 + with: + path: lintcheck-logs/head.json + key: ${{ steps.key.outputs.key }} + + - name: Run lintcheck + if: steps.cache.outputs.cache-hit != 'true' + run: cargo lintcheck --json + + - name: Rename JSON file + if: steps.cache.outputs.cache-hit != 'true' + run: mv lintcheck-logs/lintcheck_crates_logs.json lintcheck-logs/head.json + + diff: + runs-on: ubuntu-latest + + needs: [base, head] + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Restore base JSON + uses: actions/cache/restore@v4 + with: + key: ${{ needs.base.outputs.key }} + path: lintcheck-logs/base.json + fail-on-cache-miss: true + + - name: Restore head JSON + uses: actions/cache/restore@v4 + with: + key: ${{ needs.head.outputs.key }} + path: lintcheck-logs/head.json + fail-on-cache-miss: true + + - name: Diff results + run: cargo lintcheck diff lintcheck-logs/base.json lintcheck-logs/head.json >> $GITHUB_STEP_SUMMARY