@@ -35,19 +35,48 @@ jobs:
3535 typescript:
3636 - 'editors/code/**'
3737 proc_macros:
38+ - 'crates/tt/**'
3839 - 'crates/proc-macro-api/**'
3940 - 'crates/proc-macro-srv/**'
4041 - 'crates/proc-macro-srv-cli/**'
4142
42- rust :
43+ proc-macro-srv :
4344 needs : changes
45+ if : github.repository == 'rust-lang/rust-analyzer' && needs.changes.outputs.proc_macros == 'true'
46+ name : proc-macro-srv
47+ runs-on : ubuntu-latest
48+ steps :
49+ - name : Checkout repository
50+ uses : actions/checkout@v4
51+ with :
52+ ref : ${{ github.event.pull_request.head.sha }}
53+
54+ - name : Install Rust toolchain
55+ run : |
56+ rustup update --no-self-update nightly
57+ rustup default nightly
58+ rustup component add --toolchain nightly rust-src rustfmt
59+ # https://github.com/actions-rust-lang/setup-rust-toolchain/blob/main/rust.json
60+ - name : Install Rust Problem Matcher
61+ if : matrix.os == 'ubuntu-latest'
62+ run : echo "::add-matcher::.github/rust.json"
63+
64+ - name : Cache Dependencies
65+ uses : Swatinem/rust-cache@9bdad043e88c75890e36ad3bbc8d27f0090dd609
66+
67+ - name : Bump opt-level
68+ if : matrix.os == 'ubuntu-latest'
69+ run : sed -i '/\[profile.dev]/a opt-level=1' Cargo.toml
70+
71+ - name : Test
72+ run : cargo test --features sysroot-abi -p rust-analyzer -p proc-macro-srv -p proc-macro-srv-cli -p proc-macro-api -- --quiet
73+
74+ rust :
4475 if : github.repository == 'rust-lang/rust-analyzer'
4576 name : Rust
4677 runs-on : ${{ matrix.os }}
4778 env :
4879 CC : deny_c
49- RUST_CHANNEL : " ${{ needs.changes.outputs.proc_macros == 'true' && 'nightly' || 'stable' }}"
50- USE_SYSROOT_ABI : " ${{ needs.changes.outputs.proc_macros == 'true' && '--features sysroot-abi' || '' }}"
5180
5281 strategy :
5382 fail-fast : false
@@ -62,22 +91,19 @@ jobs:
6291
6392 - name : Install Rust toolchain
6493 run : |
65- rustup update --no-self-update ${{ env.RUST_CHANNEL }}
66- rustup default ${{ env.RUST_CHANNEL }}
67- rustup component add --toolchain ${{ env.RUST_CHANNEL }} rust-src
94+ rustup update --no-self-update stable
95+ rustup default stable
96+ rustup component add --toolchain stable rust-src
6897 # We always use a nightly rustfmt, regardless of channel, because we need
6998 # --file-lines.
70- rustup toolchain add nightly --profile minimal
71- rustup component add --toolchain nightly rustfmt
99+ rustup toolchain install nightly --profile minimal --component rustfmt
72100 # https://github.com/actions-rust-lang/setup-rust-toolchain/blob/main/rust.json
73101 - name : Install Rust Problem Matcher
74102 if : matrix.os == 'ubuntu-latest'
75103 run : echo "::add-matcher::.github/rust.json"
76104
77105 - name : Cache Dependencies
78106 uses : Swatinem/rust-cache@9bdad043e88c75890e36ad3bbc8d27f0090dd609
79- with :
80- key : ${{ env.RUST_CHANNEL }}
81107
82108 - name : Bump opt-level
83109 if : matrix.os == 'ubuntu-latest'
@@ -87,16 +113,16 @@ jobs:
87113 run : cargo codegen --check
88114
89115 - name : Compile (tests)
90- run : cargo test --no-run --locked ${{ env.USE_SYSROOT_ABI }}
116+ run : cargo test --no-run --locked
91117
92118 # It's faster to `test` before `build` ¯\_(ツ)_/¯
93119 - name : Compile (rust-analyzer)
94120 if : matrix.os == 'ubuntu-latest'
95- run : cargo build --quiet ${{ env.USE_SYSROOT_ABI }}
121+ run : cargo build --quiet
96122
97123 - name : Test
98124 if : matrix.os == 'ubuntu-latest' || matrix.os == 'windows-latest' || github.event_name == 'push'
99- run : cargo test ${{ env.USE_SYSROOT_ABI }} -- --nocapture --quiet
125+ run : cargo test -- --quiet
100126
101127 - name : Switch to stable toolchain
102128 run : |
@@ -157,7 +183,7 @@ jobs:
157183
158184 typescript :
159185 needs : changes
160- if : github.repository == 'rust-lang/rust-analyzer'
186+ if : github.repository == 'rust-lang/rust-analyzer' && needs.changes.outputs.typescript == 'true'
161187 name : TypeScript
162188 strategy :
163189 fail-fast : false
@@ -169,21 +195,18 @@ jobs:
169195 steps :
170196 - name : Checkout repository
171197 uses : actions/checkout@v4
172- if : needs.changes.outputs.typescript == 'true'
173198
174199 - name : Install Nodejs
175200 uses : actions/setup-node@v4
176201 with :
177- node-version : 18
178- if : needs.changes.outputs.typescript == 'true'
202+ node-version : 22
179203
180204 - name : Install xvfb
181- if : matrix.os == 'ubuntu-latest' && needs.changes.outputs.typescript == 'true'
205+ if : matrix.os == 'ubuntu-latest'
182206 run : sudo apt-get install -y xvfb
183207
184208 - run : npm ci
185209 working-directory : ./editors/code
186- if : needs.changes.outputs.typescript == 'true'
187210
188211 # - run: npm audit || { sleep 10 && npm audit; } || { sleep 30 && npm audit; }
189212 # if: runner.os == 'Linux'
@@ -192,35 +215,31 @@ jobs:
192215 # If this steps fails, your code's type integrity might be wrong at some places at TypeScript level.
193216 - run : npm run typecheck
194217 working-directory : ./editors/code
195- if : needs.changes.outputs.typescript == 'true'
196218
197219 # You may fix the code automatically by running `npm run lint:fix` if this steps fails.
198220 - run : npm run lint
199221 working-directory : ./editors/code
200- if : needs.changes.outputs.typescript == 'true'
201222
202223 # To fix this steps, please run `npm run format`.
203224 - run : npm run format:check
204225 working-directory : ./editors/code
205- if : needs.changes.outputs.typescript == 'true'
206226
207227 - name : Run VS Code tests (Linux)
208- if : matrix.os == 'ubuntu-latest' && needs.changes.outputs.typescript == 'true'
228+ if : matrix.os == 'ubuntu-latest'
209229 env :
210230 VSCODE_CLI : 1
211231 run : xvfb-run npm test
212232 working-directory : ./editors/code
213233
214234 - name : Run VS Code tests (Windows)
215- if : matrix.os == 'windows-latest' && needs.changes.outputs.typescript == 'true'
235+ if : matrix.os == 'windows-latest'
216236 env :
217237 VSCODE_CLI : 1
218238 run : npm test
219239 working-directory : ./editors/code
220240
221241 - run : npm run package --scripts-prepend-node-path
222242 working-directory : ./editors/code
223- if : needs.changes.outputs.typescript == 'true'
224243
225244 typo-check :
226245 name : Typo Check
@@ -242,7 +261,7 @@ jobs:
242261 run : typos
243262
244263 conclusion :
245- needs : [rust, rust-cross, typescript, typo-check]
264+ needs : [rust, rust-cross, typescript, typo-check, proc-macro-srv ]
246265 # We need to ensure this job does *not* get skipped if its dependencies fail,
247266 # because a skipped job is considered a success by GitHub. So we have to
248267 # overwrite `if:`. We use `!cancelled()` to ensure the job does still not get run
@@ -257,5 +276,5 @@ jobs:
257276 run : |
258277 # Print the dependent jobs to see them in the CI log
259278 jq -C <<< '${{ toJson(needs) }}'
260- # Check if all jobs that we depend on (in the needs array) were successful.
261- jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'
279+ # Check if all jobs that we depend on (in the needs array) were successful (or have been skipped) .
280+ jq --exit-status 'all(.result == "success" or .result == "skipped" )' <<< '${{ toJson(needs) }}'
0 commit comments