Skip to content

Create STOPnik release #15

Create STOPnik release

Create STOPnik release #15

Workflow file for this run

name: Create STOPnik release
on:
workflow_dispatch:
inputs:
stopnik_version:
type: string
description: Version for the tag (e.g v1.0.0)
required: true
permissions:
contents: write
env:
CGO_ENABLED: 0
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build:
runs-on: ${{ matrix.os }}
permissions:
contents: write
strategy:
matrix:
os: [ ubuntu-latest, macos-latest ]
steps:
- name: Show tag
run: echo "Will create version ${{ inputs.stopnik_version }}"
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'
- name: Display Go version
run: go version
- name: Build
run: |
VERSION_INPUT=${{ inputs.stopnik_version }}
CURRENT_VERSION=${VERSION_INPUT:-"ci"}
./build.sh build_ci $CURRENT_VERSION ${{ matrix.os }}
- name: Tests
run: ./test.sh coverage
- name: golangci-lint
uses: golangci/golangci-lint-action@v6
with:
version: v1.60.3
- name: Upload build result
uses: actions/upload-artifact@v4
with:
name: build_result_${{ matrix.os }}
path: bin/**
retention-days: 1
build-and-push-image:
runs-on: ubuntu-latest
needs: build
permissions:
contents: read
packages: write
attestations: write
id-token: write
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Checkout repository
uses: actions/checkout@v4
- name: Retrieve artifacts
uses: actions/download-artifact@v4
with:
pattern: build_result**
merge-multiple: true
path: bin
- name: Display structure of downloaded files
run: ls -hR
- name: Extract some files
run: |
mkdir dist
unzip "bin/stopnik*" -d dist
ls -hR
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build and push Docker image
id: push
uses: docker/build-push-action@v6
with:
context: .
platforms: linux/amd64,linux/arm64
build-args: STOPNIK_VERSION=${{ inputs.stopnik_version }}
push: true
tags: ghcr.io/${{ github.repository_owner }}/stopnik:${{ inputs.stopnik_version }},ghcr.io/${{ github.repository_owner }}/stopnik:latest
labels: ${{ steps.meta.outputs.labels }}
- name: Generate artifact attestation
uses: actions/attest-build-provenance@v1
with:
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true
release:
runs-on: ubuntu-latest
needs: ["build", "build-and-push-image"]
steps:
- name: Retrieve artifacts
uses: actions/download-artifact@v4
with:
pattern: build_result**
merge-multiple: true
path: bin
- name: Display structure of downloaded files
run: ls -hR
- uses: ncipollo/release-action@v1
with:
tag: ${{ inputs.stopnik_version }}
body: >
STOPnik!
Version ${{ inputs.stopnik_version }}
artifacts: "bin/*.zip"