Files
Plugin_Test_Action/.gitea/workflows/release.yml
Michael Otto 2cb504ba51 Release v38
2026-03-03 10:18:46 +01:00

233 lines
7.3 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Release Plugin
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: alpine-latest
defaults:
run:
shell: bash
steps:
- name: Notwendige Abhängigkeiten installieren
shell: sh
run: |
apk add --no-cache git zip curl jq rsync bash
git config --global http.sslVerify false
- name: Code holen
run: |
# Tag aus GitHub Actions Kontext extrahieren
TAG="${GITHUB_REF#refs/tags/}"
echo "DEBUG | Tag erkannt: $TAG"
# Repo-URL dynamisch aus vars und github.repository bauen
REPO_URL="https://${RELEASE_TOKEN}:x-oauth-basic@${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}.git"
echo "DEBUG | Klone von: $REPO_URL"
# Repository klonen
git clone "$REPO_URL" repo
cd repo
git checkout "$TAG"
env:
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
- name: Version und Kanal bestimmen
id: releaseinfo
run: |
TAG="${{ github.ref_name }}"
VERSION="${TAG#v}"
case "$TAG" in
*-unstable*) CHANNEL="unstable" ;;
*-testing*) CHANNEL="testing" ;;
*) CHANNEL="stable" ;;
esac
echo "version=${VERSION}" >> $GITHUB_OUTPUT
echo "channel=${CHANNEL}" >> $GITHUB_OUTPUT
echo "DEBUG | Version: $VERSION"
echo "DEBUG | Kanal: $CHANNEL"
- name: metadata.txt erzeugen
run: |
cd repo
VERSION="${{ steps.releaseinfo.outputs.version }}"
# Vorlage kopieren
cp .plugin/metadata.template metadata.txt
# Platzhalter ersetzen
sed -i "s/@VERSION@/${VERSION}/g" metadata.txt
echo "DEBUG | metadata.txt erzeugt:"
cat metadata.txt
- name: ZIP-Datei erstellen
id: zip
run: |
cd repo
# Plugin-Ordnername aus .plugin/zip_folder lesen
ZIP_FOLDER=$(cat .plugin/zip_folder)
echo "DEBUG | Plugin-Ordnername: $ZIP_FOLDER"
VERSION="${{ steps.releaseinfo.outputs.version }}"
REPO_NAME="${GITHUB_REPOSITORY##*/}"
ZIP_NAME="${REPO_NAME}-${VERSION}.zip"
echo "DEBUG | ZIP wird erzeugt: $ZIP_NAME"
# Temporären Build-Ordner anlegen
mkdir -p dist/${ZIP_FOLDER}
# Plugin-Dateien kopieren (alles außer CI-/Meta-Verzeichnisse)
rsync -a \
--exclude='.git' \
--exclude='.gitea' \
--exclude='.plugin' \
--exclude='dist' \
./ dist/${ZIP_FOLDER}/
# ZIP erzeugen
cd dist
zip -r "${ZIP_NAME}" "${ZIP_FOLDER}/" \
-x "*.pyc" -x "*/__pycache__/*"
cd ..
# ZIP-Name für spätere Steps bereitstellen
echo "zip_name=${ZIP_NAME}" >> $GITHUB_OUTPUT
echo "DEBUG | ZIP-Datei erzeugt: dist/${ZIP_NAME}"
- name: GiteaRelease erstellen
id: create_release
run: |
TAG="${{ github.ref_name }}"
VERSION="${{ steps.releaseinfo.outputs.version }}"
CHANNEL="${{ steps.releaseinfo.outputs.channel }}"
echo "Erstelle Release für Tag: $TAG"
echo "Version: $VERSION"
echo "Kanal: $CHANNEL"
API_URL="https://${{ vars.RELEASE_URL }}/api/v1/repos/${GITHUB_REPOSITORY}/releases"
# JSONBody erzeugen
JSON=$(jq -n \
--arg tag "$TAG" \
--arg name "Version $VERSION" \
--arg body "Automatisch erzeugtes Release für Kanal: $CHANNEL" \
'{tag_name: $tag, name: $name, body: $body, draft: false, prerelease: false}')
echo "Sende APIRequest an: $API_URL"
echo "JSONPayload:"
echo "$JSON"
# Release erstellen
API_RESPONSE=$(curl -s -X POST "$API_URL" \
-H "accept: application/json" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \
-H "Content-Type: application/json" \
-d "$JSON")
RELEASE_ID=$(echo "$API_RESPONSE" | jq -r '.id')
if [ "$RELEASE_ID" = "null" ] || [ -z "$RELEASE_ID" ]; then
echo "Fehler beim Erstellen des Releases!"
echo "APIAntwort:"
echo "$API_RESPONSE"
exit 1
fi
echo "Release erfolgreich erstellt. ID: $RELEASE_ID"
echo "release_id=$RELEASE_ID" >> $GITHUB_OUTPUT
- name: ZIP-Datei hochladen
run: |
RELEASE_ID="${{ steps.create_release.outputs.release_id }}"
ZIP_NAME="${{ steps.zip.outputs.zip_name }}"
echo "Lade ZIP-Datei hoch: $ZIP_NAME"
echo "Release-ID: $RELEASE_ID"
API_URL="https://${{ vars.RELEASE_URL }}/api/v1/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=${ZIP_NAME}"
curl -s -X POST "$API_URL" \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \
-H "Content-Type: application/zip" \
--data-binary "@repo/dist/${ZIP_NAME}" \
-o upload_response.json
echo "Upload-Antwort:"
cat upload_response.json
# Optional: Fehlerprüfung
if jq -e '.id' upload_response.json >/dev/null 2>&1; then
echo "ZIP erfolgreich hochgeladen."
else
echo "Fehler beim Hochladen der ZIP!"
exit 1
fi
- name: Payload erzeugen
run: |
cd repo
PLUGIN_NAME=$(grep '^name=' metadata.txt | cut -d '=' -f2)
DESCRIPTION=$(grep '^description=' metadata.txt | cut -d '=' -f2)
AUTHOR=$(grep '^author=' metadata.txt | cut -d '=' -f2)
EMAIL=$(grep '^email=' metadata.txt | cut -d '=' -f2)
VERSION="${{ steps.releaseinfo.outputs.version }}"
CHANNEL="${{ steps.releaseinfo.outputs.channel }}"
ZIP_NAME="${{ steps.zip.outputs.zip_name }}"
CHANGELOG="${{ steps.changelog.outputs.log }}"
DOWNLOAD_URL="https://${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}/releases/download/${{ github.ref_name }}/${ZIP_NAME}"
jq -n \
--arg plugin "$PLUGIN_NAME" \
--arg version "$VERSION" \
--arg channel "$CHANNEL" \
--arg description "$DESCRIPTION" \
--arg author "$AUTHOR" \
--arg email "$EMAIL" \
--arg url "$DOWNLOAD_URL" \
--arg changelog "$CHANGELOG" \
'{
plugin: $plugin,
version: $version,
channel: $channel,
description: $description,
author: $author,
email: $email,
url: $url,
changelog: $changelog
}' > payload.json
echo "Payload:"
cat payload.json
- name: Repository aktualisieren
run: |
OWNER="AG_QGIS"
PAYLOAD_B64=$(base64 -w0 repo/payload.json)
JSON=$(jq -n --arg p "$PAYLOAD_B64" '{
event_type: "update_plugin",
client_payload: { payload: $p }
}')
curl -X POST \
-H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \
-H "Content-Type: application/json" \
-d "$JSON" \
"https://${{ vars.RELEASE_URL }}/api/v1/repos/${OWNER}/Repository/actions/workflows/dispatches"