Skip to content

Update workflow to sign our Debian packages #22

Update workflow to sign our Debian packages

Update workflow to sign our Debian packages #22

Workflow file for this run

name: 'Build Packages'
on: push
permissions:
contents: read
jobs:
Package:
name: Create Package for Branch
runs-on: ubuntu-latest
steps:
- id: sysprep
name: Prep system for dev work
run: |
sudo apt-get update
sudo apt-get install -y build-essential debhelper devscripts python3
- id: checkout
name: Checkout Repo
uses: actions/checkout@v4
with:
path: "source"
fetch-depth: 0
continue-on-error: false
- id: get_tag
name: Get most recent tag
run: |
cd source;
echo "tag=$(git describe --tags --abbrev=0)" >> "$GITHUB_OUTPUT"
continue-on-error: false
- id: make_changelogs
name: Make changelog entries
env:
start: ${{ steps.get_tag.outputs.tag }}
run: |
cd source;
echo "Listing commits starting from ${start}";
for commit in $(git log --reverse --format="%h" ${start}..); do
echo "Adding changelog entry for commit ${commit}: $(git log -1 --pretty=%s ${commit})";
EMAIL=$(git log -1 --pretty=%ae ${commit}) \
NAME=$(git log -1 --pretty=%an ${commit}) \
dch --force-bad-version --newversion \
"$(git log -1 --date=format:%Y%m%d%H%M%S --pretty=99~git%cd.%h ${commit})" \
"$(git log -1 --pretty=%s ${commit})";
done
continue-on-error: false
- name: Build package (without signing)
run: |
cd source && \
debuild -us -uc
continue-on-error: false
- name: Upload Build Result as artifact
uses: actions/[email protected]
with:
name: package-deb
path: docker-image-cleanup*
if-no-files-found: error
continue-on-error: false
Sign-Debian:
name: Sign Debian packages
if: github.event_name == 'push' && ( contains(github.ref, 'refs/tags/') || github.ref == 'refs/heads/main' )
needs:
- Package
runs-on: ubuntu-latest
defaults:
run:
shell: bash
environment: sign
steps:
- id: sysprep
name: Prep system for debsign work
run: |
sudo apt-get update
sudo apt-get install -y build-essential devscripts gnupg
continue-on-error: false
- id: set-key
name: Install signing key
env:
PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
run: |
gpg --import <<<"${PRIVATE_KEY}"
echo "Keys:"
gpg --list-secret-keys --keyid-format long
echo "keyid=$(gpg --list-secret-keys --keyid-format long | grep '^sec' | cut -d/ -f2 | cut -d\ -f1)" >> $GITHUB_OUTPUT
echo "fingerprint=$(gpg --list-secret-keys | grep '^ ' | tr -d ' ')" >> $GITHUB_OUTPUT
continue-on-error: false
- id: fetch
name: Fetch Debian artifact from this workflow
uses: actions/[email protected]
with:
name: package-deb
continue-on-error: false
- id: sign
name: Run debsign
run: |
echo "Signing with key ${{ steps.set-key.outputs.keyid }}"
debsign -k "${{ steps.set-key.outputs.fingerprint }}" "$(find . -name *.changes)"
continue-on-error: false
- id: upload
name: Upload Signed Result as artifact
uses: actions/[email protected]
with:
name: signed-deb
path: docker-image-cleanup*
if-no-files-found: error
continue-on-error: false