From 1ace63c8362358ef573af676ef46c49c92bb8464 Mon Sep 17 00:00:00 2001 From: "Jared (Shoploop)" Date: Thu, 25 Jun 2026 23:22:17 +0000 Subject: [PATCH 1/2] =?UTF-8?q?ci:=20M13=20=E2=80=94=20pnpm=20workspace=20?= =?UTF-8?q?root=20+=20GitHub=20Actions=20CI=20baseline=20(closes=20#13)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds root package.json, pnpm-workspace.yaml, .nvmrc, CODEOWNERS, and .github/workflows/ci.yml. Runs pnpm -r --if-present typecheck and test on every PR to main. Required before the v0.1 Varitea release train (#14) starts merging the 7 open connector/landing/bandit PRs. --- .github/CODEOWNERS | 5 +++++ .github/workflows/ci.yml | 43 ++++++++++++++++++++++++++++++++++++++++ .nvmrc | 1 + package.json | 17 ++++++++++++++++ pnpm-workspace.yaml | 4 ++++ 5 files changed, 70 insertions(+) create mode 100644 .github/CODEOWNERS create mode 100644 .github/workflows/ci.yml create mode 100644 .nvmrc create mode 100644 package.json create mode 100644 pnpm-workspace.yaml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..53fba48 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,5 @@ +# CI/CD baseline: any change to the workflow or root workspace config +# requires a maintainer review. Keeps the release train safe. +.github/workflows/ @ninan-versioning +package.json @ninan-versioning +pnpm-workspace.yaml @ninan-versioning diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..2133154 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,43 @@ +name: CI + +on: + pull_request: + branches: [main] + push: + branches: [main] + +# Cancel superseded runs on the same ref +concurrency: + group: ci-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + typecheck-and-test: + name: Typecheck + Test (Node 20, pnpm) + runs-on: ubuntu-latest + timeout-minutes: 20 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.12.0 + run_install: false + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile=false + + - name: Typecheck (all packages) + run: pnpm -r --if-present run typecheck + + - name: Test (all packages) + run: pnpm -r --if-present run test diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..209e3ef --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +20 diff --git a/package.json b/package.json new file mode 100644 index 0000000..679a4e4 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "shoploop", + "version": "0.0.0", + "private": true, + "description": "Shoploop monorepo root. Workspace orchestration only — no runtime code lives here.", + "license": "UNLICENSED", + "packageManager": "pnpm@9.12.0", + "engines": { + "node": ">=20" + }, + "scripts": { + "typecheck": "pnpm -r --if-present run typecheck", + "test": "pnpm -r --if-present run test", + "build": "pnpm -r --if-present run build", + "ci": "pnpm run typecheck && pnpm run test" + } +} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..8abf7a3 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - "connectors/*" + - "packages/*" + - "apps/*" From fcfec2c49521431893811dc2978298dc2be13ab2 Mon Sep 17 00:00:00 2001 From: "Jared (Shoploop)" Date: Thu, 25 Jun 2026 23:23:25 +0000 Subject: [PATCH 2/2] ci: drop cache:pnpm until root pnpm-lock.yaml exists; --no-frozen-lockfile on first install --- .github/workflows/ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2133154..6d984ca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,10 +31,12 @@ jobs: uses: actions/setup-node@v4 with: node-version-file: .nvmrc - cache: pnpm + # NOTE: `cache: pnpm` requires a root pnpm-lock.yaml. There isn't one + # yet because main is prose-only. Re-add caching in a follow-up PR + # after the first connector (#15) lands with a real lockfile. - name: Install dependencies - run: pnpm install --frozen-lockfile=false + run: pnpm install --no-frozen-lockfile - name: Typecheck (all packages) run: pnpm -r --if-present run typecheck