Skip to content

Commit 587b963

Browse files
committed
feat(intelligence): Add publish script
1 parent 0009622 commit 587b963

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

intelligence/dev/publish.sh

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"/../../
5+
6+
# --- CONFIG ---
7+
REPO="adap/flower"
8+
TS_PATH="intelligence/ts/package.json"
9+
KT_PATH="intelligence/kt/gradle.properties"
10+
CODEOWNERS_FILE=".github/CODEOWNERS"
11+
RELEASE_PREFIX="intelligence/v"
12+
13+
# --- UTILITY FUNCTIONS ---
14+
get_ts_version() {
15+
jq -r '.version' "$TS_PATH"
16+
}
17+
18+
get_kt_version() {
19+
grep '^VERSION_NAME=' "$KT_PATH" | cut -d'=' -f2
20+
}
21+
22+
get_latest_tag() {
23+
git fetch --tags >/dev/null 2>&1
24+
git tag --list "${RELEASE_PREFIX}*" | sort -V | tail -n 1 | sed "s|${RELEASE_PREFIX}||"
25+
}
26+
27+
confirm() {
28+
read -r -p "$1 [y/N] " response
29+
[[ "$response" =~ ^[Yy]$ ]]
30+
}
31+
32+
check_admin_rights() {
33+
local user perm
34+
user=$(gh api user --jq '.login' 2>/dev/null || echo "")
35+
if [[ -z "$user" ]]; then
36+
echo "⚠️ Could not determine GitHub username. Try running: gh auth login"
37+
return 1
38+
fi
39+
echo "👤 Logged in as @$user"
40+
perm=$(gh api "repos/$REPO/collaborators/$user/permission" --jq '.permission' 2>/dev/null || echo "none")
41+
if [[ "$perm" == "admin" ]]; then
42+
echo "✅ User @$user has admin access to $REPO"
43+
return 0
44+
else
45+
echo "❌ User @$user does not have admin rights to $REPO (permission: $perm)"
46+
return 1
47+
fi
48+
}
49+
50+
# --- MAIN LOGIC ---
51+
52+
echo "🔍 Checking current SDK versions..."
53+
TS_VERSION=$(get_ts_version)
54+
KT_VERSION=$(get_kt_version)
55+
56+
if [ "$TS_VERSION" != "$KT_VERSION" ]; then
57+
echo "❌ TypeScript and Kotlin versions mismatch!"
58+
echo " TypeScript: $TS_VERSION"
59+
echo " Kotlin: $KT_VERSION"
60+
exit 1
61+
fi
62+
63+
NEW_VERSION="$TS_VERSION"
64+
echo "✅ Both SDKs at version $NEW_VERSION"
65+
66+
LATEST_TAG=$(get_latest_tag)
67+
echo "🔖 Latest tag: v$LATEST_TAG"
68+
69+
# Compare versions to avoid skipping
70+
if [[ $(printf '%s\n' "$LATEST_TAG" "$NEW_VERSION" | sort -V | uniq | wc -l) -eq 1 ]]; then
71+
echo "❌ Version $NEW_VERSION is already tagged."
72+
exit 1
73+
elif [[ $(printf '%s\n' "$LATEST_TAG" "$NEW_VERSION" | sort -V | tail -n 1) != "$NEW_VERSION" ]]; then
74+
echo "❌ Version $NEW_VERSION is not greater than $LATEST_TAG."
75+
exit 1
76+
elif [[ $(printf '%s\n' "$LATEST_TAG" "$NEW_VERSION" | sort -V | head -n 1) != "$LATEST_TAG" ]]; then
77+
echo "⚠️ Warning: You might be skipping a version ($LATEST_TAG$NEW_VERSION)."
78+
confirm "Do you really want to proceed?" || exit 1
79+
fi
80+
81+
if [[ "${1:-}" == "--dry-run" ]]; then
82+
echo "(Dry run) Would tag ${RELEASE_PREFIX}${NEW_VERSION}"
83+
exit 0
84+
fi
85+
86+
# Admin permission check
87+
echo "🔐 Verifying GitHub permissions..."
88+
check_admin_rights || exit 1
89+
90+
# Confirm before tagging
91+
echo "About to tag and push:"
92+
echo " Branch: main"
93+
echo " Tag: ${RELEASE_PREFIX}${NEW_VERSION}"
94+
confirm "Proceed with tagging and pushing?" || exit 1
95+
96+
# Perform the release
97+
echo "🚀 Performing release..."
98+
git switch main
99+
git pull
100+
git tag "${RELEASE_PREFIX}${NEW_VERSION}"
101+
git push origin "${RELEASE_PREFIX}${NEW_VERSION}"
102+
echo "✅ Successfully pushed tag intelligence/v${NEW_VERSION}"

0 commit comments

Comments
 (0)