@crossdelta/platform-sdk 0.26.14 → 0.26.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,16 @@ All notable changes to `@crossdelta/platform-sdk` will be documented in this fil
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.26.15] - 2026-11-04
9
+
10
+ ### Fixed
11
+ - **The generated `lint-and-tests.yml` follows the workspace workflow again.** The template missed the
12
+ split lint steps (Biome lint, Biome format, custom lint rules and their tests) and the new
13
+ `typecheck` job, which type-checks the affected packages with each package's own tsconfig.
14
+ The sync leaves out what only exists in the source repository: the Biome format step for
15
+ `packages/jackherd` and `packages/pf-mcp`, the custom lint rule steps and the `KNOWN_RED` skip
16
+ list of the typecheck job, so a generated workspace has no step pointing at a missing path.
17
+
8
18
  ## [0.26.14] - 2026-11-02
9
19
 
10
20
  ### Fixed
@@ -17,7 +17,7 @@ permissions:
17
17
  contents: read
18
18
  pull-requests: read
19
19
 
20
- # A draft skips lint and test under their own check names: GitHub shows the newest check run per
20
+ # A draft skips lint, test and typecheck under their own check names: GitHub shows the newest check run per
21
21
  # name, and a draft push followed at once by `gh pr ready` leaves two runs on one commit, so a
22
22
  # skipped "lint" could land after, and hide, the real one. A docs-only PR runs them but skips every
23
23
  # step after the file check, so both end as a success and a required check never waits for a run
@@ -49,9 +49,9 @@ jobs:
49
49
  cache-restore-keys: bun-v4-$\{{ runner.os }}-
50
50
  ignore-scripts: 'true'
51
51
 
52
- - name: Run Linter
52
+ - name: Biome lint
53
53
  if: steps.docs-only.outputs.docs_only != 'true'
54
- run: bun run --if-present lint
54
+ run: bunx biome lint .
55
55
 
56
56
  - name: Component manifest
57
57
  if: steps.docs-only.outputs.docs_only != 'true'
@@ -131,6 +131,64 @@ jobs:
131
131
  bun run --if-present test
132
132
  fi
133
133
 
134
+ # Types are checked per package with the package's own tsconfig, as `scripts/pre-commit-checks.ts`
135
+ # does. The packages are built first (the install runs the root `prepare`): a package's types
136
+ # resolve through its dependencies' dist.
137
+ typecheck:
138
+ name: $\{{ github.event.pull_request.draft && 'typecheck (draft)' || 'typecheck' }}
139
+ if: github.event.pull_request.draft == false
140
+ runs-on: ubuntu-latest
141
+ timeout-minutes: 15
142
+ steps:
143
+ - name: Checkout code
144
+ uses: actions/checkout@v6
145
+ with:
146
+ fetch-depth: 2
147
+
148
+ - name: Check for docs-only changes
149
+ id: docs-only
150
+ uses: ./.github/actions/pr-docs-only
151
+ with:
152
+ patterns: docs/**/*.md
153
+ github-token: $\{{ github.token }}
154
+
155
+ - name: Setup Bun and install dependencies
156
+ if: steps.docs-only.outputs.docs_only != 'true'
157
+ uses: ./.github/actions/setup-bun-install
158
+ with:
159
+ enable-cache: 'true'
160
+ cache-key: bun-v4-$\{{ runner.os }}-$\{{ hashFiles('bun.lock', 'bunfig.toml') }}
161
+ cache-restore-keys: bun-v4-$\{{ runner.os }}-
162
+
163
+ # Same scope rule as the test job: `turbo ls --affected` names the changed packages and their
164
+ # dependents, and a change to a root file every package reads checks them all.
165
+ - name: Run Typecheck
166
+ if: steps.docs-only.outputs.docs_only != 'true'
167
+ env:
168
+ GLOBAL_PATHS: package.json bunfig.toml tsconfig.json .npmrc .bun-version patches/ .github/workflows/lint-and-tests.yml .github/actions/setup-bun-install/
169
+ TURBO_SCM_BASE: HEAD^1
170
+ TURBO_SCM_HEAD: HEAD
171
+ run: |
172
+ # shellcheck disable=SC2086 # GLOBAL_PATHS is a space-separated pathspec list
173
+ CHANGED=$(git diff --name-only HEAD^1 HEAD -- $GLOBAL_PATHS | head -1)
174
+ if [ -n "$CHANGED" ]; then
175
+ echo "::notice::${CHANGED} changed: typechecking every package."
176
+ PACKAGES=$(bunx turbo ls --output=json | jq -r '.packages.items[].path')
177
+ else
178
+ PACKAGES=$(bunx turbo ls --affected --output=json | jq -r '.packages.items[].path')
179
+ fi
180
+ FAILED=""
181
+ for PACKAGE in $PACKAGES; do
182
+ [ -f "$PACKAGE/tsconfig.json" ] || continue
183
+ echo "::group::tsc $PACKAGE"
184
+ (cd "$PACKAGE" && bunx tsc --noEmit) || FAILED="$FAILED $PACKAGE"
185
+ echo "::endgroup::"
186
+ done
187
+ if [ -n "$FAILED" ]; then
188
+ echo "::error::Type errors in:${FAILED}"
189
+ exit 1
190
+ fi
191
+
134
192
  e2e:
135
193
  runs-on: ubuntu-latest
136
194
  timeout-minutes: 30
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crossdelta/platform-sdk",
3
- "version": "0.26.14",
3
+ "version": "0.26.15",
4
4
  "description": "Platform toolkit for event-driven microservices — keeping code and infrastructure in lockstep.",
5
5
  "keywords": [
6
6
  "cli",