From a77f2dca46ac92ee5d7f31f0fc797e4f987ff727 Mon Sep 17 00:00:00 2001 From: Dan Ditomaso Date: Wed, 15 Oct 2025 21:20:46 -0400 Subject: [PATCH] Refactor CI workflow for pnpm and build process --- .github/workflows/ci.yml | 59 ++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e29f975d..12902251 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 - + - name: Setup pnpm uses: pnpm/action-setup@v4 with: @@ -28,39 +28,52 @@ jobs: cache: pnpm cache-dependency-path: '**/pnpm-lock.yaml' - - name: Cache pnpm dependencies - uses: actions/cache@v4 - with: - path: | - ~/.pnpm-store - packages/*/node_modules - key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm- + - name: Prewarm & Install (workspace) + run: | + set -euo pipefail + pnpm fetch + pnpm install --frozen-lockfile --offline - - name: Build All Packages + - name: Build All Packages (with exclusions) + shell: bash run: | set -euo pipefail - # Add package folders you want to exclude here (space-separated) + # List packages to exclude (full paths under repo root) EXCLUDED_DIRS=("packages/protobufs" "packages/transport-deno") + is_excluded() { + local dir="$1" + for ex in "${EXCLUDED_DIRS[@]}"; do + if [[ "$dir" == "$ex" ]]; then + return 0 + fi + done + return 1 + } + for pkg_dir in packages/*/; do - pkg_dir=${pkg_dir%/} # Remove trailing slash - echo "🔍 Inspecting $pkg_dir..." + pkg_dir="${pkg_dir%/}" # trim trailing slash - # Check if directory is excluded - if [[ " ${EXCLUDED_DIRS[*]} " == *" $pkg_dir "* ]]; then + # Must be a directory with a package.json + if [[ ! -f "$pkg_dir/package.json" ]]; then + echo "⚠️ Skipping $pkg_dir (no package.json)" + continue + fi + + # Allow for exclusions + if is_excluded "$pkg_dir"; then echo "🚫 Skipping $pkg_dir (excluded)" continue fi - # Build only if it has a package.json - if [[ -f "$pkg_dir/package.json" ]]; then - echo "🔧 Building with pnpm: $pkg_dir" - (cd "$pkg_dir" && pnpm install --frozen-lockfile && pnpm run build:npm) - else - echo "⚠️ Skipping $pkg_dir (no package.json)" + # Optionally skip Deno-first packages automatically + if [[ -f "$pkg_dir/deno.json" || -f "$pkg_dir/deno.jsonc" ]]; then + echo "🦕 Skipping $pkg_dir (deno project)" + continue fi - done + echo "🔧 Building: $pkg_dir" + # No per-package install needed; workspace install already done + pnpm -C "$pkg_dir" run build:npm + done