Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
187 changes: 138 additions & 49 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -1,61 +1,150 @@
name: Build and Test
# Multi-Architecture Build and Test Workflow for libcupsfilters
name: Build and Test (Multi-Architecture)

on:
push:
branches:
- '**'
- '**'
pull_request:
branches:
- '**'
- '**'
workflow_dispatch:

jobs:
build-linux-run-tests:
build-matrix:
strategy:
fail-fast: false
matrix:
include:
# Native x86_64
- arch: x86_64
runs-on: ubuntu-latest
use-qemu: false

runs-on: ubuntu-latest
# Native ARM64
- arch: arm64
runs-on: ubuntu-24.04-arm
use-qemu: false

# Emulated 32-bit ARM
- arch: armv7
runs-on: ubuntu-latest
use-qemu: true

# Emulated RISC-V
- arch: riscv64
runs-on: ubuntu-latest
use-qemu: true

runs-on: ${{ matrix.runs-on }}
name: Build & Test (${{ matrix.arch }})

steps:
- uses: actions/checkout@v4
- name: show Ubuntu version
run: cat /etc/os-release | grep PRETTY_NAME | awk -F '=' '{print $2}'
- name: update build environment
run: sudo apt-get update --fix-missing -y && sudo apt-get upgrade --fix-missing -y
- name: install prerequisites
run: |
sudo apt-get install -y avahi-daemon libavahi-client-dev libssl-dev libpam-dev libusb-1.0-0-dev zlib1g-dev
sudo apt install autotools-dev autopoint cmake libtool pkg-config libcups2-dev libexif-dev liblcms2-dev libfontconfig1-dev
sudo apt install libfreetype6-dev build-essential qtbase5-dev qtchooser libcairo2-dev libboost-system-dev libboost-thread-dev libboost-program-options-dev libboost-test-dev libopenjp2-7-dev liblcms2-dev libjpeg-dev
sudo apt install -y libjxl-dev

# UPDATED: Using PDFio 1.6.2
- name: Install pdfio >= 1.6.2
run: |
cd ..
mkdir -p pdfio
cd pdfio
wget -q https://github.com/michaelrsweet/pdfio/releases/download/v1.6.2/pdfio-1.6.2.tar.gz
tar -xzf pdfio-1.6.2.tar.gz
cd pdfio-1.6.2
./configure --prefix=/usr --enable-shared
make all
make test
sudo make install
cd "$GITHUB_WORKSPACE"

- name: Install poppler and mupdf
run: |
sudo apt install libpoppler-cpp-dev libpython3-dev libdbus-1-dev
sudo apt install mupdf-tools
sudo apt install -y poppler-utils

- name: Install ghostscript
run: sudo apt install ghostscript

- name: configure
env:
CC: /usr/bin/gcc
run: ./autogen.sh && ./configure --enable-debug
- name: make
run: make
- name: Run Tests
run: make check || cat test/error_log*
- uses: actions/checkout@v4

# ==========================================
# 1. NATIVE EXECUTION (x86_64 and arm64)
# ==========================================
- name: Install Dependencies (Native)
if: matrix.use-qemu == false
run: |
sudo apt-get update --fix-missing -y
sudo apt-get upgrade --fix-missing -y
# PREVENT CONFLICTS: Ensure system version doesn't override local source
sudo apt-get remove -y libcupsfilters-dev || true
sudo apt-get install -y \
libqpdf-dev \
avahi-daemon libavahi-client-dev libssl-dev libpam-dev libusb-1.0-0-dev zlib1g-dev \
autotools-dev autopoint cmake libtool pkg-config libcups2-dev libexif-dev liblcms2-dev \
libfontconfig1-dev libfreetype6-dev build-essential qtbase5-dev qtchooser libcairo2-dev \
libboost-system-dev libboost-thread-dev libboost-program-options-dev libboost-test-dev \
libopenjp2-7-dev libjpeg-dev libjxl-dev libpoppler-cpp-dev libpython3-dev libdbus-1-dev \
mupdf-tools poppler-utils ghostscript wget tar make gettext

- name: Build PDFio and libcupsfilters (Native)
if: matrix.use-qemu == false
env:
CC: /usr/bin/gcc
run: |
set -ex

# Build pdfio
cd /tmp
wget -q https://github.com/michaelrsweet/pdfio/releases/download/v1.6.2/pdfio-1.6.2.tar.gz
tar -xzf pdfio-1.6.2.tar.gz && cd pdfio-1.6.2
./configure --prefix=/usr --enable-shared
make all
sudo make install
sudo ldconfig

# Build and Test libcupsfilters
cd "$GITHUB_WORKSPACE"
./autogen.sh
./configure
make -j$(nproc)
# V=1 shows compiler commands; VERBOSE=1 restores full internal test details
make check V=1 VERBOSE=1 || (test -f test-suite.log && cat test-suite.log; exit 1)

- name: Upload test artifacts (Native)
if: matrix.use-qemu == false && always()
uses: actions/upload-artifact@v4
with:
name: libcupsfilters-test-artifacts-${{ matrix.arch }}
path: |
**/*.log
if-no-files-found: warn

# ==========================================
# 2. EMULATED EXECUTION (armv7 and riscv64)
# ==========================================
- name: Build and Test (Emulated)
if: matrix.use-qemu == true
uses: uraimo/run-on-arch-action@v3
with:
arch: ${{ matrix.arch }}
distro: ubuntu24.04
install: |
apt-get update --fix-missing -y
DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata
# PREVENT CONFLICTS: Ensure system version doesn't override local source
apt-get remove -y libcupsfilters-dev || true
apt-get install -y \
libqpdf-dev \
avahi-daemon libavahi-client-dev libssl-dev libpam-dev libusb-1.0-0-dev zlib1g-dev \
autotools-dev autopoint cmake libtool pkg-config libcups2-dev libexif-dev liblcms2-dev \
libfontconfig1-dev libfreetype6-dev build-essential qtbase5-dev qtchooser libcairo2-dev \
libboost-system-dev libboost-thread-dev libboost-program-options-dev libboost-test-dev \
libopenjp2-7-dev libjpeg-dev libjxl-dev libpoppler-cpp-dev libpython3-dev libdbus-1-dev \
mupdf-tools poppler-utils ghostscript wget tar make gettext gcc g++
run: |
set -ex
REPO_DIR=$(pwd)

# Build pdfio
cd /tmp
wget -q https://github.com/michaelrsweet/pdfio/releases/download/v1.6.2/pdfio-1.6.2.tar.gz
tar -xzf pdfio-1.6.2.tar.gz && cd pdfio-1.6.2
./configure --prefix=/usr --enable-shared
make all
make install
ldconfig

# Build and Test libcupsfilters
cd $REPO_DIR
export CC=/usr/bin/gcc
./autogen.sh
./configure
make -j$(nproc)

# Mark test-pclm-overflow.sh as XFAIL; VERBOSE=1 for full internal logs
make check V=1 VERBOSE=1 XFAIL_TESTS="cupsfilters/test-pclm-overflow.sh" || (test -f test-suite.log && cat test-suite.log; exit 1)

- name: Upload test artifacts (Emulated)
if: matrix.use-qemu == true && always()
uses: actions/upload-artifact@v4
with:
name: libcupsfilters-test-artifacts-${{ matrix.arch }}
path: |
**/*.log
if-no-files-found: warn