# Validate Directus SDK imports before push # This prevents runtime crashes caused by importing non-existent exports SCRIPT_DIR="$(cd "$(dirname "$0")/.." && pwd)" if [ -f "$SCRIPT_DIR/scripts/validate-sdk-imports.sh" ]; then "$SCRIPT_DIR/scripts/validate-sdk-imports.sh" || exit 1 fi # Check if we are pushing a tag while read local_ref local_sha remote_ref remote_sha do if [[ "$remote_ref" == refs/tags/* ]]; then TAG=${remote_ref#refs/tags/} echo "🏷️ Tag detected: $TAG, ensuring versions are synced..." # Run sync script pnpm sync-versions "$TAG" # Check for changes in relevant files SYNC_FILES="package.json packages/*/package.json apps/*/package.json .env.example" CHANGES=$(git status --porcelain $SYNC_FILES) if [[ -n "$CHANGES" ]]; then echo "📝 Version sync made changes. Integrating into tag..." # Stage and commit git add $SYNC_FILES git commit -m "chore: sync versions to $TAG" --no-verify # Force update the local tag to point to the new commit git tag -f "$TAG" > /dev/null echo "✅ Tag $TAG has been updated locally with synced versions." # Push branch AND tag directly inside the hook because Git native push has already recorded the old SHA CURRENT_BRANCH=$(git branch --show-current) if [ -n "$CURRENT_BRANCH" ]; then git push origin "$CURRENT_BRANCH" --no-verify fi git push origin "$TAG" --force --no-verify echo "" echo "✨ VERSIONS SYNCED & PUSHED SUCCESSFULLY ✨" echo "The correct commit has been tagged on origin." echo "(Info: You will see a 'pre-push hook failed' and 'failed to push' error below. Please completely ignore it. We MUST abort the native git push, otherwise Git would push the pre-sync commit to the tag and break the version history.)" echo "" # We MUST exit 1, otherwise native Git will push the wrong commit to the tag exit 1 else echo "✨ Versions already in sync for $TAG." exit 0 fi fi done