From 258b1b0a0bb8bb32e88db7fb43bfd52f9fbb838c Mon Sep 17 00:00:00 2001 From: Daniel Arroyo Date: Tue, 31 Mar 2026 00:18:20 -0300 Subject: [PATCH] actions --- .gitea/workflows/release.yml | 127 +++++++++++++++++++++++++++++++++++ README.md | 34 ++++++++++ 2 files changed, 161 insertions(+) create mode 100644 .gitea/workflows/release.yml diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..c706306 --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,127 @@ +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 \ No newline at end of file diff --git a/README.md b/README.md index 29f2d94..22aa120 100644 --- a/README.md +++ b/README.md @@ -220,3 +220,37 @@ DOC_ID=$(./claudia-docs doc create -t "Report" -c "# Content" -p $PROJECT_ID --o ./claudia-docs auth --help ./claudia-docs doc --help ``` + + + + + +--- + +# En tu máquina local +git tag v1.0.0 +git push origin v1.0.0 +``` + +--- + +### Secret necesario + +En **Settings → Secrets → Actions** de tu repo: + +| Secret | Cómo obtenerlo | +|---|---| +| `RELEASE_TOKEN` | Gitea → Settings → Applications → Generate Token (con permiso `write:repository`) | + +--- + +### Estructura esperada del proyecto +``` +mi-proyecto/ +├── cmd/ +│ └── main.go ← entrypoint +├── go.mod +├── go.sum +└── .gitea/ + └── workflows/ + └── release.yml \ No newline at end of file