Skip to content

Commit a26b13f

Browse files
author
b45632
committed
fix: replace broken release preparation
1 parent d047451 commit a26b13f

2 files changed

Lines changed: 81 additions & 53 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ jobs:
2626

2727
runs-on: ${{ matrix.platform }}
2828

29+
2930
steps:
3031
- name: Repository auschecken
3132
uses: actions/checkout@v7

.github/workflows/release.yml

Lines changed: 80 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ on:
77
workflow_dispatch:
88
inputs:
99
tag:
10-
description: "Vorhandenen Tag bauen, z. B. v0.2.1"
10+
description: "Vorhandenen Tag bauen, z. B. v0.2.0"
1111
required: true
1212
type: string
1313

@@ -29,6 +29,13 @@ jobs:
2929
runs-on: ubuntu-22.04
3030

3131
steps:
32+
- name: Manuelle Ausführung vom Standardbranch prüfen
33+
if: github.event_name == 'workflow_dispatch' && github.ref_name != github.event.repository.default_branch
34+
shell: bash
35+
run: |
36+
echo "::error::Wähle bei 'Use workflow from' den Branch '${{ github.event.repository.default_branch }}'. Aktuell ausgewählt ist '${{ github.ref_name }}'."
37+
exit 1
38+
3239
- name: Repository und Release-Tag auschecken
3340
uses: actions/checkout@v7
3441
with:
@@ -51,7 +58,7 @@ jobs:
5158
const tag = process.env.RELEASE_TAG;
5259
const match = /^v(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)$/.exec(tag);
5360
if (!match) {
54-
throw new Error(`Ungültiger Release-Tag: ${tag}. Erwartet wird z. B. v0.2.1.`);
61+
throw new Error(`Ungültiger Release-Tag: ${tag}. Erwartet wird z. B. v0.2.0.`);
5562
}
5663
5764
const expected = match[1];
@@ -62,8 +69,8 @@ jobs:
6269
6370
const versions = {
6471
'package.json': packageJson.version,
65-
'tauri.conf.json': tauriConfig.version,
66-
'Cargo.toml': cargoVersion,
72+
'src-tauri/tauri.conf.json': tauriConfig.version,
73+
'src-tauri/Cargo.toml': cargoVersion,
6774
};
6875
6976
const mismatches = Object.entries(versions)
@@ -89,58 +96,78 @@ jobs:
8996
release_url: ${{ steps.release.outputs.release_url }}
9097

9198
steps:
92-
- name: Repository und Release-Tag auschecken
93-
uses: actions/checkout@v7
94-
with:
95-
ref: ${{ env.RELEASE_TAG }}
96-
fetch-depth: 0
97-
persist-credentials: false
98-
9999
- name: GitHub-Release-Entwurf erstellen oder wiederverwenden
100100
id: release
101-
shell: bash
101+
uses: actions/github-script@v9
102102
env:
103-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
104-
run: |
105-
cat > release-intro.md <<EOF
106-
## Code Deck ${RELEASE_TAG}
107-
108-
Lokales Desktop-Dashboard zum Organisieren, Öffnen und Starten von Entwicklungsprojekten.
109-
110-
### Download
111-
- **Windows:** `.msi` oder `-setup.exe`
112-
- **macOS:** `.dmg` (Universal-Build für Intel und Apple Silicon)
113-
- **Linux:** `.AppImage` oder `.deb`
114-
115-
> Hinweis: Die Builds sind derzeit nicht mit einem kostenpflichtigen Plattform-Zertifikat signiert. Windows SmartScreen oder macOS Gatekeeper können deshalb beim ersten Start nachfragen.
116-
EOF
117-
118-
if gh release view "$RELEASE_TAG" >/dev/null 2>&1; then
119-
draft=$(gh api "repos/${GITHUB_REPOSITORY}/releases/tags/${RELEASE_TAG}" --jq '.draft')
120-
if [[ "$draft" != "true" ]]; then
121-
echo "::error::Für ${RELEASE_TAG} existiert bereits ein veröffentlichter Release. Bitte verwende einen neuen Tag."
122-
exit 1
123-
fi
124-
echo "Vorhandener Release-Entwurf wird wiederverwendet."
125-
else
126-
prerelease_args=()
127-
if [[ "$RELEASE_TAG" == *-* ]]; then
128-
prerelease_args+=(--prerelease)
129-
fi
130-
131-
gh release create "$RELEASE_TAG" \
132-
--draft \
133-
--verify-tag \
134-
--title "Code Deck ${RELEASE_TAG}" \
135-
--generate-notes \
136-
--notes-file release-intro.md \
137-
"${prerelease_args[@]}"
138-
fi
139-
140-
release_id=$(gh api "repos/${GITHUB_REPOSITORY}/releases/tags/${RELEASE_TAG}" --jq '.id')
141-
release_url=$(gh api "repos/${GITHUB_REPOSITORY}/releases/tags/${RELEASE_TAG}" --jq '.html_url')
142-
echo "release_id=${release_id}" >> "$GITHUB_OUTPUT"
143-
echo "release_url=${release_url}" >> "$GITHUB_OUTPUT"
103+
RELEASE_TAG: ${{ env.RELEASE_TAG }}
104+
with:
105+
retries: 3
106+
script: |
107+
const tag = process.env.RELEASE_TAG;
108+
const prerelease = tag.includes('-');
109+
const owner = context.repo.owner;
110+
const repo = context.repo.repo;
111+
112+
const body = [
113+
`## Code Deck ${tag}`,
114+
'',
115+
'Lokales Desktop-Dashboard zum Organisieren, Öffnen und Starten von Entwicklungsprojekten.',
116+
'',
117+
'### Downloads',
118+
'- **Windows:** MSI oder Setup-EXE',
119+
'- **macOS:** DMG als Universal-Build für Intel und Apple Silicon',
120+
'- **Linux:** AppImage oder DEB',
121+
'',
122+
'### Installation',
123+
'Lade unter Assets das passende Installationspaket herunter und starte es.',
124+
'',
125+
'> Die Builds sind aktuell nicht mit einem kostenpflichtigen Plattform-Zertifikat signiert. Windows SmartScreen oder macOS Gatekeeper können deshalb beim ersten Start eine Warnung anzeigen.'
126+
].join('\n');
127+
128+
const releases = await github.paginate(
129+
github.rest.repos.listReleases,
130+
{ owner, repo, per_page: 100 }
131+
);
132+
133+
let release = releases.find(item => item.tag_name === tag);
134+
135+
if (release && !release.draft) {
136+
core.setFailed(`Für ${tag} existiert bereits ein veröffentlichter Release. Verwende einen neuen Tag.`);
137+
return;
138+
}
139+
140+
if (release) {
141+
const updated = await github.rest.repos.updateRelease({
142+
owner,
143+
repo,
144+
release_id: release.id,
145+
tag_name: tag,
146+
name: `Code Deck ${tag}`,
147+
body,
148+
draft: true,
149+
prerelease
150+
});
151+
release = updated.data;
152+
core.info(`Vorhandener Release-Entwurf wird wiederverwendet: ${release.html_url}`);
153+
} else {
154+
const created = await github.rest.repos.createRelease({
155+
owner,
156+
repo,
157+
tag_name: tag,
158+
target_commitish: tag,
159+
name: `Code Deck ${tag}`,
160+
body,
161+
draft: true,
162+
prerelease,
163+
generate_release_notes: true
164+
});
165+
release = created.data;
166+
core.info(`Release-Entwurf erstellt: ${release.html_url}`);
167+
}
168+
169+
core.setOutput('release_id', String(release.id));
170+
core.setOutput('release_url', release.html_url);
144171
145172
build:
146173
name: ${{ matrix.name }}

0 commit comments

Comments
 (0)