Skip to repository content

tenant.openagents/omega

No repository description is available.

OpenAgents Git authority 2026-07-28T01:48:45.503Z Public web read
NIP-34 coordinate30617:7649603503856e5148d571eac2766b288a8ff1e9e35d380337a1d2b0015b4f92:omega
MaintainersHidden in public view
References2 branches · 1 tag
Read-only clonegit clone https://openagents.com/git/tenant.openagents/omega.git
Browse files

release.yml

1030 lines · 44.3 KB · yaml
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*
11permissions:
12  contents: read
13jobs:
14  run_tests_mac:
15    if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
16    runs-on: namespace-profile-mac-large
17    steps:
18    - name: steps::checkout_repo
19      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
20      with:
21        clean: false
22    - name: steps::setup_cargo_config
23      run: |
24        mkdir -p ./../.cargo
25        cp ./.cargo/ci-config.toml ./../.cargo/config.toml
26    - name: steps::cache_rust_dependencies_namespace
27      uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
28      with:
29        cache: rust
30        path: ~/.rustup
31    - name: steps::setup_node
32      uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e
33      with:
34        node-version: '24'
35        check-latest: true
36        package-manager-cache: false
37    - name: steps::cargo_install_nextest
38      uses: taiki-e/install-action@a6b2e2dcd845ddd7f509ce4f3ed3d922b80cc5d9
39      with:
40        tool: nextest
41    - name: steps::clear_target_dir_if_large
42      run: ./script/clear-target-dir-if-larger-than 350 200
43    - name: steps::setup_sccache
44      run: ./script/setup-sccache
45      env:
46        R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }}
47        R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
48        R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
49        SCCACHE_BUCKET: sccache-zed
50    - name: steps::cargo_nextest
51      run: cargo nextest run --workspace --no-fail-fast --no-tests=warn
52    - name: steps::show_sccache_stats
53      run: sccache --show-stats || true
54    - name: steps::cleanup_cargo_config
55      if: always()
56      run: |
57        rm -rf ./../.cargo
58    timeout-minutes: 60
59  run_tests_linux:
60    if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
61    runs-on: namespace-profile-16x32-ubuntu-2204
62    env:
63      CC: clang
64      CXX: clang++
65    steps:
66    - name: steps::checkout_repo
67      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
68      with:
69        clean: false
70    - name: steps::setup_cargo_config
71      run: |
72        mkdir -p ./../.cargo
73        cp ./.cargo/ci-config.toml ./../.cargo/config.toml
74    - name: steps::cache_rust_dependencies_namespace
75      uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
76      with:
77        cache: rust
78        path: ~/.rustup
79    - name: steps::setup_linux
80      run: ./script/linux
81    - name: steps::download_wasi_sdk
82      run: ./script/download-wasi-sdk
83    - name: steps::setup_node
84      uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e
85      with:
86        node-version: '24'
87        check-latest: true
88        package-manager-cache: false
89    - name: steps::cargo_install_nextest
90      uses: taiki-e/install-action@a6b2e2dcd845ddd7f509ce4f3ed3d922b80cc5d9
91      with:
92        tool: nextest
93    - name: steps::clear_target_dir_if_large
94      run: ./script/clear-target-dir-if-larger-than 350 200
95    - name: steps::setup_sccache
96      run: ./script/setup-sccache
97      env:
98        R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }}
99        R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
100        R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
101        SCCACHE_BUCKET: sccache-zed
102    - name: steps::cargo_nextest
103      run: cargo nextest run --workspace --no-fail-fast --no-tests=warn
104    - name: steps::show_sccache_stats
105      run: sccache --show-stats || true
106    - name: steps::cleanup_cargo_config
107      if: always()
108      run: |
109        rm -rf ./../.cargo
110    timeout-minutes: 60
111    services:
112      postgres:
113        image: postgres:15@sha256:1b92e7a80c021647bf70f5d3eb66066a998e4f5cf43c07bb9dc9f729782cf88e
114        env:
115          POSTGRES_HOST_AUTH_METHOD: trust
116        ports:
117        - 5432:5432
118        options: --health-cmd pg_isready --health-interval 500ms --health-timeout 5s --health-retries 10
119  run_tests_windows:
120    if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
121    runs-on: self-32vcpu-windows-2022
122    steps:
123    - name: steps::checkout_repo
124      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
125      with:
126        clean: false
127    - name: steps::setup_cargo_config
128      run: |
129        New-Item -ItemType Directory -Path "./../.cargo" -Force
130        Copy-Item -Path "./.cargo/ci-config.toml" -Destination "./../.cargo/config.toml"
131      shell: pwsh
132    - name: steps::setup_node
133      uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e
134      with:
135        node-version: '24'
136        check-latest: true
137        package-manager-cache: false
138    - name: steps::clear_target_dir_if_large
139      run: ./script/clear-target-dir-if-larger-than.ps1 350 200
140      shell: pwsh
141    - name: steps::setup_sccache
142      run: ./script/setup-sccache.ps1
143      shell: pwsh
144      env:
145        R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }}
146        R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
147        R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
148        SCCACHE_BUCKET: sccache-zed
149    - name: steps::cargo_nextest
150      run: cargo nextest run --workspace --no-fail-fast --no-tests=warn
151      shell: pwsh
152    - name: steps::show_sccache_stats
153      run: if ($env:RUSTC_WRAPPER) { & $env:RUSTC_WRAPPER --show-stats }; exit 0
154      shell: pwsh
155    - name: steps::cleanup_cargo_config
156      if: always()
157      run: |
158        Remove-Item -Recurse -Path "./../.cargo" -Force -ErrorAction SilentlyContinue
159      shell: pwsh
160    timeout-minutes: 60
161  clippy_mac:
162    if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
163    runs-on: namespace-profile-mac-large
164    steps:
165    - name: steps::checkout_repo
166      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
167      with:
168        clean: false
169    - name: steps::setup_cargo_config
170      run: |
171        mkdir -p ./../.cargo
172        cp ./.cargo/ci-config.toml ./../.cargo/config.toml
173    - name: steps::cache_rust_dependencies_namespace
174      uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
175      with:
176        cache: rust
177        path: ~/.rustup
178    - name: steps::setup_sccache
179      run: ./script/setup-sccache
180      env:
181        R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }}
182        R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
183        R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
184        SCCACHE_BUCKET: sccache-zed
185    - name: steps::clippy
186      run: ./script/clippy
187    - name: steps::show_sccache_stats
188      run: sccache --show-stats || true
189    timeout-minutes: 60
190  clippy_linux:
191    if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
192    runs-on: namespace-profile-16x32-ubuntu-2204
193    env:
194      CC: clang
195      CXX: clang++
196    steps:
197    - name: steps::checkout_repo
198      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
199      with:
200        clean: false
201    - name: steps::setup_cargo_config
202      run: |
203        mkdir -p ./../.cargo
204        cp ./.cargo/ci-config.toml ./../.cargo/config.toml
205    - name: steps::cache_rust_dependencies_namespace
206      uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
207      with:
208        cache: rust
209        path: ~/.rustup
210    - name: steps::setup_linux
211      run: ./script/linux
212    - name: steps::download_wasi_sdk
213      run: ./script/download-wasi-sdk
214    - name: steps::setup_sccache
215      run: ./script/setup-sccache
216      env:
217        R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }}
218        R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
219        R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
220        SCCACHE_BUCKET: sccache-zed
221    - name: steps::clippy
222      run: ./script/clippy
223    - name: steps::show_sccache_stats
224      run: sccache --show-stats || true
225    timeout-minutes: 60
226  clippy_windows:
227    if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
228    runs-on: self-32vcpu-windows-2022
229    steps:
230    - name: steps::checkout_repo
231      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
232      with:
233        clean: false
234    - name: steps::setup_cargo_config
235      run: |
236        New-Item -ItemType Directory -Path "./../.cargo" -Force
237        Copy-Item -Path "./.cargo/ci-config.toml" -Destination "./../.cargo/config.toml"
238      shell: pwsh
239    - name: steps::setup_sccache
240      run: ./script/setup-sccache.ps1
241      shell: pwsh
242      env:
243        R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }}
244        R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
245        R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
246        SCCACHE_BUCKET: sccache-zed
247    - name: steps::clippy
248      run: ./script/clippy.ps1
249      shell: pwsh
250    - name: steps::show_sccache_stats
251      run: if ($env:RUSTC_WRAPPER) { & $env:RUSTC_WRAPPER --show-stats }; exit 0
252      shell: pwsh
253    timeout-minutes: 60
254  check_scripts:
255    if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
256    runs-on: namespace-profile-8x16-ubuntu-2204
257    steps:
258    - name: steps::checkout_repo
259      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
260      with:
261        clean: false
262    - name: run_tests::check_scripts::run_shellcheck
263      run: ./script/shellcheck-scripts error
264    - name: steps::cache_rust_dependencies_namespace
265      uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
266      with:
267        cache: rust
268        path: ~/.rustup
269    - name: run_tests::check_scripts::check_xtask_workflows
270      run: |
271        cargo xtask workflows
272        if ! git diff --exit-code .github; then
273          echo "Error: .github directory has uncommitted changes after running 'cargo xtask workflows'"
274          echo "Please run 'cargo xtask workflows' locally and commit the changes"
275          exit 1
276        fi
277    - id: get_actionlint
278      name: run_tests::check_scripts::download_actionlint
279      run: bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)
280    - name: run_tests::check_scripts::run_actionlint
281      run: '"$ACTIONLINT_BIN" -color'
282      env:
283        ACTIONLINT_BIN: ${{ steps.get_actionlint.outputs.executable }}
284    - name: run_tests::check_scripts::run_zizmor
285      uses: zizmorcore/zizmor-action@6599ee8b7a49aef6a770f63d261d214911a7ce02
286      with:
287        advanced-security: false
288        min-severity: high
289        version: latest
290    timeout-minutes: 60
291  create_draft_release:
292    if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
293    runs-on: namespace-profile-2x4-ubuntu-2404
294    steps:
295    - id: generate-token
296      name: steps::authenticate_as_zippy
297      uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859
298      with:
299        app-id: ${{ secrets.ZED_ZIPPY_APP_ID }}
300        private-key: ${{ secrets.ZED_ZIPPY_APP_PRIVATE_KEY }}
301        owner: ${{ github.repository_owner }}
302        repositories: ${{ github.event.repository.name }}
303        permission-contents: write
304    - name: steps::checkout_repo
305      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
306      with:
307        clean: false
308        fetch-depth: 25
309        ref: ${{ github.ref }}
310    - name: script/determine-release-channel
311      run: script/determine-release-channel
312    - name: mkdir -p target/
313      run: mkdir -p target/
314    - name: release::create_draft_release::generate_release_notes
315      run: node --redirect-warnings=/dev/null ./script/draft-release-notes "$RELEASE_VERSION" "$RELEASE_CHANNEL" > target/release-notes.md
316    - name: release::create_draft_release::create_release
317      run: script/create-draft-release target/release-notes.md
318      env:
319        GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }}
320    timeout-minutes: 60
321  compliance_check:
322    if: (github.repository_owner == 'zed-industries' || github.repository_owner == 'zed-extensions')
323    runs-on: namespace-profile-2x4-ubuntu-2404
324    steps:
325    - name: steps::checkout_repo
326      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
327      with:
328        clean: false
329        fetch-depth: 0
330        ref: ${{ github.ref }}
331    - name: steps::cache_rust_dependencies_namespace
332      uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
333      with:
334        cache: rust
335        path: ~/.rustup
336    - id: run-compliance-check
337      name: release::add_compliance_steps::run_compliance_check
338      run: |
339        cargo xtask compliance version "$GITHUB_REF_NAME" --report-path "compliance-report-${GITHUB_REF_NAME}.md"
340      env:
341        GITHUB_APP_ID: ${{ secrets.ZED_ZIPPY_APP_ID }}
342        GITHUB_APP_KEY: ${{ secrets.ZED_ZIPPY_APP_PRIVATE_KEY }}
343      continue-on-error: true
344    - name: run_bundling::upload_artifact
345      if: always()
346      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
347      with:
348        name: compliance-report-${{ github.ref_name }}.md
349        path: compliance-report-${{ github.ref_name }}.md
350        if-no-files-found: error
351    - name: send_compliance_slack_notification
352      if: ${{ always() }}
353      run: |
354        if [ "$COMPLIANCE_OUTCOME" == "success" ]; then
355            STATUS="✅ Compliance check passed for $COMPLIANCE_TAG"
356            MESSAGE=$(printf "%s\n\nReport: %s" "$STATUS" "$ARTIFACT_URL")
357        else
358            STATUS="❌ Preliminary compliance check failed (but this can still be fixed while the builds are running!) for $COMPLIANCE_TAG"
359            MESSAGE=$(printf "%s\n\nReport: %s\nPRs needing review: %s" "$STATUS" "$ARTIFACT_URL" "https://github.com/zed-industries/zed/pulls?q=is%3Apr+is%3Aclosed+label%3A%22PR+state%3Aneeds+review%22")
360        fi
361
362        curl -X POST -H 'Content-type: application/json' \
363            --data "$(jq -n --arg text "$MESSAGE" '{"text": $text}')" \
364            "$SLACK_WEBHOOK"
365      env:
366        SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_WORKFLOW_FAILURES }}
367        COMPLIANCE_OUTCOME: ${{ steps.run-compliance-check.outcome }}
368        COMPLIANCE_TAG: ${{ github.ref_name }}
369        ARTIFACT_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}#artifacts
370    outputs:
371      outcome: ${{ steps.run-compliance-check.outputs.outcome }}
372    timeout-minutes: 60
373  bundle_linux_aarch64:
374    needs:
375    - run_tests_linux
376    - clippy_linux
377    - check_scripts
378    runs-on: namespace-profile-8x32-ubuntu-2004-arm-m4
379    env:
380      CARGO_INCREMENTAL: 0
381      ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
382      ZED_MINIDUMP_ENDPOINT: ${{ secrets.ZED_SENTRY_MINIDUMP_ENDPOINT }}
383      CC: clang-18
384      CXX: clang++-18
385    steps:
386    - name: steps::checkout_repo
387      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
388      with:
389        clean: false
390    - name: steps::cache_rust_dependencies_namespace
391      uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
392      with:
393        cache: rust
394        path: ~/.rustup
395    - name: steps::setup_sentry
396      uses: matbour/setup-sentry-cli@3e938c54b3018bdd019973689ef984e033b0454b
397      with:
398        token: ${{ secrets.SENTRY_AUTH_TOKEN }}
399    - name: steps::setup_linux
400      run: ./script/linux
401    - name: steps::download_wasi_sdk
402      run: ./script/download-wasi-sdk
403    - name: ./script/bundle-linux
404      run: ./script/bundle-linux
405    - name: run_bundling::upload_artifact
406      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
407      with:
408        name: zed-linux-aarch64.tar.gz
409        path: target/release/zed-linux-aarch64.tar.gz
410        if-no-files-found: error
411    - name: run_bundling::upload_artifact
412      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
413      with:
414        name: zed-remote-server-linux-aarch64.gz
415        path: target/zed-remote-server-linux-aarch64.gz
416        if-no-files-found: error
417    timeout-minutes: 60
418  bundle_linux_x86_64:
419    needs:
420    - run_tests_linux
421    - clippy_linux
422    - check_scripts
423    runs-on: namespace-profile-32x64-ubuntu-2004
424    env:
425      CARGO_INCREMENTAL: 0
426      ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
427      ZED_MINIDUMP_ENDPOINT: ${{ secrets.ZED_SENTRY_MINIDUMP_ENDPOINT }}
428      CC: clang-18
429      CXX: clang++-18
430    steps:
431    - name: steps::checkout_repo
432      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
433      with:
434        clean: false
435    - name: steps::cache_rust_dependencies_namespace
436      uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
437      with:
438        cache: rust
439        path: ~/.rustup
440    - name: steps::setup_sentry
441      uses: matbour/setup-sentry-cli@3e938c54b3018bdd019973689ef984e033b0454b
442      with:
443        token: ${{ secrets.SENTRY_AUTH_TOKEN }}
444    - name: steps::setup_linux
445      run: ./script/linux
446    - name: steps::download_wasi_sdk
447      run: ./script/download-wasi-sdk
448    - name: ./script/bundle-linux
449      run: ./script/bundle-linux
450    - name: run_bundling::upload_artifact
451      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
452      with:
453        name: zed-linux-x86_64.tar.gz
454        path: target/release/zed-linux-x86_64.tar.gz
455        if-no-files-found: error
456    - name: run_bundling::upload_artifact
457      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
458      with:
459        name: zed-remote-server-linux-x86_64.gz
460        path: target/zed-remote-server-linux-x86_64.gz
461        if-no-files-found: error
462    timeout-minutes: 60
463  build_static_bwrap_linux_aarch64:
464    needs:
465    - run_tests_linux
466    - clippy_linux
467    - check_scripts
468    runs-on: namespace-profile-8x32-ubuntu-2004-arm-m4
469    steps:
470    - name: steps::cache_nix_dependencies_namespace
471      uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
472      with:
473        cache: nix
474    - name: run_bundling::build_static_bwrap
475      uses: cachix/install-nix-action@02a151ada4993995686f9ed4f1be7cfbb229e56f
476      with:
477        github_access_token: ${{ secrets.GITHUB_TOKEN }}
478    - name: run_bundling::build_static_bwrap
479      uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad
480      with:
481        name: zed
482        authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
483        cachixArgs: -v
484    - name: run_bundling::build_static_bwrap
485      run: nix build nixpkgs#pkgsStatic.bubblewrap -L
486    - name: run_bundling::build_static_bwrap
487      run: |
488        cp result/bin/bwrap bwrap-linux-aarch64
489        chmod 755 bwrap-linux-aarch64
490        gzip -f --stdout --best bwrap-linux-aarch64 > bwrap-linux-aarch64.gz
491    - name: run_bundling::upload_artifact
492      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
493      with:
494        name: bwrap-linux-aarch64.gz
495        path: bwrap-linux-aarch64.gz
496        if-no-files-found: error
497    timeout-minutes: 60
498  build_static_bwrap_linux_x86_64:
499    needs:
500    - run_tests_linux
501    - clippy_linux
502    - check_scripts
503    runs-on: namespace-profile-32x64-ubuntu-2004
504    steps:
505    - name: steps::cache_nix_dependencies_namespace
506      uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
507      with:
508        cache: nix
509    - name: run_bundling::build_static_bwrap
510      uses: cachix/install-nix-action@02a151ada4993995686f9ed4f1be7cfbb229e56f
511      with:
512        github_access_token: ${{ secrets.GITHUB_TOKEN }}
513    - name: run_bundling::build_static_bwrap
514      uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad
515      with:
516        name: zed
517        authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
518        cachixArgs: -v
519    - name: run_bundling::build_static_bwrap
520      run: nix build nixpkgs#pkgsStatic.bubblewrap -L
521    - name: run_bundling::build_static_bwrap
522      run: |
523        cp result/bin/bwrap bwrap-linux-x86_64
524        chmod 755 bwrap-linux-x86_64
525        gzip -f --stdout --best bwrap-linux-x86_64 > bwrap-linux-x86_64.gz
526    - name: run_bundling::upload_artifact
527      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
528      with:
529        name: bwrap-linux-x86_64.gz
530        path: bwrap-linux-x86_64.gz
531        if-no-files-found: error
532    timeout-minutes: 60
533  bundle_mac_aarch64:
534    needs:
535    - run_tests_mac
536    - clippy_mac
537    - check_scripts
538    runs-on: namespace-profile-mac-large
539    env:
540      CARGO_INCREMENTAL: 0
541      ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
542      ZED_MINIDUMP_ENDPOINT: ${{ secrets.ZED_SENTRY_MINIDUMP_ENDPOINT }}
543      MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }}
544      MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
545      APPLE_NOTARIZATION_KEY: ${{ secrets.APPLE_NOTARIZATION_KEY }}
546      APPLE_NOTARIZATION_KEY_ID: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }}
547      APPLE_NOTARIZATION_ISSUER_ID: ${{ secrets.APPLE_NOTARIZATION_ISSUER_ID }}
548    steps:
549    - name: steps::checkout_repo
550      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
551      with:
552        clean: false
553    - name: steps::cache_rust_dependencies_namespace
554      uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
555      with:
556        cache: rust
557        path: ~/.rustup
558    - name: steps::setup_node
559      uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e
560      with:
561        node-version: '24'
562        check-latest: true
563        package-manager-cache: false
564    - name: steps::setup_sentry
565      uses: matbour/setup-sentry-cli@3e938c54b3018bdd019973689ef984e033b0454b
566      with:
567        token: ${{ secrets.SENTRY_AUTH_TOKEN }}
568    - name: steps::clear_target_dir_if_large
569      run: ./script/clear-target-dir-if-larger-than 350 200
570    - name: run_bundling::bundle_mac::bundle_mac
571      run: ./script/bundle-mac aarch64-apple-darwin
572    - name: run_bundling::upload_artifact
573      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
574      with:
575        name: Zed-aarch64.dmg
576        path: target/aarch64-apple-darwin/release/Zed-aarch64.dmg
577        if-no-files-found: error
578    - name: run_bundling::upload_artifact
579      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
580      with:
581        name: zed-remote-server-macos-aarch64.gz
582        path: target/zed-remote-server-macos-aarch64.gz
583        if-no-files-found: error
584    timeout-minutes: 60
585  bundle_mac_x86_64:
586    needs:
587    - run_tests_mac
588    - clippy_mac
589    - check_scripts
590    runs-on: namespace-profile-mac-large
591    env:
592      CARGO_INCREMENTAL: 0
593      ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
594      ZED_MINIDUMP_ENDPOINT: ${{ secrets.ZED_SENTRY_MINIDUMP_ENDPOINT }}
595      MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }}
596      MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
597      APPLE_NOTARIZATION_KEY: ${{ secrets.APPLE_NOTARIZATION_KEY }}
598      APPLE_NOTARIZATION_KEY_ID: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }}
599      APPLE_NOTARIZATION_ISSUER_ID: ${{ secrets.APPLE_NOTARIZATION_ISSUER_ID }}
600    steps:
601    - name: steps::checkout_repo
602      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
603      with:
604        clean: false
605    - name: steps::cache_rust_dependencies_namespace
606      uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
607      with:
608        cache: rust
609        path: ~/.rustup
610    - name: steps::setup_node
611      uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e
612      with:
613        node-version: '24'
614        check-latest: true
615        package-manager-cache: false
616    - name: steps::setup_sentry
617      uses: matbour/setup-sentry-cli@3e938c54b3018bdd019973689ef984e033b0454b
618      with:
619        token: ${{ secrets.SENTRY_AUTH_TOKEN }}
620    - name: steps::clear_target_dir_if_large
621      run: ./script/clear-target-dir-if-larger-than 350 200
622    - name: run_bundling::bundle_mac::bundle_mac
623      run: ./script/bundle-mac x86_64-apple-darwin
624    - name: run_bundling::upload_artifact
625      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
626      with:
627        name: Zed-x86_64.dmg
628        path: target/x86_64-apple-darwin/release/Zed-x86_64.dmg
629        if-no-files-found: error
630    - name: run_bundling::upload_artifact
631      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
632      with:
633        name: zed-remote-server-macos-x86_64.gz
634        path: target/zed-remote-server-macos-x86_64.gz
635        if-no-files-found: error
636    timeout-minutes: 60
637  bundle_windows_aarch64:
638    needs:
639    - run_tests_windows
640    - clippy_windows
641    - check_scripts
642    runs-on: self-32vcpu-windows-2022
643    env:
644      CARGO_INCREMENTAL: 0
645      ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
646      ZED_MINIDUMP_ENDPOINT: ${{ secrets.ZED_SENTRY_MINIDUMP_ENDPOINT }}
647      AZURE_TENANT_ID: ${{ secrets.AZURE_SIGNING_TENANT_ID }}
648      AZURE_CLIENT_ID: ${{ secrets.AZURE_SIGNING_CLIENT_ID }}
649      AZURE_CLIENT_SECRET: ${{ secrets.AZURE_SIGNING_CLIENT_SECRET }}
650      ACCOUNT_NAME: ${{ vars.AZURE_SIGNING_ACCOUNT_NAME }}
651      CERT_PROFILE_NAME: ${{ vars.AZURE_SIGNING_CERT_PROFILE_NAME }}
652      ENDPOINT: ${{ vars.AZURE_SIGNING_ENDPOINT }}
653      FILE_DIGEST: SHA256
654      TIMESTAMP_DIGEST: SHA256
655      TIMESTAMP_SERVER: http://timestamp.acs.microsoft.com
656    steps:
657    - name: steps::checkout_repo
658      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
659      with:
660        clean: false
661    - name: steps::setup_sentry
662      uses: matbour/setup-sentry-cli@3e938c54b3018bdd019973689ef984e033b0454b
663      with:
664        token: ${{ secrets.SENTRY_AUTH_TOKEN }}
665    - name: steps::clear_target_dir_if_large
666      run: ./script/clear-target-dir-if-larger-than.ps1 350 200
667      shell: pwsh
668    - name: run_bundling::bundle_windows::bundle_windows
669      run: script/bundle-windows.ps1 -Architecture aarch64
670      shell: pwsh
671      working-directory: ${{ env.ZED_WORKSPACE }}
672    - name: run_bundling::upload_artifact
673      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
674      with:
675        name: Zed-aarch64.exe
676        path: target/Zed-aarch64.exe
677        if-no-files-found: error
678    - name: run_bundling::upload_artifact
679      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
680      with:
681        name: zed-remote-server-windows-aarch64.zip
682        path: target/zed-remote-server-windows-aarch64.zip
683        if-no-files-found: error
684    timeout-minutes: 60
685  bundle_windows_x86_64:
686    needs:
687    - run_tests_windows
688    - clippy_windows
689    - check_scripts
690    runs-on: self-32vcpu-windows-2022
691    env:
692      CARGO_INCREMENTAL: 0
693      ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
694      ZED_MINIDUMP_ENDPOINT: ${{ secrets.ZED_SENTRY_MINIDUMP_ENDPOINT }}
695      AZURE_TENANT_ID: ${{ secrets.AZURE_SIGNING_TENANT_ID }}
696      AZURE_CLIENT_ID: ${{ secrets.AZURE_SIGNING_CLIENT_ID }}
697      AZURE_CLIENT_SECRET: ${{ secrets.AZURE_SIGNING_CLIENT_SECRET }}
698      ACCOUNT_NAME: ${{ vars.AZURE_SIGNING_ACCOUNT_NAME }}
699      CERT_PROFILE_NAME: ${{ vars.AZURE_SIGNING_CERT_PROFILE_NAME }}
700      ENDPOINT: ${{ vars.AZURE_SIGNING_ENDPOINT }}
701      FILE_DIGEST: SHA256
702      TIMESTAMP_DIGEST: SHA256
703      TIMESTAMP_SERVER: http://timestamp.acs.microsoft.com
704    steps:
705    - name: steps::checkout_repo
706      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
707      with:
708        clean: false
709    - name: steps::setup_sentry
710      uses: matbour/setup-sentry-cli@3e938c54b3018bdd019973689ef984e033b0454b
711      with:
712        token: ${{ secrets.SENTRY_AUTH_TOKEN }}
713    - name: steps::clear_target_dir_if_large
714      run: ./script/clear-target-dir-if-larger-than.ps1 350 200
715      shell: pwsh
716    - name: run_bundling::bundle_windows::bundle_windows
717      run: script/bundle-windows.ps1 -Architecture x86_64
718      shell: pwsh
719      working-directory: ${{ env.ZED_WORKSPACE }}
720    - name: run_bundling::upload_artifact
721      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
722      with:
723        name: Zed-x86_64.exe
724        path: target/Zed-x86_64.exe
725        if-no-files-found: error
726    - name: run_bundling::upload_artifact
727      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
728      with:
729        name: zed-remote-server-windows-x86_64.zip
730        path: target/zed-remote-server-windows-x86_64.zip
731        if-no-files-found: error
732    timeout-minutes: 60
733  upload_release_assets:
734    needs:
735    - create_draft_release
736    - bundle_linux_aarch64
737    - bundle_linux_x86_64
738    - build_static_bwrap_linux_aarch64
739    - build_static_bwrap_linux_x86_64
740    - bundle_mac_aarch64
741    - bundle_mac_x86_64
742    - bundle_windows_aarch64
743    - bundle_windows_x86_64
744    runs-on: namespace-profile-4x8-ubuntu-2204
745    permissions:
746      contents: write
747    steps:
748    - name: release::download_workflow_artifacts
749      uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c
750      with:
751        path: ./artifacts/
752    - name: ls -lR ./artifacts
753      run: ls -lR ./artifacts
754    - name: release::prep_release_artifacts
755      run: |-
756        mkdir -p release-artifacts/
757
758        mv ./artifacts/Zed-aarch64.dmg/Zed-aarch64.dmg release-artifacts/Zed-aarch64.dmg
759        mv ./artifacts/Zed-x86_64.dmg/Zed-x86_64.dmg release-artifacts/Zed-x86_64.dmg
760        mv ./artifacts/zed-linux-aarch64.tar.gz/zed-linux-aarch64.tar.gz release-artifacts/zed-linux-aarch64.tar.gz
761        mv ./artifacts/zed-linux-x86_64.tar.gz/zed-linux-x86_64.tar.gz release-artifacts/zed-linux-x86_64.tar.gz
762        mv ./artifacts/bwrap-linux-aarch64.gz/bwrap-linux-aarch64.gz release-artifacts/bwrap-linux-aarch64.gz
763        mv ./artifacts/bwrap-linux-x86_64.gz/bwrap-linux-x86_64.gz release-artifacts/bwrap-linux-x86_64.gz
764        mv ./artifacts/Zed-x86_64.exe/Zed-x86_64.exe release-artifacts/Zed-x86_64.exe
765        mv ./artifacts/Zed-aarch64.exe/Zed-aarch64.exe release-artifacts/Zed-aarch64.exe
766        mv ./artifacts/zed-remote-server-macos-aarch64.gz/zed-remote-server-macos-aarch64.gz release-artifacts/zed-remote-server-macos-aarch64.gz
767        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
768        mv ./artifacts/zed-remote-server-linux-aarch64.gz/zed-remote-server-linux-aarch64.gz release-artifacts/zed-remote-server-linux-aarch64.gz
769        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
770        mv ./artifacts/zed-remote-server-windows-aarch64.zip/zed-remote-server-windows-aarch64.zip release-artifacts/zed-remote-server-windows-aarch64.zip
771        mv ./artifacts/zed-remote-server-windows-x86_64.zip/zed-remote-server-windows-x86_64.zip release-artifacts/zed-remote-server-windows-x86_64.zip
772    - name: gh release upload "$GITHUB_REF_NAME" --repo=zed-industries/zed release-artifacts/*
773      run: gh release upload "$GITHUB_REF_NAME" --repo=zed-industries/zed release-artifacts/*
774      env:
775        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
776  validate_release_assets:
777    needs:
778    - upload_release_assets
779    runs-on: namespace-profile-2x4-ubuntu-2404
780    permissions:
781      contents: write
782    steps:
783    - name: release::validate_release_assets
784      run: |
785        EXPECTED_ASSETS='["Zed-aarch64.dmg", "Zed-x86_64.dmg", "zed-linux-aarch64.tar.gz", "zed-linux-x86_64.tar.gz", "bwrap-linux-aarch64.gz", "bwrap-linux-x86_64.gz", "Zed-x86_64.exe", "Zed-aarch64.exe", "zed-remote-server-macos-aarch64.gz", "zed-remote-server-macos-x86_64.gz", "zed-remote-server-linux-aarch64.gz", "zed-remote-server-linux-x86_64.gz", "zed-remote-server-windows-aarch64.zip", "zed-remote-server-windows-x86_64.zip"]'
786        TAG="$GITHUB_REF_NAME"
787
788        ACTUAL_ASSETS=$(gh release view "$TAG" --repo=zed-industries/zed --json assets -q '[.assets[].name]')
789
790        MISSING_ASSETS=$(echo "$EXPECTED_ASSETS" | jq -r --argjson actual "$ACTUAL_ASSETS" '. - $actual | .[]')
791
792        if [ -n "$MISSING_ASSETS" ]; then
793            echo "Error: The following assets are missing from the release:"
794            echo "$MISSING_ASSETS"
795            exit 1
796        fi
797
798        echo "All expected assets are present in the release."
799      env:
800        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
801  release_compliance_check:
802    needs:
803    - upload_release_assets
804    - compliance_check
805    runs-on: namespace-profile-8x16-ubuntu-2204
806    steps:
807    - name: steps::checkout_repo
808      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
809      with:
810        clean: false
811        fetch-depth: 0
812        ref: ${{ github.ref }}
813    - name: steps::cache_rust_dependencies_namespace
814      uses: namespacelabs/nscloud-cache-action@a90bb5d4b27522ce881c6e98eebd7d7e6d1653f9
815      with:
816        cache: rust
817        path: ~/.rustup
818    - id: run-compliance-check
819      name: release::add_compliance_steps::run_compliance_check
820      run: |
821        cargo xtask compliance version "$GITHUB_REF_NAME" --report-path "compliance-report-${GITHUB_REF_NAME}.md"
822      env:
823        GITHUB_APP_ID: ${{ secrets.ZED_ZIPPY_APP_ID }}
824        GITHUB_APP_KEY: ${{ secrets.ZED_ZIPPY_APP_PRIVATE_KEY }}
825    - name: run_bundling::upload_artifact
826      if: always()
827      uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
828      with:
829        name: compliance-report-${{ github.ref_name }}.md
830        path: compliance-report-${{ github.ref_name }}.md
831        if-no-files-found: error
832        overwrite: true
833    - name: send_compliance_slack_notification
834      if: ${{ failure() || needs.compliance_check.outputs.outcome != 'success' }}
835      run: |
836        if [ "$COMPLIANCE_OUTCOME" == "success" ]; then
837            STATUS="✅ Compliance check passed for $COMPLIANCE_TAG"
838            MESSAGE=$(printf "%s\n\nReport: %s" "$STATUS" "$ARTIFACT_URL")
839        else
840            STATUS="❌ Compliance check failed for $COMPLIANCE_TAG"
841            MESSAGE=$(printf "%s\n\nReport: %s\nPRs needing review: %s" "$STATUS" "$ARTIFACT_URL" "https://github.com/zed-industries/zed/pulls?q=is%3Apr+is%3Aclosed+label%3A%22PR+state%3Aneeds+review%22")
842        fi
843
844        curl -X POST -H 'Content-type: application/json' \
845            --data "$(jq -n --arg text "$MESSAGE" '{"text": $text}')" \
846            "$SLACK_WEBHOOK"
847      env:
848        SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_WORKFLOW_FAILURES }}
849        COMPLIANCE_OUTCOME: ${{ steps.run-compliance-check.outcome }}
850        COMPLIANCE_TAG: ${{ github.ref_name }}
851        ARTIFACT_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}#artifacts
852  auto_release_preview:
853    needs:
854    - validate_release_assets
855    - release_compliance_check
856    if: startsWith(github.ref, 'refs/tags/v') && endsWith(github.ref, '-pre')
857    runs-on: namespace-profile-2x4-ubuntu-2404
858    steps:
859    - id: generate-token
860      name: steps::authenticate_as_zippy
861      uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859
862      with:
863        app-id: ${{ secrets.ZED_ZIPPY_APP_ID }}
864        private-key: ${{ secrets.ZED_ZIPPY_APP_PRIVATE_KEY }}
865        owner: ${{ github.repository_owner }}
866        repositories: ${{ github.event.repository.name }}
867        permission-contents: write
868    - name: steps::checkout_repo
869      uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd
870      with:
871        clean: false
872        ref: ${{ github.ref }}
873        token: ${{ steps.generate-token.outputs.token }}
874    - id: auto-release-preview
875      name: release::auto_release_preview::auto_release_preview
876      run: |
877        tag="$GITHUB_REF_NAME"
878        release_published=false
879
880        if [[ ! "$tag" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)-pre$ ]]; then
881            echo "::error::expected preview release tag in the form vMAJOR.MINOR.PATCH-pre, got $tag"
882            exit 1
883        fi
884
885        major="${BASH_REMATCH[1]}"
886        minor="${BASH_REMATCH[2]}"
887        should_release=true
888
889        released_preview="$(script/get-released-version preview)"
890        if [[ -z "$released_preview" || "$released_preview" == "null" ]]; then
891            echo "::error::could not determine released preview version"
892            exit 1
893        fi
894
895        released_preview_major="$(echo "$released_preview" | cut -d. -f1)"
896        released_preview_minor="$(echo "$released_preview" | cut -d. -f2)"
897
898        if [[ "$released_preview_major" != "$major" || "$released_preview_minor" != "$minor" ]]; then
899            should_release=false
900            echo "Leaving $tag as a draft because it is the first preview release for v${major}.${minor}.x"
901        fi
902
903        if [[ "$should_release" == "true" ]]; then
904            gh release edit "$tag" --repo=zed-industries/zed --draft=false
905            release_published=true
906        fi
907
908        echo "release_published=$release_published" >> "$GITHUB_OUTPUT"
909      env:
910        GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }}
911    outputs:
912      release_published: ${{ steps.auto-release-preview.outputs.release_published }}
913  push_release_update_notification:
914    needs:
915    - create_draft_release
916    - upload_release_assets
917    - validate_release_assets
918    - release_compliance_check
919    - auto_release_preview
920    - run_tests_mac
921    - run_tests_linux
922    - run_tests_windows
923    - clippy_mac
924    - clippy_linux
925    - clippy_windows
926    - check_scripts
927    - bundle_linux_aarch64
928    - bundle_linux_x86_64
929    - build_static_bwrap_linux_aarch64
930    - build_static_bwrap_linux_x86_64
931    - bundle_mac_aarch64
932    - bundle_mac_x86_64
933    - bundle_windows_aarch64
934    - bundle_windows_x86_64
935    if: always()
936    runs-on: namespace-profile-2x4-ubuntu-2404
937    steps:
938    - id: generate-webhook-message
939      name: release::generate_slack_message
940      run: |
941        MESSAGE=$(if [ "$DRAFT_RESULT" == "failure" ]; then
942            echo "❌ Draft release creation failed for $TAG: $RUN_URL"
943        else
944            RELEASE_URL=$(gh release view "$TAG" --repo=zed-industries/zed --json url -q '.url')
945            if [ "$UPLOAD_RESULT" == "failure" ]; then
946                echo "❌ Release asset upload failed for $TAG: $RELEASE_URL"
947            elif [ "$UPLOAD_RESULT" == "cancelled" ] || [ "$UPLOAD_RESULT" == "skipped" ]; then
948                FAILED_JOBS=""
949                if [ "$RESULT_RUN_TESTS_MAC" == "failure" ];then FAILED_JOBS="$FAILED_JOBS run_tests_mac"; fi
950                if [ "$RESULT_RUN_TESTS_LINUX" == "failure" ];then FAILED_JOBS="$FAILED_JOBS run_tests_linux"; fi
951                if [ "$RESULT_RUN_TESTS_WINDOWS" == "failure" ];then FAILED_JOBS="$FAILED_JOBS run_tests_windows"; fi
952                if [ "$RESULT_CLIPPY_MAC" == "failure" ];then FAILED_JOBS="$FAILED_JOBS clippy_mac"; fi
953                if [ "$RESULT_CLIPPY_LINUX" == "failure" ];then FAILED_JOBS="$FAILED_JOBS clippy_linux"; fi
954                if [ "$RESULT_CLIPPY_WINDOWS" == "failure" ];then FAILED_JOBS="$FAILED_JOBS clippy_windows"; fi
955                if [ "$RESULT_CHECK_SCRIPTS" == "failure" ];then FAILED_JOBS="$FAILED_JOBS check_scripts"; fi
956                if [ "$RESULT_BUNDLE_LINUX_AARCH64" == "failure" ];then FAILED_JOBS="$FAILED_JOBS bundle_linux_aarch64"; fi
957                if [ "$RESULT_BUNDLE_LINUX_X86_64" == "failure" ];then FAILED_JOBS="$FAILED_JOBS bundle_linux_x86_64"; fi
958                if [ "$RESULT_BUILD_STATIC_BWRAP_LINUX_AARCH64" == "failure" ];then FAILED_JOBS="$FAILED_JOBS build_static_bwrap_linux_aarch64"; fi
959                if [ "$RESULT_BUILD_STATIC_BWRAP_LINUX_X86_64" == "failure" ];then FAILED_JOBS="$FAILED_JOBS build_static_bwrap_linux_x86_64"; fi
960                if [ "$RESULT_BUNDLE_MAC_AARCH64" == "failure" ];then FAILED_JOBS="$FAILED_JOBS bundle_mac_aarch64"; fi
961                if [ "$RESULT_BUNDLE_MAC_X86_64" == "failure" ];then FAILED_JOBS="$FAILED_JOBS bundle_mac_x86_64"; fi
962                if [ "$RESULT_BUNDLE_WINDOWS_AARCH64" == "failure" ];then FAILED_JOBS="$FAILED_JOBS bundle_windows_aarch64"; fi
963                if [ "$RESULT_BUNDLE_WINDOWS_X86_64" == "failure" ];then FAILED_JOBS="$FAILED_JOBS bundle_windows_x86_64"; fi
964                FAILED_JOBS=$(echo "$FAILED_JOBS" | xargs)
965                if [ "$UPLOAD_RESULT" == "cancelled" ]; then
966                    if [ -n "$FAILED_JOBS" ]; then
967                        echo "❌ Release job for $TAG was cancelled, most likely because tests \`$FAILED_JOBS\` failed: $RUN_URL"
968                    else
969                        echo "❌ Release job for $TAG was cancelled: $RUN_URL"
970                    fi
971                else
972                    if [ -n "$FAILED_JOBS" ]; then
973                        echo "❌ Tests \`$FAILED_JOBS\` for $TAG failed: $RUN_URL"
974                    else
975                        echo "❌ Tests for $TAG failed: $RUN_URL"
976                    fi
977                fi
978            elif [ "$COMPLIANCE_RESULT" == "failure" ]; then
979                # We already notify within that job
980                echo ""
981            elif [ "$VALIDATE_RESULT" == "failure" ]; then
982                echo "❌ Release validation failed for $TAG: missing assets: $RUN_URL"
983            elif [ "$AUTO_RELEASE_RESULT" == "failure" ]; then
984                echo "❌ Auto release failed for $TAG: $RUN_URL"
985            elif [ "$AUTO_RELEASE_RESULT" == "success" ] && [ "$AUTO_RELEASE_PUBLISHED" == "true" ]; then
986                echo "✅ Release $TAG was auto-released successfully: $RELEASE_URL"
987            else
988                echo "👀 Release $TAG sitting freshly baked in the oven and waiting to be published: $RELEASE_URL"
989            fi
990        fi
991        )
992        echo "message=$MESSAGE" >> "$GITHUB_OUTPUT"
993      env:
994        GH_TOKEN: ${{ github.token }}
995        DRAFT_RESULT: ${{ needs.create_draft_release.result }}
996        UPLOAD_RESULT: ${{ needs.upload_release_assets.result }}
997        VALIDATE_RESULT: ${{ needs.validate_release_assets.result }}
998        COMPLIANCE_RESULT: ${{ needs.release_compliance_check.result }}
999        AUTO_RELEASE_RESULT: ${{ needs.auto_release_preview.result }}
1000        AUTO_RELEASE_PUBLISHED: ${{ needs.auto_release_preview.outputs.release_published }}
1001        RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
1002        TAG: ${{ github.ref_name }}
1003        RESULT_RUN_TESTS_MAC: ${{ needs.run_tests_mac.result }}
1004        RESULT_RUN_TESTS_LINUX: ${{ needs.run_tests_linux.result }}
1005        RESULT_RUN_TESTS_WINDOWS: ${{ needs.run_tests_windows.result }}
1006        RESULT_CLIPPY_MAC: ${{ needs.clippy_mac.result }}
1007        RESULT_CLIPPY_LINUX: ${{ needs.clippy_linux.result }}
1008        RESULT_CLIPPY_WINDOWS: ${{ needs.clippy_windows.result }}
1009        RESULT_CHECK_SCRIPTS: ${{ needs.check_scripts.result }}
1010        RESULT_BUNDLE_LINUX_AARCH64: ${{ needs.bundle_linux_aarch64.result }}
1011        RESULT_BUNDLE_LINUX_X86_64: ${{ needs.bundle_linux_x86_64.result }}
1012        RESULT_BUILD_STATIC_BWRAP_LINUX_AARCH64: ${{ needs.build_static_bwrap_linux_aarch64.result }}
1013        RESULT_BUILD_STATIC_BWRAP_LINUX_X86_64: ${{ needs.build_static_bwrap_linux_x86_64.result }}
1014        RESULT_BUNDLE_MAC_AARCH64: ${{ needs.bundle_mac_aarch64.result }}
1015        RESULT_BUNDLE_MAC_X86_64: ${{ needs.bundle_mac_x86_64.result }}
1016        RESULT_BUNDLE_WINDOWS_AARCH64: ${{ needs.bundle_windows_aarch64.result }}
1017        RESULT_BUNDLE_WINDOWS_X86_64: ${{ needs.bundle_windows_x86_64.result }}
1018    - name: release::send_slack_message
1019      if: steps.generate-webhook-message.outputs.message != ''
1020      run: 'curl -X POST -H ''Content-type: application/json'' --data "$(jq -n --arg text "$SLACK_MESSAGE" ''{"text": $text}'')" "$SLACK_WEBHOOK"'
1021      env:
1022        SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_WORKFLOW_FAILURES }}
1023        SLACK_MESSAGE: ${{ steps.generate-webhook-message.outputs.message }}
1024concurrency:
1025  group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.ref_name == 'main' && github.sha || 'anysha' }}
1026  cancel-in-progress: true
1027defaults:
1028  run:
1029    shell: bash -euxo pipefail {0}
1030
Served at tenant.openagents/omega Member data and write actions are omitted.