1name: Release Nightly
2
3on:
4 schedule:
5 # Fire every day at 7:00am UTC (Roughly before EU workday and after US workday)
6 - cron: "0 7 * * *"
7 push:
8 tags:
9 - "nightly"
10
11env:
12 CARGO_TERM_COLOR: always
13 CARGO_INCREMENTAL: 0
14 RUST_BACKTRACE: 1
15
16jobs:
17 style:
18 timeout-minutes: 60
19 name: Check formatting and Clippy lints
20 if: github.repository_owner == 'zed-industries'
21 runs-on:
22 - self-hosted
23 - test
24 steps:
25 - name: Checkout repo
26 uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
27 with:
28 clean: false
29 fetch-depth: 0
30
31 - name: Run style checks
32 uses: ./.github/actions/check_style
33
34 - name: Run clippy
35 run: ./script/clippy
36
37 tests:
38 timeout-minutes: 60
39 name: Run tests
40 if: github.repository_owner == 'zed-industries'
41 runs-on:
42 - self-hosted
43 - test
44 needs: style
45 steps:
46 - name: Checkout repo
47 uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
48 with:
49 clean: false
50
51 - name: Run tests
52 uses: ./.github/actions/run_tests
53
54 bundle-mac:
55 timeout-minutes: 60
56 name: Create a macOS bundle
57 if: github.repository_owner == 'zed-industries'
58 runs-on:
59 - self-hosted
60 - bundle
61 needs: tests
62 env:
63 MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }}
64 MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
65 APPLE_NOTARIZATION_USERNAME: ${{ secrets.APPLE_NOTARIZATION_USERNAME }}
66 APPLE_NOTARIZATION_PASSWORD: ${{ secrets.APPLE_NOTARIZATION_PASSWORD }}
67 DIGITALOCEAN_SPACES_ACCESS_KEY: ${{ secrets.DIGITALOCEAN_SPACES_ACCESS_KEY }}
68 DIGITALOCEAN_SPACES_SECRET_KEY: ${{ secrets.DIGITALOCEAN_SPACES_SECRET_KEY }}
69 ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
70 steps:
71 - name: Install Node
72 uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4
73 with:
74 node-version: "18"
75
76 - name: Checkout repo
77 uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
78 with:
79 clean: false
80
81 - name: Set release channel to nightly
82 run: |
83 set -eu
84 version=$(git rev-parse --short HEAD)
85 echo "Publishing version: ${version} on release channel nightly"
86 echo "nightly" > crates/zed/RELEASE_CHANNEL
87
88 - name: Generate license file
89 run: script/generate-licenses
90
91 - name: Create macOS app bundle
92 run: script/bundle-mac
93
94 - name: Upload Zed Nightly
95 run: script/upload-nightly macos
96
97 bundle-linux-x86:
98 timeout-minutes: 60
99 name: Create a Linux *.tar.gz bundle for x86
100 if: github.repository_owner == 'zed-industries'
101 runs-on:
102 - self-hosted
103 - deploy
104 needs: tests
105 env:
106 DIGITALOCEAN_SPACES_ACCESS_KEY: ${{ secrets.DIGITALOCEAN_SPACES_ACCESS_KEY }}
107 DIGITALOCEAN_SPACES_SECRET_KEY: ${{ secrets.DIGITALOCEAN_SPACES_SECRET_KEY }}
108 ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
109 steps:
110 - name: Checkout repo
111 uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
112 with:
113 clean: false
114
115 - name: Add Rust to the PATH
116 run: echo "$HOME/.cargo/bin" >> $GITHUB_PATH
117
118 - name: Set release channel to nightly
119 run: |
120 set -euo pipefail
121 version=$(git rev-parse --short HEAD)
122 echo "Publishing version: ${version} on release channel nightly"
123 echo "nightly" > crates/zed/RELEASE_CHANNEL
124
125 - name: Create Linux .tar.gz bundle
126 run: script/bundle-linux
127
128 - name: Upload Zed Nightly
129 run: script/upload-nightly linux-targz
130
131 bundle-linux-arm:
132 timeout-minutes: 60
133 name: Create a Linux *.tar.gz bundle for ARM
134 if: github.repository_owner == 'zed-industries'
135 runs-on:
136 - hosted-linux-arm-1
137 needs: tests
138 env:
139 DIGITALOCEAN_SPACES_ACCESS_KEY: ${{ secrets.DIGITALOCEAN_SPACES_ACCESS_KEY }}
140 DIGITALOCEAN_SPACES_SECRET_KEY: ${{ secrets.DIGITALOCEAN_SPACES_SECRET_KEY }}
141 ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
142 steps:
143 - name: Checkout repo
144 uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
145 with:
146 clean: false
147
148 - name: "Setup jq"
149 uses: dcarbone/install-jq-action@8867ddb4788346d7c22b72ea2e2ffe4d514c7bcb # v2
150
151 - name: Set up Clang
152 run: |
153 sudo apt-get update
154 sudo apt-get install -y llvm-10 clang-10 build-essential cmake pkg-config libasound2-dev libfontconfig-dev libwayland-dev libxkbcommon-x11-dev libssl-dev libsqlite3-dev libzstd-dev libvulkan1 libgit2-dev
155 echo "/usr/lib/llvm-10/bin" >> $GITHUB_PATH
156
157 - uses: rui314/setup-mold@2e332a0b602c2fc65d2d3995941b1b29a5f554a0 # v1
158 with:
159 mold-version: 2.32.0
160
161 - name: rustup
162 run: |
163 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
164 echo "$HOME/.cargo/bin" >> $GITHUB_PATH
165
166 - name: Limit target directory size
167 run: script/clear-target-dir-if-larger-than 100
168
169 - name: Set release channel to nightly
170 run: |
171 set -euo pipefail
172 version=$(git rev-parse --short HEAD)
173 echo "Publishing version: ${version} on release channel nightly"
174 echo "nightly" > crates/zed/RELEASE_CHANNEL
175
176 - name: Create Linux .tar.gz bundle
177 run: script/bundle-linux
178
179 - name: Upload Zed Nightly
180 run: script/upload-nightly linux-targz