]>
Commit | Line | Data |
---|---|---|
f20569fa XL |
1 | name: Clippy Test (bors) |
2 | ||
3 | on: | |
4 | push: | |
5 | branches: | |
6 | - auto | |
7 | - try | |
8 | ||
9 | env: | |
10 | RUST_BACKTRACE: 1 | |
11 | CARGO_TARGET_DIR: '${{ github.workspace }}/target' | |
12 | NO_FMT_TEST: 1 | |
13 | ||
14 | defaults: | |
15 | run: | |
16 | shell: bash | |
17 | ||
18 | jobs: | |
19 | changelog: | |
20 | runs-on: ubuntu-latest | |
21 | ||
22 | steps: | |
23 | - uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master | |
24 | with: | |
25 | github_token: "${{ secrets.github_token }}" | |
26 | ||
27 | - name: Checkout | |
28 | uses: actions/checkout@v2.3.3 | |
29 | with: | |
30 | ref: ${{ github.ref }} | |
31 | ||
32 | # Run | |
33 | - name: Check Changelog | |
34 | run: | | |
35 | MESSAGE=$(git log --format=%B -n 1) | |
36 | PR=$(echo "$MESSAGE" | grep -o "#[0-9]*" | head -1 | sed -e 's/^#//') | |
cdc7bbd5 XL |
37 | body=$(curl -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" -s "https://api.github.com/repos/rust-lang/rust-clippy/pulls/$PR" | \ |
38 | python -c "import sys, json; print(json.load(sys.stdin)['body'])") | |
39 | output=$(grep "^changelog:\s*\S" <<< "$body" | sed "s/changelog:\s*//g") || { | |
f20569fa XL |
40 | echo "ERROR: PR body must contain 'changelog: ...'" |
41 | exit 1 | |
cdc7bbd5 XL |
42 | } |
43 | if [[ "$output" = "none" ]]; then | |
f20569fa | 44 | echo "WARNING: changelog is 'none'" |
cdc7bbd5 XL |
45 | else |
46 | echo "changelog: $output" | |
f20569fa XL |
47 | fi |
48 | env: | |
49 | PYTHONIOENCODING: 'utf-8' | |
50 | base: | |
51 | needs: changelog | |
52 | strategy: | |
53 | matrix: | |
54 | os: [ubuntu-latest, windows-latest, macos-latest] | |
55 | host: [x86_64-unknown-linux-gnu, i686-unknown-linux-gnu, x86_64-apple-darwin, x86_64-pc-windows-msvc] | |
56 | exclude: | |
57 | - os: ubuntu-latest | |
58 | host: x86_64-apple-darwin | |
59 | - os: ubuntu-latest | |
60 | host: x86_64-pc-windows-msvc | |
61 | - os: macos-latest | |
62 | host: x86_64-unknown-linux-gnu | |
63 | - os: macos-latest | |
64 | host: i686-unknown-linux-gnu | |
65 | - os: macos-latest | |
66 | host: x86_64-pc-windows-msvc | |
67 | - os: windows-latest | |
68 | host: x86_64-unknown-linux-gnu | |
69 | - os: windows-latest | |
70 | host: i686-unknown-linux-gnu | |
71 | - os: windows-latest | |
72 | host: x86_64-apple-darwin | |
73 | ||
74 | runs-on: ${{ matrix.os }} | |
75 | ||
76 | # NOTE: If you modify this job, make sure you copy the changes to clippy.yml | |
77 | steps: | |
78 | # Setup | |
79 | - uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master | |
80 | with: | |
81 | github_token: "${{ secrets.github_token }}" | |
82 | ||
83 | - name: Install dependencies (Linux-i686) | |
84 | run: | | |
85 | sudo dpkg --add-architecture i386 | |
86 | sudo apt-get update | |
87 | sudo apt-get install gcc-multilib libssl-dev:i386 libgit2-dev:i386 | |
88 | if: matrix.host == 'i686-unknown-linux-gnu' | |
89 | ||
90 | - name: Checkout | |
91 | uses: actions/checkout@v2.3.3 | |
92 | ||
93 | - name: Install toolchain | |
94 | run: rustup show active-toolchain | |
95 | ||
96 | # Run | |
97 | - name: Set LD_LIBRARY_PATH (Linux) | |
98 | if: runner.os == 'Linux' | |
99 | run: | | |
100 | SYSROOT=$(rustc --print sysroot) | |
101 | echo "LD_LIBRARY_PATH=${SYSROOT}/lib${LD_LIBRARY_PATH+:${LD_LIBRARY_PATH}}" >> $GITHUB_ENV | |
102 | - name: Link rustc dylib (MacOS) | |
103 | if: runner.os == 'macOS' | |
104 | run: | | |
105 | SYSROOT=$(rustc --print sysroot) | |
106 | sudo mkdir -p /usr/local/lib | |
107 | sudo find "${SYSROOT}/lib" -maxdepth 1 -name '*dylib' -exec ln -s {} /usr/local/lib \; | |
108 | - name: Set PATH (Windows) | |
109 | if: runner.os == 'Windows' | |
110 | run: | | |
111 | SYSROOT=$(rustc --print sysroot) | |
112 | echo "$SYSROOT/bin" >> $GITHUB_PATH | |
113 | ||
114 | - name: Build | |
94222f64 | 115 | run: cargo build --features deny-warnings,internal-lints,metadata-collector-lint |
f20569fa XL |
116 | |
117 | - name: Test | |
94222f64 | 118 | run: cargo test --features deny-warnings,internal-lints,metadata-collector-lint |
f20569fa XL |
119 | |
120 | - name: Test clippy_lints | |
94222f64 | 121 | run: cargo test --features deny-warnings,internal-lints,metadata-collector-lint |
f20569fa XL |
122 | working-directory: clippy_lints |
123 | ||
124 | - name: Test rustc_tools_util | |
125 | run: cargo test --features deny-warnings | |
126 | working-directory: rustc_tools_util | |
127 | ||
128 | - name: Test clippy_dev | |
129 | run: cargo test --features deny-warnings | |
130 | working-directory: clippy_dev | |
131 | ||
132 | - name: Test cargo-clippy | |
133 | run: ../target/debug/cargo-clippy | |
134 | working-directory: clippy_workspace_tests | |
135 | ||
136 | - name: Test cargo-clippy --fix | |
136023e0 | 137 | run: ../target/debug/cargo-clippy clippy --fix |
f20569fa XL |
138 | working-directory: clippy_workspace_tests |
139 | ||
140 | - name: Test clippy-driver | |
141 | run: bash .github/driver.sh | |
142 | env: | |
143 | OS: ${{ runner.os }} | |
144 | ||
145 | - name: Test cargo dev new lint | |
146 | run: | | |
147 | cargo dev new_lint --name new_early_pass --pass early | |
148 | cargo dev new_lint --name new_late_pass --pass late | |
149 | cargo check | |
150 | git reset --hard HEAD | |
151 | ||
152 | integration_build: | |
153 | needs: changelog | |
154 | runs-on: ubuntu-latest | |
155 | ||
156 | steps: | |
157 | # Setup | |
158 | - uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master | |
159 | with: | |
160 | github_token: "${{ secrets.github_token }}" | |
161 | ||
162 | - name: Checkout | |
163 | uses: actions/checkout@v2.3.3 | |
164 | ||
165 | - name: Install toolchain | |
166 | run: rustup show active-toolchain | |
167 | ||
168 | # Run | |
169 | - name: Build Integration Test | |
170 | run: cargo test --test integration --features integration --no-run | |
171 | ||
172 | # Upload | |
173 | - name: Extract Binaries | |
174 | run: | | |
175 | DIR=$CARGO_TARGET_DIR/debug | |
176 | rm $DIR/deps/integration-*.d | |
177 | mv $DIR/deps/integration-* $DIR/integration | |
178 | find $DIR ! -executable -o -type d ! -path $DIR | xargs rm -rf | |
179 | rm -rf $CARGO_TARGET_DIR/release | |
180 | ||
181 | - name: Upload Binaries | |
182 | uses: actions/upload-artifact@v1 | |
183 | with: | |
184 | name: target | |
185 | path: target | |
186 | ||
187 | integration: | |
188 | needs: integration_build | |
189 | strategy: | |
190 | fail-fast: false | |
191 | max-parallel: 6 | |
192 | matrix: | |
193 | integration: | |
194 | - 'rust-lang/cargo' | |
195 | # FIXME: re-enable once fmt_macros is renamed in RLS | |
196 | # - 'rust-lang/rls' | |
197 | - 'rust-lang/chalk' | |
198 | - 'rust-lang/rustfmt' | |
199 | - 'Marwes/combine' | |
200 | - 'Geal/nom' | |
201 | - 'rust-lang/stdarch' | |
202 | - 'serde-rs/serde' | |
203 | # FIXME: chrono currently cannot be compiled with `--all-targets` | |
204 | # - 'chronotope/chrono' | |
205 | - 'hyperium/hyper' | |
206 | - 'rust-random/rand' | |
207 | - 'rust-lang/futures-rs' | |
208 | - 'rust-itertools/itertools' | |
209 | - 'rust-lang-nursery/failure' | |
210 | - 'rust-lang/log' | |
211 | ||
212 | runs-on: ubuntu-latest | |
213 | ||
214 | steps: | |
215 | # Setup | |
216 | - uses: rust-lang/simpleinfra/github-actions/cancel-outdated-builds@master | |
217 | with: | |
218 | github_token: "${{ secrets.github_token }}" | |
219 | ||
220 | - name: Checkout | |
221 | uses: actions/checkout@v2.3.3 | |
222 | ||
223 | - name: Install toolchain | |
224 | run: rustup show active-toolchain | |
225 | ||
226 | # Download | |
227 | - name: Download target dir | |
228 | uses: actions/download-artifact@v1 | |
229 | with: | |
230 | name: target | |
231 | path: target | |
232 | ||
233 | - name: Make Binaries Executable | |
234 | run: chmod +x $CARGO_TARGET_DIR/debug/* | |
235 | ||
236 | # Run | |
237 | - name: Test ${{ matrix.integration }} | |
238 | run: | | |
239 | RUSTUP_TOOLCHAIN="$(rustup show active-toolchain | grep -o -E "nightly-[0-9]{4}-[0-9]{2}-[0-9]{2}")" \ | |
240 | $CARGO_TARGET_DIR/debug/integration | |
241 | env: | |
242 | INTEGRATION: ${{ matrix.integration }} | |
243 | ||
244 | # These jobs doesn't actually test anything, but they're only used to tell | |
245 | # bors the build completed, as there is no practical way to detect when a | |
246 | # workflow is successful listening to webhooks only. | |
247 | # | |
248 | # ALL THE PREVIOUS JOBS NEED TO BE ADDED TO THE `needs` SECTION OF THIS JOB! | |
249 | ||
250 | end-success: | |
251 | name: bors test finished | |
252 | if: github.event.pusher.name == 'bors' && success() | |
253 | runs-on: ubuntu-latest | |
254 | needs: [changelog, base, integration_build, integration] | |
255 | ||
256 | steps: | |
257 | - name: Mark the job as successful | |
258 | run: exit 0 | |
259 | ||
260 | end-failure: | |
261 | name: bors test finished | |
262 | if: github.event.pusher.name == 'bors' && (failure() || cancelled()) | |
263 | runs-on: ubuntu-latest | |
264 | needs: [changelog, base, integration_build, integration] | |
265 | ||
266 | steps: | |
267 | - name: Mark the job as a failure | |
268 | run: exit 1 |