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@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@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@v4
73 with:
74 node-version: "18"
75
76 - name: Checkout repo
77 uses: actions/checkout@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: Build macOS remote server binaries
95 run: script/build-remote-server x86_64 aarch64
96
97 - name: Upload Zed Nightly
98 run: script/upload-nightly macos
99
100 bundle-linux-x86:
101 timeout-minutes: 60
102 name: Create a Linux *.tar.gz bundle for x86
103 if: github.repository_owner == 'zed-industries'
104 runs-on:
105 - self-hosted
106 - deploy
107 needs: tests
108 env:
109 DIGITALOCEAN_SPACES_ACCESS_KEY: ${{ secrets.DIGITALOCEAN_SPACES_ACCESS_KEY }}
110 DIGITALOCEAN_SPACES_SECRET_KEY: ${{ secrets.DIGITALOCEAN_SPACES_SECRET_KEY }}
111 ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
112 steps:
113 - name: Checkout repo
114 uses: actions/checkout@v4
115 with:
116 clean: false
117
118 - name: Add Rust to the PATH
119 run: echo "$HOME/.cargo/bin" >> $GITHUB_PATH
120
121 - name: Set release channel to nightly
122 run: |
123 set -euo pipefail
124 version=$(git rev-parse --short HEAD)
125 echo "Publishing version: ${version} on release channel nightly"
126 echo "nightly" > crates/zed/RELEASE_CHANNEL
127
128 - name: Create Linux .tar.gz bundle
129 run: script/bundle-linux
130
131 - name: Upload Zed Nightly
132 run: script/upload-nightly linux-targz
133
134 bundle-linux-arm:
135 timeout-minutes: 60
136 name: Create a Linux *.tar.gz bundle for ARM
137 if: github.repository_owner == 'zed-industries'
138 runs-on:
139 - self-hosted
140 - hosted-linux-arm-1
141 needs: tests
142 env:
143 DIGITALOCEAN_SPACES_ACCESS_KEY: ${{ secrets.DIGITALOCEAN_SPACES_ACCESS_KEY }}
144 DIGITALOCEAN_SPACES_SECRET_KEY: ${{ secrets.DIGITALOCEAN_SPACES_SECRET_KEY }}
145 ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
146 steps:
147 - name: Checkout repo
148 uses: actions/checkout@v4
149 with:
150 clean: false
151
152 - name: "Setup jq"
153 uses: dcarbone/install-jq-action@v2
154
155 - name: Set up Clang
156 run: |
157 sudo apt-get update
158 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
159 echo "/usr/lib/llvm-10/bin" >> $GITHUB_PATH
160
161 - uses: rui314/setup-mold@v1
162 with:
163 mold-version: 2.32.0
164
165 - name: rustup
166 run: |
167 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
168 echo "$HOME/.cargo/bin" >> $GITHUB_PATH
169
170 - name: Limit target directory size
171 run: script/clear-target-dir-if-larger-than 100
172
173 - name: Set release channel to nightly
174 run: |
175 set -euo pipefail
176 version=$(git rev-parse --short HEAD)
177 echo "Publishing version: ${version} on release channel nightly"
178 echo "nightly" > crates/zed/RELEASE_CHANNEL
179
180 - name: Create Linux .tar.gz bundle
181 run: script/bundle-linux
182
183 - name: Upload Zed Nightly
184 run: script/upload-nightly linux-targz