1# Generated from xtask::workflows::release
2# Rebuild with `cargo xtask workflows`.
3name: release
4env:
5 CARGO_TERM_COLOR: always
6 RUST_BACKTRACE: '1'
7on:
8 push:
9 tags:
10 - v*
11jobs:
12 run_tests_mac:
13 if: github.repository_owner == 'zed-industries'
14 runs-on: self-mini-macos
15 steps:
16 - name: steps::checkout_repo
17 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
18 with:
19 clean: false
20 - name: steps::setup_cargo_config
21 run: |
22 mkdir -p ./../.cargo
23 cp ./.cargo/ci-config.toml ./../.cargo/config.toml
24 shell: bash -euxo pipefail {0}
25 - name: steps::setup_node
26 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
27 with:
28 node-version: '20'
29 - name: steps::clippy
30 run: ./script/clippy
31 shell: bash -euxo pipefail {0}
32 - name: steps::cargo_install_nextest
33 run: cargo install cargo-nextest --locked
34 shell: bash -euxo pipefail {0}
35 - name: steps::clear_target_dir_if_large
36 run: ./script/clear-target-dir-if-larger-than 300
37 shell: bash -euxo pipefail {0}
38 - name: steps::cargo_nextest
39 run: cargo nextest run --workspace --no-fail-fast --failure-output immediate-final
40 shell: bash -euxo pipefail {0}
41 - name: steps::cleanup_cargo_config
42 if: always()
43 run: |
44 rm -rf ./../.cargo
45 shell: bash -euxo pipefail {0}
46 timeout-minutes: 60
47 run_tests_linux:
48 if: github.repository_owner == 'zed-industries'
49 runs-on: namespace-profile-16x32-ubuntu-2204
50 steps:
51 - name: steps::checkout_repo
52 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
53 with:
54 clean: false
55 - name: steps::setup_cargo_config
56 run: |
57 mkdir -p ./../.cargo
58 cp ./.cargo/ci-config.toml ./../.cargo/config.toml
59 shell: bash -euxo pipefail {0}
60 - name: steps::setup_linux
61 run: ./script/linux
62 shell: bash -euxo pipefail {0}
63 - name: steps::install_mold
64 run: ./script/install-mold
65 shell: bash -euxo pipefail {0}
66 - name: steps::cache_rust_dependencies_namespace
67 uses: namespacelabs/nscloud-cache-action@v1
68 with:
69 cache: rust
70 - name: steps::setup_node
71 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
72 with:
73 node-version: '20'
74 - name: steps::clippy
75 run: ./script/clippy
76 shell: bash -euxo pipefail {0}
77 - name: steps::cargo_install_nextest
78 run: cargo install cargo-nextest --locked
79 shell: bash -euxo pipefail {0}
80 - name: steps::clear_target_dir_if_large
81 run: ./script/clear-target-dir-if-larger-than 250
82 shell: bash -euxo pipefail {0}
83 - name: steps::cargo_nextest
84 run: cargo nextest run --workspace --no-fail-fast --failure-output immediate-final
85 shell: bash -euxo pipefail {0}
86 - name: steps::cleanup_cargo_config
87 if: always()
88 run: |
89 rm -rf ./../.cargo
90 shell: bash -euxo pipefail {0}
91 timeout-minutes: 60
92 run_tests_windows:
93 if: github.repository_owner == 'zed-industries'
94 runs-on: self-32vcpu-windows-2022
95 steps:
96 - name: steps::checkout_repo
97 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
98 with:
99 clean: false
100 - name: steps::setup_cargo_config
101 run: |
102 New-Item -ItemType Directory -Path "./../.cargo" -Force
103 Copy-Item -Path "./.cargo/ci-config.toml" -Destination "./../.cargo/config.toml"
104 shell: pwsh
105 - name: steps::setup_node
106 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
107 with:
108 node-version: '20'
109 - name: steps::clippy
110 run: ./script/clippy.ps1
111 shell: pwsh
112 - name: steps::cargo_install_nextest
113 run: cargo install cargo-nextest --locked
114 shell: pwsh
115 - name: steps::clear_target_dir_if_large
116 run: ./script/clear-target-dir-if-larger-than.ps1 250
117 shell: pwsh
118 - name: steps::cargo_nextest
119 run: cargo nextest run --workspace --no-fail-fast --failure-output immediate-final
120 shell: pwsh
121 - name: steps::cleanup_cargo_config
122 if: always()
123 run: |
124 Remove-Item -Recurse -Path "./../.cargo" -Force -ErrorAction SilentlyContinue
125 shell: pwsh
126 timeout-minutes: 60
127 check_scripts:
128 if: github.repository_owner == 'zed-industries'
129 runs-on: namespace-profile-2x4-ubuntu-2404
130 steps:
131 - name: steps::checkout_repo
132 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
133 with:
134 clean: false
135 - name: run_tests::check_scripts::run_shellcheck
136 run: ./script/shellcheck-scripts error
137 shell: bash -euxo pipefail {0}
138 - id: get_actionlint
139 name: run_tests::check_scripts::download_actionlint
140 run: bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)
141 shell: bash -euxo pipefail {0}
142 - name: run_tests::check_scripts::run_actionlint
143 run: |
144 ${{ steps.get_actionlint.outputs.executable }} -color
145 shell: bash -euxo pipefail {0}
146 - name: run_tests::check_scripts::check_xtask_workflows
147 run: |
148 cargo xtask workflows
149 if ! git diff --exit-code .github; then
150 echo "Error: .github directory has uncommitted changes after running 'cargo xtask workflows'"
151 echo "Please run 'cargo xtask workflows' locally and commit the changes"
152 exit 1
153 fi
154 shell: bash -euxo pipefail {0}
155 timeout-minutes: 60
156 create_draft_release:
157 if: github.repository_owner == 'zed-industries'
158 runs-on: namespace-profile-2x4-ubuntu-2404
159 steps:
160 - name: steps::checkout_repo
161 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
162 with:
163 clean: false
164 fetch-depth: 25
165 ref: ${{ github.ref }}
166 - name: script/determine-release-channel
167 run: script/determine-release-channel
168 shell: bash -euxo pipefail {0}
169 - name: mkdir -p target/
170 run: mkdir -p target/
171 shell: bash -euxo pipefail {0}
172 - name: release::create_draft_release::generate_release_notes
173 run: node --redirect-warnings=/dev/null ./script/draft-release-notes "$RELEASE_VERSION" "$RELEASE_CHANNEL" > target/release-notes.md
174 shell: bash -euxo pipefail {0}
175 - name: release::create_draft_release::create_release
176 run: script/create-draft-release target/release-notes.md
177 shell: bash -euxo pipefail {0}
178 env:
179 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
180 timeout-minutes: 60
181 bundle_linux_aarch64:
182 needs:
183 - run_tests_linux
184 - check_scripts
185 runs-on: namespace-profile-8x32-ubuntu-2004-arm-m4
186 env:
187 CARGO_INCREMENTAL: 0
188 ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
189 ZED_MINIDUMP_ENDPOINT: ${{ secrets.ZED_SENTRY_MINIDUMP_ENDPOINT }}
190 steps:
191 - name: steps::checkout_repo
192 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
193 with:
194 clean: false
195 - name: steps::setup_sentry
196 uses: matbour/setup-sentry-cli@3e938c54b3018bdd019973689ef984e033b0454b
197 with:
198 token: ${{ secrets.SENTRY_AUTH_TOKEN }}
199 - name: steps::setup_linux
200 run: ./script/linux
201 shell: bash -euxo pipefail {0}
202 - name: steps::install_mold
203 run: ./script/install-mold
204 shell: bash -euxo pipefail {0}
205 - name: ./script/bundle-linux
206 run: ./script/bundle-linux
207 shell: bash -euxo pipefail {0}
208 - name: '@actions/upload-artifact zed-linux-aarch64.tar.gz'
209 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
210 with:
211 name: zed-linux-aarch64.tar.gz
212 path: target/release/zed-linux-aarch64.tar.gz
213 if-no-files-found: error
214 - name: '@actions/upload-artifact zed-remote-server-linux-aarch64.gz'
215 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
216 with:
217 name: zed-remote-server-linux-aarch64.gz
218 path: target/zed-remote-server-linux-aarch64.gz
219 if-no-files-found: error
220 timeout-minutes: 60
221 bundle_linux_x86_64:
222 needs:
223 - run_tests_linux
224 - check_scripts
225 runs-on: namespace-profile-32x64-ubuntu-2004
226 env:
227 CARGO_INCREMENTAL: 0
228 ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
229 ZED_MINIDUMP_ENDPOINT: ${{ secrets.ZED_SENTRY_MINIDUMP_ENDPOINT }}
230 steps:
231 - name: steps::checkout_repo
232 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
233 with:
234 clean: false
235 - name: steps::setup_sentry
236 uses: matbour/setup-sentry-cli@3e938c54b3018bdd019973689ef984e033b0454b
237 with:
238 token: ${{ secrets.SENTRY_AUTH_TOKEN }}
239 - name: steps::setup_linux
240 run: ./script/linux
241 shell: bash -euxo pipefail {0}
242 - name: steps::install_mold
243 run: ./script/install-mold
244 shell: bash -euxo pipefail {0}
245 - name: ./script/bundle-linux
246 run: ./script/bundle-linux
247 shell: bash -euxo pipefail {0}
248 - name: '@actions/upload-artifact zed-linux-x86_64.tar.gz'
249 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
250 with:
251 name: zed-linux-x86_64.tar.gz
252 path: target/release/zed-linux-x86_64.tar.gz
253 if-no-files-found: error
254 - name: '@actions/upload-artifact zed-remote-server-linux-x86_64.gz'
255 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
256 with:
257 name: zed-remote-server-linux-x86_64.gz
258 path: target/zed-remote-server-linux-x86_64.gz
259 if-no-files-found: error
260 timeout-minutes: 60
261 bundle_mac_aarch64:
262 needs:
263 - run_tests_mac
264 - check_scripts
265 runs-on: self-mini-macos
266 env:
267 CARGO_INCREMENTAL: 0
268 ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
269 ZED_MINIDUMP_ENDPOINT: ${{ secrets.ZED_SENTRY_MINIDUMP_ENDPOINT }}
270 MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }}
271 MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
272 APPLE_NOTARIZATION_KEY: ${{ secrets.APPLE_NOTARIZATION_KEY }}
273 APPLE_NOTARIZATION_KEY_ID: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }}
274 APPLE_NOTARIZATION_ISSUER_ID: ${{ secrets.APPLE_NOTARIZATION_ISSUER_ID }}
275 steps:
276 - name: steps::checkout_repo
277 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
278 with:
279 clean: false
280 - name: steps::setup_node
281 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
282 with:
283 node-version: '20'
284 - name: steps::setup_sentry
285 uses: matbour/setup-sentry-cli@3e938c54b3018bdd019973689ef984e033b0454b
286 with:
287 token: ${{ secrets.SENTRY_AUTH_TOKEN }}
288 - name: steps::clear_target_dir_if_large
289 run: ./script/clear-target-dir-if-larger-than 300
290 shell: bash -euxo pipefail {0}
291 - name: run_bundling::bundle_mac::bundle_mac
292 run: ./script/bundle-mac aarch64-apple-darwin
293 shell: bash -euxo pipefail {0}
294 - name: '@actions/upload-artifact Zed-aarch64.dmg'
295 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
296 with:
297 name: Zed-aarch64.dmg
298 path: target/aarch64-apple-darwin/release/Zed-aarch64.dmg
299 if-no-files-found: error
300 - name: '@actions/upload-artifact zed-remote-server-macos-aarch64.gz'
301 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
302 with:
303 name: zed-remote-server-macos-aarch64.gz
304 path: target/zed-remote-server-macos-aarch64.gz
305 if-no-files-found: error
306 timeout-minutes: 60
307 bundle_mac_x86_64:
308 needs:
309 - run_tests_mac
310 - check_scripts
311 runs-on: self-mini-macos
312 env:
313 CARGO_INCREMENTAL: 0
314 ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
315 ZED_MINIDUMP_ENDPOINT: ${{ secrets.ZED_SENTRY_MINIDUMP_ENDPOINT }}
316 MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }}
317 MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
318 APPLE_NOTARIZATION_KEY: ${{ secrets.APPLE_NOTARIZATION_KEY }}
319 APPLE_NOTARIZATION_KEY_ID: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }}
320 APPLE_NOTARIZATION_ISSUER_ID: ${{ secrets.APPLE_NOTARIZATION_ISSUER_ID }}
321 steps:
322 - name: steps::checkout_repo
323 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
324 with:
325 clean: false
326 - name: steps::setup_node
327 uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
328 with:
329 node-version: '20'
330 - name: steps::setup_sentry
331 uses: matbour/setup-sentry-cli@3e938c54b3018bdd019973689ef984e033b0454b
332 with:
333 token: ${{ secrets.SENTRY_AUTH_TOKEN }}
334 - name: steps::clear_target_dir_if_large
335 run: ./script/clear-target-dir-if-larger-than 300
336 shell: bash -euxo pipefail {0}
337 - name: run_bundling::bundle_mac::bundle_mac
338 run: ./script/bundle-mac x86_64-apple-darwin
339 shell: bash -euxo pipefail {0}
340 - name: '@actions/upload-artifact Zed-x86_64.dmg'
341 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
342 with:
343 name: Zed-x86_64.dmg
344 path: target/x86_64-apple-darwin/release/Zed-x86_64.dmg
345 if-no-files-found: error
346 - name: '@actions/upload-artifact zed-remote-server-macos-x86_64.gz'
347 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
348 with:
349 name: zed-remote-server-macos-x86_64.gz
350 path: target/zed-remote-server-macos-x86_64.gz
351 if-no-files-found: error
352 timeout-minutes: 60
353 bundle_windows_aarch64:
354 needs:
355 - run_tests_windows
356 - check_scripts
357 runs-on: self-32vcpu-windows-2022
358 env:
359 CARGO_INCREMENTAL: 0
360 ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
361 ZED_MINIDUMP_ENDPOINT: ${{ secrets.ZED_SENTRY_MINIDUMP_ENDPOINT }}
362 AZURE_TENANT_ID: ${{ secrets.AZURE_SIGNING_TENANT_ID }}
363 AZURE_CLIENT_ID: ${{ secrets.AZURE_SIGNING_CLIENT_ID }}
364 AZURE_CLIENT_SECRET: ${{ secrets.AZURE_SIGNING_CLIENT_SECRET }}
365 ACCOUNT_NAME: ${{ vars.AZURE_SIGNING_ACCOUNT_NAME }}
366 CERT_PROFILE_NAME: ${{ vars.AZURE_SIGNING_CERT_PROFILE_NAME }}
367 ENDPOINT: ${{ vars.AZURE_SIGNING_ENDPOINT }}
368 FILE_DIGEST: SHA256
369 TIMESTAMP_DIGEST: SHA256
370 TIMESTAMP_SERVER: http://timestamp.acs.microsoft.com
371 steps:
372 - name: steps::checkout_repo
373 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
374 with:
375 clean: false
376 - name: steps::setup_sentry
377 uses: matbour/setup-sentry-cli@3e938c54b3018bdd019973689ef984e033b0454b
378 with:
379 token: ${{ secrets.SENTRY_AUTH_TOKEN }}
380 - name: run_bundling::bundle_windows::bundle_windows
381 run: script/bundle-windows.ps1 -Architecture aarch64
382 shell: pwsh
383 working-directory: ${{ env.ZED_WORKSPACE }}
384 - name: '@actions/upload-artifact Zed-aarch64.exe'
385 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
386 with:
387 name: Zed-aarch64.exe
388 path: target/Zed-aarch64.exe
389 if-no-files-found: error
390 timeout-minutes: 60
391 bundle_windows_x86_64:
392 needs:
393 - run_tests_windows
394 - check_scripts
395 runs-on: self-32vcpu-windows-2022
396 env:
397 CARGO_INCREMENTAL: 0
398 ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
399 ZED_MINIDUMP_ENDPOINT: ${{ secrets.ZED_SENTRY_MINIDUMP_ENDPOINT }}
400 AZURE_TENANT_ID: ${{ secrets.AZURE_SIGNING_TENANT_ID }}
401 AZURE_CLIENT_ID: ${{ secrets.AZURE_SIGNING_CLIENT_ID }}
402 AZURE_CLIENT_SECRET: ${{ secrets.AZURE_SIGNING_CLIENT_SECRET }}
403 ACCOUNT_NAME: ${{ vars.AZURE_SIGNING_ACCOUNT_NAME }}
404 CERT_PROFILE_NAME: ${{ vars.AZURE_SIGNING_CERT_PROFILE_NAME }}
405 ENDPOINT: ${{ vars.AZURE_SIGNING_ENDPOINT }}
406 FILE_DIGEST: SHA256
407 TIMESTAMP_DIGEST: SHA256
408 TIMESTAMP_SERVER: http://timestamp.acs.microsoft.com
409 steps:
410 - name: steps::checkout_repo
411 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
412 with:
413 clean: false
414 - name: steps::setup_sentry
415 uses: matbour/setup-sentry-cli@3e938c54b3018bdd019973689ef984e033b0454b
416 with:
417 token: ${{ secrets.SENTRY_AUTH_TOKEN }}
418 - name: run_bundling::bundle_windows::bundle_windows
419 run: script/bundle-windows.ps1 -Architecture x86_64
420 shell: pwsh
421 working-directory: ${{ env.ZED_WORKSPACE }}
422 - name: '@actions/upload-artifact Zed-x86_64.exe'
423 uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
424 with:
425 name: Zed-x86_64.exe
426 path: target/Zed-x86_64.exe
427 if-no-files-found: error
428 timeout-minutes: 60
429 upload_release_assets:
430 needs:
431 - create_draft_release
432 - bundle_linux_aarch64
433 - bundle_linux_x86_64
434 - bundle_mac_aarch64
435 - bundle_mac_x86_64
436 - bundle_windows_aarch64
437 - bundle_windows_x86_64
438 runs-on: namespace-profile-4x8-ubuntu-2204
439 steps:
440 - name: release::download_workflow_artifacts
441 uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53
442 with:
443 path: ./artifacts/
444 - name: ls -lR ./artifacts
445 run: ls -lR ./artifacts
446 shell: bash -euxo pipefail {0}
447 - name: release::prep_release_artifacts
448 run: |-
449 mkdir -p release-artifacts/
450
451 mv ./artifacts/Zed-aarch64.dmg/Zed-aarch64.dmg release-artifacts/Zed-aarch64.dmg
452 mv ./artifacts/Zed-x86_64.dmg/Zed-x86_64.dmg release-artifacts/Zed-x86_64.dmg
453 mv ./artifacts/zed-linux-aarch64.tar.gz/zed-linux-aarch64.tar.gz release-artifacts/zed-linux-aarch64.tar.gz
454 mv ./artifacts/zed-linux-x86_64.tar.gz/zed-linux-x86_64.tar.gz release-artifacts/zed-linux-x86_64.tar.gz
455 mv ./artifacts/Zed-x86_64.exe/Zed-x86_64.exe release-artifacts/Zed-x86_64.exe
456 mv ./artifacts/Zed-aarch64.exe/Zed-aarch64.exe release-artifacts/Zed-aarch64.exe
457 mv ./artifacts/zed-remote-server-macos-aarch64.gz/zed-remote-server-macos-aarch64.gz release-artifacts/zed-remote-server-macos-aarch64.gz
458 mv ./artifacts/zed-remote-server-macos-x86_64.gz/zed-remote-server-macos-x86_64.gz release-artifacts/zed-remote-server-macos-x86_64.gz
459 mv ./artifacts/zed-remote-server-linux-aarch64.gz/zed-remote-server-linux-aarch64.gz release-artifacts/zed-remote-server-linux-aarch64.gz
460 mv ./artifacts/zed-remote-server-linux-x86_64.gz/zed-remote-server-linux-x86_64.gz release-artifacts/zed-remote-server-linux-x86_64.gz
461 shell: bash -euxo pipefail {0}
462 - name: gh release upload "$GITHUB_REF_NAME" --repo=zed-industries/zed release-artifacts/*
463 run: gh release upload "$GITHUB_REF_NAME" --repo=zed-industries/zed release-artifacts/*
464 shell: bash -euxo pipefail {0}
465 env:
466 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
467 auto_release_preview:
468 needs:
469 - upload_release_assets
470 if: startsWith(github.ref, 'refs/tags/v') && endsWith(github.ref, '-pre') && !endsWith(github.ref, '.0-pre')
471 runs-on: namespace-profile-2x4-ubuntu-2404
472 steps:
473 - name: gh release edit "$GITHUB_REF_NAME" --repo=zed-industries/zed --draft=false
474 run: gh release edit "$GITHUB_REF_NAME" --repo=zed-industries/zed --draft=false
475 shell: bash -euxo pipefail {0}
476 env:
477 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
478concurrency:
479 group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.ref_name == 'main' && github.sha || 'anysha' }}
480 cancel-in-progress: true