name: Release Build on: push: tags: - v* jobs: build-binaries: runs-on: ubuntu-latest container: image: golang:1.21 strategy: matrix: include: - os: linux arch: amd64 suffix: linux-amd64 - os: linux arch: arm64 suffix: linux-arm64 - os: windows arch: amd64 suffix: windows-amd64.exe - os: darwin arch: amd64 suffix: darwin-amd64 - os: darwin arch: arm64 suffix: darwin-arm64 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 for ${{ matrix.os }}-${{ matrix.arch }} run: | cd hello_gitea mkdir -p bin GOOS=${{ matrix.os }} GOARCH=${{ matrix.arch }} go build -o bin/hello-api-${{ matrix.suffix }} main.go ls -la bin/ - name: Upload artifact run: | cd hello_gitea/bin tar -czf hello-api-${{ matrix.suffix }}.tar.gz hello-api-${{ matrix.suffix }} echo "Built: hello-api-${{ matrix.suffix }}.tar.gz" create-docker-image: runs-on: ubuntu-latest container: image: golang:1.21 needs: build-binaries 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 Docker run: | # Install Docker CLI apt-get update && apt-get install -y docker.io docker --version - name: Build Docker image run: | cd hello_gitea # Build image using existing Dockerfile docker build -t hello-api:${{ github.ref_name }} . docker tag hello-api:${{ github.ref_name }} hello-api:latest - name: Login to Docker Hub run: | echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin - name: Push to Docker Hub run: | cd hello_gitea docker push ${{ secrets.DOCKERHUB_USERNAME }}/hello-api:${{ github.ref_name }} docker push ${{ secrets.DOCKERHUB_USERNAME }}/hello-api:latest create-release: runs-on: ubuntu-latest container: image: golang:1.21 needs: [build-binaries, 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