name: Release Nightly

on:
  schedule:
    # Fire every day at 7:00am UTC (Roughly before EU workday and after US workday)
    - cron: "0 7 * * *"
  push:
    tags:
      - "nightly"

env:
  CARGO_TERM_COLOR: always
  CARGO_INCREMENTAL: 0
  RUST_BACKTRACE: 1

jobs:
  style:
    timeout-minutes: 60
    name: Check formatting and Clippy lints
    if: github.repository_owner == 'zed-industries'
    runs-on:
      - self-hosted
      - test
    steps:
      - name: Checkout repo
        uses: actions/checkout@v4
        with:
          clean: false
          fetch-depth: 0

      - name: Run style checks
        uses: ./.github/actions/check_style

      - name: Run clippy
        run: ./script/clippy
  tests:
    timeout-minutes: 60
    name: Run tests
    if: github.repository_owner == 'zed-industries'
    runs-on:
      - self-hosted
      - test
    needs: style
    steps:
      - name: Checkout repo
        uses: actions/checkout@v4
        with:
          clean: false

      - name: Run tests
        uses: ./.github/actions/run_tests

  bundle-mac:
    timeout-minutes: 60
    name: Create a macOS bundle
    if: github.repository_owner == 'zed-industries'
    runs-on:
      - self-hosted
      - bundle
    needs: tests
    env:
      MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }}
      MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
      APPLE_NOTARIZATION_USERNAME: ${{ secrets.APPLE_NOTARIZATION_USERNAME }}
      APPLE_NOTARIZATION_PASSWORD: ${{ secrets.APPLE_NOTARIZATION_PASSWORD }}
      DIGITALOCEAN_SPACES_ACCESS_KEY: ${{ secrets.DIGITALOCEAN_SPACES_ACCESS_KEY }}
      DIGITALOCEAN_SPACES_SECRET_KEY: ${{ secrets.DIGITALOCEAN_SPACES_SECRET_KEY }}
      ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
    steps:
      - name: Install Node
        uses: actions/setup-node@v4
        with:
          node-version: "18"

      - name: Checkout repo
        uses: actions/checkout@v4
        with:
          clean: false

      - name: Set release channel to nightly
        run: |
          set -eu
          version=$(git rev-parse --short HEAD)
          echo "Publishing version: ${version} on release channel nightly"
          echo "nightly" > crates/zed/RELEASE_CHANNEL

      - name: Generate license file
        run: script/generate-licenses

      - name: Create macOS app bundle
        run: script/bundle-mac

      - name: Upload Zed Nightly
        run: script/upload-nightly macos

  bundle-deb:
    timeout-minutes: 60
    name: Create a Linux *.tar.gz bundle
    if: github.repository_owner == 'zed-industries'
    runs-on:
      - self-hosted
      - deploy
    needs: tests
    env:
      DIGITALOCEAN_SPACES_ACCESS_KEY: ${{ secrets.DIGITALOCEAN_SPACES_ACCESS_KEY }}
      DIGITALOCEAN_SPACES_SECRET_KEY: ${{ secrets.DIGITALOCEAN_SPACES_SECRET_KEY }}
      ZED_CLIENT_CHECKSUM_SEED: ${{ secrets.ZED_CLIENT_CHECKSUM_SEED }}
    steps:
      - name: Checkout repo
        uses: actions/checkout@v4
        with:
          clean: false

      - name: Add Rust to the PATH
        run: echo "$HOME/.cargo/bin" >> $GITHUB_PATH

      - name: Set release channel to nightly
        run: |
          set -euo pipefail
          version=$(git rev-parse --short HEAD)
          echo "Publishing version: ${version} on release channel nightly"
          echo "nightly" > crates/zed/RELEASE_CHANNEL

      - name: Generate license file
        run: script/generate-licenses

      - name: Create Linux .tar.gz bundle
        run: script/bundle-linux

      - name: Upload Zed Nightly
        run: script/upload-nightly linux-targz
