diff --git a/.gitea/workflows/renovate.yaml b/.gitea/workflows/renovate.yaml index bc2f748..ccbdcb2 100644 --- a/.gitea/workflows/renovate.yaml +++ b/.gitea/workflows/renovate.yaml @@ -9,7 +9,7 @@ jobs: renovate: name: Dependency-Updates prüfen & Pull Requests erstellen runs-on: ubuntu-latest - container: ghcr.io/renovatebot/renovate:44.82.3 + container: ghcr.io/renovatebot/renovate:44.83.0 steps: - name: Renovate ausführen run: renovate diff --git a/.gitea/workflows/testing-to-main-pr.yaml b/.gitea/workflows/testing-to-main-pr.yaml new file mode 100644 index 0000000..f26a71d --- /dev/null +++ b/.gitea/workflows/testing-to-main-pr.yaml @@ -0,0 +1,111 @@ +name: Auto-PR (Testing → Main) + +on: + push: + branches: + - testing + +jobs: + create-pr: + name: Erstelle automatisch PR von testing nach main + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v7 + with: + fetch-depth: 0 + + - name: Prüfe auf bereits offenen PR nach main + id: check_pr + env: + GITEA_URL: ${{ gitea.server_url || github.server_url }} + REPO: ${{ gitea.repository || github.repository }} + TOKEN: ${{ secrets.PACKAGE_TOKEN || secrets.RELEASE_TOKEN || secrets.PUBLISH_TOKEN || secrets.API_TOKEN || secrets.PAT_TOKEN || secrets.CUSTOM_TOKEN || secrets.GITEA_TOKEN || secrets.GITHUB_TOKEN || github.token }} + run: | + OPEN_PRS=$(curl -s -H "Authorization: token ${TOKEN}" "${GITEA_URL}/api/v1/repos/${REPO}/pulls?state=open&limit=50") + EXISTS=$(echo "$OPEN_PRS" | jq -r '[.[] | select(.base.ref == "main" and .head.ref == "testing")] | length') + echo "Bereits offene testing→main PRs: ${EXISTS}" + echo "exists=${EXISTS}" >> "$GITHUB_OUTPUT" + + - name: Ermittle Versionen auf main & testing + id: versions + if: steps.check_pr.outputs.exists == '0' + run: | + git fetch origin main + MAIN_VERSION="$(git show origin/main:Cargo.toml | sed -n 's/^version = "\(.*\)"/\1/p' | head -n1)" + TESTING_VERSION="$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -n1)" + echo "Version auf main: ${MAIN_VERSION} / Version auf testing: ${TESTING_VERSION}" + echo "main_version=${MAIN_VERSION}" >> "$GITHUB_OUTPUT" + echo "testing_version=${TESTING_VERSION}" >> "$GITHUB_OUTPUT" + + - name: Ermittle geänderte Kategorien (main...testing) + id: categories + if: steps.check_pr.outputs.exists == '0' && steps.versions.outputs.main_version == steps.versions.outputs.testing_version + run: | + CHANGED_FILES="$(git diff --name-only origin/main...HEAD)" + echo "Geänderte Dateien main...testing:" + echo "$CHANGED_FILES" + + WORKFLOWS="false" + CONFIG="false" + DOCS="false" + + if echo "$CHANGED_FILES" | grep -q '^\.gitea/workflows/'; then + WORKFLOWS="true" + fi + if echo "$CHANGED_FILES" | grep -qE '^(renovate\.json|qodana\.yaml|Cargo\.toml|Cargo\.lock|\.cargo/)'; then + CONFIG="true" + fi + if echo "$CHANGED_FILES" | grep -qE '(^|/)[^/]+\.md$|^LICENSE$'; then + DOCS="true" + fi + + echo "workflows=${WORKFLOWS}" >> "$GITHUB_OUTPUT" + echo "config=${CONFIG}" >> "$GITHUB_OUTPUT" + echo "docs=${DOCS}" >> "$GITHUB_OUTPUT" + + - name: Bestimme PR-Titel + id: title + if: steps.check_pr.outputs.exists == '0' + run: | + if [ "${{ steps.versions.outputs.main_version }}" != "${{ steps.versions.outputs.testing_version }}" ]; then + TITLE="Merge testing in main: Release ${{ steps.versions.outputs.testing_version }}" + else + PARTS=() + [ "${{ steps.categories.outputs.workflows }}" = "true" ] && PARTS+=("Workflows") + [ "${{ steps.categories.outputs.config }}" = "true" ] && PARTS+=("Konfigurationen") + [ "${{ steps.categories.outputs.docs }}" = "true" ] && PARTS+=("Dokumentation") + + if [ ${#PARTS[@]} -eq 0 ]; then + TITLE="Merge testing in main" + else + JOINED="" + for PART in "${PARTS[@]}"; do + if [ -z "$JOINED" ]; then + JOINED="$PART" + else + JOINED="${JOINED} & ${PART}" + fi + done + TITLE="Merge testing in main: ${JOINED} aktualisiert" + fi + fi + echo "Ermittelter PR-Titel: ${TITLE}" + echo "title=${TITLE}" >> "$GITHUB_OUTPUT" + + - name: Erstelle PR (testing -> main) + if: steps.check_pr.outputs.exists == '0' + env: + GITEA_URL: ${{ gitea.server_url || github.server_url }} + REPO: ${{ gitea.repository || github.repository }} + TOKEN: ${{ secrets.PACKAGE_TOKEN || secrets.RELEASE_TOKEN || secrets.PUBLISH_TOKEN || secrets.API_TOKEN || secrets.PAT_TOKEN || secrets.CUSTOM_TOKEN || secrets.GITEA_TOKEN || secrets.GITHUB_TOKEN || github.token }} + TITLE: ${{ steps.title.outputs.title }} + run: | + PAYLOAD=$(jq -n --arg title "$TITLE" --arg head "testing" --arg base "main" \ + '{title: $title, head: $head, base: $base}') + curl -f -s -S -X POST \ + -H "Authorization: token ${TOKEN}" \ + -H "Content-Type: application/json" \ + -d "$PAYLOAD" \ + "${GITEA_URL}/api/v1/repos/${REPO}/pulls" + echo "PR erstellt: ${TITLE}" diff --git a/.gitea/workflows/version-bump.yaml b/.gitea/workflows/version-bump.yaml new file mode 100644 index 0000000..749b099 --- /dev/null +++ b/.gitea/workflows/version-bump.yaml @@ -0,0 +1,85 @@ +name: Auto Patch-Version-Bump (Dev → Testing PR) + +on: + pull_request: + types: [opened] + branches: + - testing + +jobs: + detect-changes: + name: Erkenne relevante Änderungen im PR + runs-on: ubuntu-latest + if: ${{ (gitea.head_ref || github.head_ref) == 'dev' }} + outputs: + code_changed: ${{ steps.filter.outputs.code }} + steps: + - name: Checkout Dev-Branch (PR-Head) + uses: actions/checkout@v7 + with: + ref: ${{ gitea.head_ref || github.head_ref }} + fetch-depth: 0 + + - name: Prüfe auf Änderungen an Cargo.toml, Cargo.lock, src/ oder Dockerfile + uses: dorny/paths-filter@v4 + id: filter + with: + base: ${{ gitea.base_ref || github.base_ref }} + filters: | + code: + - 'Cargo.toml' + - 'Cargo.lock' + - 'src/**' + - 'Dockerfile' + + bump-version: + name: Patch-Version erhöhen & auf Dev pushen + needs: detect-changes + if: needs.detect-changes.outputs.code_changed == 'true' + runs-on: ubuntu-latest + steps: + - name: Checkout Dev-Branch (PR-Head) + uses: actions/checkout@v7 + with: + ref: ${{ gitea.head_ref || github.head_ref }} + fetch-depth: 0 + token: ${{ secrets.PACKAGE_TOKEN || secrets.RELEASE_TOKEN || secrets.PUBLISH_TOKEN || secrets.API_TOKEN || secrets.PAT_TOKEN || secrets.CUSTOM_TOKEN || secrets.GITEA_TOKEN || secrets.GITHUB_TOKEN || github.token }} + + - name: Ermittle Cargo-Version auf testing & dev + id: versions + run: | + git fetch origin testing --depth=1 + TESTING_VERSION="$(git show origin/testing:Cargo.toml | sed -n 's/^version = "\(.*\)"/\1/p' | head -n1)" + DEV_VERSION="$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -n1)" + echo "Version auf testing: ${TESTING_VERSION} / Version auf dev: ${DEV_VERSION}" + echo "testing_version=${TESTING_VERSION}" >> "$GITHUB_OUTPUT" + echo "dev_version=${DEV_VERSION}" >> "$GITHUB_OUTPUT" + + - name: Patch-Version um 1 erhöhen (Cargo.toml & Cargo.lock) + if: steps.versions.outputs.testing_version == steps.versions.outputs.dev_version + run: | + VERSION="${{ steps.versions.outputs.dev_version }}" + MAJOR="$(echo "$VERSION" | cut -d. -f1)" + MINOR="$(echo "$VERSION" | cut -d. -f2)" + PATCH="$(echo "$VERSION" | cut -d. -f3)" + NEW_VERSION="${MAJOR}.${MINOR}.$((PATCH + 1))" + echo "Erhöhe Version: ${VERSION} -> ${NEW_VERSION}" + + sed -i "0,/^version = \"${VERSION}\"/s//version = \"${NEW_VERSION}\"/" Cargo.toml + + PACKAGE_NAME="$(sed -n 's/^name = "\(.*\)"/\1/p' Cargo.toml | head -n1)" + awk -v new="$NEW_VERSION" -v pkg="$PACKAGE_NAME" ' + found_name && /^version = "/ { + print "version = \"" new "\"" + found_name = 0 + next + } + $0 == "name = \"" pkg "\"" { found_name = 1 } + { print } + ' Cargo.lock > Cargo.lock.tmp && mv Cargo.lock.tmp Cargo.lock + + git config user.name "Gitea-Bot" + git config user.email "no-reply@creativedragonslayer.de" + git add Cargo.toml Cargo.lock + git commit -m "Chore: Erhöht Patch-Version auf ${NEW_VERSION} für Promotion nach testing" + git push origin HEAD:${{ gitea.head_ref || github.head_ref }} diff --git a/Cargo.lock b/Cargo.lock index e2f9dd9..9648dea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -219,9 +219,9 @@ dependencies = [ [[package]] name = "config-ctdra" -version = "1.0.4" +version = "1.0.6" source = "sparse+https://gitea.creative-dragonslayer.de/api/packages/Rust-Crates/cargo/" -checksum = "f7b3e25b95d4cdb6fc856f2af0106d4558b882c2f10798db46181e51827749a4" +checksum = "83eb23d473fce79e8234ad66baf210289b5c9e4c4a587273b4df7deceb73f416" dependencies = [ "confy", "program-ctdra", @@ -322,7 +322,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc 0.2.189", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -833,9 +833,9 @@ checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" [[package]] name = "logger-ctdra" -version = "1.0.3" +version = "1.0.5" source = "sparse+https://gitea.creative-dragonslayer.de/api/packages/Rust-Crates/cargo/" -checksum = "af9ea239d80163c80b12cae5f74c0c2824199921dedafba74678e96a11a8b15e" +checksum = "ce612b7d943b77060fa36eab0c85782e650c4cf023e9d560bef791951ed92cad" dependencies = [ "program-ctdra", "time", @@ -872,7 +872,7 @@ dependencies = [ [[package]] name = "mirror-package" -version = "1.0.4" +version = "1.0.5" dependencies = [ "anyhow", "clap", @@ -1041,7 +1041,7 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -1220,7 +1220,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -1898,7 +1898,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 1fe505c..e728536 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mirror-package" -version = "1.0.4" +version = "1.0.5" edition = "2024" authors = ['DragonSlayer_14'] readme = "README.md"