| #!/usr/bin/env bash |
| set -euo pipefail |
|
|
| |
| |
|
|
| |
| source "$(dirname "$0")/go-utils.sh" |
|
|
| |
| if [ $# -ne 1 ]; then |
| echo "Usage: $0 <version>" >&2 |
| exit 1 |
| fi |
|
|
| VERSION_RAW="$1" |
| |
| if [[ "$VERSION_RAW" == v* ]]; then |
| VERSION="$VERSION_RAW" |
| else |
| VERSION="v$VERSION_RAW" |
| fi |
|
|
| TAG_NAME="framework/${VERSION}" |
|
|
| echo "π¦ Releasing framework $VERSION..." |
|
|
| |
| CURRENT_BRANCH="$(git rev-parse --abbrev-ref HEAD)" |
| if [ "$CURRENT_BRANCH" = "HEAD" ]; then |
| |
| CURRENT_BRANCH="${GITHUB_REF_NAME:-main}" |
| fi |
|
|
| echo "Pulling latest changes from origin/$CURRENT_BRANCH..." |
| if ! git pull origin "$CURRENT_BRANCH"; then |
| echo "β Error: git pull origin $CURRENT_BRANCH failed" |
| exit 1 |
| fi |
|
|
| |
| if ! git diff --quiet; then |
| echo "β Error: Unstaged changes detected after pull (possible merge conflict)" |
| git status --short |
| exit 1 |
| fi |
|
|
| if ! git diff --cached --quiet; then |
| echo "β Error: Staged changes detected after pull (unexpected state)" |
| git status --short |
| exit 1 |
| fi |
|
|
| |
| git fetch --tags >/dev/null 2>&1 || true |
|
|
| |
| CORE_VERSION="v$(tr -d '\n\r' < core/version)" |
|
|
|
|
| |
| echo "π§ Updating hello-word plugin core dependencies..." |
| cd examples/plugins/hello-world |
| go_get_with_backoff "github.com/maximhq/bifrost/core@$CORE_VERSION" |
| go mod tidy |
| git add go.mod go.sum |
| cd ../../.. |
|
|
| echo "π§ Using core version: $CORE_VERSION" |
|
|
| |
| echo "π§ Updating framework dependencies..." |
| cd framework |
| go_get_with_backoff "github.com/maximhq/bifrost/core@$CORE_VERSION" |
| go mod tidy |
| git add go.mod go.sum |
|
|
| |
| git add go.mod go.sum |
|
|
|
|
| |
| echo "π¨ Validating framework build..." |
| go build ./... |
| cd .. |
| echo "β
Framework build validation successful" |
|
|
| |
| if ! git diff --cached --quiet; then |
| git config user.name "github-actions[bot]" |
| git config user.email "41898282+github-actions[bot]@users.noreply.github.com" |
| git commit -m "framework: bump core to $CORE_VERSION --skip-pipeline" |
| |
| CURRENT_BRANCH="$(git rev-parse --abbrev-ref HEAD)" |
| if [ "$CURRENT_BRANCH" = "HEAD" ]; then |
| |
| CURRENT_BRANCH="${GITHUB_REF_NAME:-main}" |
| fi |
| git push origin "$CURRENT_BRANCH" |
| echo "π§ Pushed framework bump to $CURRENT_BRANCH" |
| else |
| echo "No dependency changes detected; skipping commit." |
| fi |
|
|
| |
| CHANGELOG_BODY=$(cat framework/changelog.md) |
| |
| CHANGELOG_BODY=$(echo "$CHANGELOG_BODY" | grep -v '^<!--' | grep -v '^-->') |
| |
| if [ -z "$CHANGELOG_BODY" ]; then |
| echo "β Changelog is empty" |
| exit 1 |
| fi |
| echo "π New changelog: $CHANGELOG_BODY" |
|
|
| |
| echo "π Finding previous tag..." |
| PREV_TAG=$(git tag -l "framework/v*" | sort -V | tail -1) |
| if [[ "$PREV_TAG" == "$TAG_NAME" ]]; then |
| PREV_TAG=$(git tag -l "framework/v*" | sort -V | tail -2 | head -1) |
| fi |
| echo "π Previous tag: $PREV_TAG" |
|
|
| |
| echo "π Getting previous tag message..." |
| PREV_CHANGELOG=$(git tag -l --format='%(contents)' "$PREV_TAG") |
| echo "π Previous changelog body: $PREV_CHANGELOG" |
|
|
| |
| if [[ "$PREV_CHANGELOG" == "$CHANGELOG_BODY" ]]; then |
| echo "β Changelog is the same as the previous changelog" |
| exit 1 |
| fi |
|
|
| |
| echo "π·οΈ Creating tag: $TAG_NAME" |
| if git rev-parse --verify "$TAG_NAME" >/dev/null 2>&1; then |
| echo "Tag $TAG_NAME already exists; skipping tag creation." |
| else |
| git tag "$TAG_NAME" -m "Release framework $VERSION" -m "$CHANGELOG_BODY" |
| git push origin "$TAG_NAME" |
| fi |
|
|
| |
| TITLE="Framework $VERSION" |
|
|
| |
| PRERELEASE_FLAG="" |
| if [[ "$VERSION" == *-* ]]; then |
| PRERELEASE_FLAG="--prerelease" |
| fi |
|
|
| LATEST_FLAG="" |
| if [[ "$VERSION" != *-* ]]; then |
| LATEST_FLAG="--latest" |
| fi |
|
|
| BODY="## Framework Release $VERSION |
| |
| $CHANGELOG_BODY |
| |
| ### Installation |
| |
| \`\`\`bash |
| go get github.com/maximhq/bifrost/framework@$VERSION |
| \`\`\` |
| |
| --- |
| _This release was automatically created and uses core version: \`$CORE_VERSION\`_" |
|
|
| echo "π Creating GitHub release for $TITLE..." |
| if gh release view "$TAG_NAME" >/dev/null 2>&1; then |
| echo "βΉοΈ Release $TAG_NAME already exists. Skipping creation." |
| else |
| gh release create "$TAG_NAME" \ |
| --title "$TITLE" \ |
| --notes "$BODY" \ |
| ${PRERELEASE_FLAG} ${LATEST_FLAG} |
|
|
| fi |
|
|
| echo "β
Framework released successfully" |
| echo "success=true" >> "$GITHUB_OUTPUT" |
|
|