name: Release Build

on:
  push:
    tags:
      - 'v*'
    branches:
      - ci-test

jobs:
  test-and-build:
    runs-on: ubuntu-latest
    steps:
      - name: Setup SSH
        run: |
          mkdir ~/.ssh
          chmod 700 ~/.ssh
          echo "${{ secrets.ALTAIR_SSH_KEY }}" > ~/.ssh/id_ed25519
          chmod 600 ~/.ssh/id_ed25519
          ssh-keyscan -p 999 tehga.me >> ~/.ssh/known_hosts
          ssh-keyscan -p 999 doradus.tehga.me >> ~/.ssh/known_hosts

      - name: Checkout
        run: git clone --depth 1 ssh://gitea@tehga.me:999/wasp/quicknotes.git --branch main --single-branch /workdir

      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.24'
          cache: true

      - name: Setup Bun
        uses: oven-sh/setup-bun@v1
        with:
          bun-version: latest

      - name: Install Playwright Browsers
        working-directory: /workdir/frontend
        run: bun test:install

      - name: Install golangci-lint
        run: |
          curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.55.2
          golangci-lint --version

      - name: Run Pre-commit Checks
        working-directory: /workdir
        run: |
          chmod +x scripts/pre-commit.sh
          ./scripts/pre-commit.sh

      - name: Optimize Frontend Build
        working-directory: /workdir/frontend
        run: |
          bun install
          NODE_ENV=production bun run build

      - name: Build Backend (Release Mode)
        working-directory: /workdir
        run: |
          go build -ldflags="-s -w" -o notes-app

      - name: Package Release
        working-directory: /workdir
        run: |
          mkdir -p release
          cp notes-app release/
          cp -r frontend/build release/frontend/
          cp -r static release/
          tar czf quicknotes.tar.gz release/

      - name: Create Release
        if: startsWith(github.ref, 'refs/tags/')
        uses: softprops/action-gh-release@v1
        with:
          files: /workdir/quicknotes.tar.gz
          draft: false
          prerelease: false

      - name: Upload Build Artifact
        uses: actions/upload-artifact@v4
        with:
          name: quicknotes
          path: /workdir/quicknotes.tar.gz