|
| 1 | +#!/bin/sh |
| 2 | +SCRIPT_PATH=$(readlink -f "$0") |
| 3 | +SCRIPT_DIR=$(dirname "$SCRIPT_PATH") |
| 4 | +cd "$SCRIPT_DIR/.." # run from repo root |
| 5 | + |
| 6 | +BRANCH_NAME="client_update" |
| 7 | +BASE_BRANCH="main" |
| 8 | +COMMIT_MESSAGE="Update generated TypeScript client" |
| 9 | +PR_TITLE="feat: Update TypeScript client" |
| 10 | +PR_BODY="Automated update of generated TypeScript client." |
| 11 | + |
| 12 | +DRY_RUN=false |
| 13 | +while [ "$1" != "" ]; do |
| 14 | + param=${1%%=*} |
| 15 | + value=${1#*=} |
| 16 | + case $param in |
| 17 | + --dry-run) |
| 18 | + DRY_RUN=true |
| 19 | + ;; |
| 20 | + *) |
| 21 | + echo "unknown parameter \"$param\" value \"$value\"" |
| 22 | + exit 1 |
| 23 | + ;; |
| 24 | + esac |
| 25 | + shift |
| 26 | +done |
| 27 | + |
| 28 | +set -eu |
| 29 | + |
| 30 | +if ! command -v gh >/dev/null 2>&1; then |
| 31 | + echo "GitHub CLI (gh) is required but not installed." >&2 |
| 32 | + exit 1 |
| 33 | +fi |
| 34 | + |
| 35 | +if ! gh auth status >/dev/null 2>&1; then |
| 36 | + echo "authenticating with Github CLI" |
| 37 | + gh auth login |
| 38 | +fi |
| 39 | + |
| 40 | +gh auth status |
| 41 | + |
| 42 | + |
| 43 | +echo "Configuring git user" |
| 44 | +if [ -z "$(git config --get user.name)" ]; then |
| 45 | + git config user.name "GithubActions" |
| 46 | +fi |
| 47 | +if [ -z "$(git config --get user.email)" ]; then |
| 48 | + git config user.email "github-action@automated.bit.ly" |
| 49 | +fi |
| 50 | + |
| 51 | +echo "Generating TypeScript API client" |
| 52 | +./scripts/generate_ts_api.sh |
| 53 | + |
| 54 | +if git diff --quiet --exit-code; then |
| 55 | + echo "No changes generated. Exiting." |
| 56 | + exit 0 |
| 57 | +fi |
| 58 | + |
| 59 | +echo "Creating update branch $BRANCH_NAME" |
| 60 | +git checkout -B "$BRANCH_NAME" |
| 61 | + |
| 62 | +echo "Staging changes" |
| 63 | +git add -A |
| 64 | + |
| 65 | +if git diff --cached --quiet --exit-code; then |
| 66 | + echo "No staged changes found after generation. Exiting." |
| 67 | + exit 0 |
| 68 | +fi |
| 69 | + |
| 70 | +if [ "$DRY_RUN" = "true" ]; then |
| 71 | + echo -e "DRY RYN: Changes:\n$(git status --porcelain)" |
| 72 | + exit 1 |
| 73 | +fi |
| 74 | + |
| 75 | +echo "Committing changes" |
| 76 | +git commit -m "$COMMIT_MESSAGE" |
| 77 | + |
| 78 | +echo "Pushing branch to origin" |
| 79 | +git push --force-with-lease origin "$BRANCH_NAME" |
| 80 | + |
| 81 | + |
| 82 | +echo "Checking for existing pull request" |
| 83 | +OPEN_PR_COUNT=$(gh pr list --head "$BRANCH_NAME" --state open --json number --jq '. | length') |
| 84 | +if [ "$OPEN_PR_COUNT" -eq 0 ]; then |
| 85 | + echo "Creating pull request" |
| 86 | + gh pr create --head "$BRANCH_NAME" --base "$BASE_BRANCH" --title "$PR_TITLE" --body "$PR_BODY" |
| 87 | +else |
| 88 | + echo "An open pull request already exists for $BRANCH_NAME. Skipping creation." |
| 89 | +fi |
0 commit comments