name: Publish Assets

on:
  push:
    branches:
      - main
      - stable
      - release/*
      - precompile-asset-improvements
    tags:
      - beta
      - v*

concurrency:
  group: publish-assets-${{ format('{0}-{1}', github.run_number, github.job) }}
  cancel-in-progress: true

jobs:
  publish-assets:
    if: github.repository == 'discourse/discourse'
    runs-on: 'cdck-linux-8-core'
    container: discourse/discourse_test:release
    timeout-minutes: 30

    steps:
      - name: Install gh cli
        run: |
          # https://github.com/cli/cli/blob/trunk/docs/install_linux.md#debian-ubuntu-linux-raspberry-pi-os-apt
          (type -p wget >/dev/null || (sudo apt update && sudo apt install wget -y)) \
            && sudo mkdir -p -m 755 /etc/apt/keyrings \
            && out=$(mktemp) && wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg \
            && cat $out | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
            && sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
            && sudo mkdir -p -m 755 /etc/apt/sources.list.d \
            && echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
            && sudo apt update \
            && sudo apt install gh -y
      - name: Set working directory owner
        run: chown root:root .

      - uses: actions/checkout@v6
        with:
          fetch-depth: 1

      - name: Setup Git
        run: |
          git config --global user.email "ci@ci.invalid"
          git config --global user.name "Discourse CI"

      - name: Symlink vendor/bundle from image
        run: |
          ln -s /var/www/discourse/vendor/bundle vendor/bundle

      - name: Setup gems
        run: |
          bundle config --local path vendor/bundle
          bundle config --local deployment true
          bundle config --local without development
          bundle install --jobs $(($(nproc) - 1))
          bundle clean

      - name: pnpm install
        run: pnpm install --frozen-lockfile

      - name: build and release assets
        env:
          GITHUB_TOKEN: ${{ secrets.DISCOURSE_ASSETS_RELEASE_TOKEN }}
        run: |
          script/publish_built_assets.rb
