-
Notifications
You must be signed in to change notification settings - Fork 1
126 lines (114 loc) · 4.83 KB
/
Copy pathrelease.yml
File metadata and controls
126 lines (114 loc) · 4.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
name: Release
# Baut das installationsfertige WordPress-Plugin-ZIP und veröffentlicht es als
# GitHub-Release — automatisch, sobald eine neue Plugin-Version auf main landet.
#
# Ablauf: Version aus dem Plugin-Header lesen → existiert für diese Version noch
# kein Release, wird per bin/build-release.sh gebaut und als Release mit dem ZIP
# als Anhang veröffentlicht. Gleiche Version = kein doppelter Release (Skip).
# Manuell auslösbar über "Run workflow" (workflow_dispatch).
on:
push:
branches: ["main"]
workflow_dispatch:
permissions:
contents: write
concurrency:
group: release
cancel-in-progress: false
jobs:
release:
name: Build & publish plugin ZIP
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- name: Plugin-Version lesen
id: ver
run: |
VERSION="$(grep -oE "define\( *'ODW_VERSION', *'[^']+'" open-data-wizard.php | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)"
if [ -z "$VERSION" ]; then
echo "::error::Version (ODW_VERSION) konnte nicht ermittelt werden."
exit 1
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag=v$VERSION" >> "$GITHUB_OUTPUT"
echo "Version: $VERSION"
- name: Release-Existenz prüfen
id: check
env:
GH_TOKEN: ${{ github.token }}
run: |
if gh release view "${{ steps.ver.outputs.tag }}" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then
echo "exists=true" >> "$GITHUB_OUTPUT"
echo "Release ${{ steps.ver.outputs.tag }} existiert bereits — überspringe."
else
echo "exists=false" >> "$GITHUB_OUTPUT"
fi
- name: PHP + Composer einrichten
if: steps.check.outputs.exists == 'false'
uses: shivammathur/setup-php@v2
with:
php-version: "8.1"
tools: composer:v2
- name: Plugin-ZIP bauen
if: steps.check.outputs.exists == 'false'
run: bash bin/build-release.sh
- name: Release-Notes aus Changelog
if: steps.check.outputs.exists == 'false'
id: notes
run: |
VERSION="${{ steps.ver.outputs.version }}"
NOTES="${RUNNER_TEMP}/notes.md"
awk -v v="$VERSION" '
$0 ~ "^## \\[" v "\\]" {grab=1; next}
grab && /^## \[/ {grab=0}
grab {print}
' CHANGELOG.md | grep -v '^---$' > "$NOTES" || true
if [ ! -s "$NOTES" ]; then
echo "Automatisch gebautes Plugin-ZIP für Version ${VERSION}." > "$NOTES"
fi
{
echo ""
echo "**Installation:** WordPress → Plugins → Installieren → Plugin hochladen."
} >> "$NOTES"
echo "path=$NOTES" >> "$GITHUB_OUTPUT"
- name: GitHub-Release veröffentlichen
if: steps.check.outputs.exists == 'false'
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release create "${{ steps.ver.outputs.tag }}" \
"dist/open-data-wizard-${{ steps.ver.outputs.version }}.zip" \
--repo "$GITHUB_REPOSITORY" \
--title "Open Data Wizard ${{ steps.ver.outputs.version }}" \
--notes-file "${{ steps.notes.outputs.path }}"
# Der Branch `release` trägt exakt den Inhalt des Release-ZIPs — also das
# installationsfertige Plugin samt vendor/. Der Plugin-Updater zieht sein
# Paket von dort als schlichtes Quellarchiv (codeload) statt über die
# GitHub-API: kein Token nötig, kein Rate-Limit, unabhängig davon, ob das
# Updater-Plugin Release-Assets unterstützt.
#
# Der Branch wird bei jedem Release neu erzeugt und force-gepusht. Ein
# frisches `git init` sorgt dafür, dass die .gitignore des Repos hier
# nicht greift (vendor/ soll ja gerade mit) und der Branch nicht mit
# jedem Release weiterwächst.
- name: Release-Branch aktualisieren
if: steps.check.outputs.exists == 'false'
env:
GITHUB_TOKEN: ${{ github.token }}
run: |
VERSION="${{ steps.ver.outputs.version }}"
WORK="${RUNNER_TEMP}/release-branch"
rm -rf "$WORK"
mkdir -p "$WORK"
unzip -q "dist/open-data-wizard-${VERSION}.zip" -d "$WORK"
cd "$WORK/open-data-wizard"
test -f vendor/autoload.php || { echo "vendor/autoload.php fehlt — Branch nicht veröffentlicht." >&2; exit 1; }
git init -q
git checkout -q -b release
git config user.email "github-actions[bot]@users.noreply.github.com"
git config user.name "github-actions[bot]"
git add -A -f
git commit -q -m "Open Data Wizard ${VERSION}"
git push -q --force \
"https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" release
echo "✓ Branch 'release' auf Version ${VERSION} gesetzt"