A replica of Keytrace
1#!/bin/bash
2set -e
3
4VERSION_TYPE=$1
5
6if [[ ! "$VERSION_TYPE" =~ ^(major|minor|patch)$ ]]; then
7 echo "Usage: ./scripts/deploy.sh <major|minor|patch>"
8 exit 1
9fi
10
11echo "==> Bumping $VERSION_TYPE version across packages..."
12
13# Get current version from runner package (source of truth)
14CURRENT_VERSION=$(node -p "require('./packages/runner/package.json').version")
15echo " Current version: $CURRENT_VERSION"
16
17# Calculate new version
18IFS='.' read -ra VERSION_PARTS <<< "$CURRENT_VERSION"
19MAJOR=${VERSION_PARTS[0]}
20MINOR=${VERSION_PARTS[1]}
21PATCH=${VERSION_PARTS[2]}
22
23case $VERSION_TYPE in
24 major)
25 MAJOR=$((MAJOR + 1))
26 MINOR=0
27 PATCH=0
28 ;;
29 minor)
30 MINOR=$((MINOR + 1))
31 PATCH=0
32 ;;
33 patch)
34 PATCH=$((PATCH + 1))
35 ;;
36esac
37
38NEW_VERSION="$MAJOR.$MINOR.$PATCH"
39echo " New version: $NEW_VERSION"
40
41# Update package versions
42PACKAGES=("packages/runner" "packages/claims" "packages/lexicon")
43
44for pkg in "${PACKAGES[@]}"; do
45 echo "==> Updating $pkg to $NEW_VERSION..."
46 node -e "
47 const fs = require('fs');
48 const pkg = JSON.parse(fs.readFileSync('$pkg/package.json', 'utf8'));
49 pkg.version = '$NEW_VERSION';
50 fs.writeFileSync('$pkg/package.json', JSON.stringify(pkg, null, 2) + '\n');
51 "
52done
53
54echo "==> Installing dependencies and building..."
55yarn install
56yarn build
57
58echo "==> Validating and publishing lexicons to ATProto..."
59# Load credentials from .env
60if [ -f "apps/keytrace.dev/.env" ]; then
61 export GOAT_USERNAME=keytrace.dev
62 export GOAT_PASSWORD=$(grep '^KEYTRACE_EMAIL_PASSWORD=' apps/keytrace.dev/.env | cut -d'=' -f2- | tr -d "'\"")
63else
64 echo " Warning: apps/keytrace.dev/.env not found, skipping lexicon publish"
65fi
66
67if [ -n "$GOAT_USERNAME" ] && [ -n "$GOAT_PASSWORD" ]; then
68 yarn workspace @keytrace/lexicon validate
69 (cd packages/lexicon && goat lex publish)
70 echo " Lexicons published to ATProto"
71else
72 echo " Skipping ATProto lexicon publish (no credentials)"
73fi
74
75echo "==> Creating git tag v$NEW_VERSION..."
76git add .
77git commit -m "Release v$NEW_VERSION"
78git tag "v$NEW_VERSION"
79
80echo "==> Pushing to git (tag push triggers npm publish via GitHub Actions)..."
81git push
82git push --tags
83
84echo ""
85echo "Done! v$NEW_VERSION tagged and pushed."
86echo "npm publish will run via GitHub Actions: https://github.com/orta/keytrace/actions"