Some checks failed
CI / build (push) Failing after 0s
Drops the manual mktemp + git-clone-with-token dance (not needed for a public repo) in favor of actions/checkout@v4. GITEA_TOKEN is still required for the release-creation and asset-upload API calls. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
110 lines
3.4 KiB
YAML
110 lines
3.4 KiB
YAML
name: Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
jobs:
|
|
release:
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
DOTNET_ROOT: /home/mika/.dotnet
|
|
GITEA_API: https://git.kuns.dev/api/v1
|
|
REPO: releases/ClaudeMailbox
|
|
steps:
|
|
- name: Checkout tag
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Resolve version
|
|
id: ver
|
|
run: |
|
|
set -euo pipefail
|
|
TAG="${{ github.ref_name }}"
|
|
VERSION="${TAG#v}"
|
|
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
|
|
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
echo "Building version: $VERSION (tag: $TAG)"
|
|
|
|
- name: Publish (win-x64, self-contained, single-file)
|
|
env:
|
|
VERSION: ${{ steps.ver.outputs.version }}
|
|
run: |
|
|
set -euo pipefail
|
|
export PATH="$DOTNET_ROOT:$PATH"
|
|
dotnet publish src/ClaudeMailbox/ClaudeMailbox.csproj \
|
|
-c Release -r win-x64 --self-contained true \
|
|
/p:MinVerVersionOverride=$VERSION \
|
|
/p:PublishSingleFile=true \
|
|
/p:IncludeNativeLibrariesForSelfExtract=true \
|
|
-o out/app
|
|
|
|
- name: Package assets
|
|
env:
|
|
VERSION: ${{ steps.ver.outputs.version }}
|
|
run: |
|
|
set -euo pipefail
|
|
mkdir -p assets
|
|
|
|
EXE_SRC=$(ls out/app/*.exe | head -n 1)
|
|
if [ -z "$EXE_SRC" ]; then
|
|
echo "::error::No .exe produced by publish" >&2
|
|
exit 1
|
|
fi
|
|
|
|
EXE_NAME="claude-mailbox-${VERSION}-win-x64.exe"
|
|
cp "$EXE_SRC" "assets/${EXE_NAME}"
|
|
|
|
( cd assets && sha256sum "${EXE_NAME}" > checksums.txt )
|
|
|
|
echo "--- assets ---"
|
|
ls -la assets
|
|
|
|
- name: Create Gitea Release
|
|
id: release
|
|
env:
|
|
TAG: ${{ steps.ver.outputs.tag }}
|
|
TOKEN: ${{ secrets.GITEA_TOKEN }}
|
|
run: |
|
|
set -euo pipefail
|
|
BODY=$(jq -n \
|
|
--arg tag "$TAG" \
|
|
--arg name "$TAG" \
|
|
'{tag_name:$tag, name:$name, body:"", draft:false, prerelease:false, target_commitish:"main"}')
|
|
RESP=$(curl -sS -X POST \
|
|
-H "Authorization: token ${TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "$BODY" \
|
|
"${GITEA_API}/repos/${REPO}/releases")
|
|
RELEASE_ID=$(echo "$RESP" | jq -r '.id // empty')
|
|
if [ -z "$RELEASE_ID" ] || [ "$RELEASE_ID" = "null" ]; then
|
|
echo "::error::Release creation failed" >&2
|
|
echo "$RESP" >&2
|
|
exit 1
|
|
fi
|
|
echo "release_id=$RELEASE_ID" >> "$GITHUB_OUTPUT"
|
|
echo "Created release id=$RELEASE_ID for tag=$TAG"
|
|
|
|
- name: Upload release assets
|
|
env:
|
|
VERSION: ${{ steps.ver.outputs.version }}
|
|
RELEASE_ID: ${{ steps.release.outputs.release_id }}
|
|
TOKEN: ${{ secrets.GITEA_TOKEN }}
|
|
run: |
|
|
set -euo pipefail
|
|
cd assets
|
|
for f in \
|
|
"claude-mailbox-${VERSION}-win-x64.exe" \
|
|
"checksums.txt"
|
|
do
|
|
echo "Uploading: $f"
|
|
curl -sS --fail-with-body -X POST \
|
|
-H "Authorization: token ${TOKEN}" \
|
|
-F "attachment=@${f}" \
|
|
"${GITEA_API}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=${f}" \
|
|
> /dev/null
|
|
done
|
|
echo "All assets uploaded."
|