Skip to content

Release to Docker Hub #5

Release to Docker Hub

Release to Docker Hub #5

name: Release to Docker Hub
# ower: FabioPinheiro
# updated: 2024/11/25
# How to test:
# > git tag v9.9.9
# > act --artifact-server-path /tmp/artifacts -s GITHUB_TOKEN="$(gh auth token)" --var DOCKERHUB_FMGP_USERNAME=$DOCKERHUB_FMGP_USERNAME -s DOCKERHUB_FMGP_TOKEN=$DOCKERHUB_FMGP_TOKEN --var DOCKERHUB_IDENTUS_USERNAME=$DOCKERHUB_IDENTUS_USERNAME -s DOCKERHUB_IDENTUS_TOKEN=$DOCKERHUB_IDENTUS_TOKEN -j build-and-push-docker-images schedule
# > git tag --delete v9.9.9
concurrency:
group: release
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * *' # Run every day at midnight UTC
push:
tags:
- v*
permissions:
contents: read
jobs:
build-binaries:
if: ${{ !contains(github.event.head_commit.message, 'chore(release)') }}
runs-on: ubuntu-latest
env:
GITHUB_ACTOR: "hyperledger-bot"
GITHUB_ACTOR_EMAIL: "[email protected]"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
SBT_OPTS: -Xmx2G
steps:
- uses: actions/checkout@v4
- name: Setup Java and Scala
uses: olafurpg/setup-scala@v14
with:
java-version: [email protected]
- name: Cache sbt
uses: coursier/[email protected]
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "lts/*"
- name: Build Binaries
env:
NODE_OPTIONS: --openssl-legacy-provider
run: sbt -J-Xmx5120m "docker:stage"
- name: Save build Directory
uses: actions/upload-artifact@v4
with:
name: docker-directory-artifact
path: ./mediator/target/docker/stage
build-and-push-docker-images:
name: Build and Push Docker images
runs-on: ubuntu-latest
needs: build-binaries
strategy:
fail-fast: false
matrix:
docker:
- # identus # This is a test account
registry: docker.io
repository: ${{vars.DOCKERHUB_IDENTUS_USERNAME}}
username: ${{vars.DOCKERHUB_IDENTUS_USERNAME}}
password_name: DOCKERHUB_IDENTUS_TOKEN
tags_noschedule: |
type=semver,pattern={{version}}
type=raw,value=latest,enable={{is_default_branch}}
# type=raw,value=${{needs.pick-build-version.outputs.build_version}}
tags_schedule: |
type=schedule,pattern=nightly,enable={{is_default_branch}}
- # fmgp # My presonal acount also for testing
registry: docker.io
repository: ${{vars.DOCKERHUB_FMGP_USERNAME}}
username: ${{vars.DOCKERHUB_FMGP_USERNAME}}
password_name: DOCKERHUB_FMGP_TOKEN
tags_noschedule: |
type=semver,pattern={{version}},enable={{is_default_branch}}
type=raw,value=latest,enable={{is_default_branch}}
tags_schedule: |
type=schedule,enable={{is_default_branch}}
steps:
- name: Set test variable
run: |
echo "META_CONFIG<<EOF" >> $GITHUB_ENV
if [ ${{ github.event_name }} == 'schedule' ]; then
echo "${{matrix.docker.tags_schedule}}" >> $GITHUB_ENV;
# type=semver,pattern={{version}}
# type=sha,prefix={{branch}}-
else
echo "${{matrix.docker.tags_noschedule}}" >> $GITHUB_ENV;
# type=schedule,pattern={{date 'YYYYMMDD'}}
fi
echo "EOF" >> $GITHUB_ENV
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ matrix.docker.registry }}/${{ matrix.docker.repository }}/identus-mediator
tags: "${{ env.META_CONFIG }}"
- name: JOB INFO
run: |
echo "##################"
echo "#### JOB INFO ####"
echo "##################"
echo "### github.event_name=${{github.event_name}} (Is this type 'schedule'""? ${{ github.event_name == 'schedule' }})"
echo "### matrix.docker.tags_schedule: ${{ matrix.docker.tags_schedule }}"
echo "### matrix.docker.tags_noschedule: ${{ matrix.docker.tags_noschedule }}"
echo "### env.META_CONFIG: ${{ env.META_CONFIG }}"
echo "### TAGS: ${{ steps.meta.outputs.tags == '' }}"
echo "${{ steps.meta.outputs.tags }}"
echo "### runner: ${{ toJSON(runner) }}"
echo "### github: ${{ toJSON(github) }}"
- name: Download docker-directory-artifact
uses: actions/download-artifact@v4
with:
name: docker-directory-artifact
path: docker-artifact
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
buildkitd-flags: --debug
buildkitd-config-inline: |
[worker.oci]
max-parallelism = 1
platforms: linux/amd64,linux/arm64
- name: Login to the ${{ matrix.docker.registry }} Container Registry with ${{ matrix.docker.username }}
uses: docker/login-action@v3
with:
registry: ${{ matrix.docker.registry }}
username: ${{ matrix.docker.username }}
password: ${{ secrets[matrix.docker.password_name] }}
# TODO FIX These builds the image multiple times (matrix)
- name: Build and push identus-mediator Image
id: push
uses: docker/build-push-action@v6
with:
context: ./docker-artifact/
platforms: linux/amd64,linux/arm64
tags: ${{ steps.meta.outputs.tags }}
push: ${{ steps.meta.outputs.tags != '' }}
labels: ${{ steps.meta.outputs.labels }}
annotations: ${{ steps.meta.outputs.annotations }}