Publish the project to all three targets: backup, dev remotes, and Chromatic. ## Workflow ### Step 1 — Pre-flight check 1. Ensure there are no uncommitted changes: `git status --porcelain` - If dirty, ask the user if they want to commit first 2. Run `npx tsc --noEmit` to verify the build is clean - If it fails, stop and report errors ### Step 2 — Push to backup (everything) Push main directly to the `backup` remote (git.tensordesign.com.au/richie/ParsonsFA). This is a private repo that receives the full repo including AI tooling, memory, and working docs. ```bash git push backup main ``` If rejected (non-fast-forward), warn the user and ask before force-pushing. ### Step 3 — Push to dev remotes (stripped) Both `fa-dev` and `sheffield` receive a stripped version with AI tooling removed. Use a temporary worktree to avoid touching the working directory. ```bash # Clean up any prior worktree git worktree remove --force /tmp/dev-push 2>/dev/null git branch -D dev-clean 2>/dev/null # Create worktree from current main git worktree add /tmp/dev-push -b dev-clean # In the worktree, remove AI tooling from the index cd /tmp/dev-push for path in .claude/ docs/memory/ docs/reference/; do git rm -r --cached "$path" 2>/dev/null done git commit -m "Strip AI tooling and working docs for dev push" # Push stripped branch to both dev remotes cd git push fa-dev dev-clean:main --force git push sheffield dev-clean:main --force # Clean up git worktree remove --force /tmp/dev-push git branch -D dev-clean ``` **Important:** The `--force` is safe here because the stripped branch is always regenerated from main. Dev remotes never have unique commits. ### Step 4 — Sync assets to Gitea Push the `brandassets/` directory to the dedicated assets repo so Chromatic can load images via external URLs. ```bash cd /tmp rm -rf ParsonsAssets git clone https://richie:151fdccacf11b6190d066a7e07f6f5310b2227dd@git.tensordesign.com.au/richie/ParsonsAssets.git rsync -a --delete /brandassets/ /tmp/ParsonsAssets/ --exclude='.git' cd /tmp/ParsonsAssets git add -A git diff --cached --quiet || git commit -m "Sync assets from main project" git push origin main cd rm -rf /tmp/ParsonsAssets ``` This step is idempotent — if nothing changed, no commit is created. Skip if you know no images were added or changed since last publish. ### Step 5 — Deploy to Chromatic ```bash STORYBOOK_ASSET_BASE=https://git.tensordesign.com.au/richie/ParsonsAssets/raw/branch/main npm run chromatic ``` The `STORYBOOK_ASSET_BASE` env var tells `assetUrl()` to resolve image paths from the Gitea assets repo instead of local static files. Run this in the background. Report the Storybook URL and build link when complete. ### Step 6 — Report Summarise what was pushed: ``` Published to all targets: - backup → git.tensordesign.com.au/richie/ParsonsFA (full) - fa-dev → git.tensordesign.com.au/richie/Parsons (stripped) - sheffield → sheffield.sapiente.casa/richie/ParsonsFA (stripped) - assets → git.tensordesign.com.au/richie/ParsonsAssets (synced) - Chromatic → [build link] ``` If any target failed, report which ones succeeded and which failed.