Merge pull request #8 from notf0und/improve-workflow-and-release-process

Add PR templates, CI workflows, and release drafter config files
This commit is contained in:
Fabián Gonzalo Artur de la Villarmois
2026-03-29 19:52:38 +13:00
committed by GitHub
6 changed files with 181 additions and 1 deletions
+27
View File
@@ -0,0 +1,27 @@
## What does this PR do?
<!-- A clear and concise description of the change -->
## Commits
<!-- Populated automatically by CI — do not edit this section -->
## Type of change
<!-- Add the matching label to this PR -->
- [ ] 🚀 Feature / Enhancement (`feature`, `enhancement`)
- [ ] 🐛 Bug Fix (`bug`, `fix`)
- [ ] 🧪 Tests (`test`)
- [ ] 🧹 Maintenance / Chore (`chore`, `dependencies`)
- [ ] 📖 Documentation (`docs`)
- [ ] 💥 Breaking Change (`breaking`)
## How to test
<!-- Steps to verify the change works as expected -->
## Checklist
- [ ] Tests pass (`php artisan test`)
- [ ] Code style passes (`./vendor/bin/pint --test`)
+54
View File
@@ -0,0 +1,54 @@
name-template: 'v$RESOLVED_VERSION'
tag-template: 'v$RESOLVED_VERSION'
categories:
- title: '🚀 Features'
labels:
- 'feature'
- 'enhancement'
- title: '🐛 Bug Fixes'
labels:
- 'bug'
- 'fix'
- title: '🧪 Tests'
labels:
- 'test'
- 'tests'
- title: '🧹 Maintenance'
labels:
- 'chore'
- 'maintenance'
- 'dependencies'
- title: '📖 Documentation'
labels:
- 'docs'
- 'documentation'
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
change-title-escapes: '\<*_&'
version-resolver:
major:
labels:
- 'breaking'
minor:
labels:
- 'feature'
- 'enhancement'
patch:
labels:
- 'bug'
- 'fix'
- 'chore'
- 'maintenance'
- 'docs'
- 'documentation'
- 'test'
- 'tests'
- 'dependencies'
default: patch
template: |
$CHANGES
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION
+43
View File
@@ -0,0 +1,43 @@
name: Populate PR commits
on:
pull_request:
types: [opened, synchronize]
jobs:
update-body:
name: Inject commit list into PR body
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/github-script@v7
with:
script: |
const { data: commits } = await github.rest.pulls.listCommits({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number,
});
const commitLines = commits
.map(c => `- ${c.commit.message.split('\n')[0]} (${c.sha.slice(0, 7)})`)
.join('\n');
const currentBody = context.payload.pull_request.body ?? '';
// Replace everything between the Commits header and the next ## header
const updated = currentBody.replace(
/(## Commits\n)[\s\S]*?(\n## )/,
`$1\n${commitLines}\n$2`
);
if (updated === currentBody) return;
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number,
body: updated,
});
+18
View File
@@ -0,0 +1,18 @@
name: Release Drafter
on:
push:
branches: [main]
jobs:
draft:
name: Draft next release notes
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: read
steps:
- uses: release-drafter/release-drafter@v6
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+1 -1
View File
@@ -87,7 +87,7 @@ jobs:
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ secrets.DOCKERHUB_USERNAME }}/${{ github.event.repository.name | lower }}
images: ${{ secrets.DOCKERHUB_USERNAME }}/sgs
tags: |
type=semver,pattern={{version}}
type=raw,value=latest
+38
View File
@@ -60,3 +60,41 @@ jobs:
- name: Run Pint
working-directory: www
run: ./vendor/bin/pint --test
update-checklist:
name: Update PR checklist
runs-on: ubuntu-latest
if: always() && github.event_name == 'pull_request'
needs: [test, lint]
permissions:
pull-requests: write
steps:
- uses: actions/github-script@v7
with:
script: |
const testsPass = '${{ needs.test.result }}' === 'success';
const lintPass = '${{ needs.lint.result }}' === 'success';
const check = (pass) => pass ? 'x' : ' ';
const { data: pr } = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number,
});
const body = (pr.body ?? '').replace(
/- \[[ x]\] Tests pass \(`php artisan test`\)/,
`- [${check(testsPass)}] Tests pass (\`php artisan test\`)`
).replace(
/- \[[ x]\] Code style passes \(`\.\/vendor\/bin\/pint --test`\)/,
`- [${check(lintPass)}] Code style passes (\`./vendor/bin/pint --test\`)`
);
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number,
body,
});