name: basebuild

on:
  pull_request:
  push:

jobs:
  goreleaser:
    runs-on: ubuntu-latest
    env:
      flags: ""
    steps:
      # re-enable auto-snapshot from goreleaser-action@v3
      # (https://github.com/goreleaser/goreleaser-action-v4-auto-snapshot-example)
      - if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
        run: echo "flags=--snapshot" >> $GITHUB_ENV

      - name: Checkout
        uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Set up Node.js
        uses: actions/setup-node@v6
        with:
          node-version: '>=25.2.1'

      - name: Set up Go
        uses: actions/setup-go@v6
        with:
          go-version: '>=1.26.5'

      # This step usually is not needed because the /ui/dist is pregenerated locally
      # but its here to ensure that each release embeds the latest admin ui artifacts.
      # If the artificats differs, a "dirty error" is thrown - https://goreleaser.com/errors/dirty/
      - name: Build Admin dashboard UI
        run: npm --prefix=./ui ci && npm --prefix=./ui run build

      # Temporary disable as the types can have random generated identifiers making it non-deterministic.
      #
      # # Similar to the above, the jsvm types are pregenerated locally
      # # but its here to ensure that it wasn't forgotten to be executed.
      # - name: Generate jsvm types
      #   run: go run ./plugins/jsvm/internal/types/types.go

      - name: Run tests
        run: go test ./...

      - name: Run GoReleaser
        uses: goreleaser/goreleaser-action@v6
        with:
          distribution: goreleaser
          version: '~> v2'
          args: release --clean ${{ env.flags }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
