From 00f800b1e6c2ce8b8c2e8c25a4681834d62f6c96 Mon Sep 17 00:00:00 2001 From: Michael Otto Date: Thu, 5 Mar 2026 16:02:03 +0100 Subject: [PATCH] =?UTF-8?q?metadata.txt=20gel=C3=B6scht,=20plugin.info=20e?= =?UTF-8?q?ingef=C3=BCgt,=20workflow=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/release.yaml | 65 -------- .gitea/workflows/release.yml | 289 ++++++++++++++++++++++++++++++++++ metadata.txt | 13 -- plugin.info | 11 ++ 4 files changed, 300 insertions(+), 78 deletions(-) delete mode 100644 .gitea/workflows/release.yaml create mode 100644 .gitea/workflows/release.yml delete mode 100644 metadata.txt create mode 100644 plugin.info diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml deleted file mode 100644 index 045a432..0000000 --- a/.gitea/workflows/release.yaml +++ /dev/null @@ -1,65 +0,0 @@ -name: Automatisches Release mit ZIP-Archiv -on: - push: - tags: - - 'v*' - -jobs: - Build-Release: - runs-on: alpine-latest - defaults: - run: - shell: sh - - steps: - - name: Vorbereitung und Tools installieren - run: | - apk add --no-cache git zip curl jq - git config --global http.sslVerify false - - - name: Code auschecken (Über externe Domain) - run: | - git clone --depth 1 --branch ${{ github.ref_name }} https://x-access-token:${{ gitea.token }}@entwicklung.flurneuordnung-sachsen.de/${{ github.repository }}.git . - - - name: ZIP-Archiv erstellen - run: | - echo "Erstelle ZIP-Datei für Version ${{ github.ref_name }}..." - zip -r release_${{ github.ref_name }}.zip . -x "*.git*" - ls -la *.zip - - - name: Neues Release in Gitea anlegen - run: | - echo "Kommuniziere mit Gitea API über HTTPS..." - API_RESPONSE=$(curl -s -k -X POST "https://entwicklung.flurneuordnung-sachsen.de/api/v1/repos/${{ github.repository }}/releases" \ - -H "accept: application/json" \ - -H "Authorization: token ${{ gitea.token }}" \ - -H "Content-Type: application/json" \ - -d '{ - "body": "Dieses Release wurde automatisch vom Gitea Runner erstellt.", - "draft": false, - "name": "Version ${{ github.ref_name }}", - "prerelease": false, - "tag_name": "${{ github.ref_name }}" - }') - - RELEASE_ID=$(echo $API_RESPONSE | jq -r '.id') - - if [ "$RELEASE_ID" = "null" ] || [ -z "$RELEASE_ID" ]; then - echo "Fehler beim Erstellen des Releases. API Antwort:" - echo $API_RESPONSE - exit 1 - fi - - echo "Release ID: $RELEASE_ID" - echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV - - - name: ZIP-Archiv an das Release anhängen - run: | - echo "Lade release_${{ github.ref_name }}.zip hoch..." - curl -s -k -X POST "https://entwicklung.flurneuordnung-sachsen.de/api/v1/repos/${{ github.repository }}/releases/${{ env.RELEASE_ID }}/assets?name=release_${{ github.ref_name }}.zip" \ - -H "accept: application/json" \ - -H "Authorization: token ${{ gitea.token }}" \ - -H "Content-Type: multipart/form-data" \ - -F "attachment=@release_${{ github.ref_name }}.zip" - - echo "✅ Upload abgeschlossen!" \ No newline at end of file diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..bec21ca --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,289 @@ +name: Release Plugin +run-name: "Release | ${{ github.ref_name }}" + +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/}" + + # Repo-URL dynamisch aus vars und github.repository bauen + REPO_URL="https://${RELEASE_TOKEN}:x-oauth-basic@${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}.git" + + # 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" + DRAFT="false" + PRERELEASE="true" + ;; + *-testing*) + CHANNEL="testing" + DRAFT="false" + PRERELEASE="true" + ;; + *) + CHANNEL="stable" + DRAFT="false" + PRERELEASE="false" + ;; + esac + + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "channel=$CHANNEL" >> $GITHUB_OUTPUT + echo "draft=$DRAFT" >> $GITHUB_OUTPUT + echo "prerelease=$PRERELEASE" >> $GITHUB_OUTPUT + + - name: plugin.info einlesen + id: info + run: | + cd repo + while IFS='=' read -r key value; do + echo "$key=$value" >> $GITHUB_OUTPUT + done < plugin.info + + - name: Changelog einlesen + id: changelog + run: | + cd repo + + # Aktueller Block = alles vor dem ersten --- + CURRENT=$(awk '/^---/{exit} {print}' changelog.txt) + + # Vollständige Historie = alles nach dem ersten --- + HISTORY=$(awk 'found{print} /^---/{found=1}' changelog.txt) + + # Gitea Release Body zusammenbauen + VERSION="${{ steps.releaseinfo.outputs.version }}" + FULL=$(printf "## %s\n%s\n\n%s" "$VERSION" "$CURRENT" "$HISTORY") + + echo "DEBUG | Aktueller Changelog:" + echo "$CURRENT" + + # Für GITHUB_OUTPUT: Multiline via EOF-Marker + echo "current<> $GITHUB_OUTPUT + echo "$CURRENT" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + echo "full<> $GITHUB_OUTPUT + echo "$FULL" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + - name: metadata.txt erzeugen + run: | + cd repo + + # ------------------------ GEÄNDERT ------------------------ + # Temporär die Vorlage aus dem hidden/templates Branch holen + git fetch origin hidden/templates + git checkout origin/hidden/templates -- metadata.template + TEMPLATE="metadata.template" + # ----------------------------------------------------------- + + # TEMPLATE="templates/metadata.template" + OUT="metadata.txt" + + CONTENT=$(cat "$TEMPLATE") + + CONTENT="${CONTENT//\{\{NAME\}\}/${{ steps.info.outputs.name }}}" + CONTENT="${CONTENT//\{\{QGIS_MIN\}\}/${{ steps.info.outputs.qgisMinimumVersion }}}" + CONTENT="${CONTENT//\{\{QGIS_MAX\}\}/${{ steps.info.outputs.qgisMaximumVersion }}}" + CONTENT="${CONTENT//\{\{DESCRIPTION\}\}/${{ steps.info.outputs.description }}}" + CONTENT="${CONTENT//\{\{VERSION\}\}/${{ steps.releaseinfo.outputs.version }}}" + CONTENT="${CONTENT//\{\{AUTHOR\}\}/${{ steps.info.outputs.author }}}" + CONTENT="${CONTENT//\{\{EMAIL\}\}/${{ steps.info.outputs.email }}}" + CONTENT="${CONTENT//\{\{HOMEPAGE\}\}/${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}}" + CONTENT="${CONTENT//\{\{TRACKER\}\}/${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}}" + CONTENT="${CONTENT//\{\{REPOSITORY\}\}/${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}}" + CONTENT="${CONTENT//\{\{EXPERIMENTAL\}\}/${{ steps.info.outputs.experimental }}}" + CONTENT="${CONTENT//\{\{DEPRECATED\}\}/${{ steps.info.outputs.deprecated }}}" + CONTENT="${CONTENT//\{\{QT6\}\}/${{ steps.info.outputs.supportsQt6 }}}" + + printf "%s\n" "$CONTENT" > "$OUT" + rm $TEMPLATE + + - name: ZIP-Datei erstellen + id: zip + run: | + cd repo + + ZIP_FOLDER="${{ steps.info.outputs.zip_folder }}" + ZIP_FILE="${ZIP_FOLDER}.zip" + + VERSION="${{ steps.releaseinfo.outputs.version }}" + REPO_NAME="${GITHUB_REPOSITORY##*/}" + #ZIP_NAME="${REPO_NAME}-${VERSION}.zip" + + + mkdir -p dist/${ZIP_FOLDER} + + rsync -a \ + --exclude='.git' \ + --exclude='.gitea' \ + --exclude='.plugin' \ + --exclude='dist' \ + ./ dist/${ZIP_FOLDER}/ + + cd dist + zip -r "${ZIP_FILE}" "${ZIP_FOLDER}/" \ + -x "*.pyc" -x "*/__pycache__/*" + cd .. + + echo "zip_file=${ZIP_FILE}" >> $GITHUB_OUTPUT + + - name: Gitea-Release erstellen + id: create_release + run: | + TAG="${{ github.ref_name }}" + VERSION="${{ steps.releaseinfo.outputs.version }}" + CHANNEL="${{ steps.releaseinfo.outputs.channel }}" + + API_URL="https://${{ vars.RELEASE_URL }}/api/v1/repos/${GITHUB_REPOSITORY}/releases" + + JSON=$(jq -n \ + --arg tag "$TAG" \ + --arg name "Version $VERSION" \ + --arg body "${{ steps.changelog.outputs.current }}" \ + --argjson draft "${{ steps.releaseinfo.outputs.draft }}" \ + --argjson prerelease "${{ steps.releaseinfo.outputs.prerelease }}" \ + '{tag_name: $tag, name: $name, body: $body, draft: $draft, prerelease: $prerelease}') + + 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 "$API_RESPONSE" + exit 1 + fi + + echo "release_id=$RELEASE_ID" >> $GITHUB_OUTPUT + + - name: ZIP-Datei hochladen + run: | + RELEASE_ID="${{ steps.create_release.outputs.release_id }}" + ZIP_FILE="${{ steps.zip.outputs.zip_file }}" + + API_URL="https://${{ vars.RELEASE_URL }}/api/v1/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=${ZIP_FILE}" + + curl -s -X POST "$API_URL" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ + -H "Content-Type: application/zip" \ + --data-binary "@repo/dist/${ZIP_FILE}" \ + -o 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 + + VERSION="${{ steps.releaseinfo.outputs.version }}" + CHANNEL="${{ steps.releaseinfo.outputs.channel }}" + ZIP_FILE="${{ steps.zip.outputs.zip_file }}" + + DOWNLOAD_URL="https://${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}/releases/download/${{ github.ref_name }}/${ZIP_FILE}" + + jq -n \ + --arg name "${{ steps.info.outputs.name }}" \ + --arg version "$VERSION" \ + --arg channel "$CHANNEL" \ + --arg description "${{ steps.info.outputs.description }}" \ + --arg author "${{ steps.info.outputs.author }}" \ + --arg email "${{ steps.info.outputs.email }}" \ + --arg qgis_min "${{ steps.info.outputs.qgisMinimumVersion }}" \ + --arg qgis_max "${{ steps.info.outputs.qgisMaximumVersion }}" \ + --arg homepage "${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}" \ + --arg tracker "${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}" \ + --arg repository "${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}" \ + --arg experimental "${{ steps.info.outputs.experimental }}" \ + --arg deprecated "${{ steps.info.outputs.deprecated }}" \ + --arg qt6 "${{ steps.info.outputs.supportsQt6 }}" \ + --arg id "${{ steps.info.outputs.zip_folder }}" \ + --arg url "$DOWNLOAD_URL" \ + --arg changelog "${{ steps.changelog.outputs.current }}" \ + '{ + name: $name, + version: $version, + channel: $channel, + description: $description, + author: $author, + email: $email, + qgis_min: $qgis_min, + qgis_max: $qgis_max, + homepage: $homepage, + tracker: $tracker, + repository: $repository, + experimental: $experimental, + deprecated: $deprecated, + qt6: $qt6, + id: $id, + url: $url, + changelog: $changelog + }' > payload.json + + - name: Repository aktualisieren + run: | + OWNER="AG_QGIS" + WORKFLOW="update.yml" + + PAYLOAD_B64=$(base64 -w0 repo/payload.json) + + FULL_NAME="${{ steps.info.outputs.name }}" + NAME=$(echo "$FULL_NAME" | awk -F'|' '{gsub(/^ +| +$/,"",$2); print $2}') + TAG="${{ steps.releaseinfo.outputs.version }}" + + JSON="{\"ref\":\"hidden/workflows\",\"inputs\":{\"payload\":\"$PAYLOAD_B64\",\"name\":\"$NAME\",\"tag\":\"$TAG\"}}" + + #JSON="{\"ref\":\"hidden/workflows\",\"inputs\":{\"payload\":\"$PAYLOAD_B64\"}}" + + echo "DEBUG | Sende JSON:" + echo "$JSON" + + 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/${WORKFLOW}/dispatches" diff --git a/metadata.txt b/metadata.txt deleted file mode 100644 index c63370b..0000000 --- a/metadata.txt +++ /dev/null @@ -1,13 +0,0 @@ -[general] -name=LNO Sachsen | Basisfunktionen -qgisMinimumVersion=3.0 -description=Plugin mit Basisfunktionen -version=25.11.4 -author=Michael Otto -email=michael.otto@landkreis-mittelsachsen.de -about=Plugin mit Basisfunktionen -category=Plugins -homepage=https://entwicklung.vln-sn.de/AG_QGIS/Plugin_SN_Basis -repository=https://entwicklung.vln-sn.de/AG_QGIS/Repository -supportsQt6=true -experimental=true \ No newline at end of file diff --git a/plugin.info b/plugin.info new file mode 100644 index 0000000..668c3cb --- /dev/null +++ b/plugin.info @@ -0,0 +1,11 @@ +name=LNO Sachsen | Basisfunktionen +description=Plugin mit Basisfunktionen +author=Daniel Helbig +email=daniel.helbig@kreis-meissen.de +qgisMinimumVersion=3.0 +qgisMaximumVersion=3.99 +deprecated=False +experimental=False +supportsQt6=Yes + +zip_folder=sn_basis