@@ -272,7 +272,7 @@ gen_release_targets() {
272272 cat << EOT
273273
274274# Release targets for $name
275- .PHONY: release-$name release-clean-$name release-build-$name release-sign-$name release-checksums-$name
275+ .PHONY: release-$name release-clean-$name release-build-$name release-sign-$name release-checksums-$name push- $name
276276release-$name : release-clean-$name release-build-$name release-sign-$name release-checksums-$name
277277
278278release-clean-$name : ; \$ (info \$ (M) cleaning release directory for $name …)
@@ -312,6 +312,38 @@ release-checksums-$name: | release-build-$name ; \$(info \$(M) generating checks
312312 find . -type f \( ! -name "*.asc" ! -name "*.txt" \) -exec sha256sum {} + > checksums.txt && \\
313313 echo "Generated checksums.txt for $name "
314314
315+ push-$name : | release-$name ; \$ (info \$ (M) pushing release artifacts for $name to GitHub…)
316+ \$ Q if ! command -v gh >/dev/null 2>&1; then \\
317+ echo "Error: gh CLI is required but not installed" >&2; \\
318+ echo "Install it from https://cli.github.com/" >&2; \\
319+ exit 1; \\
320+ fi
321+ \$ Q if ! gh auth status >/dev/null 2>&1; then \\
322+ echo "Error: Not authenticated with GitHub CLI" >&2; \\
323+ echo "Run 'gh auth login' first" >&2; \\
324+ exit 1; \\
325+ fi
326+ \$ Q VERSION="\$\$ (git describe --tags --exact-match 2>/dev/null || git rev-parse --short HEAD)"; \\
327+ RELEASE_TITLE="$name v\$\$ VERSION"; \\
328+ RELEASE_TAG="v\$\$ VERSION"; \\
329+ echo "Creating release \$\$ RELEASE_TAG..."; \\
330+ if gh release view "\$\$ RELEASE_TAG" >/dev/null 2>&1; then \\
331+ echo "Release \$\$ RELEASE_TAG already exists, uploading additional artifacts..."; \\
332+ else \\
333+ gh release create "\$\$ RELEASE_TAG" \\
334+ --title "\$\$ RELEASE_TITLE" \\
335+ --notes "Release \$\$ RELEASE_TAG" \\
336+ --draft=false \\
337+ --prerelease=false; \\
338+ fi; \\
339+ cd \$ (RELEASE_DIR)/$name && \\
340+ for file in *; do \\
341+ [ -f "\$\$ file" ] || continue; \\
342+ echo "Uploading \$\$ file..."; \\
343+ gh release upload "\$\$ RELEASE_TAG" "\$\$ file" --clobber; \\
344+ done; \\
345+ echo "Successfully pushed release \$\$ RELEASE_TAG"
346+
315347EOT
316348 fi
317349}
@@ -331,10 +363,17 @@ while IFS=: read -r name dir mod deps; do
331363done < " $INDEX "
332364
333365if [ -n " $release_projects " ]; then
366+ # Generate push targets list
367+ push_projects=$( echo " $release_projects " | sed ' s/release-/push-/g' )
368+
334369 cat << EOT
335370
336371# Main release target
337372.PHONY: release
338373release:$release_projects
374+
375+ # Main push target
376+ .PHONY: push
377+ push:$push_projects
339378EOT
340379fi
0 commit comments