From a46b25bcc74cfa035a59bed5629fb229aa29ea9d Mon Sep 17 00:00:00 2001 From: Michael Otto Date: Tue, 3 Mar 2026 07:22:32 +0100 Subject: [PATCH] Add release workflow --- .gitea/workflows/release.yml | 359 ++++++++++++++++++----------------- 1 file changed, 182 insertions(+), 177 deletions(-) diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml index a570c93..0c71de4 100644 --- a/.gitea/workflows/release.yml +++ b/.gitea/workflows/release.yml @@ -11,216 +11,221 @@ jobs: runs-on: alpine-latest defaults: run: - shell: sh + shell: bash steps: - - name: Install dependencies + - name: Notwendige Abhängigkeiten installieren run: | apk add --no-cache git zip curl jq rsync bash git config --global http.sslVerify false - - name: Checkout + - name: Debug Info run: | - git clone --depth 1 \ - --branch ${{ github.ref_name }} \ - https://x-access-token:${{ secrets.RELEASE_TOKEN }}@${{ vars.RELEASE_URL }}/${{ github.repository }}.git \ - . + echo "Tag: $GITEA_REF_NAME" + uname -a - - name: Determine version and channel - id: info - run: | - TAG="${{ github.ref_name }}" - VERSION="${TAG#v}" + # - name: Checkout + # run: | + # git clone --depth 1 \ + # --branch ${{ github.ref_name }} \ + # https://x-access-token:${{ secrets.RELEASE_TOKEN }}@${{ vars.RELEASE_URL }}/${{ github.repository }}.git \ + # . - case "$TAG" in - *-dev*) CHANNEL="dev" ;; - *-beta*) CHANNEL="beta" ;; - *) CHANNEL="stable" ;; - esac + # - name: Determine version and channel + # id: info + # run: | + # TAG="${{ github.ref_name }}" + # VERSION="${TAG#v}" - echo "version=${VERSION}" >> $GITHUB_OUTPUT - echo "channel=${CHANNEL}" >> $GITHUB_OUTPUT + # case "$TAG" in + # *-dev*) CHANNEL="dev" ;; + # *-beta*) CHANNEL="beta" ;; + # *) CHANNEL="stable" ;; + # esac - # Nur fürs Log: - echo "VERSION: $VERSION" - echo "CHANNEL: $CHANNEL" + # echo "version=${VERSION}" >> $GITHUB_OUTPUT + # echo "channel=${CHANNEL}" >> $GITHUB_OUTPUT - - name: Read plugin.cfg - id: cfg - run: | - CFG=".plugin/plugin.cfg" + # # Nur fürs Log: + # echo "VERSION: $VERSION" + # echo "CHANNEL: $CHANNEL" - get_value() { - grep -i "^$1" "$CFG" | head -1 | cut -d= -f2- | tr -d '\r' | xargs - } + # - name: Read plugin.cfg + # id: cfg + # run: | + # CFG=".plugin/plugin.cfg" - echo "zip_folder=$(get_value zip_folder)" >> $GITHUB_OUTPUT - echo "name=$(get_value name)" >> $GITHUB_OUTPUT - echo "qgis_min=$(get_value qgisMinimumVersion)" >> $GITHUB_OUTPUT - echo "qgis_max=$(get_value qgisMaximumVersion)" >> $GITHUB_OUTPUT - echo "description=$(get_value description)" >> $GITHUB_OUTPUT - echo "author=$(get_value author)" >> $GITHUB_OUTPUT - echo "email=$(get_value email)" >> $GITHUB_OUTPUT - echo "homepage=$(get_value homepage)" >> $GITHUB_OUTPUT - echo "tracker=$(get_value tracker)" >> $GITHUB_OUTPUT - echo "repository=$(get_value repository)" >> $GITHUB_OUTPUT - echo "experimental=$(get_value experimental)" >> $GITHUB_OUTPUT - echo "deprecated=$(get_value deprecated)" >> $GITHUB_OUTPUT + # get_value() { + # grep -i "^$1" "$CFG" | head -1 | cut -d= -f2- | tr -d '\r' | xargs + # } - # Nur fürs Log: - echo "zip_folder=$(get_value zip_folder)" - echo "name=$(get_value name)" - echo "qgis_min=$(get_value qgisMinimumVersion)" - echo "qgis_max=$(get_value qgisMaximumVersion)" - echo "description=$(get_value description)" - echo "author=$(get_value author)" - echo "email=$(get_value email)" - echo "homepage=$(get_value homepage)" - echo "tracker=$(get_value tracker)" - echo "repository=$(get_value repository)" - echo "experimental=$(get_value experimental)" - echo "deprecated=$(get_value deprecated)" + # echo "zip_folder=$(get_value zip_folder)" >> $GITHUB_OUTPUT + # echo "name=$(get_value name)" >> $GITHUB_OUTPUT + # echo "qgis_min=$(get_value qgisMinimumVersion)" >> $GITHUB_OUTPUT + # echo "qgis_max=$(get_value qgisMaximumVersion)" >> $GITHUB_OUTPUT + # echo "description=$(get_value description)" >> $GITHUB_OUTPUT + # echo "author=$(get_value author)" >> $GITHUB_OUTPUT + # echo "email=$(get_value email)" >> $GITHUB_OUTPUT + # echo "homepage=$(get_value homepage)" >> $GITHUB_OUTPUT + # echo "tracker=$(get_value tracker)" >> $GITHUB_OUTPUT + # echo "repository=$(get_value repository)" >> $GITHUB_OUTPUT + # echo "experimental=$(get_value experimental)" >> $GITHUB_OUTPUT + # echo "deprecated=$(get_value deprecated)" >> $GITHUB_OUTPUT - - name: Generate metadata.txt - run: | - VERSION="${{ steps.info.outputs.version }}" - CHANGELOG=$(cat .plugin/changelog.txt) + # # Nur fürs Log: + # echo "zip_folder=$(get_value zip_folder)" + # echo "name=$(get_value name)" + # echo "qgis_min=$(get_value qgisMinimumVersion)" + # echo "qgis_max=$(get_value qgisMaximumVersion)" + # echo "description=$(get_value description)" + # echo "author=$(get_value author)" + # echo "email=$(get_value email)" + # echo "homepage=$(get_value homepage)" + # echo "tracker=$(get_value tracker)" + # echo "repository=$(get_value repository)" + # echo "experimental=$(get_value experimental)" + # echo "deprecated=$(get_value deprecated)" - cat > metadata.txt << EOF - [general] - name=${{ steps.cfg.outputs.name }} - version=${VERSION} - qgisMinimumVersion=${{ steps.cfg.outputs.qgis_min }} - qgisMaximumVersion=${{ steps.cfg.outputs.qgis_max }} - description=${{ steps.cfg.outputs.description }} - author=${{ steps.cfg.outputs.author }} - email=${{ steps.cfg.outputs.email }} - homepage=${{ steps.cfg.outputs.homepage }} - tracker=${{ steps.cfg.outputs.tracker }} - repository=${{ steps.cfg.outputs.repository }} - experimental=${{ steps.cfg.outputs.experimental }} - deprecated=${{ steps.cfg.outputs.deprecated }} - changelog=${VERSION} - $(cat .plugin/changelog.txt) - EOF + # - name: Generate metadata.txt + # run: | + # VERSION="${{ steps.info.outputs.version }}" + # CHANGELOG=$(cat .plugin/changelog.txt) - # Nur fürs Log: - cat metadata.txt + # cat > metadata.txt << EOF + # [general] + # name=${{ steps.cfg.outputs.name }} + # version=${VERSION} + # qgisMinimumVersion=${{ steps.cfg.outputs.qgis_min }} + # qgisMaximumVersion=${{ steps.cfg.outputs.qgis_max }} + # description=${{ steps.cfg.outputs.description }} + # author=${{ steps.cfg.outputs.author }} + # email=${{ steps.cfg.outputs.email }} + # homepage=${{ steps.cfg.outputs.homepage }} + # tracker=${{ steps.cfg.outputs.tracker }} + # repository=${{ steps.cfg.outputs.repository }} + # experimental=${{ steps.cfg.outputs.experimental }} + # deprecated=${{ steps.cfg.outputs.deprecated }} + # changelog=${VERSION} + # $(cat .plugin/changelog.txt) + # EOF - - name: Build plugin ZIP - run: | - REPO_NAME="${{ github.event.repository.name }}" - ZIP_FOLDER="${{ steps.cfg.outputs.zip_folder }}" - VERSION="${{ steps.info.outputs.version }}" - ZIP_NAME="${REPO_NAME}-${VERSION}.zip" + # # Nur fürs Log: + # cat metadata.txt - # Temporären Ordner mit zip_folder-Namen anlegen - mkdir -p dist/${ZIP_FOLDER} + # - name: Build plugin ZIP + # run: | + # REPO_NAME="${{ github.event.repository.name }}" + # ZIP_FOLDER="${{ steps.cfg.outputs.zip_folder }}" + # VERSION="${{ steps.info.outputs.version }}" + # ZIP_NAME="${REPO_NAME}-${VERSION}.zip" - # Alle Plugin-Dateien hineinkopieren (ohne .gitea, .plugin, dist) - rsync -a \ - --exclude='.gitea' \ - --exclude='.plugin' \ - --exclude='.git' \ - --exclude='dist' \ - ./ dist/${ZIP_FOLDER}/ + # # Temporären Ordner mit zip_folder-Namen anlegen + # mkdir -p dist/${ZIP_FOLDER} - # ZIP bauen - cd dist - zip -r ${ZIP_NAME} ${ZIP_FOLDER}/ \ - -x "*.pyc" -x "*/__pycache__/*" - cd .. + # # Alle Plugin-Dateien hineinkopieren (ohne .gitea, .plugin, dist) + # rsync -a \ + # --exclude='.gitea' \ + # --exclude='.plugin' \ + # --exclude='.git' \ + # --exclude='dist' \ + # ./ dist/${ZIP_FOLDER}/ - echo "ZIP_NAME=${ZIP_NAME}" >> $GITHUB_ENV + # # ZIP bauen + # cd dist + # zip -r ${ZIP_NAME} ${ZIP_FOLDER}/ \ + # -x "*.pyc" -x "*/__pycache__/*" + # cd .. - # Nur fürs Log: - echo "ZIP_NAME=${ZIP_NAME}" + # echo "ZIP_NAME=${ZIP_NAME}" >> $GITHUB_ENV - - name: Create Gitea Release - id: create_release - run: | - echo "Kommuniziere mit Gitea API über HTTPS..." - API_RESPONSE=$(curl -s -k -X POST "https://${{ vars.RELEASE_URL }}/api/v1/repos/${{ github.repository }}/releases" \ - -H "accept: application/json" \ - -H "Authorization: token ${{ secrets.RELEASE_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 }}" - }') + # # Nur fürs Log: + # echo "ZIP_NAME=${ZIP_NAME}" + + # - name: Create Gitea Release + # id: create_release + # run: | + # echo "Kommuniziere mit Gitea API über HTTPS..." + # API_RESPONSE=$(curl -s -k -X POST "https://${{ vars.RELEASE_URL }}/api/v1/repos/${{ github.repository }}/releases" \ + # -H "accept: application/json" \ + # -H "Authorization: token ${{ secrets.RELEASE_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') + # 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 + # 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 + # echo "Release ID: $RELEASE_ID" + # echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV - - name: Upload ZIP asset - id: upload_asset - run: | - echo "Lade release_${{ github.ref_name }}.zip (${{ env.ZIP_NAME }}) hoch..." + # - name: Upload ZIP asset + # id: upload_asset + # run: | + # echo "Lade release_${{ github.ref_name }}.zip (${{ env.ZIP_NAME }}) hoch..." - RESPONSE=$(curl -s -k -X POST \ - "https://${{ vars.RELEASE_URL }}/api/v1/repos/${{ github.repository }}/releases/${{ env.RELEASE_ID }}/assets?name=${{ env.ZIP_NAME }}" \ - -H "accept: application/json" \ - -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ - -H "Content-Type: multipart/form-data" \ - -F "attachment=@dist/${{ env.ZIP_NAME }}") + # RESPONSE=$(curl -s -k -X POST \ + # "https://${{ vars.RELEASE_URL }}/api/v1/repos/${{ github.repository }}/releases/${{ env.RELEASE_ID }}/assets?name=${{ env.ZIP_NAME }}" \ + # -H "accept: application/json" \ + # -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ + # -H "Content-Type: multipart/form-data" \ + # -F "attachment=@dist/${{ env.ZIP_NAME }}") - echo "Upload response: $RESPONSE" + # echo "Upload response: $RESPONSE" - DOWNLOAD_URL=$(echo "$RESPONSE" | grep -o '"browser_download_url":"[^"]*' | cut -d'"' -f4) - echo "download_url=${DOWNLOAD_URL}" >> $GITHUB_OUTPUT + # DOWNLOAD_URL=$(echo "$RESPONSE" | grep -o '"browser_download_url":"[^"]*' | cut -d'"' -f4) + # echo "download_url=${DOWNLOAD_URL}" >> $GITHUB_OUTPUT - - name: Build XML block - id: xmlblock - run: | - NAME="${{ steps.cfg.outputs.name }}" - VERSION="${{ steps.info.outputs.version }}" + # - name: Build XML block + # id: xmlblock + # run: | + # NAME="${{ steps.cfg.outputs.name }}" + # VERSION="${{ steps.info.outputs.version }}" - BLOCK=$(cat < - ${{ steps.cfg.outputs.description }} - ${{ steps.cfg.outputs.qgis_min }} - ${{ steps.cfg.outputs.qgis_max }} - ${{ steps.cfg.outputs.author }} - ${{ steps.cfg.outputs.email }} - ${{ steps.cfg.outputs.homepage }} - ${{ steps.cfg.outputs.tracker }} - ${{ steps.cfg.outputs.repository }} - ${{ steps.upload_asset.outputs.download_url }} - ${{ steps.cfg.outputs.experimental }} - ${{ steps.cfg.outputs.deprecated }} - - EOF - ) + # BLOCK=$(cat < + # ${{ steps.cfg.outputs.description }} + # ${{ steps.cfg.outputs.qgis_min }} + # ${{ steps.cfg.outputs.qgis_max }} + # ${{ steps.cfg.outputs.author }} + # ${{ steps.cfg.outputs.email }} + # ${{ steps.cfg.outputs.homepage }} + # ${{ steps.cfg.outputs.tracker }} + # ${{ steps.cfg.outputs.repository }} + # ${{ steps.upload_asset.outputs.download_url }} + # ${{ steps.cfg.outputs.experimental }} + # ${{ steps.cfg.outputs.deprecated }} + # + # EOF + # ) - { - echo "block<> "$GITHUB_OUTPUT" + # { + # echo "block<> "$GITHUB_OUTPUT" - - name: Dispatch to Repository - shell: bash - run: | - curl -s -X POST \ - -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ - -H "Content-Type: application/json" \ - "https://${{ vars.RELEASE_URL }}/api/v1/repos/${{ github.repository_owner }}/Repository/dispatches" \ - -d "{ - \"type\": \"plugin-released\", - \"payload\": { - \"plugin\": \"${{ steps.cfg.outputs.name }}\", - \"channel\": \"${{ steps.info.outputs.channel }}\", - \"xml_block\": \"${{ steps.xmlblock.outputs.block }}\" - } - }" + # - name: Dispatch to Repository + # shell: bash + # run: | + # curl -s -X POST \ + # -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ + # -H "Content-Type: application/json" \ + # "https://${{ vars.RELEASE_URL }}/api/v1/repos/${{ github.repository_owner }}/Repository/dispatches" \ + # -d "{ + # \"type\": \"plugin-released\", + # \"payload\": { + # \"plugin\": \"${{ steps.cfg.outputs.name }}\", + # \"channel\": \"${{ steps.info.outputs.channel }}\", + # \"xml_block\": \"${{ steps.xmlblock.outputs.block }}\" + # } + # }"