# This workflow will run to update the installer library of # Docker images. These are the images which provide updated wheels # .deb installation packages or maybe just some compiled library name: Build Image Library on: push: # Must match one of these branches AND one of the paths # to be triggered branches: - "main" - "dev" - "library-*" - "feature-*" paths: # Trigger the workflow if a Dockerfile changed - "docker-builders/**" # Trigger if a package was updated - ".build-config.json" - "Pipfile.lock" # Also trigger on workflow changes related to the library - ".github/workflows/installer-library.yml" - ".github/workflows/reusable-workflow-builder.yml" - ".github/scripts/**" # Set a workflow level concurrency group so primary workflow # can wait for this to complete if needed # DO NOT CHANGE without updating main workflow group concurrency: group: build-installer-library cancel-in-progress: false jobs: prepare-docker-build: name: Prepare Docker Image Version Data runs-on: ubuntu-22.04 steps: - name: Set ghcr repository name id: set-ghcr-repository run: | ghcr_name=$(echo "${GITHUB_REPOSITORY}" | awk '{ print tolower($0) }') echo "repository=${ghcr_name}" >> $GITHUB_OUTPUT - name: Checkout uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.9" - name: Install jq run: | sudo apt-get update sudo apt-get install jq - name: Setup qpdf image id: qpdf-setup run: | build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py qpdf) echo ${build_json} echo "qpdf-json=${build_json}" >> $GITHUB_OUTPUT - name: Setup psycopg2 image id: psycopg2-setup run: | build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py psycopg2) echo ${build_json} echo "psycopg2-json=${build_json}" >> $GITHUB_OUTPUT - name: Setup pikepdf image id: pikepdf-setup run: | build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py pikepdf) echo ${build_json} echo "pikepdf-json=${build_json}" >> $GITHUB_OUTPUT - name: Setup jbig2enc image id: jbig2enc-setup run: | build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py jbig2enc) echo ${build_json} echo "jbig2enc-json=${build_json}" >> $GITHUB_OUTPUT - name: Setup other versions id: cache-bust-setup run: | pillow_version=$(jq -r '.default.pillow.version | gsub("=";"")' Pipfile.lock) lxml_version=$(jq -r '.default.lxml.version | gsub("=";"")' Pipfile.lock) echo "Pillow is ${pillow_version}" echo "lxml is ${lxml_version}" echo "pillow-version=${pillow_version}" >> $GITHUB_OUTPUT echo "lxml-version=${lxml_version}" >> $GITHUB_OUTPUT outputs: ghcr-repository: ${{ steps.set-ghcr-repository.outputs.repository }} qpdf-json: ${{ steps.qpdf-setup.outputs.qpdf-json }} pikepdf-json: ${{ steps.pikepdf-setup.outputs.pikepdf-json }} psycopg2-json: ${{ steps.psycopg2-setup.outputs.psycopg2-json }} jbig2enc-json: ${{ steps.jbig2enc-setup.outputs.jbig2enc-json }} pillow-version: ${{ steps.cache-bust-setup.outputs.pillow-version }} lxml-version: ${{ steps.cache-bust-setup.outputs.lxml-version }} build-qpdf-debs: name: qpdf needs: - prepare-docker-build uses: ./.github/workflows/reusable-workflow-builder.yml with: dockerfile: ./docker-builders/Dockerfile.qpdf build-platforms: linux/amd64 build-json: ${{ needs.prepare-docker-build.outputs.qpdf-json }} build-args: | QPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).version }} build-jbig2enc: name: jbig2enc needs: - prepare-docker-build uses: ./.github/workflows/reusable-workflow-builder.yml with: dockerfile: ./docker-builders/Dockerfile.jbig2enc build-json: ${{ needs.prepare-docker-build.outputs.jbig2enc-json }} build-args: | JBIG2ENC_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.jbig2enc-json).version }} build-psycopg2-wheel: name: psycopg2 needs: - prepare-docker-build uses: ./.github/workflows/reusable-workflow-builder.yml with: dockerfile: ./docker-builders/Dockerfile.psycopg2 build-json: ${{ needs.prepare-docker-build.outputs.psycopg2-json }} build-args: | PSYCOPG2_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).version }} build-pikepdf-wheel: name: pikepdf needs: - prepare-docker-build - build-qpdf-debs uses: ./.github/workflows/reusable-workflow-builder.yml with: dockerfile: ./docker-builders/Dockerfile.pikepdf build-json: ${{ needs.prepare-docker-build.outputs.pikepdf-json }} build-args: | REPO=${{ needs.prepare-docker-build.outputs.ghcr-repository }} QPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).version }} PIKEPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).version }} PILLOW_VERSION=${{ needs.prepare-docker-build.outputs.pillow-version }} LXML_VERSION=${{ needs.prepare-docker-build.outputs.lxml-version }} commit-binary-files: name: Store installers needs: - prepare-docker-build - build-qpdf-debs - build-jbig2enc - build-psycopg2-wheel - build-pikepdf-wheel runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v3 with: ref: binary-library - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.9" - name: Install system dependencies run: | sudo apt-get update -qq sudo apt-get install -qq --no-install-recommends tree - name: Extract qpdf files run: | version=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).version }} tag=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).image_tag }} docker pull --quiet ${tag} docker create --name qpdf-extract ${tag} mkdir --parents qpdf/${version}/amd64 docker cp qpdf-extract:/usr/src/qpdf/${version}/amd64 qpdf/${version} mkdir --parents qpdf/${version}/arm64 docker cp qpdf-extract:/usr/src/qpdf/${version}/arm64 qpdf/${version} mkdir --parents qpdf/${version}/armv7 docker cp qpdf-extract:/usr/src/qpdf/${version}/armv7 qpdf/${version} - name: Extract psycopg2 files run: | version=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).version }} tag=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).image_tag }} docker pull --quiet --platform linux/amd64 ${tag} docker create --platform linux/amd64 --name psycopg2-extract ${tag} mkdir --parents psycopg2/${version}/amd64 docker cp psycopg2-extract:/usr/src/wheels/ psycopg2/${version}/amd64 mv psycopg2/${version}/amd64/wheels/* psycopg2/${version}/amd64 rm -r psycopg2/${version}/amd64/wheels/ docker rm psycopg2-extract docker pull --quiet --platform linux/arm64 ${tag} docker create --platform linux/arm64 --name psycopg2-extract ${tag} mkdir --parents psycopg2/${version}/arm64 docker cp psycopg2-extract:/usr/src/wheels/ psycopg2/${version}/arm64 mv psycopg2/${version}/arm64/wheels/* psycopg2/${version}/arm64 rm -r psycopg2/${version}/arm64/wheels/ docker rm psycopg2-extract docker pull --quiet --platform linux/arm/v7 ${tag} docker create --platform linux/arm/v7 --name psycopg2-extract ${tag} mkdir --parents psycopg2/${version}/armv7 docker cp psycopg2-extract:/usr/src/wheels/ psycopg2/${version}/armv7 mv psycopg2/${version}/armv7/wheels/* psycopg2/${version}/armv7 rm -r psycopg2/${version}/armv7/wheels/ docker rm psycopg2-extract - name: Extract pikepdf files run: | version=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).version }} tag=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).image_tag }} docker pull --quiet --platform linux/amd64 ${tag} docker create --platform linux/amd64 --name pikepdf-extract ${tag} mkdir --parents pikepdf/${version}/amd64 docker cp pikepdf-extract:/usr/src/wheels/ pikepdf/${version}/amd64 mv pikepdf/${version}/amd64/wheels/* pikepdf/${version}/amd64 rm -r pikepdf/${version}/amd64/wheels/ docker rm pikepdf-extract docker pull --quiet --platform linux/arm64 ${tag} docker create --platform linux/arm64 --name pikepdf-extract ${tag} mkdir --parents pikepdf/${version}/arm64 docker cp pikepdf-extract:/usr/src/wheels/ pikepdf/${version}/arm64 mv pikepdf/${version}/arm64/wheels/* pikepdf/${version}/arm64 rm -r pikepdf/${version}/arm64/wheels/ docker rm pikepdf-extract docker pull --quiet --platform linux/arm/v7 ${tag} docker create --platform linux/arm/v7 --name pikepdf-extract ${tag} mkdir --parents pikepdf/${version}/armv7 docker cp pikepdf-extract:/usr/src/wheels/ pikepdf/${version}/armv7 mv pikepdf/${version}/armv7/wheels/* pikepdf/${version}/armv7 rm -r pikepdf/${version}/armv7/wheels/ docker rm pikepdf-extract - name: Extract jbig2enc files run: | version=${{ fromJSON(needs.prepare-docker-build.outputs.jbig2enc-json).version }} tag=${{ fromJSON(needs.prepare-docker-build.outputs.jbig2enc-json).image_tag }} docker pull --quiet --platform linux/amd64 ${tag} docker create --platform linux/amd64 --name jbig2enc-extract ${tag} mkdir --parents jbig2enc/${version}/amd64 docker cp jbig2enc-extract:/usr/src/jbig2enc/build jbig2enc/${version}/amd64/ mv jbig2enc/${version}/amd64/build/* jbig2enc/${version}/amd64/ docker rm jbig2enc-extract docker pull --quiet --platform linux/arm64 ${tag} docker create --platform linux/arm64 --name jbig2enc-extract ${tag} mkdir --parents jbig2enc/${version}/arm64 docker cp jbig2enc-extract:/usr/src/jbig2enc/build jbig2enc/${version}/arm64 mv jbig2enc/${version}/arm64/build/* jbig2enc/${version}/arm64/ docker rm jbig2enc-extract docker pull --quiet --platform linux/arm/v7 ${tag} docker create --platform linux/arm/v7 --name jbig2enc-extract ${tag} mkdir --parents jbig2enc/${version}/armv7 docker cp jbig2enc-extract:/usr/src/jbig2enc/build jbig2enc/${version}/armv7 mv jbig2enc/${version}/armv7/build/* jbig2enc/${version}/armv7/ docker rm jbig2enc-extract - name: Show file structure run: | tree . - name: Commit files run: | git config --global user.name "github-actions" git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" git add pikepdf/ qpdf/ psycopg2/ jbig2enc/ git commit -m "Updating installer packages" || true git push origin || true