From 39c15841b2d4b090f369438c33a4d76a8ab341ba Mon Sep 17 00:00:00 2001 From: Dino Maric Date: Tue, 27 Oct 2026 17:54:59 +0000 Subject: [PATCH 1/3] Fix release builds without raising the Linux baseline Pin packaging runners to Ubuntu 24.04 so Ruby 3.4.7 remains available. Keep building Linux libraries on Bullseye, but fetch its retired packages from Debian's archive and fail on incomplete repository updates. Move macOS builds and tests to macOS 15, where Homebrew supplies supported dependency bottles. Isolate the native cache by runner version and architecture, and document the macOS 15 minimum and archived Linux dependencies. Amp-Thread-ID: https://ampcode.com/threads/T-01a16213-416c-71ea-9e0c-003c86569f0c Co-authored-by: Dino Maric --- .github/workflows/ci.yml | 8 ++++---- .github/workflows/package.yml | 13 ++++++++----- README.md | 2 +- docs/production.md | 6 +++++- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 53a2ab8..4f4c668 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -180,7 +180,7 @@ jobs: bundle exec rake test build-plutobook-macos: - runs-on: macos-14 + runs-on: macos-15 steps: - uses: actions/checkout@v4 @@ -198,9 +198,9 @@ jobs: id: plutobook-cache-macos with: path: tmp/plutobook-ci-install - key: plutobook-v0.20.0-${{ runner.os }}-${{ hashFiles('.github/workflows/ci.yml') }} + key: plutobook-v0.20.0-macos-15-${{ runner.arch }}-${{ hashFiles('.github/workflows/ci.yml') }} restore-keys: | - plutobook-v0.20.0-${{ runner.os }}- + plutobook-v0.20.0-macos-15-${{ runner.arch }}- - name: Build PlutoBook if: steps.plutobook-cache-macos.outputs.cache-hit != 'true' @@ -227,7 +227,7 @@ jobs: test-macos: needs: build-plutobook-macos - runs-on: macos-14 + runs-on: macos-15 env: PAGE_PRINT_PLUTOBOOK_PREFIX: ${{ github.workspace }}/tmp/plutobook-ci-install diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index 8cf18f2..34c68dd 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -19,7 +19,7 @@ on: jobs: source: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 @@ -38,7 +38,7 @@ jobs: path: page_print-*.gem linux: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 @@ -46,7 +46,10 @@ jobs: - name: Build native Linux gem run: | docker run --rm -v "$PWD:/work" -w /work ruby:3.2-bullseye bash -lc ' - apt-get update && apt-get install -y --no-install-recommends \ + # Keep the Bullseye glibc baseline; its packages are now archived. + sed -i -e "s|http://deb.debian.org/debian-security|https://archive.debian.org/debian-security|g" \ + -e "s|http://deb.debian.org/debian|https://archive.debian.org/debian|g" /etc/apt/sources.list && \ + apt-get -o APT::Update::Error-Mode=any update && apt-get install -y --no-install-recommends \ build-essential \ ca-certificates \ git \ @@ -84,7 +87,7 @@ jobs: path: pkg/page_print-*-x86_64-linux.gem darwin-arm64: - runs-on: macos-14 + runs-on: macos-15 steps: - uses: actions/checkout@v4 @@ -123,7 +126,7 @@ jobs: name: Publish needs: [source, linux, darwin-arm64] if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 environment: release permissions: id-token: write diff --git a/README.md b/README.md index 8f36e48..3401570 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ bundle install PagePrint requires Ruby 3.2 or newer. Native gems with vendored PlutoBook libraries are published for: - `x86_64-linux` -- `arm64-darwin` (Apple Silicon) +- `arm64-darwin` (Apple Silicon, macOS 15 or newer) Other platforms build from source and require PlutoBook development headers and libraries. See [Installing on other platforms](docs/production.md#installing-on-other-platforms). diff --git a/docs/production.md b/docs/production.md index 0f57537..4772da8 100644 --- a/docs/production.md +++ b/docs/production.md @@ -23,9 +23,13 @@ PagePrint requires Ruby 3.2 or newer. | Platform | Installation | | --- | --- | | `x86_64-linux` | Native gem with vendored PlutoBook libraries; the Ruby extension is compiled against the local Ruby | -| `arm64-darwin` | Native gem with vendored PlutoBook libraries; the Ruby extension is compiled against the local Ruby | +| `arm64-darwin` (macOS 15 or newer) | Native gem with vendored PlutoBook libraries; the Ruby extension is compiled against the local Ruby | | Other platforms | Source build using an installed PlutoBook | +Linux packages retain the Debian 11 (Bullseye) build baseline. Bullseye build dependencies now come from Debian's archive, which does not receive ongoing security updates. + +Apple Silicon packages are built and tested on macOS 15 because the macOS 14 runner and Homebrew dependency bottles are no longer supported. Older macOS versions require a source installation (`gem install page_print --platform ruby`) and a compatible system PlutoBook; they are not covered by CI. Setting a deployment target alone cannot make bundled Homebrew libraries compatible with older systems. + The published native gems disable PlutoBook's optional curl, TurboJPEG, and WebP features to keep the bundled dependency set smaller. PagePrint uses its own Ruby resource fetcher boundary and does not expose PlutoBook's optional network fetcher. Your production image still needs a compiler and Ruby development headers because the small PagePrint extension is compiled during installation. From e585fe5b44b72df4d839b7f49fc35fc9d579821a Mon Sep 17 00:00:00 2001 From: Dino Maric Date: Tue, 27 Oct 2026 18:01:19 +0000 Subject: [PATCH 2/3] Install matching native dependencies on the macOS test runner The PlutoBook build links against Homebrew ICU 79, but the separate test runner only installed Poppler and could not load the library. Install the renderer dependencies there too, and expose ICU to pkg-config before compiling the extension. Amp-Thread-ID: https://ampcode.com/threads/T-01a16213-416c-71ea-9e0c-003c86569f0c Co-authored-by: Dino Maric --- .github/workflows/ci.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4f4c668..5e9c77a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -238,7 +238,13 @@ jobs: - uses: actions/checkout@v4 - name: Install test dependencies - run: brew install poppler + run: | + brew update + # Match the shared libraries used by build-plutobook-macos. + brew install pkg-config cairo freetype harfbuzz fontconfig expat icu4c poppler + + - name: Configure Homebrew pkg-config paths + run: echo "PKG_CONFIG_PATH=$(brew --prefix icu4c)/lib/pkgconfig:$PKG_CONFIG_PATH" >> "$GITHUB_ENV" - uses: actions/download-artifact@v4 with: From f35dd8bdf8c38e1d45fa6600cd35ed915e5fe26b Mon Sep 17 00:00:00 2001 From: Dino Maric Date: Wed, 28 Oct 2026 08:14:11 +0000 Subject: [PATCH 3/3] Keep platform documentation focused on installation requirements Remove build-environment background and the extra older-macOS paragraph following review. Keep the supported platforms table and existing installation guidance. Amp-Thread-ID: https://ampcode.com/threads/T-01a16213-416c-71ea-9e0c-003c86569f0c Co-authored-by: Dino Maric --- docs/production.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/production.md b/docs/production.md index 4772da8..342f698 100644 --- a/docs/production.md +++ b/docs/production.md @@ -26,10 +26,6 @@ PagePrint requires Ruby 3.2 or newer. | `arm64-darwin` (macOS 15 or newer) | Native gem with vendored PlutoBook libraries; the Ruby extension is compiled against the local Ruby | | Other platforms | Source build using an installed PlutoBook | -Linux packages retain the Debian 11 (Bullseye) build baseline. Bullseye build dependencies now come from Debian's archive, which does not receive ongoing security updates. - -Apple Silicon packages are built and tested on macOS 15 because the macOS 14 runner and Homebrew dependency bottles are no longer supported. Older macOS versions require a source installation (`gem install page_print --platform ruby`) and a compatible system PlutoBook; they are not covered by CI. Setting a deployment target alone cannot make bundled Homebrew libraries compatible with older systems. - The published native gems disable PlutoBook's optional curl, TurboJPEG, and WebP features to keep the bundled dependency set smaller. PagePrint uses its own Ruby resource fetcher boundary and does not expose PlutoBook's optional network fetcher. Your production image still needs a compiler and Ruby development headers because the small PagePrint extension is compiled during installation.