61 lines
4 KiB
YAML
61 lines
4 KiB
YAML
---
|
|
|
|
name: Build Python Debian packages
|
|
description: Build a Debian package from a setuptools-based Python project
|
|
inputs:
|
|
python_module:
|
|
description: Name of the Python root module.
|
|
required: true
|
|
package_name:
|
|
description: Name of the Debian package to build.
|
|
required: true
|
|
package_root:
|
|
description: Root of the directory where to build the package in. Additional files may already be here.
|
|
required: true
|
|
package_maintainer:
|
|
description: Name and email address of the package maintainer, used in the changelog file.
|
|
required: true
|
|
architecture:
|
|
description: Architecture for which this package is built. Only relevant for the resulting filename.
|
|
default: all
|
|
pre_package_hook:
|
|
description: Shell script to run right before invoking "dpkg-deb --build".
|
|
default: ""
|
|
runs:
|
|
using: docker
|
|
image: docker://docker.io/library/debian:bookworm
|
|
entrypoint: /bin/bash
|
|
args:
|
|
- -c
|
|
- |
|
|
apt update; apt install -y python3-pip lintian rsync sudo
|
|
export VERSION=$(python3 -c 'import ${{ inputs.python_module }}; print(${{ inputs.python_module }}.__version__)')
|
|
mkdir -p \
|
|
${{ inputs.package_root }}/usr/lib/python3/dist-packages/
|
|
${{ inputs.package_root }}/usr/share/doc/${{ inputs.package_name }}/
|
|
echo -n > ${{ inputs.package_root }}/usr/share/doc/${{ inputs.package_name }}/changelog
|
|
for version in "$(cat CHANGELOG.md | grep '<!-- BEGIN CHANGES' | cut -d ' ' -f 4)"; do
|
|
echo -e "${{ inputs.package_name }} (${version}-1); urgency=medium\n" >> ${{ inputs.package_root }}/usr/share/doc/${{ inputs.package_name }}/changelog
|
|
cat CHANGELOG.md | grep -A 1000 "<"'!'"-- BEGIN CHANGES ${version} -->" | grep -B 1000 "<"'!'"-- END CHANGES ${version} -->" | tail -n +2 | head -n -1 | sed -re 's/^-/ */g' >> ${{ inputs.package_root }}/usr/share/doc/${{ inputs.package_name }}/changelog
|
|
echo -e "\n -- ${{ inputs.package_maintainer }} $(date -R)\n" >> ${{ inputs.package_root }}/usr/share/doc/${{ inputs.package_name }}/changelog
|
|
done
|
|
gzip -9n ${{ inputs.package_root }}/usr/share/doc/${{ inputs.package_name }}/changelog
|
|
# Some versions of setuptools ingore --prefix and always set it to /usr/local.
|
|
# That's why it's set to /usr/local explicitly here and moved afterwards.
|
|
python3 setup.py egg_info install --root=${{ inputs.package_root }} --prefix=/usr/local --optimize=1
|
|
rsync -a ${{ inputs.package_root }}/usr/local/lib/python3.11/dist-packages/ ${{ inputs.package_root }}/usr/lib/python3/dist-packages/
|
|
[[ -e ${{ inputs.package_root }}/usr/local/bin ]] && rsync -a ${{ inputs.package_root }}/usr/local/bin/ ${{ inputs.package_root }}/usr/bin/
|
|
rm -rf ${{ inputs.package_root }}/usr/local/lib/ ${{ inputs.package_root }}/usr/local/bin/
|
|
find ${{ inputs.package_root }}/usr/lib/python3/dist-packages -name __pycache__ -exec rm -r {} \; 2>/dev/null || true
|
|
find ${{ inputs.package_root }}/usr/lib/python3/dist-packages -name '*.pyc' -exec rm {} \;
|
|
[[ -f ${{ inputs.package_root }}/DEBIAN/preinst ]] && chmod +x ${{ inputs.package_root }}/DEBIAN/preinst
|
|
[[ -f ${{ inputs.package_root }}/DEBIAN/postinst ]] && chmod +x ${{ inputs.package_root }}/DEBIAN/postinst
|
|
[[ -f ${{ inputs.package_root }}/DEBIAN/prerm ]] && chmod +x ${{ inputs.package_root }}/DEBIAN/prerm
|
|
[[ -f ${{ inputs.package_root }}/DEBIAN/postrm ]] && chmod +x ${{ inputs.package_root }}/DEBIAN/postrm
|
|
sed -re "s/__VERSION__/${VERSION}-1/g" -i ${{ inputs.package_root }}/DEBIAN/control
|
|
${{ inputs.pre_package_hook }}
|
|
cd "${{ inputs.package_root }}/.."
|
|
dpkg-deb --build $(basename ${{ inputs.package_root }})
|
|
mv "$(basename ${{ inputs.package_root }}).deb" "${GITHUB_WORKSPACE}/${{ inputs.package_output_path }}/${{ inputs.package_name }}_${VERSION}-1_${{ inputs.architecture }}.deb"
|
|
sudo -u nobody lintian "${GITHUB_WORKSPACE}/${{ inputs.package_output_path }}/${{ inputs.package_name }}_${VERSION}-1_${{ inputs.architecture }}.deb" || true
|