mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-02 13:45:10 -05:00
311 lines
12 KiB
YAML
311 lines
12 KiB
YAML
# 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
|