name: Release on: push: tags: - 'v*' # Se activa solo con tags como v1.0.0, v2.1.3, etc. jobs: build: runs-on: ubuntu-latest strategy: matrix: include: - goos: linux goarch: amd64 suffix: "" - goos: linux goarch: arm64 suffix: "" - goos: windows goarch: amd64 suffix: ".exe" - goos: darwin goarch: amd64 suffix: "" - goos: darwin goarch: arm64 suffix: "" steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 # necesario para git describe - name: Setup Go uses: actions/setup-go@v5 with: go-version: '1.22' cache: true - name: Compilar env: GOOS: ${{ matrix.goos }} GOARCH: ${{ matrix.goarch }} CGO_ENABLED: 0 run: | # Nombre del binario: app-linux-amd64, app-windows-amd64.exe, etc. BINARY_NAME="app-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.suffix }}" go build \ -ldflags="-w -s \ -X main.version=${{ gitea.ref_name }} \ -X main.commit=${{ gitea.sha }} \ -X main.buildDate=$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ -o "dist/${BINARY_NAME}" \ ./cmd/main.go - name: Comprimir artefacto run: | cd dist BINARY_NAME="app-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.suffix }}" if [ "${{ matrix.goos }}" = "windows" ]; then zip "${BINARY_NAME%.exe}.zip" "${BINARY_NAME}" else tar -czf "${BINARY_NAME}.tar.gz" "${BINARY_NAME}" fi - name: Subir artefacto temporal uses: actions/upload-artifact@v4 with: name: bin-${{ matrix.goos }}-${{ matrix.goarch }} path: dist/*.tar.gz retention-days: 1 release: runs-on: ubuntu-latest needs: build # espera que todos los builds terminen steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Descargar todos los artefactos uses: actions/download-artifact@v4 with: path: dist/ merge-multiple: true - name: Generar changelog desde commits id: changelog run: | # Obtener tag anterior PREV_TAG=$(git tag --sort=-version:refname | sed -n '2p') if [ -z "$PREV_TAG" ]; then CHANGES=$(git log --pretty=format:"- %s (%h)" | head -20) else CHANGES=$(git log "${PREV_TAG}..${{ gitea.ref_name }}" \ --pretty=format:"- %s (%h)") fi # Guardar en archivo para el siguiente paso echo "${CHANGES}" > changelog.txt echo "prev_tag=${PREV_TAG}" >> $GITEA_OUTPUT - name: Crear checksums run: | cd dist sha256sum *.tar.gz *.zip 2>/dev/null > checksums.txt || \ sha256sum *.tar.gz > checksums.txt cat checksums.txt - name: Crear Release en Gitea uses: https://gitea.com/actions/gitea-release-action@v1 with: token: ${{ secrets.RELEASE_TOKEN }} tag_name: ${{ gitea.ref_name }} name: "Release ${{ gitea.ref_name }}" body_path: changelog.txt files: | dist/*.tar.gz dist/*.zip dist/checksums.txt