From b971415f0c91ec6d2f85dc0a44892a3c3a022730 Mon Sep 17 00:00:00 2001 From: Mark Sagi-Kazar Date: Thu, 5 Nov 2020 14:11:59 +0100 Subject: [PATCH] Improve Docker build Signed-off-by: Mark Sagi-Kazar --- .github/workflows/ci.yml | 70 +++++++++++++++++++++++++++++----------- 1 file changed, 52 insertions(+), 18 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 15e5d5e0..f0550b93 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,9 +1,13 @@ name: CI on: + schedule: + - cron: '0 5 * * *' # everyday at 5 am UTC push: branches: - master + tags: + - v[0-9]+.[0-9]+.[0-9]+ pull_request: jobs: @@ -87,21 +91,40 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout code + - name: Checkout uses: actions/checkout@v2 - - name: Get Version - id: info + - name: Calculate Docker image tags + id: tags + env: + DOCKER_IMAGES: "ghcr.io/dexidp/dex dexidp/dex" run: | - echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ') + VERSION=noop - - name: Determine Docker Tag - uses: haya14busa/action-cond@v1 - id: imagetag - with: - cond: ${{ github.event_name == 'pull_request' }} - if_true: ${{ github.sha }} - if_false: 'master' + if [[ "${{ github.event_name }}" == "schedule" ]]; then + VERSION=nightly + else + case $GITHUB_REF in + refs/tags/*) VERSION=${GITHUB_REF#refs/tags/};; + refs/heads/*) VERSION=$(echo ${GITHUB_REF#refs/heads/} | sed -r 's#/+#-#g');; + refs/pull/*) VERSION=pr-${{ github.event.number }};; + *) VERSION=sha-${GITHUB_SHA::8};; + esac + fi + + TAGS=() + for image in $DOCKER_IMAGES; do + TAGS+=("${image}:${VERSION}") + + if [[ "${{ github.event.repository.default_branch }}" == "$VERSION" ]]; then + TAGS+=("${image}:latest") + fi + done + + echo ::set-output name=version::${VERSION} + echo ::set-output name=tags::$(IFS=,; echo "${TAGS[*]}") + echo ::set-output name=commit_hash::${GITHUB_SHA::8} + echo ::set-output name=build_date::$(git show -s --format=%cI) - name: Set up QEMU uses: docker/setup-qemu-action@v1 @@ -109,7 +132,6 @@ jobs: platforms: all - name: Set up Docker Buildx - id: buildx uses: docker/setup-buildx-action@v1 with: install: true @@ -117,27 +139,39 @@ jobs: # TODO: Remove driver-opts once fix is released docker/buildx#386 driver-opts: image=moby/buildkit:master - - name: Login to DockerHub + - name: Login to GitHub Container Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.CR_PAT }} + if: github.event_name == 'push' + + - name: Login to Docker Hub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} if: github.event_name == 'push' - - name: Build and Push + - name: Build and push uses: docker/build-push-action@v2 with: context: . - file: Dockerfile platforms: linux/amd64,linux/arm/v7,linux/arm64 push: ${{ github.event_name == 'push' }} - tags: dexidp/dex:${{ steps.imagetag.outputs.value }} + tags: ${{ steps.tags.outputs.tags }} + build-args: | + VERSION=${{ steps.tags.outputs.version }} + COMMIT_HASH=${{ steps.tags.outputs.commit_hash }} + BUILD_DATE=${{ steps.tags.outputs.build_date }} labels: | org.opencontainers.image.title=${{ github.event.repository.name }} org.opencontainers.image.description=${{ github.event.repository.description }} org.opencontainers.image.url=${{ github.event.repository.html_url }} org.opencontainers.image.source=${{ github.event.repository.clone_url }} - org.opencontainers.image.version=${{ steps.imagetag.outputs.value }} - org.opencontainers.image.created=${{ steps.info.outputs.created }} + org.opencontainers.image.version=${{ steps.tags.outputs.version }} + org.opencontainers.image.created=${{ steps.tags.outputs.build_date }} org.opencontainers.image.revision=${{ github.sha }} org.opencontainers.image.licenses=${{ github.event.repository.license.spdx_id }} + org.opencontainers.image.documentation=https://dexidp.io/docs/