mirror of
https://github.com/drakkan/sftpgo.git
synced 2026-03-22 09:52:47 +01:00
building docker images now takes too long and often fails with random errors. I have to restart the build several times to be able to push the images to docker hub and gcr
162 lines
No EOL
6.3 KiB
YAML
162 lines
No EOL
6.3 KiB
YAML
name: Docker
|
|
|
|
on:
|
|
#schedule:
|
|
# - cron: '0 4 * * *' # everyday at 4:00 AM UTC
|
|
push:
|
|
branches:
|
|
- main
|
|
tags:
|
|
- v*
|
|
pull_request:
|
|
|
|
jobs:
|
|
build:
|
|
name: Build
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os:
|
|
- ubuntu-latest
|
|
docker_pkg:
|
|
- debian
|
|
- alpine
|
|
optional_deps:
|
|
- true
|
|
- false
|
|
include:
|
|
- os: ubuntu-latest
|
|
docker_pkg: distroless
|
|
optional_deps: false
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Gather image information
|
|
id: info
|
|
run: |
|
|
VERSION=noop
|
|
DOCKERFILE=Dockerfile
|
|
MINOR=""
|
|
MAJOR=""
|
|
if [ "${{ github.event_name }}" = "schedule" ]; then
|
|
VERSION=nightly
|
|
elif [[ $GITHUB_REF == refs/tags/* ]]; then
|
|
VERSION=${GITHUB_REF#refs/tags/}
|
|
elif [[ $GITHUB_REF == refs/heads/* ]]; then
|
|
VERSION=$(echo ${GITHUB_REF#refs/heads/} | sed -r 's#/+#-#g')
|
|
if [ "${{ github.event.repository.default_branch }}" = "$VERSION" ]; then
|
|
VERSION=edge
|
|
fi
|
|
elif [[ $GITHUB_REF == refs/pull/* ]]; then
|
|
VERSION=pr-${{ github.event.number }}
|
|
fi
|
|
if [[ $VERSION =~ ^v[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
|
|
MINOR=${VERSION%.*}
|
|
MAJOR=${MINOR%.*}
|
|
fi
|
|
VERSION_SLIM="${VERSION}-slim"
|
|
if [[ $DOCKER_PKG == alpine ]]; then
|
|
VERSION="${VERSION}-alpine"
|
|
VERSION_SLIM="${VERSION}-slim"
|
|
DOCKERFILE=Dockerfile.alpine
|
|
elif [[ $DOCKER_PKG == distroless ]]; then
|
|
VERSION="${VERSION}-distroless"
|
|
VERSION_SLIM="${VERSION}-slim"
|
|
DOCKERFILE=Dockerfile.distroless
|
|
fi
|
|
DOCKER_IMAGES=("drakkan/sftpgo" "ghcr.io/drakkan/sftpgo")
|
|
TAGS="${DOCKER_IMAGES[0]}:${VERSION}"
|
|
TAGS_SLIM="${DOCKER_IMAGES[0]}:${VERSION_SLIM}"
|
|
|
|
for DOCKER_IMAGE in ${DOCKER_IMAGES[@]}; do
|
|
if [[ ${DOCKER_IMAGE} != ${DOCKER_IMAGES[0]} ]]; then
|
|
TAGS="${TAGS},${DOCKER_IMAGE}:${VERSION}"
|
|
TAGS_SLIM="${TAGS_SLIM},${DOCKER_IMAGE}:${VERSION_SLIM}"
|
|
fi
|
|
if [[ $GITHUB_REF == refs/tags/* ]]; then
|
|
if [[ $DOCKER_PKG == debian ]]; then
|
|
if [[ -n $MAJOR && -n $MINOR ]]; then
|
|
TAGS="${TAGS},${DOCKER_IMAGE}:${MINOR},${DOCKER_IMAGE}:${MAJOR}"
|
|
TAGS_SLIM="${TAGS_SLIM},${DOCKER_IMAGE}:${MINOR}-slim,${DOCKER_IMAGE}:${MAJOR}-slim"
|
|
fi
|
|
TAGS="${TAGS},${DOCKER_IMAGE}:latest"
|
|
TAGS_SLIM="${TAGS_SLIM},${DOCKER_IMAGE}:slim"
|
|
elif [[ $DOCKER_PKG == distroless ]]; then
|
|
if [[ -n $MAJOR && -n $MINOR ]]; then
|
|
TAGS="${TAGS},${DOCKER_IMAGE}:${MINOR}-distroless,${DOCKER_IMAGE}:${MAJOR}-distroless"
|
|
TAGS_SLIM="${TAGS_SLIM},${DOCKER_IMAGE}:${MINOR}-distroless-slim,${DOCKER_IMAGE}:${MAJOR}-distroless-slim"
|
|
fi
|
|
TAGS="${TAGS},${DOCKER_IMAGE}:distroless"
|
|
TAGS_SLIM="${TAGS_SLIM},${DOCKER_IMAGE}:distroless-slim"
|
|
else
|
|
if [[ -n $MAJOR && -n $MINOR ]]; then
|
|
TAGS="${TAGS},${DOCKER_IMAGE}:${MINOR}-alpine,${DOCKER_IMAGE}:${MAJOR}-alpine"
|
|
TAGS_SLIM="${TAGS_SLIM},${DOCKER_IMAGE}:${MINOR}-alpine-slim,${DOCKER_IMAGE}:${MAJOR}-alpine-slim"
|
|
fi
|
|
TAGS="${TAGS},${DOCKER_IMAGE}:alpine"
|
|
TAGS_SLIM="${TAGS_SLIM},${DOCKER_IMAGE}:alpine-slim"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [[ $OPTIONAL_DEPS == true ]]; then
|
|
echo ::set-output name=version::${VERSION}
|
|
echo ::set-output name=tags::${TAGS}
|
|
echo ::set-output name=full::true
|
|
else
|
|
echo ::set-output name=version::${VERSION_SLIM}
|
|
echo ::set-output name=tags::${TAGS_SLIM}
|
|
echo ::set-output name=full::false
|
|
fi
|
|
echo ::set-output name=dockerfile::${DOCKERFILE}
|
|
echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ')
|
|
echo ::set-output name=sha::${GITHUB_SHA::8}
|
|
env:
|
|
DOCKER_PKG: ${{ matrix.docker_pkg }}
|
|
OPTIONAL_DEPS: ${{ matrix.optional_deps }}
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v1
|
|
|
|
- name: Set up builder
|
|
uses: docker/setup-buildx-action@v1
|
|
id: builder
|
|
|
|
- name: Login to Docker Hub
|
|
uses: docker/login-action@v1
|
|
with:
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
if: ${{ github.event_name != 'pull_request' }}
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: docker/login-action@v1
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.repository_owner }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
if: ${{ github.event_name != 'pull_request' }}
|
|
|
|
- name: Build and push
|
|
uses: docker/build-push-action@v2
|
|
with:
|
|
context: .
|
|
builder: ${{ steps.builder.outputs.name }}
|
|
file: ./${{ steps.info.outputs.dockerfile }}
|
|
platforms: linux/amd64,linux/arm64,linux/ppc64le
|
|
push: ${{ github.event_name != 'pull_request' }}
|
|
tags: ${{ steps.info.outputs.tags }}
|
|
build-args: |
|
|
COMMIT_SHA=${{ steps.info.outputs.sha }}
|
|
INSTALL_OPTIONAL_PACKAGES=${{ steps.info.outputs.full }}
|
|
labels: |
|
|
org.opencontainers.image.title=SFTPGo
|
|
org.opencontainers.image.description=Fully featured and highly configurable SFTP server with optional FTP/S and WebDAV support
|
|
org.opencontainers.image.url=https://github.com/drakkan/sftpgo
|
|
org.opencontainers.image.documentation=https://github.com/drakkan/sftpgo/blob/${{ github.sha }}/docker/README.md
|
|
org.opencontainers.image.source=https://github.com/drakkan/sftpgo
|
|
org.opencontainers.image.version=${{ steps.info.outputs.version }}
|
|
org.opencontainers.image.created=${{ steps.info.outputs.created }}
|
|
org.opencontainers.image.revision=${{ github.sha }}
|
|
org.opencontainers.image.licenses=AGPL-3.0 |