datahaven/.github/workflows/actions/publish-docker/action.yml

125 lines
3.6 KiB
YAML

name: Publish docker image
description: |
Publish docker image tags to container registry
inputs:
dockerfile:
description: "Path to Dockerfile"
required: true
context:
description: "Build context path"
required: false
default: "."
registry:
description: "Container registry (ghcr.io or docker.io)"
required: false
default: "docker.io"
registry_username:
description: "Registry username"
required: true
registry_password:
description: "Registry password"
required: true
image_tags:
description: "Image tags (newline or comma-separated)"
required: true
image_title:
description: "Image title"
required: false
default: "DataHaven Node"
image_description:
description: "Image description"
required: false
default: "DataHaven blockchain node"
image_url:
description: "Image url"
required: false
default: "https://github.com/datahaven-xyz/datahaven"
image_source:
description: "Image source"
required: false
default: "https://github.com/datahaven-xyz/datahaven"
image_created:
description: "Image creation timestamp"
required: false
default: ""
image_revision:
description: "Image revision (git sha)"
required: false
default: ""
image_licenses:
description: "Image licenses"
required: false
default: "Apache-2.0"
cache_scope:
description: "Cache scope for GitHub Actions cache"
required: false
default: "docker-build"
build_args:
description: "Build arguments (newline or comma-separated)"
required: false
default: ""
platforms:
description: "Target platforms"
required: false
default: "linux/amd64"
runs:
using: "composite"
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
version: latest
driver-opts: |
image=moby/buildkit:master
- name: Login to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ inputs.registry }}
username: ${{ inputs.registry_username }}
password: ${{ inputs.registry_password }}
- name: Prepare labels
id: labels
shell: bash
run: |
CREATED="${{ inputs.image_created }}"
if [ -z "$CREATED" ]; then
CREATED=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
fi
REVISION="${{ inputs.image_revision }}"
if [ -z "$REVISION" ]; then
REVISION="${{ github.sha }}"
fi
echo "created=$CREATED" >> $GITHUB_OUTPUT
echo "revision=$REVISION" >> $GITHUB_OUTPUT
- name: Build and push image
id: docker_build
uses: docker/build-push-action@v6
with:
context: ${{ inputs.context }}
file: ${{ inputs.dockerfile }}
platforms: ${{ inputs.platforms }}
push: true
tags: ${{ inputs.image_tags }}
build-args: ${{ inputs.build_args }}
cache-from: type=gha,scope=${{ inputs.cache_scope }}
cache-to: type=gha,mode=max,scope=${{ inputs.cache_scope }}
provenance: mode=max
sbom: true
labels: |
org.opencontainers.image.title=${{ inputs.image_title }}
org.opencontainers.image.description=${{ inputs.image_description }}
org.opencontainers.image.url=${{ inputs.image_url }}
org.opencontainers.image.source=${{ inputs.image_source }}
org.opencontainers.image.created=${{ steps.labels.outputs.created }}
org.opencontainers.image.revision=${{ steps.labels.outputs.revision }}
org.opencontainers.image.licenses=${{ inputs.image_licenses }}