Files
Plugin_Test_Action/.gitea/workflows/release.yml
2026-03-03 07:57:21 +01:00

277 lines
10 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.
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
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 "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 "Cloning from: $REPO_URL"
# Repository klonen
git clone "$REPO_URL" repo
cd repo
# Branch finden, der den Tag enthält
BRANCH=$(git branch -r --contains "$TAG" | head -n 1 | sed 's/origin\///')
if [ -z "$BRANCH" ]; then
echo "Kein Branch enthält diesen Tag checkout des Tags direkt"
git checkout "$TAG"
else
echo "Branch gefunden: $BRANCH checkout"
git checkout "$BRANCH"
fi
env:
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
# - name: Repository auschecken
# run: |
# git clone https://$RELEASE_TOKEN:x-oauth-basic@{{ vars.RELEASE_URL }}/${{ github.repository }}.git repo
# cd repo
# env:
# GITEA_TOKEN: ${{ secrets.RELEASE_TOKEN }}
# - name: Repository auschecken
# uses: actions/checkout@v3
# with:
# repository: AG_QGIS/Plugin_Test_Action.git
# fetch-depth: 0
# token: ${{ secrets.RELEASE_TOKEN }}
# git_url: https://entwicklung.flurneuordnung-sachsen.de/AG_QGIS/Plugin_Test_Action.git
- name: Debug Info
run: |
echo "Tag: $GITEA_REF_NAME"
uname -a
# - name: Checkout
# run: |
# git clone --depth 1 \
# --branch ${{ github.ref_name }} \
# https://x-access-token:${{ secrets.RELEASE_TOKEN }}@${{ vars.RELEASE_URL }}/${{ github.repository }}.git \
# .
# - name: Determine version and channel
# id: info
# run: |
# TAG="${{ github.ref_name }}"
# VERSION="${TAG#v}"
# case "$TAG" in
# *-dev*) CHANNEL="dev" ;;
# *-beta*) CHANNEL="beta" ;;
# *) CHANNEL="stable" ;;
# esac
# echo "version=${VERSION}" >> $GITHUB_OUTPUT
# echo "channel=${CHANNEL}" >> $GITHUB_OUTPUT
# # Nur fürs Log:
# echo "VERSION: $VERSION"
# echo "CHANNEL: $CHANNEL"
# - name: Read plugin.cfg
# id: cfg
# run: |
# CFG=".plugin/plugin.cfg"
# get_value() {
# grep -i "^$1" "$CFG" | head -1 | cut -d= -f2- | tr -d '\r' | xargs
# }
# 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
# # 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)"
# - name: Generate metadata.txt
# run: |
# VERSION="${{ steps.info.outputs.version }}"
# CHANGELOG=$(cat .plugin/changelog.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
# # Nur fürs Log:
# cat metadata.txt
# - 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"
# # Temporären Ordner mit zip_folder-Namen anlegen
# mkdir -p dist/${ZIP_FOLDER}
# # Alle Plugin-Dateien hineinkopieren (ohne .gitea, .plugin, dist)
# rsync -a \
# --exclude='.gitea' \
# --exclude='.plugin' \
# --exclude='.git' \
# --exclude='dist' \
# ./ dist/${ZIP_FOLDER}/
# # ZIP bauen
# cd dist
# zip -r ${ZIP_NAME} ${ZIP_FOLDER}/ \
# -x "*.pyc" -x "*/__pycache__/*"
# cd ..
# echo "ZIP_NAME=${ZIP_NAME}" >> $GITHUB_ENV
# # 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')
# 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: 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 }}")
# echo "Upload response: $RESPONSE"
# 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 }}"
# BLOCK=$(cat <<EOF
# <pyqgis_plugin name="${NAME}" version="${VERSION}">
# <description>${{ steps.cfg.outputs.description }}</description>
# <qgisMinimumVersion>${{ steps.cfg.outputs.qgis_min }}</qgisMinimumVersion>
# <qgisMaximumVersion>${{ steps.cfg.outputs.qgis_max }}</qgisMaximumVersion>
# <author>${{ steps.cfg.outputs.author }}</author>
# <email>${{ steps.cfg.outputs.email }}</email>
# <homepage>${{ steps.cfg.outputs.homepage }}</homepage>
# <tracker>${{ steps.cfg.outputs.tracker }}</tracker>
# <repository>${{ steps.cfg.outputs.repository }}</repository>
# <download_url>${{ steps.upload_asset.outputs.download_url }}</download_url>
# <experimental>${{ steps.cfg.outputs.experimental }}</experimental>
# <deprecated>${{ steps.cfg.outputs.deprecated }}</deprecated>
# </pyqgis_plugin>
# EOF
# )
# {
# echo "block<<EOF"
# echo "$BLOCK"
# echo "EOF"
# } >> "$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 }}\"
# }
# }"