name: Release Build
on:
  push:
    tags:
      - v*

jobs:
  create-docker-image:
    runs-on: ubuntu-latest
    container:
      image: docker:28.3.2-dind
    steps:
      - name: Checkout repository
        run: |
          # Install git
          apk add --no-cache git
          
          echo "=== GitHub Variables ==="
          echo "github.ref = ${{ github.ref }}"
          echo "github.ref_name = ${{ github.ref_name }}"
          echo "github.sha = ${{ github.sha }}"
          echo "github.repository = ${{ github.repository }}"
          echo "========================"
          git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
          cd hello_gitea
          git checkout ${{ github.ref }}

      - name: Setup Docker Buildx
        run: |
          # Docker is already installed in docker:dind image
          docker --version

          # Setup Docker Buildx for multi-platform builds
          docker buildx create --use
          docker buildx inspect --bootstrap

      - name: Login to Docker Hub
        run: |
          echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin

      - name: Build multi-platform Docker images
        run: |
          cd hello_gitea
          # Build multi-platform images using buildx
          docker buildx build \
            --platform linux/amd64,linux/arm64 \
            --tag ${{ secrets.DOCKERHUB_USERNAME }}/hello-api:${{ github.ref_name }} \
            --tag ${{ secrets.DOCKERHUB_USERNAME }}/hello-api:latest \
            --push \
            .

  create-release:
    runs-on: ubuntu-latest
    container:
      # image: golang:1.21
      image: ${DOCKERHUB_USERNAME}/my-build-golang-runner:latest
    needs: create-docker-image
    steps:
      - name: Checkout repository
        run: |
          git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
          cd hello_gitea
          git checkout ${{ github.ref }}

      - name: Setup Go
        run: |
          # Install jq for JSON parsing
          apt-get update && apt-get install -y jq
          git --version
          go version
          jq --version

      - name: Build all binaries
        run: |
          cd hello_gitea
          mkdir -p bin

          # Build for all platforms
          GOOS=linux GOARCH=amd64 go build -o bin/hello-api-linux-amd64 main.go
          GOOS=linux GOARCH=arm64 go build -o bin/hello-api-linux-arm64 main.go
          GOOS=windows GOARCH=amd64 go build -o bin/hello-api-windows-amd64.exe main.go
          GOOS=darwin GOARCH=amd64 go build -o bin/hello-api-darwin-amd64 main.go
          GOOS=darwin GOARCH=arm64 go build -o bin/hello-api-darwin-arm64 main.go

          # Create archives
          cd bin
          tar -czf hello-api-linux-amd64.tar.gz hello-api-linux-amd64
          tar -czf hello-api-linux-arm64.tar.gz hello-api-linux-arm64
          tar -czf hello-api-windows-amd64.tar.gz hello-api-windows-amd64.exe
          tar -czf hello-api-darwin-amd64.tar.gz hello-api-darwin-amd64
          tar -czf hello-api-darwin-arm64.tar.gz hello-api-darwin-arm64

          ls -la

      - name: Create Release
        run: |
          cd hello_gitea
          # Create release using Gitea API
          curl -X POST \
            -H "Authorization: token ${{ secrets.GITEATOKEN }}" \
            -H "Content-Type: application/json" \
            -d '{
              "tag_name": "${{ github.ref_name }}",
              "name": "Release ${{ github.ref_name }}",
              "body": "Automated release with multi-platform binaries and Docker image",
              "draft": false,
              "prerelease": false
            }' \
            "https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases"

          # Upload assets
          RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.GITEATOKEN }}" \
            "https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/tags/${{ github.ref_name }}" | \
            jq -r '.id')

          # Upload all binaries
          for file in bin/*.tar.gz; do
            echo "Uploading $file..."
            curl -X POST \
              -H "Authorization: token ${{ secrets.GITEATOKEN }}" \
              -H "Content-Type: application/octet-stream" \
              --data-binary @$file \
              "https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/$RELEASE_ID/assets?name=$(basename $file)"
          done
