Skip to content

Create Debian packages #40

Create Debian packages

Create Debian packages #40

Workflow file for this run

name: Create Debian packages
on:
workflow_dispatch:
inputs:
raspbian-buster-armhf:
type: boolean
raspbian-bullseye-armhf:
type: boolean
raspbian-bookworm-armhf:
type: boolean
raspberrypi-bullseye-arm64:
type: boolean
raspberrypi-bookworm-arm64:
type: boolean
debian-bullseye-amd64:
type: boolean
debian-bookworm-amd64:
type: boolean
schedule:
# Rebuild once a month. Could be 0 0 1, but Github servers are probably
# quite busy at that time.
- cron: '7 7 24 * *'
# Use FLAGS to only build sources for one of the packages. The below could also
# be imported from files, but that would add a checkout step, plus makes it more
# important to support multiline json as per:
# https://github.community/t/set-output-truncates-multiline-strings/16852
env:
raspbian-buster-armhf: '{"image":"raspbian-buster-armhf","OS":"raspbian","DIST":"buster","ARCH":"armhf","FLAGS":""}'
raspbian-bullseye-armhf: '{"image":"raspbian-bullseye-armhf","OS":"raspbian","DIST":"bullseye","ARCH":"armhf","FLAGS":"-- --binary-arch"}'
raspbian-bookworm-armhf: '{"image":"raspbian-bookworm-armhf","OS":"raspbian","DIST":"bookworm","ARCH":"armhf","FLAGS":"-- --binary-arch"}'
raspberrypi-bullseye-arm64: '{"image":"raspberrypi-bullseye-arm64","OS":"raspberrypi","DIST":"bullseye","ARCH":"arm64","FLAGS":"-- --binary-arch"}'
raspberrypi-bookworm-arm64: '{"image":"raspberrypi-bookworm-arm64","OS":"raspberrypi","DIST":"bookworm","ARCH":"arm64","FLAGS":"-- --binary-arch"}'
debian-bullseye-amd64: '{"image":"debian-bullseye-amd64","OS":"debian","DIST":"bullseye","ARCH":"amd64","FLAGS":"-- --binary-arch"}'
debian-bookworm-amd64: '{"image":"debian-bookworm-amd64","OS":"debian","DIST":"bookworm","ARCH":"amd64","FLAGS":"-- --binary-arch"}'
jobs:
prepare:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
env:
PKGCONF: pkgconf
BUILD_raspbian-buster-armhf: ${{ github.event.inputs.raspbian-buster-armhf || 'true' }}
BUILD_raspbian-bullseye-armhf: ${{ github.event.inputs.raspbian-bullseye-armhf || 'true' }}
BUILD_raspbian-bookworm-armhf: ${{ github.event.inputs.raspbian-bookworm-armhf || 'true' }}
BUILD_raspberrypi-bullseye-arm64: ${{ github.event.inputs.raspberrypi-bullseye-arm64 || 'true' }}
BUILD_raspberrypi-bookworm-arm64: ${{ github.event.inputs.raspberrypi-bookworm-arm64 || 'true' }}
BUILD_debian-bullseye-amd64: ${{ github.event.inputs.debian-bullseye-amd64 || 'true' }}
BUILD_debian-bookworm-amd64: ${{ github.event.inputs.debian-bookworm-amd64 || 'true' }}
steps:
- name: Add raspbian-buster-armhf
if: ${{ env.BUILD_raspbian-buster-armhf == 'true' }}
run: echo -n '${{ env.raspbian-buster-armhf }},' >> $PKGCONF
- name: Add raspbian-bullseye-armhf
if: ${{ env.BUILD_raspbian-bullseye-armhf == 'true' }}
run: echo -n '${{ env.raspbian-bullseye-armhf }},' >> $PKGCONF
- name: Add raspbian-bookworm-armhf
if: ${{ env.BUILD_raspbian-bookworm-armhf == 'true' }}
run: echo -n '${{ env.raspbian-bookworm-armhf }},' >> $PKGCONF
- name: Add raspberrypi-bullseye-arm64
if: ${{ env.BUILD_raspberrypi-bullseye-arm64 == 'true' }}
run: echo -n '${{ env.raspberrypi-bullseye-arm64 }},' >> $PKGCONF
- name: Add raspberrypi-bookworm-arm64
if: ${{ env.BUILD_raspberrypi-bookworm-arm64 == 'true' }}
run: echo -n '${{ env.raspberrypi-bookworm-arm64 }},' >> $PKGCONF
- name: Add debian-bullseye-amd64
if: ${{ env.BUILD_debian-bullseye-amd64 == 'true' }}
run: echo -n '${{ env.debian-bullseye-amd64 }},' >> $PKGCONF
- name: Add debian-bookworm-amd64
if: ${{ env.BUILD_debian-bookworm-amd64 == 'true' }}
run: echo -n '${{ env.debian-bookworm-amd64 }},' >> $PKGCONF
- name: Set matrix
id: set-matrix
run: |
test -f $PKGCONF || { echo "No packages selected"; exit 1; }
echo -e "`cat $PKGCONF`\n"
echo "matrix={\"include\":[`cat $PKGCONF`]}" >> $GITHUB_OUTPUT
build:
runs-on: ubuntu-latest
needs: prepare
strategy:
matrix: ${{ fromJSON(needs.prepare.outputs.matrix) }}
steps:
- uses: actions/checkout@v4
- name: Load package info into environment
run: |
cat ./pkginfo >> $GITHUB_ENV
- name: Prepare directories
run: |
mkdir dl
mkdir build_dir
mkdir cache
# dh-make and devscripts are only used for the package build
- name: Install pbuilder, Debian tools, keyrings
run: |
sudo apt-get update
sudo apt-get install -yq pbuilder qemu-user-static debian-archive-keyring devscripts dh-make
wget -O dl/raspbian-archive-keyring.deb http://archive.raspbian.org/raspbian/pool/main/r/raspbian-archive-keyring/raspbian-archive-keyring_20120528.2_all.deb
sudo dpkg -i dl/raspbian-archive-keyring.deb
wget -O dl/raspberrypi-archive-keyring.deb http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-archive-keyring/raspberrypi-archive-keyring_2016.10.31_all.deb
sudo dpkg -i dl/raspberrypi-archive-keyring.deb
- name: Cache pbuilder image
id: cache-image
uses: actions/cache@v4
with:
path: cache/${{ matrix.image }}-base.tgz
key: ${{ matrix.image }}
- name: Restore image from cache
if: steps.cache-image.outputs.cache-hit == 'true'
run: |
sudo cp cache/${{ matrix.image }}-base.tgz /var/cache/pbuilder/
- name: Or create pbuilder image
if: steps.cache-image.outputs.cache-hit != 'true'
run: |
sudo OS=${{ matrix.OS }} DIST=${{ matrix.DIST }} ARCH=${{ matrix.ARCH }} pbuilder create --configfile pbuilderrc
cp /var/cache/pbuilder/${{ matrix.image }}-base.tgz cache/
- name: Download and unpack OwnTone
run: |
wget -O build_dir/${{ env.PKGNAME }}_${{ env.VER }}.orig.tar.gz https://github.com/${{ env.OWNER }}/${{ env.REPOSITORY }}/archive/${{ env.COMMIT }}.tar.gz
tar xzf build_dir/${{ env.PKGNAME }}_${{ env.VER }}.orig.tar.gz --directory build_dir
mv build_dir/${{ env.REPOSITORY }}-$COMMIT build_dir/${{ env.PKGNAME }}-${{ env.VER }}
cp -a ${{ env.REPOSITORY }}/debian build_dir/${{ env.PKGNAME }}-${{ env.VER }}
# The below uses a method of creating changelog and setting versions that
# isn't very kosher. I don't know how to use the proper method while still
# creating different packages for different distributions that can be
# served from one repo.
- name: Build OwnTone package
working-directory: build_dir/${{ env.PKGNAME }}-${{ env.VER }}
run: |
dch --create --package ${{ env.PKGNAME }} --newversion ${{ env.VER }}-${{ env.DEB }}+${{ matrix.DIST }} --distribution ${{ matrix.DIST }} --force-distribution "Dummy changelog @commit ${{ env.COMMIT }}"
sudo OS=${{ matrix.OS }} DIST=${{ matrix.DIST }} ARCH=${{ matrix.ARCH }} DEB_BUILD_OPTIONS="parallel=$(nproc) nocheck" pdebuild --configfile ../../pbuilderrc ${{ matrix.FLAGS }}
rm debian/changelog
- name: Upload dpkg
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.image }}
path: /var/cache/pbuilder/result/${{ matrix.image }}