Publish-Docker #16
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Publish-Docker | |
on: | |
workflow_dispatch: | |
inputs: | |
tag: | |
description: 'Docker image tag (e.g., v1.0.0 or latest)' | |
required: false | |
default: 'latest' | |
branch: | |
description: 'Branch to build from' | |
required: false | |
default: 'main' | |
permissions: | |
contents: read | |
packages: write | |
jobs: | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
# Checkout the repository | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.ref }} | |
# Set up Go environment | |
- name: Set up Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: '1.23' | |
# Lint the code with gofmt | |
- name: Lint with gofmt | |
run: test -z "$(gofmt -l .)" | |
# Build the Go application | |
- name: Build the application | |
run: make build | |
build-and-publish: | |
runs-on: ubuntu-latest | |
needs: lint | |
steps: | |
# Checkout the repository | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.ref }} | |
# Log in to GitHub Container Registry | |
- name: Log in to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
# GitHub automatically provides a GITHUB_TOKEN secret to authenticate | |
password: ${{ secrets.GITHUB_TOKEN }} | |
# Setup env for building docker images | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Cache Docker layers | |
uses: actions/cache@v4 | |
with: | |
path: /tmp/.buildx-cache | |
key: ${{ runner.os }}-buildx-${{ github.sha }} | |
restore-keys: | | |
${{ runner.os }}-buildx- | |
- name: Add version file | |
run: printf %s "${{ github.sha }}" > config/VERSION.txt | |
# Build and push the Docker image | |
- name: Build and push Docker image | |
uses: docker/build-push-action@v5 | |
with: | |
context: . | |
platforms: linux/amd64,linux/arm64 | |
# Set to true to push the image to the registry | |
push: true | |
# Define the tags for the image | |
tags: | | |
ghcr.io/${{ github.repository_owner }}/tigerbeetle_api:latest | |
ghcr.io/${{ github.repository_owner }}/tigerbeetle_api:${{ github.sha }} | |
cache-from: type=local,src=/tmp/.buildx-cache | |
cache-to: type=local,dest=/tmp/.buildx-cache | |
# (Optional) Display Docker image details | |
- name: Show Docker images | |
run: docker images |