mirror of
https://github.com/notf0und/SGS
synced 2026-07-17 18:21:06 +00:00
Add PR templates, CI workflows, and release drafter config files
This commit is contained in:
parent
d0531fee49
commit
97024acef1
@@ -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,
|
||||
});
|
||||
@@ -0,0 +1,20 @@
|
||||
name: Release Drafter
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
types: [opened, reopened, synchronize]
|
||||
|
||||
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 }}
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user