release v1.2.0 #49
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build Packages | |
| on: | |
| push: | |
| branches: [main] | |
| tags: | |
| - 'v*' | |
| paths: | |
| - 'CMakeLists.txt' | |
| - 'cmake/**' | |
| - 'repo/**' | |
| - 'src/**' | |
| - 'include/**' | |
| - 'bindings/**' | |
| - 'docker/**' | |
| - '.github/workflows/packaging.yml' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - 'CMakeLists.txt' | |
| - 'cmake/**' | |
| - 'repo/**' | |
| - 'src/**' | |
| - 'include/**' | |
| - 'bindings/**' | |
| - 'docker/**' | |
| - '.github/workflows/packaging.yml' | |
| workflow_dispatch: | |
| inputs: | |
| publish: | |
| description: 'Publish packages to repository' | |
| required: false | |
| default: false | |
| type: boolean | |
| env: | |
| DOCKER_BUILDKIT: 1 | |
| jobs: | |
| # ============================================================================ | |
| # Build DEB packages for Debian/Ubuntu | |
| # ============================================================================ | |
| build-deb: | |
| name: Build DEB (${{ matrix.distro }}) | |
| runs-on: ubuntu-latest | |
| container: ${{ matrix.image }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - distro: ubuntu-22.04 | |
| image: ubuntu:22.04 | |
| codename: jammy | |
| - distro: ubuntu-24.04 | |
| image: ubuntu:24.04 | |
| codename: noble | |
| - distro: debian-13 | |
| image: debian:trixie | |
| codename: trixie | |
| steps: | |
| - name: Cache APT packages | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| /var/cache/apt/archives | |
| /var/lib/apt/lists | |
| key: apt-${{ matrix.distro }}-${{ hashFiles('.github/workflows/packaging.yml') }} | |
| restore-keys: | | |
| apt-${{ matrix.distro }}- | |
| - name: Install dependencies | |
| run: | | |
| apt-get update | |
| apt-get install -y \ | |
| build-essential \ | |
| cmake \ | |
| git \ | |
| file \ | |
| dpkg-dev \ | |
| debhelper | |
| - name: Install GCC 13 (for older distros) | |
| if: matrix.distro == 'ubuntu-22.04' | |
| run: | | |
| # Ubuntu 22.04: Add toolchain PPA for GCC 13 | |
| apt-get install -y software-properties-common | |
| add-apt-repository -y ppa:ubuntu-toolchain-r/test | |
| apt-get update | |
| apt-get install -y gcc-13 g++-13 | |
| update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 100 | |
| update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 100 | |
| gcc --version | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Cache CMake build | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| build | |
| ~/.cache/ccache | |
| key: cmake-deb-${{ matrix.distro }}-${{ hashFiles('CMakeLists.txt', 'cmake/**', 'src/**', 'include/**') }} | |
| restore-keys: | | |
| cmake-deb-${{ matrix.distro }}- | |
| - name: Configure CMake | |
| run: | | |
| cmake -B build \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DBUILD_TESTS=OFF \ | |
| -DBUILD_BENCHMARKS=OFF \ | |
| -DBUILD_GO_WRAPPER=OFF \ | |
| -DBUILD_CPP_WRAPPER=OFF | |
| - name: Build | |
| run: cmake --build build --parallel $(nproc) | |
| - name: Build DEB packages | |
| run: | | |
| cd build | |
| cpack -G DEB | |
| ls -la *.deb | |
| - name: Upload DEB artifacts | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: deb-${{ matrix.codename }} | |
| path: build/*.deb | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Build RPM packages for EL (Rocky/RHEL) | |
| # ============================================================================ | |
| build-rpm-el: | |
| name: Build RPM (EL ${{ matrix.version }}) | |
| runs-on: ubuntu-latest | |
| container: rockylinux:${{ matrix.version }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - version: 8 | |
| family: el | |
| - version: 9 | |
| family: el | |
| steps: | |
| - name: Cache DNF packages | |
| uses: actions/cache@v5 | |
| with: | |
| path: /var/cache/dnf | |
| key: dnf-el${{ matrix.version }}-${{ hashFiles('.github/workflows/packaging.yml') }} | |
| restore-keys: | | |
| dnf-el${{ matrix.version }}- | |
| - name: Install dependencies | |
| run: | | |
| # Enable EPEL and PowerTools/CRB for additional packages | |
| dnf install -y epel-release | |
| if [ "${{ matrix.version }}" = "8" ]; then | |
| dnf config-manager --set-enabled powertools || dnf config-manager --set-enabled PowerTools | |
| else | |
| dnf config-manager --set-enabled crb || dnf config-manager --set-enabled CRB | |
| fi | |
| dnf install -y \ | |
| gcc \ | |
| gcc-c++ \ | |
| cmake \ | |
| git \ | |
| rpm-build \ | |
| make | |
| - name: Install GCC 13 (for EL systems) | |
| run: | | |
| if [ "${{ matrix.version }}" = "8" ]; then | |
| # EL 8: Install GCC Toolset 13 | |
| dnf install -y gcc-toolset-13-gcc gcc-toolset-13-gcc-c++ | |
| echo "source /opt/rh/gcc-toolset-13/enable" >> ~/.bashrc | |
| source /opt/rh/gcc-toolset-13/enable | |
| elif [ "${{ matrix.version }}" = "9" ]; then | |
| # EL 9: Install GCC Toolset 13 | |
| dnf install -y gcc-toolset-13-gcc gcc-toolset-13-gcc-c++ | |
| echo "source /opt/rh/gcc-toolset-13/enable" >> ~/.bashrc | |
| source /opt/rh/gcc-toolset-13/enable | |
| fi | |
| gcc --version | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Cache CMake build | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| build | |
| ~/.cache/ccache | |
| key: cmake-rpm-el${{ matrix.version }}-${{ hashFiles('CMakeLists.txt', 'cmake/**', 'src/**', 'include/**') }} | |
| restore-keys: | | |
| cmake-rpm-el${{ matrix.version }}- | |
| - name: Configure CMake | |
| run: | | |
| # Enable GCC toolset for EL systems | |
| if [ -f /opt/rh/gcc-toolset-13/enable ]; then | |
| source /opt/rh/gcc-toolset-13/enable | |
| fi | |
| cmake -B build \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DBUILD_TESTS=OFF \ | |
| -DBUILD_BENCHMARKS=OFF \ | |
| -DBUILD_GO_WRAPPER=OFF \ | |
| -DBUILD_CPP_WRAPPER=OFF | |
| - name: Build | |
| run: | | |
| # Enable GCC toolset for EL systems | |
| if [ -f /opt/rh/gcc-toolset-13/enable ]; then | |
| source /opt/rh/gcc-toolset-13/enable | |
| fi | |
| cmake --build build --parallel $(nproc) | |
| - name: Build RPM packages | |
| run: | | |
| # Enable GCC toolset for EL systems | |
| if [ -f /opt/rh/gcc-toolset-13/enable ]; then | |
| source /opt/rh/gcc-toolset-13/enable | |
| fi | |
| cd build | |
| cpack -G RPM | |
| ls -la *.rpm | |
| - name: Upload RPM artifacts | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: rpm-el${{ matrix.version }} | |
| path: build/*.rpm | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Build RPM packages for Fedora | |
| # ============================================================================ | |
| build-rpm-fedora: | |
| name: Build RPM (Fedora ${{ matrix.version }}) | |
| runs-on: ubuntu-latest | |
| container: fedora:${{ matrix.version }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - version: 40 | |
| family: fedora | |
| - version: 41 | |
| family: fedora | |
| steps: | |
| - name: Cache DNF packages | |
| uses: actions/cache@v5 | |
| with: | |
| path: /var/cache/dnf | |
| key: dnf-fedora${{ matrix.version }}-${{ hashFiles('.github/workflows/packaging.yml') }} | |
| restore-keys: | | |
| dnf-fedora${{ matrix.version }}- | |
| - name: Install dependencies | |
| run: | | |
| dnf install -y \ | |
| gcc \ | |
| gcc-c++ \ | |
| cmake \ | |
| git \ | |
| rpm-build \ | |
| make | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Cache CMake build | |
| uses: actions/cache@v5 | |
| with: | |
| path: | | |
| build | |
| ~/.cache/ccache | |
| key: cmake-rpm-fedora${{ matrix.version }}-${{ hashFiles('CMakeLists.txt', 'cmake/**', 'src/**', 'include/**') }} | |
| restore-keys: | | |
| cmake-rpm-fedora${{ matrix.version }}- | |
| - name: Configure CMake | |
| run: | | |
| cmake -B build \ | |
| -DCMAKE_BUILD_TYPE=Release \ | |
| -DBUILD_TESTS=OFF \ | |
| -DBUILD_BENCHMARKS=OFF \ | |
| -DBUILD_GO_WRAPPER=OFF \ | |
| -DBUILD_CPP_WRAPPER=OFF | |
| - name: Build | |
| run: cmake --build build --parallel $(nproc) | |
| - name: Build RPM packages | |
| run: | | |
| cd build | |
| cpack -G RPM | |
| ls -la *.rpm | |
| - name: Upload RPM artifacts | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: rpm-fedora${{ matrix.version }} | |
| path: build/*.rpm | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Test package installation | |
| # ============================================================================ | |
| test-deb-install: | |
| name: Test DEB Install (${{ matrix.distro }}) | |
| needs: build-deb | |
| runs-on: ubuntu-latest | |
| container: ${{ matrix.image }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - distro: ubuntu-22.04 | |
| image: ubuntu:22.04 | |
| codename: jammy | |
| - distro: ubuntu-24.04 | |
| image: ubuntu:24.04 | |
| codename: noble | |
| - distro: debian-13 | |
| image: debian:trixie | |
| codename: trixie | |
| steps: | |
| - name: Download DEB artifacts | |
| uses: actions/download-artifact@v6 | |
| with: | |
| name: deb-${{ matrix.codename }} | |
| path: packages | |
| - name: Install packages | |
| run: | | |
| apt-get update | |
| apt-get install -y ./packages/liblpm_*.deb ./packages/liblpm-dev_*.deb | |
| - name: Verify installation | |
| run: | | |
| # Check library is installed | |
| ldconfig -p | grep liblpm | |
| # Check headers are installed | |
| ls -la /usr/include/lpm/ | |
| # Check pkg-config | |
| apt-get install -y pkg-config | |
| pkg-config --modversion liblpm | |
| pkg-config --libs liblpm | |
| pkg-config --cflags liblpm | |
| test-rpm-install: | |
| name: Test RPM Install (EL ${{ matrix.version }}) | |
| needs: build-rpm-el | |
| runs-on: ubuntu-latest | |
| container: rockylinux:${{ matrix.version }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - version: 8 | |
| - version: 9 | |
| steps: | |
| - name: Download RPM artifacts | |
| uses: actions/download-artifact@v6 | |
| with: | |
| name: rpm-el${{ matrix.version }} | |
| path: packages | |
| - name: Install packages | |
| run: | | |
| dnf install -y ./packages/liblpm-*.rpm ./packages/liblpm-devel-*.rpm | |
| - name: Verify installation | |
| run: | | |
| # Check library is installed | |
| ldconfig -p | grep liblpm | |
| # Check headers are installed | |
| ls -la /usr/include/lpm/ | |
| # Check pkg-config | |
| dnf install -y pkgconfig | |
| pkg-config --modversion liblpm | |
| pkg-config --libs liblpm | |
| pkg-config --cflags liblpm | |
| # ============================================================================ | |
| # Build Python Wheel (Universal) | |
| # ============================================================================ | |
| build-python-wheel: | |
| name: Build Python Wheel | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build Python wheel | |
| run: | | |
| docker build -f docker/Dockerfile.python -t liblpm-python \ | |
| --cache-from type=gha,scope=python-wheel \ | |
| --cache-to type=gha,mode=max,scope=python-wheel . | |
| mkdir -p packages/python | |
| docker run --rm -v "$PWD/packages/python:/artifacts" \ | |
| --entrypoint bash \ | |
| liblpm-python \ | |
| -c '. /opt/venv/bin/activate && cd /build/bindings/python && pip install -q build && python3 -m build --wheel --outdir /artifacts 2>&1' | |
| ls -la packages/python/ | |
| - name: Upload Python wheel | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: python-wheel | |
| path: packages/python/*.whl | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Build Python DEB packages | |
| # ============================================================================ | |
| build-python-deb: | |
| name: Build Python DEB (${{ matrix.distro }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - distro: ubuntu-22.04 | |
| target_distro: ubuntu | |
| target_version: "22.04" | |
| - distro: ubuntu-24.04 | |
| target_distro: ubuntu | |
| target_version: "24.04" | |
| - distro: debian-12 | |
| target_distro: debian | |
| target_version: "12" | |
| - distro: debian-13 | |
| target_distro: debian | |
| target_version: "13" | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build Python DEB package | |
| run: | | |
| docker build -f docker/Dockerfile.python.deb \ | |
| --build-arg TARGET_DISTRO=${{ matrix.target_distro }} \ | |
| --build-arg TARGET_VERSION=${{ matrix.target_version }} \ | |
| --cache-from type=gha,scope=python-deb-${{ matrix.distro }} \ | |
| --cache-to type=gha,mode=max,scope=python-deb-${{ matrix.distro }} \ | |
| -t liblpm-python-deb:${{ matrix.distro }} . | |
| mkdir -p packages/python-deb | |
| docker run --rm \ | |
| -v "$PWD:/workspace" \ | |
| -v "$PWD/packages/python-deb:/packages" \ | |
| liblpm-python-deb:${{ matrix.distro }} | |
| ls -la packages/python-deb/ | |
| - name: Upload Python DEB artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: python-deb-${{ matrix.distro }} | |
| path: packages/python-deb/*.deb | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Build Python RPM packages | |
| # ============================================================================ | |
| build-python-rpm: | |
| name: Build Python RPM (${{ matrix.distro }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # Note: Rocky Linux 9 has Python 3.9, liblpm requires 3.10+ | |
| # Only Fedora is supported for Python RPM | |
| - distro: fedora-41 | |
| rpm_distro: fedora | |
| rpm_version: "41" | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build Python RPM package | |
| run: | | |
| docker build -f docker/Dockerfile.python.rpm \ | |
| --build-arg DISTRO=${{ matrix.rpm_distro }} \ | |
| --build-arg VERSION=${{ matrix.rpm_version }} \ | |
| --cache-from type=gha,scope=python-rpm-${{ matrix.distro }} \ | |
| --cache-to type=gha,mode=max,scope=python-rpm-${{ matrix.distro }} \ | |
| -t liblpm-python-rpm:${{ matrix.distro }} . | |
| mkdir -p packages/python-rpm | |
| docker run --rm \ | |
| -v "$PWD:/workspace" \ | |
| -v "$PWD/packages/python-rpm:/packages" \ | |
| liblpm-python-rpm:${{ matrix.distro }} | |
| ls -la packages/python-rpm/ | |
| - name: Upload Python RPM artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: python-rpm-${{ matrix.distro }} | |
| path: packages/python-rpm/*.rpm | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Build PHP PECL package | |
| # ============================================================================ | |
| build-php-pecl: | |
| name: Build PHP PECL | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build PHP PECL package | |
| run: | | |
| docker build -f docker/Dockerfile.php.pecl -t liblpm-php-pecl \ | |
| --cache-from type=gha,scope=php-pecl \ | |
| --cache-to type=gha,mode=max,scope=php-pecl . | |
| mkdir -p packages/php | |
| docker run --rm -v "$PWD/packages/php:/artifacts" liblpm-php-pecl | |
| ls -la packages/php/ | |
| - name: Upload PHP PECL artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: php-pecl | |
| path: packages/php/*.tgz | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Build PHP DEB packages | |
| # ============================================================================ | |
| build-php-deb: | |
| name: Build PHP DEB (${{ matrix.distro }}, PHP ${{ matrix.php_version }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - distro: ubuntu-22.04 | |
| target_distro: ubuntu | |
| target_version: "22.04" | |
| php_version: "8.1" | |
| - distro: ubuntu-24.04 | |
| target_distro: ubuntu | |
| target_version: "24.04" | |
| php_version: "8.3" | |
| - distro: debian-12 | |
| target_distro: debian | |
| target_version: "12" | |
| php_version: "8.2" | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build PHP DEB package | |
| run: | | |
| docker build -f docker/Dockerfile.php.deb \ | |
| --build-arg PHP_VERSION=${{ matrix.php_version }} \ | |
| --build-arg TARGET_DISTRO=${{ matrix.target_distro }} \ | |
| --build-arg TARGET_VERSION=${{ matrix.target_version }} \ | |
| --cache-from type=gha,scope=php-deb-${{ matrix.distro }} \ | |
| --cache-to type=gha,mode=max,scope=php-deb-${{ matrix.distro }} \ | |
| -t liblpm-php-deb:${{ matrix.distro }} . | |
| mkdir -p packages/php-deb | |
| docker run --rm \ | |
| -v "$PWD:/workspace" \ | |
| -v "$PWD/packages/php-deb:/packages" \ | |
| liblpm-php-deb:${{ matrix.distro }} | |
| ls -la packages/php-deb/ | |
| - name: Upload PHP DEB artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: php-deb-${{ matrix.distro }} | |
| path: packages/php-deb/*.deb | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Build PHP RPM packages | |
| # ============================================================================ | |
| build-php-rpm: | |
| name: Build PHP RPM (${{ matrix.distro }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - distro: rocky-9 | |
| rpm_distro: rockylinux | |
| rpm_version: "9" | |
| - distro: fedora-41 | |
| rpm_distro: fedora | |
| rpm_version: "41" | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build PHP RPM package | |
| run: | | |
| docker build -f docker/Dockerfile.php.rpm \ | |
| --build-arg DISTRO=${{ matrix.rpm_distro }} \ | |
| --build-arg VERSION=${{ matrix.rpm_version }} \ | |
| --cache-from type=gha,scope=php-rpm-${{ matrix.distro }} \ | |
| --cache-to type=gha,mode=max,scope=php-rpm-${{ matrix.distro }} \ | |
| -t liblpm-php-rpm:${{ matrix.distro }} . | |
| mkdir -p packages/php-rpm | |
| docker run --rm \ | |
| -v "$PWD:/workspace" \ | |
| -v "$PWD/packages/php-rpm:/packages" \ | |
| liblpm-php-rpm:${{ matrix.distro }} | |
| ls -la packages/php-rpm/ | |
| - name: Upload PHP RPM artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: php-rpm-${{ matrix.distro }} | |
| path: packages/php-rpm/*.rpm | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Build Perl DEB packages | |
| # ============================================================================ | |
| build-perl-deb: | |
| name: Build Perl DEB (${{ matrix.distro }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - distro: ubuntu-22.04 | |
| target_distro: ubuntu | |
| target_version: "22.04" | |
| - distro: ubuntu-24.04 | |
| target_distro: ubuntu | |
| target_version: "24.04" | |
| - distro: debian-12 | |
| target_distro: debian | |
| target_version: "12" | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build Perl DEB package | |
| run: | | |
| docker build -f docker/Dockerfile.perl.deb \ | |
| --build-arg TARGET_DISTRO=${{ matrix.target_distro }} \ | |
| --build-arg TARGET_VERSION=${{ matrix.target_version }} \ | |
| --cache-from type=gha,scope=perl-deb-${{ matrix.distro }} \ | |
| --cache-to type=gha,mode=max,scope=perl-deb-${{ matrix.distro }} \ | |
| -t liblpm-perl-deb:${{ matrix.distro }} . | |
| mkdir -p packages/perl-deb | |
| docker run --rm \ | |
| -v "$PWD:/workspace" \ | |
| -v "$PWD/packages/perl-deb:/packages" \ | |
| liblpm-perl-deb:${{ matrix.distro }} | |
| ls -la packages/perl-deb/ | |
| - name: Upload Perl DEB artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: perl-deb-${{ matrix.distro }} | |
| path: packages/perl-deb/*.deb | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Build Perl RPM packages | |
| # ============================================================================ | |
| build-perl-rpm: | |
| name: Build Perl RPM (${{ matrix.distro }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - distro: rocky-9 | |
| rpm_distro: rockylinux | |
| rpm_version: "9" | |
| - distro: fedora-41 | |
| rpm_distro: fedora | |
| rpm_version: "41" | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build Perl RPM package | |
| run: | | |
| docker build -f docker/Dockerfile.perl.rpm \ | |
| --build-arg DISTRO=${{ matrix.rpm_distro }} \ | |
| --build-arg VERSION=${{ matrix.rpm_version }} \ | |
| --cache-from type=gha,scope=perl-rpm-${{ matrix.distro }} \ | |
| --cache-to type=gha,mode=max,scope=perl-rpm-${{ matrix.distro }} \ | |
| -t liblpm-perl-rpm:${{ matrix.distro }} . | |
| mkdir -p packages/perl-rpm | |
| docker run --rm \ | |
| -v "$PWD:/workspace" \ | |
| -v "$PWD/packages/perl-rpm:/packages" \ | |
| liblpm-perl-rpm:${{ matrix.distro }} | |
| ls -la packages/perl-rpm/ | |
| - name: Upload Perl RPM artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: perl-rpm-${{ matrix.distro }} | |
| path: packages/perl-rpm/*.rpm | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Build Java JAR package | |
| # ============================================================================ | |
| build-java-jar: | |
| name: Build Java JAR | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build Java JAR | |
| run: | | |
| docker build -f docker/Dockerfile.java -t liblpm-java \ | |
| --cache-from type=gha,scope=java-jar \ | |
| --cache-to type=gha,mode=max,scope=java-jar . | |
| mkdir -p packages/java | |
| docker run --rm -v "$PWD/packages/java:/artifacts" \ | |
| --entrypoint sh \ | |
| liblpm-java \ | |
| -c 'find /app/build/libs -name "*.jar" ! -name "*-sources.jar" ! -name "*-javadoc.jar" -exec cp {} /artifacts/ \; 2>/dev/null || find /java/build/libs -name "*.jar" ! -name "*-sources.jar" ! -name "*-javadoc.jar" -exec cp {} /artifacts/ \;' | |
| ls -la packages/java/ | |
| - name: Upload Java JAR artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: java-jar | |
| path: packages/java/*.jar | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Build C# NuGet package | |
| # ============================================================================ | |
| build-csharp-nuget: | |
| name: Build C# NuGet | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build C# NuGet package | |
| run: | | |
| docker build -f docker/Dockerfile.csharp -t liblpm-csharp \ | |
| --cache-from type=gha,scope=csharp-nuget \ | |
| --cache-to type=gha,mode=max,scope=csharp-nuget . | |
| mkdir -p packages/csharp | |
| docker run --rm -v "$PWD/packages/csharp:/artifacts" \ | |
| --entrypoint bash \ | |
| liblpm-csharp \ | |
| -c 'cd /build/bindings/csharp/LibLpm && mkdir -p build && echo "<Project />" > build/LibLpm.targets && cd .. && dotnet pack LibLpm/LibLpm.csproj --configuration Release -o /artifacts 2>&1' | |
| ls -la packages/csharp/ | |
| - name: Upload C# NuGet artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: csharp-nuget | |
| path: packages/csharp/*.nupkg | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Build Go source tarball | |
| # ============================================================================ | |
| build-go-tarball: | |
| name: Build Go Tarball | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build Go tarball | |
| run: | | |
| docker build -f docker/Dockerfile.go -t liblpm-go \ | |
| --cache-from type=gha,scope=go-tarball \ | |
| --cache-to type=gha,mode=max,scope=go-tarball . | |
| mkdir -p packages/go | |
| docker run --rm -v "$PWD/packages/go:/artifacts" \ | |
| --entrypoint bash \ | |
| liblpm-go \ | |
| -c 'cd /app && tar -czf /artifacts/liblpm-go-source.tar.gz --exclude=".git" --exclude="*.test" . 2>&1' | |
| ls -la packages/go/ | |
| - name: Upload Go tarball artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: go-tarball | |
| path: packages/go/*.tar.gz | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Build Lua module | |
| # ============================================================================ | |
| build-lua-module: | |
| name: Build Lua Module | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| with: | |
| submodules: recursive | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build Lua module | |
| run: | | |
| docker build -f docker/Dockerfile.lua -t liblpm-lua \ | |
| --cache-from type=gha,scope=lua-module \ | |
| --cache-to type=gha,mode=max,scope=lua-module . | |
| mkdir -p packages/lua | |
| docker run --rm -v "$PWD/packages/lua:/artifacts" \ | |
| --entrypoint sh \ | |
| liblpm-lua \ | |
| -c 'find /usr/local/lib/lua -name "liblpm.so" -exec cp {} /artifacts/ \;' | |
| ls -la packages/lua/ | |
| - name: Upload Lua module artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: lua-module | |
| path: packages/lua/*.so | |
| retention-days: 7 | |
| # ============================================================================ | |
| # Packaging Summary | |
| # ============================================================================ | |
| packaging-summary: | |
| name: Packaging Summary | |
| runs-on: ubuntu-latest | |
| needs: | |
| - build-deb | |
| - build-rpm-el | |
| - build-rpm-fedora | |
| - test-deb-install | |
| - test-rpm-install | |
| - build-python-wheel | |
| - build-python-deb | |
| - build-python-rpm | |
| - build-php-pecl | |
| - build-php-deb | |
| - build-php-rpm | |
| - build-perl-deb | |
| - build-perl-rpm | |
| - build-java-jar | |
| - build-csharp-nuget | |
| - build-go-tarball | |
| - build-lua-module | |
| if: always() | |
| steps: | |
| - name: Check packaging status | |
| run: | | |
| echo "## Packaging Summary" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Native Packages" >> $GITHUB_STEP_SUMMARY | |
| echo "| Package | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|---------|--------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| DEB packages | ${{ needs.build-deb.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| RPM EL packages | ${{ needs.build-rpm-el.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| RPM Fedora packages | ${{ needs.build-rpm-fedora.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Language Bindings" >> $GITHUB_STEP_SUMMARY | |
| echo "| Package | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|---------|--------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| Python Wheel | ${{ needs.build-python-wheel.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Python DEB | ${{ needs.build-python-deb.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Python RPM | ${{ needs.build-python-rpm.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| PHP PECL | ${{ needs.build-php-pecl.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| PHP DEB | ${{ needs.build-php-deb.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| PHP RPM | ${{ needs.build-php-rpm.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Perl DEB | ${{ needs.build-perl-deb.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Perl RPM | ${{ needs.build-perl-rpm.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Java JAR | ${{ needs.build-java-jar.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| C# NuGet | ${{ needs.build-csharp-nuget.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Go Tarball | ${{ needs.build-go-tarball.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| Lua Module | ${{ needs.build-lua-module.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Installation Tests" >> $GITHUB_STEP_SUMMARY | |
| echo "| Test | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|------|--------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| DEB Install | ${{ needs.test-deb-install.result }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| RPM Install | ${{ needs.test-rpm-install.result }} |" >> $GITHUB_STEP_SUMMARY |