Skip to content
82 changes: 82 additions & 0 deletions .github/workflows/docker-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
name: Release Fabric-X Committer Docker Image

on:
push:
tags:
- "v*" # Trigger on tags like v0.0.1

permissions:
contents: read
packages: write

jobs:
docker-release:
runs-on: ubuntu-latest

steps:
- name: Checkout source code
uses: actions/checkout@v4

- name: Set up QEMU (for cross-platform builds)
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Extract and Validate Version from Tag
id: extract
run: |
if [[ "${GITHUB_REF}" =~ ^refs/tags/v([0-9]+\.[0-9]+\.[0-9]+.*)$ ]]; then
VERSION="${BASH_REMATCH[1]}"
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "✅ Tag validated: $VERSION"
else
echo "❌ Invalid tag format: ${GITHUB_REF}. Expected format: refs/tags/v<semver>"
exit 1
fi

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod

- name: Install dev dependencies
run: scripts/install-dev-dependencies.sh

Comment thread
anushka159-a marked this conversation as resolved.
- name: Build cross-architecture binaries
run: make build-arch

- name: Set image prefix
run: |
if [ "$GITHUB_REPOSITORY_OWNER" == "hyperledger" ]; then
echo "IMAGE_PREFIX=hyperledger" >> $GITHUB_ENV
else
echo "IMAGE_PREFIX=${{ secrets.DOCKERHUB_USERNAME }}" >> $GITHUB_ENV

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need this part? We would only push images from the main "hyperledger" repository.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It permits for forks to push in their dockerhubs. That was the idea

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a way to disable this? I prefer not to have this capability in my fork to avoid mistakes.

fi

- name: Build and Push Multi-Platform Docker Image for Committer
uses: docker/build-push-action@v6
Comment thread
anushka159-a marked this conversation as resolved.
with:
context: .
file: ./docker/images/release/Dockerfile
platforms: linux/amd64,linux/arm64,linux/s390x
push: true
tags: |
docker.io/${{ env.IMAGE_PREFIX }}/fabric-x-committer:latest
docker.io/${{ env.IMAGE_PREFIX }}/fabric-x-committer:${{ env.VERSION }}
build-args: |
BIN=committer
ARCHBIN_PATH=archbin
PORTS=4001 2114 9001 2119 5001 2115 6001 2116 7001 2117
cache-from: type=registry,ref=docker.io/${{ env.IMAGE_PREFIX }}/fabric-x-committer:buildcache
cache-to: type=registry,ref=docker.io/${{ env.IMAGE_PREFIX }}/fabric-x-committer:buildcache,mode=max

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: missing line break