diff --git a/.github/codeowners b/.github/CODEOWNERS similarity index 100% rename from .github/codeowners rename to .github/CODEOWNERS diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..323ac011 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,11 @@ + +## Overview + + +## Release Notes +- TBD: 1st item of release notes +- TBD: 2nd item of release notes + + +## Related +Closes #issue_number diff --git a/.github/workflows/check_pr_release_notes.yml b/.github/workflows/check_pr_release_notes.yml new file mode 100644 index 00000000..369bfe57 --- /dev/null +++ b/.github/workflows/check_pr_release_notes.yml @@ -0,0 +1,46 @@ +# +# Copyright 2022 ABSA Group Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: Check PR Release Notes + +on: + pull_request: + types: [opened, synchronize, reopened, edited, labeled, unlabeled] + branches: [ master ] + +concurrency: + group: release-notes-check-${{ github.ref }} + cancel-in-progress: true + +jobs: + check-release-notes: + runs-on: ubuntu-latest + + steps: + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 + with: + python-version: '3.14' + + - name: Check presence of release notes in PR description + uses: AbsaOSS/release-notes-presence-check@8e586b26a5e27f899ee8590a5d988fd4780a3dbf + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + github-repository: ${{ github.repository }} + pr-number: ${{ github.event.number }} + title: "## [Rr]elease [Nn]otes" + skip-labels: 'no RN' + skip-placeholders: 'TBD' diff --git a/.github/workflows/release_draft.yml b/.github/workflows/release_draft.yml new file mode 100644 index 00000000..62d27e3e --- /dev/null +++ b/.github/workflows/release_draft.yml @@ -0,0 +1,124 @@ +# +# Copyright 2022 ABSA Group Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: 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 + +permissions: + contents: write + issues: read + pull-requests: read + +jobs: + release-draft: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd + with: + fetch-depth: 0 + persist-credentials: false + + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 + with: + python-version: '3.14' + + - name: Check format of received target tag + id: check-version-tag + uses: AbsaOSS/version-tag-check@4145e48bf3f77a5afff2ec9afdd8afb6b53bce34 + 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@4145e48bf3f77a5afff2ec9afdd8afb6b53bce34 + 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@da535383f54a6532adb84e88d3b6e5c7236132df + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + release-notes-title: "## [Rr]elease [Nn]otes" + tag-name: ${{ github.event.inputs.tag-name }} + from-tag-name: ${{ github.event.inputs.from-tag-name }} + chapters: | + - { title: Breaking Changes ๐Ÿ’ฅ, label: breaking change, order: 10 } + - { title: Epics ๐Ÿš€, label: epic, order: 20 } + - { title: New Features ๐ŸŽ‰, label: enhancement, order: 30 } + - { title: Bugfixes ๐Ÿ› , label: bug, order: 40 } + - { title: Infrastructure โš™๏ธ, label: infrastructure, order: 50 } + - { title: Refactoring ๐Ÿ”จ, label: documentation, order: 60 } + - { title: Documentation๏ธ ๐Ÿ“–, label: documentation, order: 70 } + - { title: Core, label: Core, order: 75 } + - { title: Slick, label: Slick, order: 80 } + - { title: Ultet, label: Ultet, order: 85 } + - { title: Entries to skip ๐Ÿšซ, label: duplicate, hidden: true, order: 99 } + - { title: Entries to skip ๐Ÿšซ, label: no RN, hidden: true, order: 99 } + warnings: true + print-empty-chapters: false + row-format-issue: '{type}: {number} _{title}_ by {developers} in {pull-requests}' + row-format-pr: '{number} _{title}_ by {developers}' + + - name: Create and push tag + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 + env: + TAG_NAME: ${{ github.event.inputs.tag-name }} + with: + script: | + const tag = process.env.TAG_NAME; + const ref = `refs/tags/${tag}`; + const sha = context.sha; + + 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 }} + + - name: Create draft release + uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda + 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