From 2fd43f48f716240c22bbf44e4cd3b1fa8735c375 Mon Sep 17 00:00:00 2001 From: miroslavpojer Date: Tue, 14 Jan 2025 09:37:52 +0100 Subject: [PATCH] #35 - Introduce Release Notes generator workflows (#36) - Introduced workflow for release notes presence in PR body. - Introduced workflow for release draft creation. --- .github/workflows/check_pr_release_notes.yml | 23 +++++ .github/workflows/release_draft.yml | 92 ++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 .github/workflows/check_pr_release_notes.yml create mode 100644 .github/workflows/release_draft.yml diff --git a/.github/workflows/check_pr_release_notes.yml b/.github/workflows/check_pr_release_notes.yml new file mode 100644 index 0000000..0ef68a2 --- /dev/null +++ b/.github/workflows/check_pr_release_notes.yml @@ -0,0 +1,23 @@ +name: Check PR Release Notes in Description + +on: + pull_request: + types: [opened, synchronize, reopened, edited, labeled, unlabeled] + branches: [ master ] + +jobs: + check-release-notes: + runs-on: ubuntu-latest + + steps: + - uses: actions/setup-python@v5.1.1 + with: + python-version: '3.11' + + - name: Check presence of release notes in PR description + uses: AbsaOSS/release-notes-presence-check@v0.2.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + github-repository: ${{ github.repository }} + pr-number: ${{ github.event.number }} diff --git a/.github/workflows/release_draft.yml b/.github/workflows/release_draft.yml new file mode 100644 index 0000000..144df59 --- /dev/null +++ b/.github/workflows/release_draft.yml @@ -0,0 +1,92 @@ +name: Release - create draft release +on: + workflow_dispatch: + inputs: + tag-name: + description: 'Name of git tag to be created, and then draft release created. Syntax: "v[0-9]+.[0-9]+.[0-9]+".' + required: true + from-tag-name: + description: 'Name of the git tag from which to detect changes from. Default value: latest tag. Syntax: "v[0-9]+.[0-9]+.[0-9]+".' + required: false + +jobs: + release-draft: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + persist-credentials: false + + - uses: actions/setup-python@v5.1.1 + with: + python-version: '3.11' + + - name: Check format of received tag + id: check-version-tag + uses: AbsaOSS/version-tag-check@v0.3.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + github-repository: ${{ github.repository }} + version-tag: ${{ github.event.inputs.tag-name }} + + - name: Check format of received from tag + if: ${{ github.event.inputs.from-tag-name }} + id: check-version-from-tag + uses: AbsaOSS/version-tag-check@v0.3.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + github-repository: ${{ github.repository }} + version-tag: ${{ github.event.inputs.from-tag-name }} + should-exist: true + + - name: Generate Release Notes + id: generate_release_notes + uses: AbsaOSS/generate-release-notes@v0.6.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag-name: ${{ github.event.inputs.tag-name }} + from-tag-name: ${{ github.event.inputs.from-tag-name }} + chapters: | + - { title: No entry 🚫, label: duplicate } + - { title: Breaking Changes 💥, label: breaking-change } + - { title: New Features 🎉, label: enhancement } + - { title: New Features 🎉, label: feature } + - { title: Bugfixes 🛠, label: bug } + - { title: Infrastructure ⚙️, label: infrastructure } + - { title: Silent-live 🤫, label: silent-live } + - { title: Documentation 📜, label: documentation } + warnings: true + + - name: Create and Push Tag + uses: actions/github-script@v7 + with: + script: | + const tag = core.getInput('tag-name') + const ref = `refs/tags/${tag}`; + const sha = context.sha; // The SHA of the commit to tag + + await github.rest.git.createRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: ref, + sha: sha + }); + + console.log(`Tag created: ${tag}`); + github-token: ${{ secrets.GITHUB_TOKEN }} + tag-name: ${{ github.event.inputs.tag-name }} + + - name: Create Draft Release + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + name: ${{ github.event.inputs.tag-name }} + body: ${{ steps.generate_release_notes.outputs.release-notes }} + tag_name: ${{ github.event.inputs.tag-name }} + draft: true + prerelease: false