From 8e240e8022d2b74fc0be266ff946638d6079dd35 Mon Sep 17 00:00:00 2001 From: Sean Lynch <42618346+swlynch99@users.noreply.github.com> Date: Thu, 16 Jan 2025 15:48:13 -0800 Subject: [PATCH 1/9] Add new packaging script for rezolus debian packages --- debian/control | 1 + debian/package.sh | 118 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100755 debian/package.sh diff --git a/debian/control b/debian/control index 675d354f..4f3d5566 100644 --- a/debian/control +++ b/debian/control @@ -6,6 +6,7 @@ Standards-Version: 4.6.2 Build-Depends: debhelper (>= 10), pkg-config, + libssl-dev, libelf-dev, libelf-dev:native, clang:native diff --git a/debian/package.sh b/debian/package.sh new file mode 100755 index 00000000..dd3925eb --- /dev/null +++ b/debian/package.sh @@ -0,0 +1,118 @@ +#!/bin/bash + +set -euo pipefail + +PROGRAM="$(basename "$0")" + +VERBOSE=false + +REZOLUS=/mnt/rezolus +OUTPUT=/mnt/output +RELEASE=0 +CHOWN= +ARCH= + +help() { + cat < + +OPTIONS: + -h|--help Show this help text. + -v|--verbose Display the commands run by this script. + + --release The release number to use for the package. [default: $RELEASE] + --rezolus-dir The directory that the rezolus source is stored in. [default: $REZOLUS] + --output-dir The directory to place the output artifacts in. [default: $OUTPUT] + --chown Change the ownership of the resulting package files. + +USE WITH DOCKER: + This script is intended to be run within a debian-based docker container. + As an example, consider building for ubuntu focal: + + docker run -it --rm \\ + -v \$(pwd):/mnt/rezolus \\ + -v \$(pwd)/target/debian:/mnt/output \\ + ubuntu:focal /mnt/rezolus/debian/package.sh --release 0 --chown \$(id -u) --verbose + + You should be able to swap out the docker container in order to build for different + distros, provided that rezolus can be built on each distro. Note that you may have to + clean out the debian/cargo_home and debian/cargo_target directories when switching distros. +EOF +} + +error() { + 1>&2 echo "error: $1" + 1>&2 echo "Try '$PROGRAM --help' for more information." +} + +while [ $# -gt 0 ]; do + opt="$1" + shift + + case "$opt" in + -h|--help) + help + exit 0 + ;; + -v|--verbose) VERBOSE=true ;; + + --release) RELEASE="$1"; shift ;; + --rezolus-dir) REZOLUS="$1"; shift ;; + --output-dir) OUTPUT="$1"; shift ;; + --chown) CHOWN="$1"; shift ;; + + *) + error "unexpected option '$opt'" + exit 1 + ;; + esac +done + +if $VERBOSE; then + set -x +fi + +if [ "$(id -u)" -ne 0 ]; then + error "package script must be run as root" +fi + +shopt -s nullglob globstar + +cd "$REZOLUS" + +# Install required dependencies + +# Disable tzdata requests or other things that may require user interaction +export DEBIAN_FRONTEND=noninteractive + +apt-get -q update +apt-get -q install -y build-essential curl jq lsb-release unzip gpg + +# Install rust +curl -sSf https://sh.rustup.rs | sh /dev/stdin -y +. "$HOME/.cargo/env" + +# Build source package +dpkg-source --build . + +# Generate the changelog file +cp -p debian/changelog /tmp/changelog +trap 'cp -fp /tmp/changelog debian/changelog' EXIT +./debian/gen-changelog.sh > debian/changelog + +# Install build dependencies +apt-get -q build-dep -y ../rezolus*.dsc + +# Build the package +dpkg-buildpackage -b -us -uc + +# Change ownership of the deb files, if requested +if [ -n "$CHOWN" ]; then + chown "$CHOWN" ../*.deb ../*.ddeb +fi + +# Copy the debs to the output directory +cp ../*.deb ../*.ddeb "$OUTPUT" From 166a9949fe52d5f25e95a876121269de863fb982 Mon Sep 17 00:00:00 2001 From: Sean Lynch <42618346+swlynch99@users.noreply.github.com> Date: Thu, 16 Jan 2025 15:52:26 -0800 Subject: [PATCH 2/9] Use new packaging script to do packaging build --- .github/workflows/package-deb.yml | 59 ++++++++----------------------- debian/package.sh | 1 + 2 files changed, 15 insertions(+), 45 deletions(-) diff --git a/.github/workflows/package-deb.yml b/.github/workflows/package-deb.yml index 47d5a571..64933ba0 100644 --- a/.github/workflows/package-deb.yml +++ b/.github/workflows/package-deb.yml @@ -45,7 +45,6 @@ jobs: build-deb: name: "${{ matrix.distro }}:${{ matrix.release }}" runs-on: buildjet-16vcpu-ubuntu-2204${{ matrix.arch == 'arm64' && '-arm' || '' }} - container: "${{ matrix.distro }}:${{ matrix.release }}" strategy: matrix: include: @@ -73,59 +72,29 @@ jobs: steps: - uses: actions/checkout@v4 - - name: install buildsystem apt dependencies - run: | - apt-get update - apt-get install -y \ - build-essential \ - curl jq lsb-release unzip gpg - - - name: install rust - run: | - curl -sSf https://sh.rustup.rs | sh /dev/stdin -y - echo "PATH=$HOME/.cargo/bin:$PATH" >> "$GITHUB_ENV" - - - uses: Swatinem/rust-cache@v2 - with: - shared-key: build-deb-${{ matrix.distro }}-${{ matrix.release }}-${{ matrix.arch }} - - - name: check cargo - shell: bash - run: | - echo "::group::rustc -vV" - rustc -vV - echo "::endgroup::" - echo "::group::cargo -vV" - cargo -vV - echo "::endgroup::" - - name: set release env var if: ${{ github.event_name == 'workflow_dispatch' }} shell: bash run: | echo 'RELEASE=${{ github.event.inputs.release }}' >> $GITHUB_ENV - - # Changelogs with revisions cause dpkg-source to emit an error when - # building. We only use the source package to install the build deps - # so building it with an invalid version is ok. - - name: build source package - run: dpkg-source --build . - - - name: generate changelog + + - name: set release env var + if: ${{ github.event_name != 'workflow_dispatch' }} shell: bash - run: ./debian/gen-changelog.sh > debian/changelog - - - name: install build dependencies - run: apt-get build-dep -y ../rezolus*.dsc - - name: build package - run: dpkg-buildpackage -b -us -uc + run: | + echo 'RELEASE=0' >> $GITHUB_ENV - - name: copy debs - shell: bash + - name: run packaging script run: | - shopt -s nullglob mkdir -p target/debian - cp ../*.deb ../*.ddeb target/debian/ + docker run -it --rm \ + -v $(pwd):/mnt/rezolus \ + -v $(pwd)/target/debian:/mnt/output \ + ${{ matrix.distro }}:${{ matrix.release }} \ + /mnt/rezolus/debian/package.sh \ + --release "$RELEASE" \ + --chown "$(id -u)" \ + --verbose - uses: actions/upload-artifact@v4 with: diff --git a/debian/package.sh b/debian/package.sh index dd3925eb..9c56f5bc 100755 --- a/debian/package.sh +++ b/debian/package.sh @@ -99,6 +99,7 @@ curl -sSf https://sh.rustup.rs | sh /dev/stdin -y dpkg-source --build . # Generate the changelog file +export RELEASE="$RELEASE" cp -p debian/changelog /tmp/changelog trap 'cp -fp /tmp/changelog debian/changelog' EXIT ./debian/gen-changelog.sh > debian/changelog From 9b8f02550a80962d4a6ca9f15b58d28a0969a9f3 Mon Sep 17 00:00:00 2001 From: Sean Lynch <42618346+swlynch99@users.noreply.github.com> Date: Thu, 16 Jan 2025 16:21:17 -0800 Subject: [PATCH 3/9] Remove -it from docker call --- .github/workflows/package-deb.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/package-deb.yml b/.github/workflows/package-deb.yml index 64933ba0..87e5982d 100644 --- a/.github/workflows/package-deb.yml +++ b/.github/workflows/package-deb.yml @@ -87,7 +87,7 @@ jobs: - name: run packaging script run: | mkdir -p target/debian - docker run -it --rm \ + docker run --rm \ -v $(pwd):/mnt/rezolus \ -v $(pwd)/target/debian:/mnt/output \ ${{ matrix.distro }}:${{ matrix.release }} \ From c5d5c5e66591874ac70e70f942109e60d551d4af Mon Sep 17 00:00:00 2001 From: Sean Lynch <42618346+swlynch99@users.noreply.github.com> Date: Fri, 17 Jan 2025 10:43:32 -0800 Subject: [PATCH 4/9] Fix some typos --- debian/package.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/debian/package.sh b/debian/package.sh index 9c56f5bc..37f61ae4 100755 --- a/debian/package.sh +++ b/debian/package.sh @@ -10,11 +10,10 @@ REZOLUS=/mnt/rezolus OUTPUT=/mnt/output RELEASE=0 CHOWN= -ARCH= help() { cat < @@ -93,7 +92,7 @@ apt-get -q install -y build-essential curl jq lsb-release unzip gpg # Install rust curl -sSf https://sh.rustup.rs | sh /dev/stdin -y -. "$HOME/.cargo/env" +export PATH="$HOME/.cargo/env:$PATH" # Build source package dpkg-source --build . From 673be7f3480bd49f66ab31b1f53938341ee81d8a Mon Sep 17 00:00:00 2001 From: Sean Lynch <42618346+swlynch99@users.noreply.github.com> Date: Fri, 17 Jan 2025 10:44:17 -0800 Subject: [PATCH 5/9] Fix rezolus RPM packaging builds --- .github/workflows/package-rpm.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/package-rpm.yml b/.github/workflows/package-rpm.yml index 5b834a6a..95786828 100644 --- a/.github/workflows/package-rpm.yml +++ b/.github/workflows/package-rpm.yml @@ -59,7 +59,7 @@ jobs: - name: install build dependencies shell: bash run: | - yum install -y gcc elfutils-devel clang + yum install -y gcc elfutils-devel clang openssl-devel - uses: Swatinem/rust-cache@v2 with: From 947031f27389df3e40edf6c1eeca63150a4fc115 Mon Sep 17 00:00:00 2001 From: Sean Lynch <42618346+swlynch99@users.noreply.github.com> Date: Fri, 17 Jan 2025 11:14:59 -0800 Subject: [PATCH 6/9] Add explicit groups to github output --- debian/package.sh | 42 ++++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/debian/package.sh b/debian/package.sh index 37f61ae4..30d7db4b 100755 --- a/debian/package.sh +++ b/debian/package.sh @@ -70,6 +70,26 @@ while [ $# -gt 0 ]; do esac done +pushgroup() { + if [ -n "$CI" ]; then + echo "::group::$*" + fi +} + +nextgroup() { + if [ -n "$CI" ]; then + echo "::endgroup::" + echo "::group::$*" + fi +} + +popgroup() { + if [ -n "$CI" ]; then + echo "::endgroup::" + fi +} + + if $VERBOSE; then set -x fi @@ -82,7 +102,7 @@ shopt -s nullglob globstar cd "$REZOLUS" -# Install required dependencies +pushgroup install required dependencies # Disable tzdata requests or other things that may require user interaction export DEBIAN_FRONTEND=noninteractive @@ -90,29 +110,31 @@ export DEBIAN_FRONTEND=noninteractive apt-get -q update apt-get -q install -y build-essential curl jq lsb-release unzip gpg -# Install rust +nextgroup install rust curl -sSf https://sh.rustup.rs | sh /dev/stdin -y -export PATH="$HOME/.cargo/env:$PATH" +. "$HOME/.cargo/env" -# Build source package +nextgroup build source package dpkg-source --build . -# Generate the changelog file +nextgroup generate changelog export RELEASE="$RELEASE" cp -p debian/changelog /tmp/changelog trap 'cp -fp /tmp/changelog debian/changelog' EXIT -./debian/gen-changelog.sh > debian/changelog +./debian/gen-changelog.sh | tee debian/changelog -# Install build dependencies +nextgroup install build dependencies apt-get -q build-dep -y ../rezolus*.dsc -# Build the package +nextgroup build the package dpkg-buildpackage -b -us -uc -# Change ownership of the deb files, if requested +nextgroup change ownership of deb files if [ -n "$CHOWN" ]; then chown "$CHOWN" ../*.deb ../*.ddeb fi -# Copy the debs to the output directory +nextgroup copy deb files to the output directory cp ../*.deb ../*.ddeb "$OUTPUT" + +popgroup From 33a1155335be1ac025b86eb8e259d7c96cbae3f3 Mon Sep 17 00:00:00 2001 From: Sean Lynch <42618346+swlynch99@users.noreply.github.com> Date: Fri, 17 Jan 2025 11:16:11 -0800 Subject: [PATCH 7/9] Remove some parts from debug output --- debian/package.sh | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/debian/package.sh b/debian/package.sh index 30d7db4b..a4e13b0b 100755 --- a/debian/package.sh +++ b/debian/package.sh @@ -71,22 +71,31 @@ while [ $# -gt 0 ]; do done pushgroup() { - if [ -n "$CI" ]; then - echo "::group::$*" - fi + ( + set +x + if [ -n "$CI" ]; then + echo "::group::$*" + fi + ) } nextgroup() { - if [ -n "$CI" ]; then - echo "::endgroup::" - echo "::group::$*" - fi + ( + set +x + if [ -n "$CI" ]; then + echo "::endgroup::" + echo "::group::$*" + fi + ) } popgroup() { - if [ -n "$CI" ]; then - echo "::endgroup::" - fi + ( + set +x + if [ -n "$CI" ]; then + echo "::endgroup::" + fi + ) } From 7ecdb3fd580742f859b822de2852196ac518b063 Mon Sep 17 00:00:00 2001 From: Sean Lynch <42618346+swlynch99@users.noreply.github.com> Date: Fri, 17 Jan 2025 11:17:59 -0800 Subject: [PATCH 8/9] Fix variable evaluation error --- debian/package.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/debian/package.sh b/debian/package.sh index a4e13b0b..c98e7bc1 100755 --- a/debian/package.sh +++ b/debian/package.sh @@ -73,7 +73,7 @@ done pushgroup() { ( set +x - if [ -n "$CI" ]; then + if [ -n "${CI:-}" ]; then echo "::group::$*" fi ) @@ -82,7 +82,7 @@ pushgroup() { nextgroup() { ( set +x - if [ -n "$CI" ]; then + if [ -n "${CI:-}" ]; then echo "::endgroup::" echo "::group::$*" fi @@ -92,7 +92,7 @@ nextgroup() { popgroup() { ( set +x - if [ -n "$CI" ]; then + if [ -n "${CI:-}" ]; then echo "::endgroup::" fi ) From 420413661cfa7ce05fc75e0a164bfda593629c58 Mon Sep 17 00:00:00 2001 From: Sean Lynch <42618346+swlynch99@users.noreply.github.com> Date: Fri, 17 Jan 2025 13:19:40 -0800 Subject: [PATCH 9/9] Use ubuntu noble as example in packaging script docs --- debian/package.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/package.sh b/debian/package.sh index c98e7bc1..6f3f7db9 100755 --- a/debian/package.sh +++ b/debian/package.sh @@ -34,7 +34,7 @@ USE WITH DOCKER: docker run -it --rm \\ -v \$(pwd):/mnt/rezolus \\ -v \$(pwd)/target/debian:/mnt/output \\ - ubuntu:focal /mnt/rezolus/debian/package.sh --release 0 --chown \$(id -u) --verbose + ubuntu:noble /mnt/rezolus/debian/package.sh --release 0 --chown \$(id -u) --verbose You should be able to swap out the docker container in order to build for different distros, provided that rezolus can be built on each distro. Note that you may have to