From 23e282ce8c03b9f0353af9b408022a69d3c7510f Mon Sep 17 00:00:00 2001 From: Robert Sachunsky Date: Mon, 30 Sep 2024 21:27:04 +0200 Subject: [PATCH] add GHA CD via Dockerhub --- .github/workflows/docker-image.yml | 47 ++++++++++++++++++++++++++++++ Dockerfile | 22 ++++++++++++++ Makefile | 16 ++++++++++ README.md | 20 ++++++++----- 4 files changed, 97 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/docker-image.yml create mode 100644 Dockerfile diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 0000000..17b6cb8 --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,47 @@ +name: Docker Image CD + +on: + push: + branches: [ "master" ] + workflow_dispatch: + inputs: + docker-tagname: + description: Tag name of the Docker image + default: 'ocrd/sbb_binarization' + +env: + DOCKER_TAGNAME: ${{ github.evenv.inputs.docker-tagname || 'ocrd/sbb_binarization' }} + +jobs: + + build: + + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + + steps: + - uses: actions/checkout@v4 + - # Activate cache export feature to reduce build time of image + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Build the Docker image + run: make docker DOCKER_TAG=${{ env.DOCKER_TAGNAME }} + - name: Login to Dockerhub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + - name: Push image to Dockerhub + run: docker push ${{ env.DOCKER_TAGNAME }} + - name: Alias the Docker image for GHCR + run: docker tag ${{ env.DOCKER_TAGNAME }} ghcr.io/${{ github.repository }} + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Push image to Github Container Registry + run: docker push ghcr.io/${{ github.repository }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7cbd98e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +ARG DOCKER_BASE_IMAGE +FROM $DOCKER_BASE_IMAGE +ARG VCS_REF +ARG BUILD_DATE +LABEL \ + maintainer="https://ocr-d.de/kontakt" \ + org.label-schema.vcs-ref=$VCS_REF \ + org.label-schema.vcs-url="https://github.com/qurator-spk/sbb_binarization" \ + org.label-schema.build-date=$BUILD_DATE + +WORKDIR /build/sbb_binarization +COPY setup.py . +COPY ocrd-tool.json . +COPY sbb_binarize ./sbb_binarize +COPY requirements.txt . +COPY README.md . +COPY Makefile . +RUN make install +RUN rm -rf /build/sbb_binarization + +WORKDIR /data +VOLUME ["/data"] diff --git a/Makefile b/Makefile index e4f5b87..b9bd15b 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,8 @@ # BEGIN-EVAL makefile-parser --make-help Makefile +DOCKER_BASE_IMAGE = docker.io/ocrd/core:v2.69.0 +DOCKER_TAG = ocrd/nmalign + .PHONY: help install help: @echo "" @@ -10,8 +13,12 @@ help: @echo " test Run tests" @echo " clean Remove copies/results in test/assets" @echo "" + @echo " docker Build a Docker image $(DOCKER_TAG) from $(DOCKER_BASE_IMAGE)" + @echo "" @echo " Variables" @echo "" + @echo " PYTHON" + @echo " DOCKER_TAG Docker image tag of result for the docker target" # END-EVAL @@ -40,6 +47,15 @@ test: test/assets models ocrd-sbb-binarize -m test/assets/kant_aufklaerung_1784-page-region/data/mets.xml -g phys_0001 -I OCR-D-GT-SEG-REGION -O BIN -P model default -P operation_level region ocrd-sbb-binarize -m test/assets/kant_aufklaerung_1784-page-region/data/mets.xml -g phys_0001 -I OCR-D-GT-SEG-REGION -O BIN2 -P model default-2021-03-09 -P operation_level region +.PHONY: docker +docker: + docker build \ + --build-arg DOCKER_BASE_IMAGE=$(DOCKER_BASE_IMAGE) \ + --build-arg VCS_REF=$$(git rev-parse --short HEAD) \ + --build-arg BUILD_DATE=$$(date -u +"%Y-%m-%dT%H:%M:%SZ") \ + -t $(DOCKER_TAG) . + + .PHONY: clean clean: -$(RM) -fr test/assets diff --git a/README.md b/README.md index 39d4ad1..ef69cb6 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,8 @@ > Document Image Binarization [![pip release](https://img.shields.io/pypi/v/sbb-binarization.svg)](https://pypi.org/project/sbb-binarization/) -[![GHActions Tests](https://github.com/qurator-spk/sbb_binarization/actions/workflows/test.yml/badge.svg)](https://github.com/qurator-spk/sbb_binarization/actions/workflows/test.yml) +[![GHActions CI](https://github.com/qurator-spk/sbb_binarization/actions/workflows/test.yml/badge.svg)](https://github.com/qurator-spk/sbb_binarization/actions/workflows/test.yml) +[![GHActions CD](https://github.com/qurator-spk/sbb_binarization/actions/workflows/docker-image.yml/badge.svg)](https://github.com/qurator-spk/sbb_binarization/actions/workflows/docker-image.yml) @@ -13,16 +14,19 @@ Python `3.7-3.10` with Tensorflow `<=2.11.1` are currently supported. While newe You can either install from PyPI via -``` -pip install sbb-binarization -``` + pip install sbb-binarization + or clone the repository, enter it and install (editable) with -``` -git clone git@github.com:qurator-spk/sbb_binarization.git -cd sbb_binarization; pip install -e . -``` + git clone git@github.com:qurator-spk/sbb_binarization.git + cd sbb_binarization; pip install -e . + + +Alternatively, download the prebuilt image from Dockerhub: + + docker pull ocrd/sbb_binarization + ### Models