diff --git a/.github/actions/debpkg-bookworm/Dockerfile b/.github/actions/debpkg-bookworm/Dockerfile deleted file mode 100644 index 4f4f77405..000000000 --- a/.github/actions/debpkg-bookworm/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM debian:bookworm - -COPY entrypoint.sh /entrypoint.sh - -# avoid "debconf: (TERM is not set, so the dialog frontend is not usable.)" -ENV DEBIAN_FRONTEND noninteractive - -# disable man-db to speed up builds -RUN echo 'man-db man-db/auto-update boolean false' | debconf-set-selections - -RUN apt-get update && apt-get -y install build-essential - -ENTRYPOINT ["/entrypoint.sh"] diff --git a/.github/actions/debpkg-bookworm/action.yml b/.github/actions/debpkg-bookworm/action.yml deleted file mode 100644 index 5bebaf952..000000000 --- a/.github/actions/debpkg-bookworm/action.yml +++ /dev/null @@ -1,6 +0,0 @@ -name: "Build Docker image based on Debian/bookworm" -description: "Build Docker image based on Debian/bookworm" - -runs: - using: 'docker' - image: 'Dockerfile' diff --git a/.github/actions/debpkg-bookworm/entrypoint.sh b/.github/actions/debpkg-bookworm/entrypoint.sh deleted file mode 100755 index 8f086e19f..000000000 --- a/.github/actions/debpkg-bookworm/entrypoint.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -set -eu -o pipefail - -echo "*** Starting execution of '$0' ***" - -echo "** Installing build dependencies **" -apt-get -y build-dep -Ppkg.ngcp-rtpengine.nobcg729 . - -echo "** Building Debian package **" -dpkg-buildpackage -Ppkg.ngcp-rtpengine.nobcg729 - -# We're inside /github/workspace/ -echo "** Copying Debian package files to workspace **" -cp ../*.deb ../*.buildinfo ../workspace/ - -echo "*** Finished execution of '$0' ***" diff --git a/.github/actions/debpkg-sid/Dockerfile b/.github/actions/debpkg-sid/Dockerfile deleted file mode 100644 index 375b766c3..000000000 --- a/.github/actions/debpkg-sid/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM debian:sid - -COPY entrypoint.sh /entrypoint.sh - -# avoid "debconf: (TERM is not set, so the dialog frontend is not usable.)" -ENV DEBIAN_FRONTEND noninteractive - -# disable man-db to speed up builds -RUN echo 'man-db man-db/auto-update boolean false' | debconf-set-selections - -RUN apt-get update && apt-get -y install build-essential - -ENTRYPOINT ["/entrypoint.sh"] diff --git a/.github/actions/debpkg-sid/action.yml b/.github/actions/debpkg-sid/action.yml deleted file mode 100644 index 1ec396a30..000000000 --- a/.github/actions/debpkg-sid/action.yml +++ /dev/null @@ -1,6 +0,0 @@ -name: "Build Docker image based on Debian/sid" -description: "Build Docker image based on Debian/sid" - -runs: - using: 'docker' - image: 'Dockerfile' diff --git a/.github/actions/debpkg-sid/entrypoint.sh b/.github/actions/debpkg-sid/entrypoint.sh deleted file mode 100755 index 8f086e19f..000000000 --- a/.github/actions/debpkg-sid/entrypoint.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -set -eu -o pipefail - -echo "*** Starting execution of '$0' ***" - -echo "** Installing build dependencies **" -apt-get -y build-dep -Ppkg.ngcp-rtpengine.nobcg729 . - -echo "** Building Debian package **" -dpkg-buildpackage -Ppkg.ngcp-rtpengine.nobcg729 - -# We're inside /github/workspace/ -echo "** Copying Debian package files to workspace **" -cp ../*.deb ../*.buildinfo ../workspace/ - -echo "*** Finished execution of '$0' ***" diff --git a/.github/workflows/debian-package-build.yml b/.github/workflows/debian-package-build.yml new file mode 100644 index 000000000..6a4542c3f --- /dev/null +++ b/.github/workflows/debian-package-build.yml @@ -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/rtpengine' + runs-on: ubuntu-latest + strategy: + matrix: + dist: [trixie, sid] + 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" + else + VERSION_SUFFIX="+autobuild${GITHUB_RUN_NUMBER}" + fi + cat > debian/changelog < $(date -R) + EOT + - uses: jtdor/build-deb-action@v1 + with: + docker-image: debian:${{ matrix.dist }} + buildpackage-opts: -Ppkg.ngcp-rtpengine.nobcg729 + - 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}` + }); + } diff --git a/.github/workflows/debpkg.yml b/.github/workflows/debpkg.yml deleted file mode 100644 index d58bfe8f1..000000000 --- a/.github/workflows/debpkg.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: Debian Packaging - -on: - push: - pull_request: - schedule: - - cron: '0 8 * * *' - -jobs: - build-deb-bookworm: - if: github.event_name != 'schedule' || github.repository == 'sipwise/rtpengine' - runs-on: ubuntu-latest - name: Debian pipeline for bookworm - - steps: - - name: Checkout source - uses: actions/checkout@v4 - - - name: Execute Docker debpkg action - uses: ./.github/actions/debpkg-bookworm - - - name: Store Debian package artifacts - uses: actions/upload-artifact@v4 - with: - name: Debian binary package files for bookworm - path: '*.deb' - - - name: Store Debian package build info - uses: actions/upload-artifact@v4 - with: - name: Debian buildinfo file for bookworm - path: '*.buildinfo' - - build-deb-sid: - if: github.event_name != 'schedule' || github.repository == 'sipwise/rtpengine' - runs-on: ubuntu-latest - name: Debian pipeline for sid - - steps: - - name: Checkout source - uses: actions/checkout@v4 - - - name: Execute Docker debpkg action - uses: ./.github/actions/debpkg-sid - - - name: Store Debian package artifacts - uses: actions/upload-artifact@v4 - with: - name: Debian binary package files for sid - path: '*.deb' - - - name: Store Debian package build info - uses: actions/upload-artifact@v4 - with: - name: Debian buildinfo file for sid - path: '*.buildinfo' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..18014bf8e --- /dev/null +++ b/.github/workflows/release.yml @@ -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.*