diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index cdbc4bf..266596b 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -12,30 +12,8 @@ jobs: 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: | @@ -45,277 +23,22 @@ jobs: 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: metadata.txt einlesen - id: metadata - run: | - cd repo - - # Hilfsfunktion, um einen Schlüssel aus metadata.txt auszulesen - get() { - grep -m1 -E "^$1=" metadata.txt | cut -d'=' -f2- || true - } - - echo "name=$(get name)" >> $GITHUB_OUTPUT - echo "description=$(get description)" >> $GITHUB_OUTPUT - echo "author=$(get author)" >> $GITHUB_OUTPUT - echo "email=$(get email)" >> $GITHUB_OUTPUT - echo "qgisMinimumVersion=$(get qgisMinimumVersion)" >> $GITHUB_OUTPUT - echo "qgisMaximumVersion=$(get qgisMaximumVersion)" >> $GITHUB_OUTPUT - echo "experimental=$(get experimental)" >> $GITHUB_OUTPUT - echo "deprecated=$(get deprecated)" >> $GITHUB_OUTPUT - echo "supportsQt6=$(get supportsQt6)" >> $GITHUB_OUTPUT - - - name: plugin.cfg einlesen - id: config - run: | - cd repo - while read -r line || [ -n "$line" ]; do - key="${line%%=*}" - value="${line#*=}" - echo "$key=$value" >> $GITHUB_OUTPUT - done < plugin.cfg - - - name: metadata.txt mit Version aktualisieren - run: | - cd repo - VERSION="${{ steps.releaseinfo.outputs.version }}" - sed -i "s/^version=.*/version=$VERSION/" metadata.txt - - - 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: ZIP-Datei erstellen - id: zip - run: | - cd repo - - ZIP_FOLDER="${{ steps.config.outputs.zip_folder }}" - ZIP_FILE="${ZIP_FOLDER}.zip" - - echo "ZIP_FOLDER: $ZIP_FOLDER" - echo "ZIP_FILE: $ZIP_FILE" - - 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' \ - --exclude='plugin.cfg' \ - ./ 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.metadata.outputs.name }}" \ - --arg version "$VERSION" \ - --arg channel "$CHANNEL" \ - --arg description "${{ steps.metadata.outputs.description }}" \ - --arg author "${{ steps.metadata.outputs.author }}" \ - --arg email "${{ steps.metadata.outputs.email }}" \ - --arg qgis_min "${{ steps.metadata.outputs.qgisMinimumVersion }}" \ - --arg qgis_max "${{ steps.metadata.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.metadata.outputs.experimental }}" \ - --arg deprecated "${{ steps.metadata.outputs.deprecated }}" \ - --arg qt6 "${{ steps.metadata.outputs.supportsQt6 }}" \ - --arg id "${{ steps.config.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.metadata.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" - - - name: metadata.txt ins Repo committen - run: | - cd repo - - TAG="${{ github.ref_name }}" - VERSION="${{ steps.releaseinfo.outputs.version }}" - - # Branch aus Tag ableiten - case "$TAG" in - *-unstable*) - BRANCH="unstable" - ;; - *-testing*) - BRANCH="testing" - ;; - *) - BRANCH="main" - ;; - esac - - # Branch checkouten - git checkout "$BRANCH" - - # Falls es Änderungen gibt, commit und push - if git diff --quiet metadata.txt; then - echo "Keine Änderungen an metadata.txt" - else - git add metadata.txt - git commit -m "Update version to $VERSION" - git push origin "$BRANCH" - fi + echo "version=$VERSION" + echo "channel=$CHANNEL" + echo "prerelease=$PRERELEASE" \ No newline at end of file diff --git a/.gitea/workflows/release_alt.yml b/.gitea/workflows/release_alt.yml new file mode 100644 index 0000000..cdbc4bf --- /dev/null +++ b/.gitea/workflows/release_alt.yml @@ -0,0 +1,321 @@ +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: metadata.txt einlesen + id: metadata + run: | + cd repo + + # Hilfsfunktion, um einen Schlüssel aus metadata.txt auszulesen + get() { + grep -m1 -E "^$1=" metadata.txt | cut -d'=' -f2- || true + } + + echo "name=$(get name)" >> $GITHUB_OUTPUT + echo "description=$(get description)" >> $GITHUB_OUTPUT + echo "author=$(get author)" >> $GITHUB_OUTPUT + echo "email=$(get email)" >> $GITHUB_OUTPUT + echo "qgisMinimumVersion=$(get qgisMinimumVersion)" >> $GITHUB_OUTPUT + echo "qgisMaximumVersion=$(get qgisMaximumVersion)" >> $GITHUB_OUTPUT + echo "experimental=$(get experimental)" >> $GITHUB_OUTPUT + echo "deprecated=$(get deprecated)" >> $GITHUB_OUTPUT + echo "supportsQt6=$(get supportsQt6)" >> $GITHUB_OUTPUT + + - name: plugin.cfg einlesen + id: config + run: | + cd repo + while read -r line || [ -n "$line" ]; do + key="${line%%=*}" + value="${line#*=}" + echo "$key=$value" >> $GITHUB_OUTPUT + done < plugin.cfg + + - name: metadata.txt mit Version aktualisieren + run: | + cd repo + VERSION="${{ steps.releaseinfo.outputs.version }}" + sed -i "s/^version=.*/version=$VERSION/" metadata.txt + + - 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: ZIP-Datei erstellen + id: zip + run: | + cd repo + + ZIP_FOLDER="${{ steps.config.outputs.zip_folder }}" + ZIP_FILE="${ZIP_FOLDER}.zip" + + echo "ZIP_FOLDER: $ZIP_FOLDER" + echo "ZIP_FILE: $ZIP_FILE" + + 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' \ + --exclude='plugin.cfg' \ + ./ 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.metadata.outputs.name }}" \ + --arg version "$VERSION" \ + --arg channel "$CHANNEL" \ + --arg description "${{ steps.metadata.outputs.description }}" \ + --arg author "${{ steps.metadata.outputs.author }}" \ + --arg email "${{ steps.metadata.outputs.email }}" \ + --arg qgis_min "${{ steps.metadata.outputs.qgisMinimumVersion }}" \ + --arg qgis_max "${{ steps.metadata.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.metadata.outputs.experimental }}" \ + --arg deprecated "${{ steps.metadata.outputs.deprecated }}" \ + --arg qt6 "${{ steps.metadata.outputs.supportsQt6 }}" \ + --arg id "${{ steps.config.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.metadata.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" + + - name: metadata.txt ins Repo committen + run: | + cd repo + + TAG="${{ github.ref_name }}" + VERSION="${{ steps.releaseinfo.outputs.version }}" + + # Branch aus Tag ableiten + case "$TAG" in + *-unstable*) + BRANCH="unstable" + ;; + *-testing*) + BRANCH="testing" + ;; + *) + BRANCH="main" + ;; + esac + + # Branch checkouten + git checkout "$BRANCH" + + # Falls es Änderungen gibt, commit und push + if git diff --quiet metadata.txt; then + echo "Keine Änderungen an metadata.txt" + else + git add metadata.txt + git commit -m "Update version to $VERSION" + git push origin "$BRANCH" + fi