Some checks failed
Release / build-and-release (push) Has been cancelled
Replace dtolnay/rust-toolchain, actions/setup-node, and swatinem/rust-cache with shell commands since they are not mirrored on code.forgejo.org. Use https://github.com/ prefix for checkout action. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
154 lines
5.2 KiB
YAML
154 lines
5.2 KiB
YAML
name: Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*'
|
|
|
|
jobs:
|
|
build-and-release:
|
|
runs-on: ubuntu
|
|
steps:
|
|
- name: Checkout
|
|
uses: https://github.com/actions/checkout@v4
|
|
|
|
- name: Setup environment
|
|
run: |
|
|
# Ensure Rust is available
|
|
if ! command -v cargo &>/dev/null; then
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
|
fi
|
|
source "$HOME/.cargo/env"
|
|
rustc --version
|
|
cargo --version
|
|
node --version
|
|
npm --version
|
|
|
|
- name: Install Linux dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf jq
|
|
|
|
- name: Install frontend dependencies
|
|
run: npm ci
|
|
|
|
- name: Build Tauri
|
|
env:
|
|
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
|
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
|
run: |
|
|
source "$HOME/.cargo/env"
|
|
npx tauri build
|
|
|
|
- name: Collect release files
|
|
run: |
|
|
mkdir -p release-assets
|
|
cp src-tauri/target/release/bundle/deb/*.deb release-assets/ 2>/dev/null || true
|
|
cp src-tauri/target/release/bundle/appimage/*.AppImage release-assets/ 2>/dev/null || true
|
|
cp src-tauri/target/release/bundle/appimage/*.AppImage.tar.gz release-assets/ 2>/dev/null || true
|
|
cp src-tauri/target/release/bundle/appimage/*.AppImage.tar.gz.sig release-assets/ 2>/dev/null || true
|
|
cp src-tauri/target/release/bundle/rpm/*.rpm release-assets/ 2>/dev/null || true
|
|
ls -la release-assets/
|
|
|
|
- name: Extract changelog
|
|
id: changelog
|
|
run: |
|
|
TAG="${GITHUB_REF_NAME#v}"
|
|
NOTES=$(sed -n "/^## \[${TAG}\]/,/^## /{/^## \[${TAG}\]/d;/^## /d;p}" CHANGELOG.md)
|
|
if [ -z "$NOTES" ]; then
|
|
NOTES=$(sed -n "/^## ${TAG}/,/^## /{/^## ${TAG}/d;/^## /d;p}" CHANGELOG.md)
|
|
fi
|
|
NOTES=$(echo "$NOTES" | sed -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;ba}')
|
|
{
|
|
echo "notes<<CHANGELOG_EOF"
|
|
echo "$NOTES"
|
|
echo "CHANGELOG_EOF"
|
|
} >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Generate latest.json
|
|
run: |
|
|
TAG="${GITHUB_REF_NAME}"
|
|
PUB_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
BASE_URL="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/releases/download/${TAG}"
|
|
|
|
LINUX_SIG=""
|
|
APPIMAGE_TAR=""
|
|
|
|
for f in release-assets/*.AppImage.tar.gz.sig; do
|
|
[ -f "$f" ] && LINUX_SIG=$(cat "$f")
|
|
done
|
|
for f in release-assets/*.AppImage.tar.gz; do
|
|
[ -f "$f" ] && APPIMAGE_TAR=$(basename "$f")
|
|
done
|
|
|
|
PLATFORMS="{}"
|
|
if [ -n "$LINUX_SIG" ] && [ -n "$APPIMAGE_TAR" ]; then
|
|
PLATFORMS=$(echo "$PLATFORMS" | jq \
|
|
--arg sig "$LINUX_SIG" \
|
|
--arg url "${BASE_URL}/${APPIMAGE_TAR}" \
|
|
'. + {"linux-x86_64": {"signature": $sig, "url": $url}}')
|
|
fi
|
|
|
|
jq -n \
|
|
--arg version "$TAG" \
|
|
--arg notes "${{ steps.changelog.outputs.notes }}" \
|
|
--arg pub_date "$PUB_DATE" \
|
|
--argjson platforms "$PLATFORMS" \
|
|
'{version: $version, notes: $notes, pub_date: $pub_date, platforms: $platforms}' \
|
|
> release-assets/latest.json
|
|
|
|
echo "Generated latest.json:"
|
|
cat release-assets/latest.json
|
|
|
|
- name: Create release and upload assets
|
|
env:
|
|
FORGEJO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
TAG="${GITHUB_REF_NAME}"
|
|
API_URL="${GITHUB_SERVER_URL}/api/v1"
|
|
REPO="${GITHUB_REPOSITORY}"
|
|
|
|
BODY=$(cat <<'BODY_EOF'
|
|
${{ steps.changelog.outputs.notes }}
|
|
|
|
---
|
|
|
|
## Installation
|
|
|
|
**Linux** : Téléchargez le fichier `.deb` ou `.AppImage` ci-dessous.
|
|
BODY_EOF
|
|
)
|
|
|
|
# Create release
|
|
RELEASE_RESPONSE=$(curl -s -X POST \
|
|
"${API_URL}/repos/${REPO}/releases" \
|
|
-H "Authorization: token ${FORGEJO_TOKEN}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "$(jq -n \
|
|
--arg tag "$TAG" \
|
|
--arg name "Simpl'Résultat ${TAG}" \
|
|
--arg body "$BODY" \
|
|
'{tag_name: $tag, name: $name, body: $body, draft: false, prerelease: false}')")
|
|
|
|
RELEASE_ID=$(echo "$RELEASE_RESPONSE" | jq -r '.id')
|
|
echo "Created release ID: $RELEASE_ID"
|
|
|
|
if [ "$RELEASE_ID" = "null" ] || [ -z "$RELEASE_ID" ]; then
|
|
echo "ERROR: Failed to create release"
|
|
echo "$RELEASE_RESPONSE"
|
|
exit 1
|
|
fi
|
|
|
|
# Upload all assets
|
|
for file in release-assets/*; do
|
|
FILENAME=$(basename "$file")
|
|
echo "Uploading: $FILENAME"
|
|
curl -s -X POST \
|
|
"${API_URL}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=${FILENAME}" \
|
|
-H "Authorization: token ${FORGEJO_TOKEN}" \
|
|
-H "Content-Type: application/octet-stream" \
|
|
--data-binary "@${file}"
|
|
echo ""
|
|
done
|
|
|
|
echo "Release created: ${GITHUB_SERVER_URL}/${REPO}/releases/tag/${TAG}"
|