Skip to content

Commit

Permalink
#211: Release notes entry enforcement (#212)
Browse files Browse the repository at this point in the history
* changed the label to skip issue for release notes from default to `no RN`
* added action to verify a PR has Release note comment, unless marked with `no RN` label
* added action to copy Release note comment from PR to linked issues upon merge to master
* added test filenames check action

---------

Co-authored-by: Ladislav Sulak <[email protected]>
Co-authored-by: Saša Zejnilović <[email protected]>
Co-authored-by: miroslavpojer <[email protected]>
  • Loading branch information
4 people authored Jun 24, 2024
1 parent 7193e42 commit f5ac426
Show file tree
Hide file tree
Showing 4 changed files with 247 additions and 0 deletions.
94 changes: 94 additions & 0 deletions .github/workflows/pr_release_note_comment_check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#
# Copyright 2021 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: PR Release Note Comment Check

on:
issue_comment:
types:
- created
- edited
- deleted
pull_request:
types:
- opened
- synchronize
- reopened
- edited
- labeled
- unlabeled
branches: [ master ]

jobs:
check-for-release-notes-comments:
if: ${{ ( github.event_name == 'pull_request') || (github.event.issue.pull_request) }}
name: Check For Release Notes Comments
runs-on: ubuntu-latest
steps:
- name: Get PR branch
uses: xt0rted/pull-request-comment-branch@v1
id: comment-branch

- name: Set latest commit status as pending
uses: myrotvorets/set-commit-status-action@master
with:
sha: ${{ steps.comment-branch.outputs.head_sha }}
token: ${{ secrets.GITHUB_TOKEN }}
status: pending

- name: Fetch all PR comments
if: ${{ ! contains( github.event.pull_request.labels.*.name, 'no RN') }}
id: get-comments
uses: actions/github-script@v7
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const issueNumber = context.issue.number;
const repoName = context.repo.repo;
const repoOwner = context.repo.owner;
const comments = await github.rest.issues.listComments({
owner: repoOwner,
repo: repoName,
issue_number: issueNumber,
});
return comments.data.map(comment => comment.body);
- name: Check for 'Release Notes' in comments
if: ${{ ! contains( github.event.pull_request.labels.*.name, 'no RN') }}
uses: actions/github-script@v7
with:
script: |
const comments = ${{ steps.get-comments.outputs.result }};
console.log("Comments:");
console.log(comments);
const releaseNotesRegex = /release notes?:?/i;
const hasReleaseNotes = comments.some(comment => releaseNotesRegex.test(comment));
if (!hasReleaseNotes) {
console.log('No "Release notes" found in PR comments');
core.setFailed('No "Release notes" found in PR comments')
} else {
console.log('"Release notes" found in comments');
}
- name: Set latest commit status as ${{ job.status }}
uses: myrotvorets/set-commit-status-action@master
if: always()
with:
sha: ${{ steps.comment-branch.outputs.head_sha }}
token: ${{ secrets.GITHUB_TOKEN }}
status: ${{ job.status }}
1 change: 1 addition & 0 deletions .github/workflows/release_draft.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ jobs:
{"title": "Bugfixes 🛠", "label": "bug"}
]
warnings: true
skip-release-notes: "no RN"
- name: Create draft release
uses: softprops/action-gh-release@v1
env:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
#
# Copyright 2021 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: Release Notes Comments Copy from PR to Linked Issues

on:
pull_request:
types: [closed]
branches: [ master ]

jobs:
copy_release_notes:
if: github.event.pull_request.merged == true
name: Copy Release Notes
runs-on: ubuntu-latest
steps:
- name: Fetch PR Comments
id: get-comments
uses: actions/github-script@v7
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const prNumber = context.payload.pull_request.number;
const repoName = context.repo.repo;
const repoOwner = context.repo.owner;
const releaseNotesRegex = /release notes?:?/i;
const comments = await github.rest.issues.listComments({
owner: repoOwner,
repo: repoName,
issue_number: prNumber,
});
const releaseNoteComment = comments.data.find(comment => releaseNotesRegex.test(comment.body));
const releaseNoteBody = releaseNoteComment ? releaseNoteComment.body : '';
console.log(`Release Note Body: ${releaseNoteBody}`);
core.setOutput('releaseNoteBody', releaseNoteBody);
- name: Print Extracted releaseNoteBody
run: |
echo "Extracted Release Note Body:"
echo "${{ steps.get-comments.outputs.releaseNoteBody }}"
echo "RELEASE_NOTE_BODY<<EOF" >> $GITHUB_ENV
echo "${{ steps.get-comments.outputs.releaseNoteBody }}" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Parse PR Description for Related Issues
id: find-issues
uses: actions/github-script@v7
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const description = context.payload.pull_request.body;
const issueNumbers = [];
const regexPattern = /([Cc]los(e|es|ed)|[Ff]ix(es|ed)?|[Rr]esolv(e|es|ed))\s*#\s*([0-9]+)/g;
let match;
while ((match = regexPattern.exec(description)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (match.index === regexPattern.lastIndex) {
regexPattern.lastIndex++;
}
// The actual issue number is in the last group of the match
const issueNumber = match[match.length - 1];
if (issueNumber) {
issueNumbers.push(issueNumber);
}
}
core.setOutput('issueNumbers', issueNumbers.join(', '));
- name: Print Extracted Issue Numbers
run: |
echo "Extracted Issue Numbers: ${{ steps.find-issues.outputs.issueNumbers }}"
echo "ISSUE_NUMBERS=${{ steps.find-issues.outputs.issueNumbers }}" >> $GITHUB_ENV
- name: Post Comment to Issues
if: ${{ (steps.get-comments.outputs.releaseNoteBody) && (steps.find-issues.outputs.issueNumbers) }}
uses: actions/github-script@v7
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const issueNumbers = process.env.ISSUE_NUMBERS;
const commentBody = process.env.RELEASE_NOTE_BODY;
const repoName = context.repo.repo;
const repoOwner = context.repo.owner;
for (const issueNumber of issueNumbers.split(', ')) {
if (issueNumber && commentBody) {
await github.rest.issues.createComment({
owner: repoOwner,
repo: repoName,
issue_number: issueNumber,
body: commentBody
});
}
}
41 changes: 41 additions & 0 deletions .github/workflows/test_filenames_check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#
# Copyright 2021 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: Test Filenames Check

on:
pull_request:
branches: [ master ]
types: [ opened, synchronize, reopened ]

jobs:
test_filenames_check:
name: Test Filenames Check
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Filename Inspector
id: scan-test-files
uses: AbsaOSS/filename-inspector@master
with:
name-patterns: '*UnitTests.*,*IntegrationTests.*'
paths: '**/src/test/scala/**'
report-format: 'console'
excludes: 'server/src/test/scala/za/co/absa/atum/server/api/TestData.scala,server/src/test/scala/za/co/absa/atum/server/api/TestTransactorProvider.scala,server/src/test/scala/za/co/absa/atum/server/ConfigProviderTest.scala'
verbose-logging: 'false'
fail-on-violation: 'true'

0 comments on commit f5ac426

Please sign in to comment.