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