Files
azure-database-tui/.gitea/workflows/release.yml
T
Louis Frei 8dda5dcf23
validate / macos-arm64 (push) Canceled after 0s
validate / windows-x86_64 (push) Canceled after 0s
feat: current state
2026-08-13 20:18:30 +02:00

96 lines
5.1 KiB
YAML

name: release
on:
push:
tags:
- '*'
workflow_dispatch:
inputs:
tag:
description: Existing version tag
required: true
jobs:
macos-arm64:
runs-on: ${{ vars.MACOS_ARM64_RUNNER_LABEL }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- name: Validate and package macOS archive
env:
RELEASE_TAG: ${{ github.ref_name || inputs.tag }}
run: |
VERSION=$(grep '^version = ' Cargo.toml | head -1 | cut -d'"' -f2)
test "$RELEASE_TAG" = "$VERSION" || test "$RELEASE_TAG" = "v$VERSION"
test "$(rustc -vV | awk '/host:/ {print $2}')" = "aarch64-apple-darwin"
cargo metadata --locked --no-deps --format-version 1
cargo fmt --check
cargo clippy --locked --workspace --all-targets -- -D warnings
cargo test --locked --workspace
cargo build --locked --release
NAME="azure-database-tui-$RELEASE_TAG-macos-arm64.tar.gz"
mkdir -p "package/azure-database-tui-$RELEASE_TAG"
cp target/release/azure-database-tui "package/azure-database-tui-$RELEASE_TAG/"
cp README.md docs/security.md docs/operations.md docs/release.md "package/azure-database-tui-$RELEASE_TAG/"
tar -czf "$NAME" -C package "azure-database-tui-$RELEASE_TAG"
shasum -a 256 "$NAME" > "$NAME.sha256"
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: macos-release
path: azure-database-tui-*-macos-arm64.tar.gz*
windows-x86_64:
runs-on: ${{ vars.WINDOWS_X86_64_RUNNER_LABEL }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- name: Validate and package Windows archive
shell: pwsh
env:
RELEASE_TAG: ${{ github.ref_name || inputs.tag }}
run: |
$version = ((Get-Content Cargo.toml | Select-String '^version = ').ToString().Split('"')[1])
if ($env:RELEASE_TAG -ne $version -and $env:RELEASE_TAG -ne "v$version") { throw 'Tag does not match package version' }
if ((rustc -vV | Select-String '^host:').ToString().Split(': ')[1] -ne 'x86_64-pc-windows-msvc') { throw 'Unexpected Rust host target' }
cargo metadata --locked --no-deps --format-version 1
cargo fmt --check
cargo clippy --locked --workspace --all-targets -- -D warnings
cargo test --locked --workspace
cargo build --locked --release
$name = "azure-database-tui-$env:RELEASE_TAG-windows-x86_64.zip"
$root = "package/azure-database-tui-$env:RELEASE_TAG"
New-Item -ItemType Directory -Force -Path $root | Out-Null
Copy-Item target/release/azure-database-tui.exe $root/
Copy-Item README.md,docs/security.md,docs/operations.md,docs/release.md $root/
Compress-Archive -Path $root -DestinationPath $name
(Get-FileHash $name -Algorithm SHA256).Hash.ToLower() + " " + $name | Out-File "$name.sha256" -Encoding ascii
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
with:
name: windows-release
path: azure-database-tui-*-windows-x86_64.zip*
publish:
needs: [macos-arm64, windows-x86_64]
runs-on: ${{ vars.MACOS_ARM64_RUNNER_LABEL }}
env:
RELEASE_TAG: ${{ github.ref_name || inputs.tag }}
GITEA_API_URL: ${{ vars.GITEA_API_URL }}
GITEA_REPOSITORY: ${{ vars.GITEA_REPOSITORY }}
GITEA_RELEASE_TOKEN: ${{ secrets.GITEA_RELEASE_TOKEN }}
steps:
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
with:
path: release-assets
- name: Publish completed draft release
shell: bash
run: |
set -euo pipefail
test -n "$GITEA_API_URL"; test -n "$GITEA_REPOSITORY"; test -n "$GITEA_RELEASE_TOKEN"
files=(release-assets/macos-release/* release-assets/windows-release/*)
test ${#files[@]} -eq 4
for file in "${files[@]}"; do test -s "$file"; done
api="$GITEA_API_URL/repos/$GITEA_REPOSITORY/releases/tags/$RELEASE_TAG"
response=$(curl --silent --show-error --fail -H "Authorization: token $GITEA_RELEASE_TOKEN" "$api" || true)
if test -z "$response"; then
response=$(curl --silent --show-error --fail -X POST -H "Authorization: token $GITEA_RELEASE_TOKEN" -H "Content-Type: application/json" -d "{\"tag_name\":\"$RELEASE_TAG\",\"name\":\"$RELEASE_TAG\",\"draft\":true}" "$GITEA_API_URL/repos/$GITEA_REPOSITORY/releases")
fi
release_id=$(printf '%s' "$response" | python3 -c 'import json,sys; print(json.load(sys.stdin)["id"])')
for file in "${files[@]}"; do curl --silent --show-error --fail -X POST -H "Authorization: token $GITEA_RELEASE_TOKEN" -F "attachment=@$file" "$GITEA_API_URL/repos/$GITEA_REPOSITORY/releases/$release_id/assets"; done
curl --silent --show-error --fail -X PATCH -H "Authorization: token $GITEA_RELEASE_TOKEN" -H "Content-Type: application/json" -d '{"draft":false}' "$GITEA_API_URL/repos/$GITEA_REPOSITORY/releases/$release_id"