Files
orbien/.github/workflows/release-docker.yml
T

117 lines
3.8 KiB
YAML

name: Release Docker
on:
push:
tags:
- "v*"
workflow_dispatch:
inputs:
version:
description: "Release version"
required: true
type: string
permissions:
contents: read
packages: write
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Resolve version
id: ver
env:
EVENT_NAME: ${{ github.event_name }}
INPUT_VERSION: ${{ inputs.version }}
run: |
set -euo pipefail
if [ "$EVENT_NAME" = "workflow_dispatch" ]; then
V="$INPUT_VERSION"
else
V="${GITHUB_REF_NAME#v}"
fi
if [ -z "$V" ]; then
echo "version is empty" >&2
exit 1
fi
CARGO_V="$(python3 -c "import tomllib; print(tomllib.load(open('Cargo.toml','rb'))['workspace']['package']['version'])")"
if [ "$CARGO_V" != "$V" ]; then
echo "version mismatch: release=$V workspace=$CARGO_V" >&2
echo "update [workspace.package] version in Cargo.toml before tagging/releasing" >&2
exit 1
fi
echo "version=$V" >> "$GITHUB_OUTPUT"
echo "Release version: $V (matches Cargo workspace)"
- name: Setup QEMU
uses: docker/setup-qemu-action@v3
- name: Setup Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Image names & tags
id: img
run: |
set -euo pipefail
OWNER="$(echo '${{ github.repository_owner }}' | tr '[:upper:]' '[:lower:]')"
VERSION="${{ steps.ver.outputs.version }}"
SERVER="ghcr.io/${OWNER}/orbien-server"
CLIENT="ghcr.io/${OWNER}/orbien"
{
echo "server_tags<<EOF"
echo "${SERVER}:${VERSION}"
if [[ "$VERSION" != *-* ]]; then
echo "${SERVER}:latest"
fi
echo "EOF"
echo "client_tags<<EOF"
echo "${CLIENT}:${VERSION}"
if [[ "$VERSION" != *-* ]]; then
echo "${CLIENT}:latest"
fi
echo "EOF"
} >> "$GITHUB_OUTPUT"
- name: Build & push orbien-server
uses: docker/build-push-action@v6
with:
context: .
file: docker/Dockerfile.server
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.img.outputs.server_tags }}
labels: |
org.opencontainers.image.title=orbien-server
org.opencontainers.image.description=Orbien server (intranet penetration / reverse tunnel)
org.opencontainers.image.source=https://github.com/${{ github.repository }}
org.opencontainers.image.version=${{ steps.ver.outputs.version }}
cache-from: type=gha,scope=orbien-server
cache-to: type=gha,mode=max,scope=orbien-server
- name: Build & push orbien
uses: docker/build-push-action@v6
with:
context: .
file: docker/Dockerfile.client
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.img.outputs.client_tags }}
labels: |
org.opencontainers.image.title=orbien
org.opencontainers.image.description=Orbien client (intranet penetration / reverse tunnel)
org.opencontainers.image.source=https://github.com/${{ github.repository }}
org.opencontainers.image.version=${{ steps.ver.outputs.version }}
cache-from: type=gha,scope=orbien-client
cache-to: type=gha,mode=max,scope=orbien-client