@ -15,7 +15,7 @@ jobs:
steps:
steps:
- name : Checkout code
- name : Checkout code
uses : actions/checkout@v4
uses : actions/checkout@v4
- name : Setup pnpm
- name : Setup pnpm
uses : pnpm/action-setup@v4
uses : pnpm/action-setup@v4
with:
with:
@ -28,41 +28,52 @@ jobs:
cache : pnpm
cache : pnpm
cache-dependency-path : '**/pnpm-lock.yaml'
cache-dependency-path : '**/pnpm-lock.yaml'
- name : Setup Deno
- name : Prewarm & Install (workspace)
uses : denoland/setup-deno@v2
run : |
with:
set -euo pipefail
deno-version : v2.x
pnpm fetch
pnpm install --frozen-lockfile --offline
- name : Cache Deno dependencies
uses : actions/cache@v4
with:
path : ~/.cache/deno
key : ${{ runner.os }}-deno-${{ hashFiles('**/deno.lock', '**/package.json') }}
restore-keys : |
${{ runner.os }}-deno-
- name : Cache pnpm dependencies
uses : actions/cache@v4
with:
path : |
~/.pnpm-store
packages/web/node_modules
key : ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys : |
${{ runner.os }}-pnpm-
- name : Build All Packages
- name : Build All Packages (with exclusions)
shell : bash
run : |
run : |
set -euo pipefail
set -euo pipefail
# 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
for pkg_dir in packages/*/; do
pkg_dir=${pkg_dir%/} # Remove trailing slash
pkg_dir="${pkg_dir%/}" # trim trailing slash
echo "🔍 Inspecting $pkg_dir..."
# Must be a directory with a package.json
if [[ ! -f "$pkg_dir/package.json" ]]; then
echo "⚠️ Skipping $pkg_dir (no package.json)"
continue
fi
if [[ -f "$pkg_dir/package.json" ]] && [[ "$pkg_dir" != "packages/web" ]]; then
# Allow for exclusions
echo "🔧 Building with pnpm: $pkg_dir"
if is_excluded "$pkg_dir"; then
(cd "$pkg_dir" && pnpm install --frozen-lockfile && pnpm run build:npm)
echo "🚫 Skipping $pkg_dir (excluded)"
else
continue
echo "⚠️ Skipping $pkg_dir (web package or no package.json)"
fi
fi
# 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
echo "🔧 Building: $pkg_dir"
# No per-package install needed; workspace install already done
pnpm -C "$pkg_dir" run build:npm
done
done