name: Release
on:
  workflow_dispatch:
    inputs:
      version:
        description: The version to release (e.g. v1.0.0)
        required: true
        type: string

jobs:
  release:
    name: Release
    permissions:
      contents: write
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - uses: actions/setup-go@v5
        with:
          go-version: 1.22.x
      - run: go mod download
      - run: go install github.com/a-h/templ/cmd/templ@v0.2.771
      - name: Generate Templ Files
        run: make generate-templ
      - name: Generate CSS
        run: |
          curl -sLO https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-linux-x64
          chmod +x tailwindcss-linux-x64
          mv tailwindcss-linux-x64 tailwindcss
          ./tailwindcss -i ./styles/input.css -o ./dist/assets/css/output@${{ github.event.inputs.version }}.css --minify
      - uses: sqlc-dev/setup-sqlc@v4
        with:
          sqlc-version: '1.27.0' 
      - run: sqlc generate
      - name: Build Application
        run: go build -o ./app -ldflags="-s -w -X version.Value=${{ github.event.inputs.version }}"
      - name: Create Tag
        uses: piszmog/create-tag@v1
        with:
          version: ${{ github.event.inputs.version }}
          token: ${{ secrets.GITHUB_TOKEN }}
      - name: Release
        uses: softprops/action-gh-release@v2
        with:
          name: ${{ github.event.inputs.version }}
          tag_name: ${{ github.event.inputs.version }}
          generate_release_notes: true
          files: app
  publish:
    name: Publish Docker
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    needs:
      - release
    steps:
      - uses: actions/checkout@v4
      - uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - uses: docker/metadata-action@v5
        id: meta
        with:
          images: ghcr.io/piszmog/my-app
          tags: |
            type=raw,value=${{ github.event.inputs.version }}
      - uses: docker/build-push-action@v5
        with:
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
          build-args: |
            VERSION=$${{ github.event.inputs.version }}
