release_nightly.yml

  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