🚀 Release v1.6.2 #25
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release Workflow | |
| on: | |
| push: | |
| branches: | |
| - "release/**" | |
| pull_request: | |
| types: [closed] | |
| branches: | |
| - main | |
| defaults: | |
| run: | |
| shell: bash | |
| concurrency: | |
| group: release-workflow-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| open-pr-to-main: | |
| name: Open PR (release -> main) | |
| if: github.event_name == 'push' && startsWith(github.ref_name, 'release/') | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Check if PR already exists | |
| id: check-pr | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| HEAD_BRANCH="${{ github.ref_name }}" | |
| PR_EXISTS=$(gh pr list --head "$HEAD_BRANCH" --base main --json number --jq 'length') | |
| echo "pr_exists=$PR_EXISTS" >> "$GITHUB_OUTPUT" | |
| if [ "$PR_EXISTS" -gt 0 ]; then | |
| PR_NUMBER=$(gh pr list --head "$HEAD_BRANCH" --base main --json number --jq '.[0].number') | |
| echo "pr_number=$PR_NUMBER" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Create PR to main | |
| if: steps.check-pr.outputs.pr_exists == '0' | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| HEAD_BRANCH="${{ github.ref_name }}" | |
| VERSION="${HEAD_BRANCH#release/v}" | |
| gh pr create \ | |
| --base main \ | |
| --head "$HEAD_BRANCH" \ | |
| --title "🚀 Release v${VERSION}" \ | |
| --body "## 🚀 Release v${VERSION} | |
| ### ⚙️ Release Configuration | |
| **Escolha o tipo de release editando abaixo:** | |
| Release Type: [lts] | |
| **Opções válidas:** | |
| - \`alpha\` - Release alpha (instável, desenvolvimento) | |
| - \`beta\` - Release beta (pré-release, testes) | |
| - \`lts\` - Release estável de longo prazo (produção) | |
| --- | |
| _PR criado automaticamente pelo release-workflow_" \ | |
| --draft | |
| - name: PR already exists | |
| if: steps.check-pr.outputs.pr_exists != '0' | |
| run: | | |
| echo "ℹ️ PR já existe (#${{ steps.check-pr.outputs.pr_number }}) para ${{ github.ref_name }} -> main" | |
| create-release: | |
| name: Create GitHub Release (on merge) | |
| if: github.event_name == 'pull_request' && github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release/') | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.merge_commit_sha }} | |
| - name: Extract version and release type | |
| id: extract | |
| env: | |
| PR_BODY: ${{ github.event.pull_request.body }} | |
| run: | | |
| BRANCH_NAME="${{ github.event.pull_request.head.ref }}" | |
| VERSION="${BRANCH_NAME#release/v}" | |
| echo "version=$VERSION" >> "$GITHUB_OUTPUT" | |
| PR_BODY_CLEAN=$(printf '%s' "$PR_BODY" | tr -d '\r') | |
| RELEASE_TYPE=$(printf '%s' "$PR_BODY_CLEAN" | grep -oP 'Release Type:\s*\[\K(alpha|beta|lts)(?=\])' || true) | |
| if [ -z "$RELEASE_TYPE" ]; then | |
| RELEASE_TYPE=$(printf '%s' "$PR_BODY_CLEAN" | grep -oP 'Release Type:\s*\K(alpha|beta|lts)' || echo "lts") | |
| fi | |
| echo "release_type=$RELEASE_TYPE" >> "$GITHUB_OUTPUT" | |
| if [ "$RELEASE_TYPE" = "lts" ]; then | |
| FULL_TAG="v${VERSION}" | |
| else | |
| FULL_TAG="v${VERSION}-${RELEASE_TYPE}" | |
| fi | |
| echo "full_tag=$FULL_TAG" >> "$GITHUB_OUTPUT" | |
| echo "✅ Version: $VERSION" | |
| echo "✅ Release Type: $RELEASE_TYPE" | |
| echo "✅ Full Tag: $FULL_TAG" | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Rust cache | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| cache-on-failure: true | |
| - name: Build release artifacts | |
| run: | | |
| echo "🔨 Building release artifacts..." | |
| cargo build --release | |
| mkdir -p artifacts | |
| if [ -d "target/release" ]; then | |
| find target/release -maxdepth 1 -type f -executable -exec cp {} artifacts/ \; | |
| fi | |
| echo "📦 Artifacts criados:" | |
| ls -lh artifacts/ || true | |
| - name: Create and push tag | |
| env: | |
| FULL_TAG: ${{ steps.extract.outputs.full_tag }} | |
| run: | | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| echo "🏷️ Creating tag $FULL_TAG" | |
| git tag -a "$FULL_TAG" -m "Release $FULL_TAG" | |
| git push origin "$FULL_TAG" | |
| echo "✅ Tag $FULL_TAG created and pushed" | |
| - name: Generate changelog | |
| id: changelog | |
| run: | | |
| LAST_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") | |
| if [ -z "$LAST_TAG" ]; then | |
| echo "📝 Generating full changelog (first release)" | |
| CHANGELOG=$(git log --pretty=format:"- %s (\`%h\`)" | head -50) | |
| else | |
| echo "📝 Generating changelog from $LAST_TAG" | |
| CHANGELOG=$(git log "${LAST_TAG}..HEAD" --pretty=format:"- %s (\`%h\`)") | |
| fi | |
| echo "$CHANGELOG" > /tmp/changelog.txt | |
| - name: Create GitHub Release | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| FULL_TAG: ${{ steps.extract.outputs.full_tag }} | |
| VERSION: ${{ steps.extract.outputs.version }} | |
| RELEASE_TYPE: ${{ steps.extract.outputs.release_type }} | |
| run: | | |
| PRERELEASE_FLAG="" | |
| RELEASE_LABEL="Stable" | |
| if [ "$RELEASE_TYPE" = "alpha" ]; then | |
| PRERELEASE_FLAG="--prerelease" | |
| RELEASE_LABEL="Alpha (Unstable)" | |
| elif [ "$RELEASE_TYPE" = "beta" ]; then | |
| PRERELEASE_FLAG="--prerelease" | |
| RELEASE_LABEL="Beta (Pre-release)" | |
| elif [ "$RELEASE_TYPE" = "lts" ]; then | |
| RELEASE_LABEL="LTS (Long Term Support)" | |
| fi | |
| CHANGELOG=$(cat /tmp/changelog.txt) | |
| gh release create "$FULL_TAG" \ | |
| --title "Release $FULL_TAG" \ | |
| --notes "## 🎉 Release $VERSION | |
| ### 📦 Release Type | |
| **$RELEASE_LABEL** | |
| ### 📝 Changes | |
| $CHANGELOG | |
| --- | |
| - **Pull Request**: #${{ github.event.pull_request.number }} | |
| --- | |
| _Released on: $(date +'%Y-%m-%d %H:%M:%S UTC')_ | |
| _Built from commit: \`${{ github.sha }}\`_" \ | |
| $PRERELEASE_FLAG \ | |
| artifacts/* 2>/dev/null || true |