forked from rust-lang/rust-clippy
-
Notifications
You must be signed in to change notification settings - Fork 2
147 lines (115 loc) · 3.99 KB
/
lintcheck.yml
1
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
143
144
145
146
147
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:
build-lintcheck:
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-bin-${{ hashfiles('lintcheck/**') }}" >> "$GITHUB_OUTPUT"
- uses: actions/cache@v4
id: cache
with:
path: target/debug/lintcheck
key: ${{ steps.key.outputs.key }}
- name: Build lintcheck
if: steps.cache.outputs.cache-hit != true
run: cargo build --manifest-path=lintcheck/Cargo.toml
# Generates `lintcheck-logs/base.json` and stores it in a cache
base:
runs-on: ubuntu-latest
needs: [build-lintcheck]
outputs:
key: ${{ steps.key.outputs.key }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 2
# HEAD is the generated merge commit `refs/pull/N/merge` between the PR and `master`, `HEAD^`
# being the commit from `master` that is the base of the merge
- name: Checkout base
run: git checkout HEAD^
- name: Create cache key
id: key
run: echo "key=lintcheck-base-${{ needs.build-lintcheck.outputs.key }}-$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
- name: Cache base JSON
id: cache
uses: actions/cache@v4
with:
path: lintcheck-logs/base.json
key: ${{ steps.key.outputs.key }}
- name: Download lintcheck binary
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/cache/restore@v4
with:
key: ${{ needs.build-lintcheck.outputs.key }}
path: target/debug/lintcheck
fail-on-cache-miss: true
- name: Run lintcheck
if: steps.cache.outputs.cache-hit != 'true'
run: target/debug/lintcheck --format json
- name: Rename JSON file
if: steps.cache.outputs.cache-hit != 'true'
run: mv lintcheck-logs/lintcheck_crates_logs.json lintcheck-logs/base.json
# Generates `lintcheck-logs/head.json` and stores it in a cache
head:
runs-on: ubuntu-latest
needs: [build-lintcheck]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download lintcheck binary
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/cache/restore@v4
with:
key: ${{ needs.build-lintcheck.outputs.key }}
path: target/debug/lintcheck
fail-on-cache-miss: true
- name: Run lintcheck
run: ./target/debug/lintcheck --format json
- name: Rename JSON file
run: mv lintcheck-logs/lintcheck_crates_logs.json lintcheck-logs/head.json
- name: Save head JSON
uses: actions/cache/save@v4
with:
key: lintcheck-head-${{ github.sha }}
path: lintcheck-logs/head.json
# Retrieves `lintcheck-logs/base.json` and `lintcheck-logs/head.json` from the cache and prints
# the diff to the GH actions step summary
diff:
runs-on: ubuntu-latest
needs: [build-lintcheck, base, head]
steps:
- name: Download lintcheck binary
if: steps.cache.outputs.cache-hit != 'true'
uses: actions/cache/restore@v4
with:
key: ${{ needs.build-lintcheck.outputs.key }}
path: target/debug/lintcheck
fail-on-cache-miss: true
- 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: lintcheck-head-${{ github.sha }}
path: lintcheck-logs/head.json
fail-on-cache-miss: true
- name: Diff results
run: ./target/debug/lintcheck diff lintcheck-logs/base.json lintcheck-logs/head.json >> $GITHUB_STEP_SUMMARY