MT#65080 add GH actions to automate release builds

Adapted from:

https://github.com/sipwise/rtpengine/tree/master/.github/workflows

e9fc1b1057
68c6bf60a8
071f318707

Change-Id: I75d3fbf8d8087a4583336f454f4e9fd30aae12c0
(cherry picked from commit 8397b9c242)
mr14.1
Richard Fuchs 1 month ago
parent 302b3939c4
commit 16f1b83d98

@ -0,0 +1,90 @@
name: Debian package build
on:
pull_request:
push:
tags:
- 'mr*'
schedule:
- cron: '0 8 * * *'
permissions:
actions: read
contents: read
pull-requests: write
concurrency:
group: "${{ github.ref }}"
cancel-in-progress: true
jobs:
build-debian:
if: github.event_name != 'schedule' || github.repository == 'sipwise/sems'
runs-on: ${{ matrix.os }}
strategy:
matrix:
dist: [trixie, sid]
os: [ubuntu-latest]
steps:
- uses: actions/checkout@v6
- name: Update changelog
run: |
set -ex
OLD_VERSION=$(dpkg-parsechangelog -SVersion)
SOURCE=$(dpkg-parsechangelog -SSource)
if [[ "${{ github.ref_type }}" == "tag" ]]; then
VERSION_SUFFIX="+gh+${{ matrix.dist }}"
else
VERSION_SUFFIX="+autobuild${GITHUB_RUN_NUMBER}+${{ matrix.dist }}"
fi
cat > debian/changelog <<EOT
${SOURCE} (${OLD_VERSION}${VERSION_SUFFIX}) UNRELEASED; urgency=medium
* Automated Build
-- Automated Build <builder@localhost> $(date -R)
EOT
- uses: jtdor/build-deb-action@v1
with:
docker-image: debian:${{ matrix.dist }}
- name: Archive build result
uses: actions/upload-artifact@v6
with:
name: packages-${{ matrix.dist }}
if-no-files-found: error
retention-days: 14
path: |
debian/artifacts/*.deb
debian/artifacts/*.tar.*
debian/artifacts/*.changes
debian/artifacts/*.buildinfo
comment-pr:
if: github.event_name == 'pull_request'
needs: build-debian
runs-on: ubuntu-latest
steps:
- name: Comment PR with artifact links
continue-on-error: true
uses: actions/github-script@v8
with:
script: |
const runId = context.runId;
const repoOwner = context.repo.owner;
const repoName = context.repo.repo;
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: repoOwner,
repo: repoName,
run_id: runId
});
const links = artifacts.data.artifacts
.filter(a => a.name.startsWith('packages-'))
.map(a => `- [${a.name}](https://github.com/${repoOwner}/${repoName}/actions/runs/${runId}/artifacts/${a.id})`)
.join('\n');
if (links) {
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: repoOwner,
repo: repoName,
body: `📦 Built Debian packages are ready!\n\n${links}`
});
}

@ -0,0 +1,69 @@
name: Release
on:
workflow_run:
workflows: [Debian package build]
types: [completed]
permissions:
contents: write
jobs:
release:
# Only run for successful tag pushes starting with 'mr'
# (package-build.yml only triggers 'push' events for tags, not branches)
if: >-
github.event.workflow_run.conclusion == 'success' &&
github.event.workflow_run.event == 'push' &&
startsWith(github.event.workflow_run.head_branch, 'mr')
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Download all build artifacts
uses: actions/download-artifact@v6
with:
path: packages
pattern: packages-*
merge-multiple: true
run-id: ${{ github.event.workflow_run.id }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Generate changelog
run: |
CURRENT_TAG="${{ github.event.workflow_run.head_branch }}"
PREVIOUS_TAG=$(git tag --list 'mr*' --sort=-version:refname | grep -A1 "^${CURRENT_TAG}$" | tail -1)
if [ "$PREVIOUS_TAG" = "$CURRENT_TAG" ] || [ -z "$PREVIOUS_TAG" ]; then
RANGE="$CURRENT_TAG"
else
RANGE="${PREVIOUS_TAG}..${CURRENT_TAG}"
fi
echo "Generating changelog for range: $RANGE"
echo "## Changes in ${CURRENT_TAG}" > release_notes.md
echo "" >> release_notes.md
if [ "$RANGE" != "$CURRENT_TAG" ]; then
echo "Changes since ${PREVIOUS_TAG}:" >> release_notes.md
echo "" >> release_notes.md
fi
git log --format='%aN' "$RANGE" | sort -u | while IFS= read -r author; do
echo "### $author" >> release_notes.md
echo "" >> release_notes.md
git log --format='* [%h] %s' --author="$author" "$RANGE" >> release_notes.md
echo "" >> release_notes.md
done
cat release_notes.md
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.workflow_run.head_branch }}
name: Release ${{ github.event.workflow_run.head_branch }}
body_path: release_notes.md
files: |
packages/*.deb
packages/*.tar.*
Loading…
Cancel
Save