Skip to content

ci: support multi-arch docker builds with QEMU/Buildx in release job #22

ci: support multi-arch docker builds with QEMU/Buildx in release job

ci: support multi-arch docker builds with QEMU/Buildx in release job #22

Workflow file for this run

name: build
on:
push:
tags:
- v*
branches:
- master
- develop
pull_request:
branches: [ master ]
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Set up Go 1.x
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'
# https://github.com/golangci/golangci-lint-action
- name: Lint
uses: golangci/golangci-lint-action@v9
with:
version: v2.10.1
args: --config=.golangci.yml
only-new-issues: false
test:
name: Test
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Set up Go 1.x
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'
- name: Get dependencies
run: make deps
- name: Test
run: make test
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Set up Go 1.x
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'
- name: Get dependencies
run: make deps
- name: Build
run: make build
docker-ci:
name: Docker CI Validation
needs: [lint, test, build]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Lint Dockerfile
uses: hadolint/hadolint-action@v3.1.0
with:
dockerfile: build/docker/Dockerfile
- name: Build for validation
uses: docker/build-push-action@v4
with:
context: .
file: build/docker/Dockerfile
push: false
load: true
platforms: linux/amd64
build-args: |
VERSION=0.0.0-develop
tags: |
ghcr.io/dmirtillo/rcon-cli:test
- name: Run smoke test
run: docker run --rm ghcr.io/dmirtillo/rcon-cli:test /rcon --help
- name: Scan image for vulnerabilities
uses: aquasecurity/trivy-action@master
with:
image-ref: 'ghcr.io/dmirtillo/rcon-cli:test'
format: 'table'
exit-code: '1'
ignore-unfixed: true
vuln-type: 'os,library'
severity: 'CRITICAL,HIGH'
release:
name: Release Pipeline
needs: [lint, test, build, docker-ci]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
permissions:
contents: write
packages: write
steps:
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Needed for GoReleaser to read tags/commits
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to GHCR
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v5
with:
distribution: goreleaser
version: '~> v2'
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}