#!/usr/bin/env bash set -euo pipefail usage() { cat <&2 exit 1 fi ;; --force) FORCE=1 ;; --enterprise-selfhosted) ENTERPRISE_SELF_HOSTED=1 ;; --commit) DO_COMMIT=1 ;; --push) DO_PUSH=1 DO_COMMIT=1 ;; -h|--help) usage exit 0 ;; *) echo "Unknown argument: $1" >&2 usage exit 1 ;; esac shift || true done SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" TEMPLATE_DIR="${SCRIPT_DIR}/workflow-templates" TARGET="$(cd "$TARGET" && pwd)" if [[ ! -d "$TARGET/.git" ]]; then echo "Target is not a git repository: $TARGET" >&2 exit 1 fi mkdir -p "$TARGET/.github/workflows" if [[ "$ENTERPRISE_SELF_HOSTED" -eq 1 ]]; then files=( pre-release-ci.yml release-notarized-selfhosted.yml release-dry-run.yml ) else files=( pre-release-ci.yml release-notarized.yml release-notarized-selfhosted.yml release-dry-run.yml ) fi installed=() skipped=() for file in "${files[@]}"; do src="$TEMPLATE_DIR/$file" dst="$TARGET/.github/workflows/$file" if [[ "$ENTERPRISE_SELF_HOSTED" -eq 1 && "$file" == "pre-release-ci.yml" ]]; then src="$TEMPLATE_DIR/pre-release-ci-enterprise-selfhosted.yml" fi if [[ ! -f "$src" ]]; then echo "Missing template: $src" >&2 exit 1 fi if [[ -f "$dst" && "$FORCE" -ne 1 ]]; then skipped+=("$file") continue fi cp "$src" "$dst" installed+=("$file") done echo "Target: $TARGET" if [[ "$ENTERPRISE_SELF_HOSTED" -eq 1 ]]; then echo "Profile: GitHub Enterprise self-hosted" else echo "Profile: Default (GitHub-hosted notarized + optional self-hosted)" fi if [[ ${#installed[@]} -gt 0 ]]; then echo "Installed/updated workflows:" printf ' - %s\n' "${installed[@]}" else echo "No workflow files installed (all existed and --force was not set)." fi if [[ ${#skipped[@]} -gt 0 ]]; then echo "Skipped existing workflows:" printf ' - %s\n' "${skipped[@]}" fi if [[ "$DO_COMMIT" -eq 1 ]]; then add_files=(.github/workflows/pre-release-ci.yml .github/workflows/release-notarized-selfhosted.yml .github/workflows/release-dry-run.yml) if [[ "$ENTERPRISE_SELF_HOSTED" -ne 1 ]]; then add_files+=(.github/workflows/release-notarized.yml) fi git -C "$TARGET" add "${add_files[@]}" if ! git -C "$TARGET" diff --cached --quiet; then git -C "$TARGET" commit -m "chore(ci): install release workflow templates" echo "Committed workflow updates." else echo "Nothing to commit." fi fi if [[ "$DO_PUSH" -eq 1 ]]; then git -C "$TARGET" push echo "Pushed workflow updates to origin." fi echo "Done."