2025-06-12 16:29:18 +02:00

141 lines
4.3 KiB
YAML

name: Release
on:
push:
branches:
- main
permissions:
actions: write
contents: write
issues: write
jobs:
release:
runs-on: ubuntu-latest
if: contains(github.event.head_commit.message, 'release')
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Generate release tag
run: |
repo_version=$(printf '%o' "$(date -u +"%Y")")$(date +'%Y.%-j').$((`date +%s` % 86400 ))
echo "release_tag=$repo_version" >> $GITHUB_ENV
- name: Generate issue list
run: echo "issue_list=$(gh issue list -l fixed-pending-release | cut -f1 | sed 's/^/#/' | sed 's/$/ /' | tr -d '\n\t\r')" >> $GITHUB_ENV
env:
GITHUB_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
- name: Create release
uses: ncipollo/release-action@v1.16.0
with:
tag: ${{ env.release_tag }}
name: ${{ env.release_tag }}
body: ${{ env.issue_list }}
purge:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Determine URLs to purge
id: purge_urls
run: |
baseUrl="https://cdn.jsdelivr.net/gh/${{ github.repository }}@latest"
urls=""
for f in `find adblock controld dnsmasq domains hosts ips pac rpz wildcard -name "*.txt" -o -name "*.pac" -o -name "*.json" -type f`; do
urls+="${baseUrl}/${f},"
done
echo "urls=${urls%,*}" >> $GITHUB_OUTPUT
- name: Purge CDN cache
uses: egad13/purge-jsdelivr-cache@v1.1.0
with:
url: ${{ steps.purge_urls.outputs.urls }}
needs: release
close-issues:
runs-on: ubuntu-latest
steps:
- name: Comment and close fixed issues
uses: gcampbell-msft/fixed-pending-release@main
with:
token: ${{ github.token }}
label: fixed-pending-release
removeLabel: true
applyToAll: true
message: "This issue has been fixed in release [${releaseTag}](${releaseUrl})"
needs: release
relabel-issues:
runs-on: ubuntu-latest
steps:
- name: relabel
uses: actions/github-script@v7
with:
github-token: ${{ secrets.PAT }}
script: |
const labelToFind = 'scheduled-next-release';
const labelToAdd = 'fixed-pending-release';
const { data: issues } = await github.rest.issues.listForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
labels: labelToFind,
per_page: 100
});
for (const issue of issues) {
await github.rest.issues.removeLabel({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
name: labelToFind
});
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
labels: [labelToAdd]
});
}
needs: [release, close-issues]
stale:
runs-on: ubuntu-latest
steps:
- uses: DeMoorJasper/stale@v2.0.1
with:
repo-token: ${{ github.token }}
stale-message: 'This issue has been inactive for 5 days. Please add a comment to keep it open. Otherwise, it will be closed in 2 days.'
days-before-stale: 5
days-before-close: 2
stale-label: 'no-issue-activity'
needs: release
release-cleanup:
runs-on: ubuntu-latest
steps:
- name: Delete old releases
uses: sgpublic/delete-release-action@v1.2
with:
release-drop: true
release-keep-count: 1
release-drop-tag: true
env:
GITHUB_TOKEN: ${{ github.token }}
needs: release
workflow-cleanup:
runs-on: ubuntu-latest
steps:
- name: Delete old workflow runs
uses: Mattraks/delete-workflow-runs@v2.0.6
with:
token: ${{ github.token }}
repository: ${{ github.repository }}
retain_days: 1
keep_minimum_runs: 0
needs: [release, close-issues, release-cleanup]