Estos días he estado jugando a automatizar unos despliegues donde necesitaba que el proceso de generación de la release fuera GitHub Actions quien lo hiciera por mí. En este artículo te comparto el flujo que he utilizado, el cuál solo tienes que modificar ligeramente dependiendo del lenguaje, por si a ti también te ayuda.
Flujo de generación de releases con GitHub Actions
Normalmente una release parte de una nueva etiqueta generada con cierto formato, como por ejemplo SemVer. En base a este lanzo el siguiente flujo:
name: Generate Angular release
on:
push:
tags:
- "[0-9]+.[0-9]+.[0-9]+*"
env:
NODE_VERSION: 18.x
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
cache: "npm"
- run: npm ci
- run: npm run build --if-present
- name: Zip dist
run: cd dist/angular-tour-of-heroes ; zip -r ../../dist.zip . * ; cd ../../
- name: Check package version
uses: technote-space/package-version-check-action@v1
- name: Build changelog
id: build_changelog
uses: mikepenz/release-changelog-builder-action@main
with:
configuration: "release-changelog-builder-config.json"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create Release
id: create_release
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
body: ${{steps.build_changelog.outputs.changelog}}
draft: false
prerelease: false
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./dist.zip
asset_name: "dist.zip"
asset_content_type: application/zip
En este caso es un ejemplo con un proyecto en Node.js (Angular de hecho), pero en el caso de .NET sería bastante similar:
name: Generate .NET release
on:
push:
tags:
- "[0-9]+.[0-9]+.[0-9]+*"
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: dotnet restore
- run: dotnet build --configuration Release
- run: ls -la
- name: Zip dist
run: cd bin/Release/net7.0/ ; zip -r ../../../drop.zip . * ; cd ../../../
- name: Check package version
uses: technote-space/package-version-check-action@v1
- name: Build changelog
id: build_changelog
uses: mikepenz/release-changelog-builder-action@main
with:
configuration: "release-changelog-builder-config.json"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create Release
id: create_release
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
body: ${{steps.build_changelog.outputs.changelog}}
draft: false
prerelease: false
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./drop.zip
asset_name: "drop.zip"
asset_content_type: application/zip
¡Saludos!