[gh]: Improve Workflows, Templates, Handling (#2214)

* Remove Game-Relevant in RequestScript

* Update pull_request_template.md

* Update pull_request_template.md

* Update changelog-pr.yml

* Update autolabeler.yml

* Update autolabeler.yml

* Update changelog-pr.yml

* Update changelog-pr.yml
This commit is contained in:
CanbiZ
2025-02-10 14:42:17 +01:00
committed by GitHub
parent 35547c4316
commit 7105f67145
4 changed files with 83 additions and 90 deletions

View File

@@ -6,7 +6,7 @@ on:
workflow_dispatch:
jobs:
update-changelog-pull-request:
update-changelog:
runs-on: ubuntu-latest
env:
CONFIG_PATH: .github/changelog-pr-config.json
@@ -28,21 +28,12 @@ jobs:
with:
fetch-depth: 0
- name: Get latest dates in changelog
- name: Get latest date in changelog
run: |
# Extract the latest and second latest dates from changelog
DATES=$(grep '^## [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}' CHANGELOG.md | head -n 2 | awk '{print $2}')
LATEST_DATE=$(echo "$DATES" | sed -n '1p')
SECOND_LATEST_DATE=$(echo "$DATES" | sed -n '2p')
LATEST_DATE=$(grep '^## [0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}' CHANGELOG.md | head -n 1 | awk '{print $2}')
TODAY=$(date -u +%Y-%m-%d)
echo "LATEST_DATE=$LATEST_DATE" >> $GITHUB_ENV
echo "TODAY=$TODAY" >> $GITHUB_ENV
if [ "$LATEST_DATE" == "$TODAY" ]; then
echo "LATEST_DATE=$SECOND_LATEST_DATE" >> $GITHUB_ENV
else
echo "LATEST_DATE=$LATEST_DATE" >> $GITHUB_ENV
fi
- name: Get categorized pull requests
id: get-categorized-prs
@@ -57,8 +48,8 @@ jobs:
const changelogConfig = JSON.parse(fileContent);
const categorizedPRs = changelogConfig.map((obj) => ({ ...obj, notes: [] }));
const latestDateInChangelog = new Date(process.env.LATEST_DATE);
latestDateInChangelog.setUTCHours(23,59,59,999);
const latestDate = new Date(process.env.LATEST_DATE);
latestDate.setUTCHours(23,59,59,999);
const { data: pulls } = await github.rest.pulls.list({
owner: context.repo.owner,
@@ -70,18 +61,16 @@ jobs:
per_page: 100,
});
pulls.filter((pr) =>
pulls.filter(pr =>
pr.merged_at &&
new Date(pr.merged_at) > latestDateInChangelog &&
!pr.labels.some((label) => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase()))
).forEach((pr) => {
const prLabels = pr.labels.map((label) => label.name.toLowerCase());
new Date(pr.merged_at) > latestDate &&
!pr.labels.some(label => ["invalid", "wontdo", process.env.AUTOMATED_PR_LABEL].includes(label.name.toLowerCase()))
).forEach(pr => {
const prLabels = pr.labels.map(label => label.name.toLowerCase());
const prNote = `- ${pr.title} [@${pr.user.login}](https://github.com/${pr.user.login}) ([#${pr.number}](${pr.html_url}))`;
for (const { labels, notes } of categorizedPRs) {
const prHasCategoryLabel = labels.some((label) => prLabels.includes(label));
const isUnlabelledCategory = labels.length === 0;
if (prHasCategoryLabel || isUnlabelledCategory) {
if (labels.length === 0 || labels.some(label => prLabels.includes(label))) {
notes.push(prNote);
break;
}
@@ -98,11 +87,11 @@ jobs:
const path = require('path');
const today = process.env.TODAY;
const latestDateInChangelog = process.env.LATEST_DATE;
const latestDate = process.env.LATEST_DATE;
const changelogPath = path.resolve('CHANGELOG.md');
const categorizedPRs = ${{ steps.get-categorized-prs.outputs.result }};
let newReleaseNotes = `## ${today}\n\n### Changed\n\n`;
let newReleaseNotes = `## ${today}\n\n`;
for (const { title, notes } of categorizedPRs) {
if (notes.length > 0) {
newReleaseNotes += `### ${title}\n\n${notes.join("\n")}\n\n`;
@@ -112,21 +101,20 @@ jobs:
const changelogContent = await fs.readFile(changelogPath, 'utf-8');
const changelogIncludesTodaysReleaseNotes = changelogContent.includes(`\n## ${today}`);
// Replace todays release notes or insert release notes above previous release notes
const regex = changelogIncludesTodaysReleaseNotes ?
new RegExp(`## ${today}.*(?=## ${latestDateInChangelog})`, "gs") :
new RegExp(`(?=## ${latestDateInChangelog})`, "gs");
new RegExp(`## ${today}.*(?=## ${latestDate})`, "gs") :
new RegExp(`(?=## ${latestDate})`, "gs");
const newChangelogContent = changelogContent.replace(regex, newReleaseNotes)
const newChangelogContent = changelogContent.replace(regex, newReleaseNotes);
await fs.writeFile(changelogPath, newChangelogContent);
- name: Check if there are any changes
- name: Check for changes
id: verify-diff
run: |
git diff --quiet . || echo "changed=true" >> $GITHUB_OUTPUT
git diff --quiet . || echo "changed=true" >> $GITHUB_ENV
- name: Commit and push changes to separate branch
if: steps.verify-diff.outputs.changed == 'true'
- name: Commit and push changes
if: env.changed == 'true'
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
@@ -136,7 +124,7 @@ jobs:
git push origin $BRANCH_NAME --force
- name: Create pull request if not exists
if: steps.verify-diff.outputs.changed == 'true'
if: env.changed == 'true'
env:
GH_TOKEN: ${{ steps.generate-token.outputs.token }}
run: |
@@ -150,7 +138,7 @@ jobs:
fi
- name: Approve pull request
if: steps.verify-diff.outputs.changed == 'true'
if: env.changed == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
@@ -158,9 +146,9 @@ jobs:
if [ -n "$PR_NUMBER" ]; then
gh pr review $PR_NUMBER --approve
fi
- name: Re-approve pull request after update
if: steps.verify-diff.outputs.changed == 'true'
if: env.changed == 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |