diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 000000000..b912ef6d4 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,54 @@ +name: Docker +on: + schedule: + - cron: '0 1 * * *' + push: + tags: + - 'v*.*.*' +jobs: + multiplatform-build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Generate Docker tag + id: docker_tag + run: | + SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-8` + DOCKER_IMAGE=kanboard/kanboard + DOCKER_VERSION=dev + APP_VERSION="master.${SHORT_SHA}" + if [ "${{ github.event_name }}" = "schedule" ]; then + DOCKER_VERSION="nightly" + elif [[ $GITHUB_REF == refs/tags/* ]]; then + DOCKER_VERSION=${GITHUB_REF#refs/tags/} + APP_VERSION=$DOCKER_VERSION + fi + TAGS="${DOCKER_IMAGE}:${DOCKER_VERSION}" + echo ::set-output name=version::${APP_VERSION} + echo ::set-output name=tags::${TAGS} + echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ') + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v2 + with: + context: . + file: Dockerfile + platforms: linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64 + push: true + build-args: | + VERSION=${{ steps.docker_tag.outputs.version }} + tags: ${{ steps.docker_tag.outputs.tags }} diff --git a/Dockerfile b/Dockerfile index 3d7606286..5eaf6fbf0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,4 @@ -ARG BASE_IMAGE_ARCH="amd64" - -FROM ${BASE_IMAGE_ARCH}/alpine:3.12 +FROM alpine:3.12 VOLUME /var/www/app/data VOLUME /var/www/app/plugins @@ -11,7 +9,7 @@ EXPOSE 80 443 ARG VERSION RUN apk --no-cache --update add \ - openssl unzip nginx bash ca-certificates s6 curl ssmtp mailx php7 php7-phar php7-curl \ + tzdata openssl unzip nginx bash ca-certificates s6 curl ssmtp mailx php7 php7-phar php7-curl \ php7-fpm php7-json php7-zlib php7-xml php7-dom php7-ctype php7-opcache php7-zip php7-iconv \ php7-pdo php7-pdo_mysql php7-pdo_sqlite php7-pdo_pgsql php7-mbstring php7-session php7-bcmath \ php7-gd php7-mcrypt php7-openssl php7-sockets php7-posix php7-ldap php7-simplexml && \ diff --git a/Makefile b/Makefile index 8730786b8..f3a0f1ab1 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ DOCKER_TAG := master VERSION := $(shell git rev-parse --short HEAD) .PHONY: archive test-sqlite test-mysql test-postgres sql \ - docker-image docker-manifest docker-run docker-sh + docker-image docker-images docker-run docker-sh archive: @ echo "Build archive: version=$(VERSION)" @@ -40,31 +40,15 @@ sql: @ grep -v "SET idle_in_transaction_session_timeout = 0;" app/Schema/Sql/postgres.sql > temp && mv temp app/Schema/Sql/postgres.sql docker-image: - @ docker build --build-arg VERSION=$(VERSION) -t $(DOCKER_IMAGE):$(DOCKER_TAG) . + @ docker build --build-arg VERSION=master.$(VERSION) -t $(DOCKER_IMAGE):$(DOCKER_TAG) . -docker-manifest: - for version in $(VERSION) latest; do \ - docker build --build-arg VERSION=$(VERSION) --build-arg BASE_IMAGE_ARCH=amd64 -t $(DOCKER_IMAGE):amd64-$${version} . && \ - docker build --build-arg VERSION=$(VERSION) --build-arg BASE_IMAGE_ARCH=arm32v6 -t $(DOCKER_IMAGE):arm32v6-$${version} . && \ - docker build --build-arg VERSION=$(VERSION) --build-arg BASE_IMAGE_ARCH=arm32v7 -t $(DOCKER_IMAGE):arm32v7-$${version} . && \ - docker build --build-arg VERSION=$(VERSION) --build-arg BASE_IMAGE_ARCH=arm64v8 -t $(DOCKER_IMAGE):arm64v8-$${version} . && \ - docker push $(DOCKER_IMAGE):amd64-$${version} && \ - docker push $(DOCKER_IMAGE):arm32v6-$${version} && \ - docker push $(DOCKER_IMAGE):arm32v7-$${version} && \ - docker push $(DOCKER_IMAGE):arm64v8-$${version} && \ - docker manifest create --amend $(DOCKER_IMAGE):$${version} \ - $(DOCKER_IMAGE):amd64-$${version} \ - $(DOCKER_IMAGE):arm32v6-$${version} \ - $(DOCKER_IMAGE):arm32v7-$${version} \ - $(DOCKER_IMAGE):arm64v8-$${version} && \ - docker manifest annotate $(DOCKER_IMAGE):$${version} \ - $(DOCKER_IMAGE):arm32v6-$${version} --os linux --arch arm --variant v6 && \ - docker manifest annotate $(DOCKER_IMAGE):$${version} \ - $(DOCKER_IMAGE):arm32v7-$${version} --os linux --arch arm --variant v7 && \ - docker manifest annotate $(DOCKER_IMAGE):$${version} \ - $(DOCKER_IMAGE):arm64v8-$${version} --os linux --arch arm64 --variant v8 && \ - docker manifest push --purge $(DOCKER_IMAGE):$${version} ;\ - done +docker-images: + docker buildx build \ + --platform linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 \ + --file Dockerfile \ + --build-arg VERSION=master.$(VERSION) \ + --tag $(DOCKER_IMAGE):$(VERSION) \ + . docker-run: @ docker run --rm --name=kanboard -p 80:80 -p 443:443 $(DOCKER_IMAGE):$(DOCKER_TAG)