Skip to content

Update Adminer vendor #14

Update Adminer vendor

Update Adminer vendor #14

name: Update Adminer vendor
on:
schedule:
# Jeden Montag um 06:00 UTC
- cron: '0 6 * * 1'
workflow_dispatch:
inputs:
force:
description: 'Update erzwingen, auch wenn Version identisch ist'
required: false
default: 'false'
type: boolean
permissions:
contents: write
pull-requests: write
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Aktuelle Versionen aus package.yml auslesen
id: current
run: |
# vendor: '5.4.1 adminer' → "5.4.1"
VENDOR=$(python3 -c "
import re
content = open('package.yml').read()
m = re.search(r\"vendor: '([\d.]+) adminer'\", content)
print(m.group(1) if m else '')
")
# version: '3.5.1' → "3.5.1"
ADDON=$(python3 -c "
import re
content = open('package.yml').read()
m = re.search(r\"^version: '([\d.]+)'\", content, re.MULTILINE)
print(m.group(1) if m else '')
")
echo "vendor_version=$VENDOR" >> "$GITHUB_OUTPUT"
echo "addon_version=$ADDON" >> "$GITHUB_OUTPUT"
echo "Aktuelle Vendor-Version: $VENDOR | AddOn-Version: $ADDON"
- name: Neueste Adminer-Release von GitHub ermitteln
id: latest
run: |
curl -sf https://api.github.com/repos/vrana/adminer/releases/latest \
> /tmp/adminer_release.json
python3 - <<'PYEOF'
import json, os
data = json.load(open('/tmp/adminer_release.json'))
tag = data['tag_name']
version = tag.lstrip('v')
assets = [a for a in data['assets']
if a['name'].endswith('-mysql.php') and '-mysql-' not in a['name']]
url = assets[0]['browser_download_url'] if assets else ''
with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
f.write(f"version={version}\n")
f.write(f"tag={tag}\n")
f.write(f"download_url={url}\n")
print(f"Neueste Adminer-Version: {version}")
print(f"Download-URL: {url}")
PYEOF
- name: Prüfen ob Update notwendig
id: check
run: |
CURRENT="${{ steps.current.outputs.vendor_version }}"
LATEST="${{ steps.latest.outputs.version }}"
FORCE="${{ inputs.force }}"
if [ "$CURRENT" = "$LATEST" ] && [ "$FORCE" != "true" ]; then
echo "Keine neue Version verfügbar ($CURRENT = $LATEST). Abbruch."
echo "needed=false" >> "$GITHUB_OUTPUT"
else
echo "Update von $CURRENT auf $LATEST erforderlich."
echo "needed=true" >> "$GITHUB_OUTPUT"
fi
- name: Neue adminer.php herunterladen
if: steps.check.outputs.needed == 'true'
run: |
URL="${{ steps.latest.outputs.download_url }}"
if [ -z "$URL" ]; then
echo "Keine Download-URL gefunden. Abbruch."
exit 1
fi
curl -fL "$URL" -o vendor/adminer.php
echo "Download abgeschlossen."
head -3 vendor/adminer.php
- name: AddOn-Version (Patch) und vendor in package.yml bumpen
if: steps.check.outputs.needed == 'true'
id: bump
env:
OLD_ADDON: ${{ steps.current.outputs.addon_version }}
NEW_VENDOR: ${{ steps.latest.outputs.version }}
run: |
# Patch-Bump: 3.5.1 → 3.5.2
NEW_ADDON=$(python3 -c "
parts = '$OLD_ADDON'.split('.')
parts[-1] = str(int(parts[-1]) + 1)
print('.'.join(parts))
")
echo "new_addon_version=$NEW_ADDON" >> "$GITHUB_OUTPUT"
echo "AddOn-Version: $OLD_ADDON → $NEW_ADDON"
OLD_ADDON="$OLD_ADDON" NEW_ADDON="$NEW_ADDON" NEW_VENDOR="$NEW_VENDOR" \
python3 - <<'PYEOF'
import re, os
content = open('package.yml').read()
old_addon = os.environ['OLD_ADDON']
new_addon = os.environ['NEW_ADDON']
new_vendor = os.environ['NEW_VENDOR']
content = re.sub(
r"^(version: ')[^']+(')",
lambda m: f"{m.group(1)}{new_addon}{m.group(2)}",
content, flags=re.MULTILINE
)
content = re.sub(
r"^(vendor: ')[\d.]+ adminer(')",
lambda m: f"{m.group(1)}{new_vendor} adminer{m.group(2)}",
content, flags=re.MULTILINE
)
open('package.yml', 'w').write(content)
print("package.yml aktualisiert:")
[print(l) for l in content.splitlines() if 'version' in l or 'vendor' in l]
PYEOF
- name: CHANGELOG.md aktualisieren
if: steps.check.outputs.needed == 'true'
run: |
python3 - <<'PYEOF'
import os
from datetime import date
new_vendor = os.environ['NEW_VENDOR']
old_vendor = os.environ['OLD_VENDOR']
new_addon = os.environ['NEW_ADDON']
entry = (
f"Version {new_addon}\n"
f"-----------------------\n\n"
f"Vendor-Update {old_vendor} → {new_vendor}\n\n"
)
content = open('CHANGELOG.md').read()
# Nach der =========-Zeile einfügen
insert_after = "=========\n"
idx = content.find(insert_after)
if idx == -1:
raise RuntimeError("'=========' nicht in CHANGELOG.md gefunden")
insert_pos = idx + len(insert_after)
content = content[:insert_pos] + "\n" + entry + content[insert_pos:]
open('CHANGELOG.md', 'w').write(content)
print("CHANGELOG.md aktualisiert. Erste 25 Zeilen:")
print('\n'.join(content.splitlines()[:25]))
PYEOF
env:
NEW_VENDOR: ${{ steps.latest.outputs.version }}
OLD_VENDOR: ${{ steps.current.outputs.vendor_version }}
NEW_ADDON: ${{ steps.bump.outputs.new_addon_version }}
- name: Pull Request erstellen
if: steps.check.outputs.needed == 'true'
uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.GITHUB_TOKEN }}
commit-message: "chore: Adminer vendor ${{ steps.current.outputs.vendor_version }} -> ${{ steps.latest.outputs.version }} (AddOn ${{ steps.current.outputs.addon_version }} -> ${{ steps.bump.outputs.new_addon_version }})"
branch: chore/update-adminer-${{ steps.latest.outputs.version }}
delete-branch: true
title: "chore: Adminer vendor ${{ steps.current.outputs.vendor_version }} -> ${{ steps.latest.outputs.version }} (AddOn ${{ steps.current.outputs.addon_version }} -> ${{ steps.bump.outputs.new_addon_version }})"
body: |
## Automatisches Vendor-Update
Aktualisiert [Adminer](https://github.com/vrana/adminer) von `${{ steps.current.outputs.vendor_version }}` auf `${{ steps.latest.outputs.version }}`.
**Aenderungen:**
- `vendor/adminer.php`: Adminer ${{ steps.current.outputs.vendor_version }} -> ${{ steps.latest.outputs.version }} (mysql-build)
- `package.yml` vendor: `${{ steps.current.outputs.vendor_version }} adminer` -> `${{ steps.latest.outputs.version }} adminer`
- `package.yml` version: `${{ steps.current.outputs.addon_version }}` -> `${{ steps.bump.outputs.new_addon_version }}` (Patch-Bump)
- `CHANGELOG.md`: Eintrag fuer ${{ steps.bump.outputs.new_addon_version }} hinzugefuegt
**Bitte pruefen:**
- [ ] [Adminer ${{ steps.latest.outputs.version }} Release-Notes](https://github.com/vrana/adminer/releases/tag/v${{ steps.latest.outputs.version }})
- [ ] Breaking Changes pruefen
- [ ] CHANGELOG.md ggf. anpassen
---
*Automatisch erstellt von [update-adminer-vendor](.github/workflows/update-adminer-vendor.yml)*
labels: |
dependencies