name: Push

on:
  push:
    branches: [main]

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: https://git.keligrubb.com/actions/checkout@v7
        with:
          token: ${{ secrets.KESTRELOS_REPO_TOKEN }}

      - name: Get PR description for changelog
        env:
          GITEA_REPO_TOKEN: ${{ secrets.KESTRELOS_REPO_TOKEN }}
        run: |
          sudo rm -f /etc/apt/sources.list.d/microsoft*.list /etc/apt/sources.list.d/azure*.list 2>/dev/null || true
          sudo apt-get update -qq && sudo apt-get install -y -qq jq
          RESP=$(curl -sf -H "Authorization: token $GITEA_REPO_TOKEN" \
            "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/commits/${{ github.sha }}/pull") || true
          if [ -n "$RESP" ]; then
            echo "$RESP" | jq -r '.body // empty' > .ci_pr_body 2>/dev/null || true
          fi

      - name: Release (bump, tag, push, create release)
        env:
          CI_REPO_OWNER: ${{ github.actor }}
          CI_REPO_NAME: ${{ github.event.repository.name }}
          CI_FORGE_URL: ${{ github.server_url }}
          CI_COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
          GITEA_REPO_TOKEN: ${{ secrets.KESTRELOS_REPO_TOKEN }}
        run: |
          sudo rm -f /etc/apt/sources.list.d/microsoft*.list /etc/apt/sources.list.d/azure*.list 2>/dev/null || true
          sudo apt-get update -qq && sudo apt-get install -y -qq git wget
          ./scripts/release.sh

  publish:
    needs: release
    runs-on: ubuntu-latest
    steps:
      - uses: https://git.keligrubb.com/actions/checkout@v7
        with:
          ref: main
          token: ${{ secrets.KESTRELOS_REPO_TOKEN }}

      - name: Log in to container registry
        uses: https://git.keligrubb.com/actions/docker-login-action@v4
        with:
          registry: git.keligrubb.com
          username: ${{ github.actor }}
          password: ${{ secrets.KESTRELOS_REPO_TOKEN }}

      - name: Set up Docker Buildx
        uses: https://git.keligrubb.com/actions/docker-setup-buildx-action@v4

      - name: Build Docker image
        uses: https://git.keligrubb.com/actions/docker-build-push-action@v7
        with:
          context: .
          load: true
          tags: kestrelos:built

      - name: Push Docker image (version + latest)
        run: |
          VERSION=$(awk '/"version"/ { match($0, /[0-9]+\.[0-9]+\.[0-9]+/); print substr($0, RSTART, RLENGTH); exit }' package.json)
          case "$VERSION" in
            [0-9]*.[0-9]*.[0-9]*) ;;
            *) echo "error: package.json version must be x.y.z (got: $VERSION)"; exit 1 ;;
          esac
          REGISTRY="git.keligrubb.com"
          IMAGE="$REGISTRY/${{ github.repository }}"
          for tag in "$VERSION" latest; do
            docker tag kestrelos:built "$IMAGE:$tag"
            docker push "$IMAGE:$tag"
          done

      - name: Set up Helm
        uses: https://git.keligrubb.com/actions/setup-helm@v5

      - name: Package and push Helm chart
        env:
          GITEA_REPO_TOKEN: ${{ secrets.KESTRELOS_REPO_TOKEN }}
        run: |
          helm package helm/kestrelos
          for f in kestrelos-*.tgz; do
            curl -sf -u "${{ github.actor }}:$GITEA_REPO_TOKEN" -X POST --upload-file "$f" \
              "${{ github.server_url }}/api/packages/${{ github.actor }}/helm/api/charts"
          done
