feat: add update-contracts.sh for type extraction workflow

Script extracts types from payload-types.ts, updates the
payload-contracts repo, builds to verify, and optionally pushes.

Usage: ./scripts/update-contracts.sh [--push]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Martin Porwoll 2026-02-14 17:53:20 +00:00
parent e904f0949b
commit d50d3cd208

73
scripts/update-contracts.sh Executable file
View file

@ -0,0 +1,73 @@
#!/bin/bash
# update-contracts.sh
#
# Updates the payload-contracts repo with fresh types from the CMS.
# Run this after modifying collections or blocks and regenerating types.
#
# Usage:
# ./scripts/update-contracts.sh # Extract, build, and prompt for commit
# ./scripts/update-contracts.sh --push # Also push to GitHub
set -e
CMS_DIR="$(cd "$(dirname "$0")/.." && pwd)"
CONTRACTS_DIR="/home/payload/payload-contracts"
PAYLOAD_TYPES="$CMS_DIR/src/payload-types.ts"
echo "=== Update Payload Contracts ==="
echo ""
# 1. Verify payload-types.ts exists
if [ ! -f "$PAYLOAD_TYPES" ]; then
echo "ERROR: $PAYLOAD_TYPES not found."
echo "Run: pnpm payload generate:types"
exit 1
fi
# 2. Verify contracts repo exists
if [ ! -d "$CONTRACTS_DIR" ]; then
echo "ERROR: $CONTRACTS_DIR not found."
echo "Clone: git clone https://github.com/complexcaresolutions/payload-contracts.git $CONTRACTS_DIR"
exit 1
fi
# 3. Run type extraction
echo "[1/3] Extracting types..."
cd "$CONTRACTS_DIR"
npx tsx scripts/extract-types.ts "$PAYLOAD_TYPES"
# 4. Build to verify
echo ""
echo "[2/3] Building..."
pnpm build
echo ""
echo "[3/3] Checking for changes..."
cd "$CONTRACTS_DIR"
if git diff --quiet && git diff --cached --quiet; then
echo "No changes detected."
exit 0
fi
echo ""
echo "Changes detected:"
git diff --stat
echo ""
# 5. Commit
read -p "Commit message (or 'skip'): " MSG
if [ "$MSG" != "skip" ] && [ -n "$MSG" ]; then
git add -A
git commit -m "$MSG"
if [ "$1" = "--push" ]; then
echo "Pushing to GitHub..."
git push
echo "Done! Contracts updated and pushed."
else
echo "Committed locally. Run 'cd $CONTRACTS_DIR && git push' to publish."
fi
else
echo "Skipped commit. Changes are unstaged."
fi