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 bash git jq - name: Version und Kanal bestimmen id: releaseinfo run: | TAG="${{ github.ref_name }}" RAW_VERSION="${TAG#v}" BASE_VERSION="${RAW_VERSION%%-*}" # Volles Repo auschecken, damit wir Branch-Info haben REPO_URL="https://${RELEASE_TOKEN}:x-oauth-basic@${{ vars.RELEASE_URL }}/${GITHUB_REPOSITORY}.git" git clone "$REPO_URL" repo cd repo # Branch ermitteln, auf dem der Tag liegt BRANCH=$(git branch -r --contains "$TAG" | grep -v 'HEAD' | head -n1 | sed 's|origin/||') # Channel und Suffix automatisch bestimmen case "$BRANCH" in main) CHANNEL="stable" PRERELEASE="false" SUFFIX="" ;; testing) CHANNEL="testing" PRERELEASE="true" SUFFIX="-testing" ;; unstable) CHANNEL="unstable" PRERELEASE="true" SUFFIX="-unstable" ;; *) # unbekannter Branch -> default unstable CHANNEL="unstable" PRERELEASE="true" SUFFIX="-unstable" ;; esac # Version zusammensetzen VERSION="${BASE_VERSION}${SUFFIX}" # Output setzen echo "version=$VERSION" >> $GITHUB_OUTPUT echo "channel=$CHANNEL" >> $GITHUB_OUTPUT echo "prerelease=$PRERELEASE" >> $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: Payload erzeugen run: | cd repo VERSION="${{ steps.releaseinfo.outputs.version }}" CHANNEL="${{ steps.releaseinfo.outputs.channel }}" PRERELEASE="${{ steps.releaseinfo.outputs.prerelease }}" ZIP_FOLDER="${{ steps.config.outputs.zip_folder }}" jq -n \ --arg version "$VERSION" \ --arg channel "$CHANNEL" \ --arg prerelease "$PRERELEASE" \ --arg zip_folder "$ZIP_FOLDER" \ '{ version: $version, channel: $channel, prerelease: ($prerelease == "true"), zip_folder: $zip_folder }' > 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\"}}" 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"