| #!/usr/bin/env bash |
| set -euo pipefail |
|
|
| |
| |
|
|
| |
| source "$(dirname "$0")/go-utils.sh" |
| if [[ $# -lt 1 ]]; then |
| echo "Usage: $0 <plugin-name> [core-version] [framework-version]" |
| exit 1 |
| fi |
|
|
| PLUGIN_NAME="$1" |
|
|
| |
| if [ -n "${2:-}" ]; then |
| CORE_VERSION="$2" |
| else |
| CORE_VERSION="v$(tr -d '\n\r' < core/version)" |
| fi |
|
|
| |
| if [ -n "${3:-}" ]; then |
| FRAMEWORK_VERSION="$3" |
| else |
| FRAMEWORK_VERSION="v$(tr -d '\n\r' < framework/version)" |
| fi |
|
|
| |
| 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 |
|
|
| echo "π Releasing plugin: $PLUGIN_NAME" |
| echo "π§ Core version: $CORE_VERSION" |
| echo "π§ Framework version: $FRAMEWORK_VERSION" |
|
|
| PLUGIN_DIR="plugins/$PLUGIN_NAME" |
| VERSION_FILE="$PLUGIN_DIR/version" |
|
|
| if [ ! -f "$VERSION_FILE" ]; then |
| echo "β Version file not found: $VERSION_FILE" |
| exit 1 |
| fi |
|
|
| PLUGIN_VERSION=$(tr -d '\n\r' < "$VERSION_FILE") |
| TAG_NAME="plugins/${PLUGIN_NAME}/v${PLUGIN_VERSION}" |
|
|
| echo "π¦ Plugin version: $PLUGIN_VERSION" |
| echo "π·οΈ Tag name: $TAG_NAME" |
|
|
|
|
| |
| echo "π§ Updating plugin dependencies..." |
| cd "$PLUGIN_DIR" |
|
|
| |
| if [ -f "go.mod" ]; then |
| go_get_with_backoff "github.com/maximhq/bifrost/core@${CORE_VERSION}" |
| go_get_with_backoff "github.com/maximhq/bifrost/framework@${FRAMEWORK_VERSION}" |
| go mod tidy |
| git add go.mod go.sum || true |
|
|
| |
| echo "π¨ Validating plugin build..." |
| go build ./... |
| echo "β
Plugin $PLUGIN_NAME build validation successful" |
| else |
| echo "βΉοΈ No go.mod found, skipping Go dependency update" |
| fi |
|
|
| cd ../.. |
|
|
| |
| 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" |
| echo "π§ Committing and pushing changes..." |
| git commit -m "plugins/${PLUGIN_NAME}: bump core to $CORE_VERSION and framework to $FRAMEWORK_VERSION --skip-pipeline" |
| git push -u origin HEAD |
| else |
| echo "βΉοΈ No staged changes to commit" |
| fi |
|
|
| |
| CHANGELOG_BODY=$(cat $PLUGIN_DIR/changelog.md) |
| |
| CHANGELOG_BODY=$(echo "$CHANGELOG_BODY" | grep -v '^<!--' | grep -v '^-->' || true) |
| |
| 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 "plugins/${PLUGIN_NAME}/v*" | sort -V | tail -1) |
| if [[ "$PREV_TAG" == "$TAG_NAME" ]]; then |
| PREV_TAG=$(git tag -l "plugins/${PLUGIN_NAME}/v*" | sort -V | tail -2 | head -1) |
| fi |
|
|
| |
| if [ -n "$PREV_TAG" ]; then |
| 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 |
| else |
| echo "βΉοΈ No previous tag found - this is the first release" |
| fi |
|
|
|
|
| |
| echo "π·οΈ Creating tag: $TAG_NAME" |
|
|
| if git rev-parse "$TAG_NAME" >/dev/null 2>&1; then |
| echo "βΉοΈ Tag already exists: $TAG_NAME (skipping creation)" |
| else |
| git tag "$TAG_NAME" -m "Release plugin $PLUGIN_NAME v$PLUGIN_VERSION" -m "$CHANGELOG_BODY" |
| git push origin "$TAG_NAME" |
| fi |
|
|
| |
| TITLE="Plugin $PLUGIN_NAME v$PLUGIN_VERSION" |
|
|
| |
| PRERELEASE_FLAG="" |
| if [[ "$PLUGIN_VERSION" == *-* ]]; then |
| PRERELEASE_FLAG="--prerelease" |
| fi |
|
|
| |
| LATEST_FLAG="" |
| if [[ "$PLUGIN_VERSION" != *-* ]]; then |
| LATEST_FLAG="--latest" |
| fi |
|
|
|
|
| BODY="## Plugin Release: $PLUGIN_NAME v$PLUGIN_VERSION |
| |
| $CHANGELOG_BODY |
| |
| ### Installation |
| |
| \`\`\`bash |
| # Update your go.mod to use the new plugin version |
| go get github.com/maximhq/bifrost/plugins/$PLUGIN_NAME@v$PLUGIN_VERSION |
| \`\`\` |
| |
| --- |
| _This release was automatically created from version file: \`plugins/$PLUGIN_NAME/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 "β
Plugin $PLUGIN_NAME released successfully" |
| echo "success=true" >> "${GITHUB_OUTPUT:-/dev/null}" |
|
|