diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..8a44c14 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,44 @@ +name: CD + +on: + push: + branches: [ "master" ] + workflow_dispatch: # run manually + +jobs: + + build: + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + # we need tags for docker version tagging + fetch-tags: true + fetch-depth: 0 + - # Activate cache export feature to reduce build time of images + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERIO_USERNAME }} + password: ${{ secrets.DOCKERIO_PASSWORD }} + - name: Build the Docker image + # build both tags at the same time + run: make docker DOCKER_TAG="docker.io/ocrd/calamari -t ghcr.io/ocr-d/calamari" + - name: Test the Docker image + run: docker run --rm ocrd/calamari ocrd-calamari-recognize -h + - name: Push to Dockerhub + run: docker push docker.io/ocrd/calamari + - name: Push to Github Container Registry + run: docker push ghcr.io/ocr-d/calamari diff --git a/Dockerfile b/Dockerfile index 895055a..65fcf2e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,35 @@ -FROM ocrd/core -MAINTAINER OCR-D +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/OCR-D/ocrd_calamari" \ + org.label-schema.build-date=$BUILD_DATE \ + org.opencontainers.image.vendor="DFG-Funded Initiative for Optical Character Recognition Development" \ + org.opencontainers.image.title="ocrd_calamari" \ + org.opencontainers.image.description="OCR-D compliant workspace processor for the functionality of Calamari OCR" \ + org.opencontainers.image.source="https://github.com/OCR-D/ocrd_calamari" \ + org.opencontainers.image.documentation="https://github.com/OCR-D/ocrd_calamari/blob/${VCS_REF}/README.md" \ + org.opencontainers.image.revision=$VCS_REF \ + org.opencontainers.image.created=$BUILD_DATE \ + org.opencontainers.image.base.name=$DOCKER_BASE_IMAGE ENV DEBIAN_FRONTEND noninteractive ENV PYTHONIOENCODING utf8 ENV LC_ALL C.UTF-8 ENV LANG C.UTF-8 -WORKDIR /build +WORKDIR /build/calamari COPY Makefile . -COPY setup.py . +COPY pyproject.toml . COPY ocrd-tool.json . COPY requirements.txt . COPY README.md . -COPY ocrd_calamari ocrd_calamari +COPY ocrd_calamari ./ocrd_calamari +RUN make install +RUN rm -rf /build/calamari -RUN pip3 install --upgrade pip && \ - pip3 install . && \ - pip3 check -ENTRYPOINT ["/usr/local/bin/ocrd-calamari-recognize"] +WORKDIR /data +VOLUME ["/data"] diff --git a/Makefile b/Makefile index cfa7cd8..7848d72 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,9 @@ EXAMPLE = actevedef_718448162.first-page+binarization+segmentation # BEGIN-EVAL makefile-parser --make-help Makefile +DOCKER_BASE_IMAGE = docker.io/ocrd/core-cuda-tf2:v2.70.0 +DOCKER_TAG = 'ocrd/calamari' + help: @echo "" @echo " Targets" @@ -21,13 +24,16 @@ help: @echo " assets-clean Remove symlinks in test/assets" @echo " test Run unit tests" @echo " coverage Run unit tests and determine test coverage" + @echo " docker Build Docker image" @echo "" @echo " Variables" @echo "" - @echo " PYTHON '$(PYTHON)'" - @echo " PIP_INSTALL '$(PIP_INSTALL)'" - @echo " GIT_CLONE '$(GIT_CLONE)'" - @echo " MODEL '$(MODEL)'" + @echo " PYTHON '$(PYTHON)'" + @echo " PIP_INSTALL '$(PIP_INSTALL)'" + @echo " GIT_CLONE '$(GIT_CLONE)'" + @echo " MODEL '$(MODEL)'" + @echo " DOCKER_TAG '$(DOCKER_TAG)'" + @echo " DOCKER_BASE_IMAGE '$(DOCKER_BASE_IMAGE)'" # END-EVAL @@ -91,4 +97,11 @@ coverage: test/assets $(MODEL) coverage report coverage html -.PHONY: install assets-clean deps-test test coverage $(MODEL) example +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: install assets-clean deps-test test coverage $(MODEL) example docker diff --git a/pyproject.toml b/pyproject.toml index 8646876..e2b3566 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,6 +40,9 @@ Repository = "https://github.com/OCR-D/ocrd_calamari.git" dependencies = {file = ["requirements.txt"]} optional-dependencies.dev = {file = ["requirements-dev.txt"]} +[tool.setuptools.package-data] +"*" = ["*.json"] + [tool.setuptools.packages.find] where = ["."] include = ["ocrd_calamari"]