code-foundry 1.48.0 → 1.48.2

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.
@@ -119,6 +119,9 @@ jobs:
119
119
  if-no-files-found: error
120
120
  retention-days: 14
121
121
 
122
+ - name: Save Vite+ task cache
123
+ uses: ./.github/actions/vite-plus-cache-save
124
+
122
125
  lint:
123
126
  name: Lint
124
127
  if: vars.CI_BILLING_PAUSED != 'true'
@@ -180,6 +183,9 @@ jobs:
180
183
  if-no-files-found: error
181
184
  retention-days: 14
182
185
 
186
+ - name: Save Vite+ task cache
187
+ uses: ./.github/actions/vite-plus-cache-save
188
+
183
189
  type-check:
184
190
  name: Type-Check
185
191
  if: vars.CI_BILLING_PAUSED != 'true'
@@ -246,6 +252,9 @@ jobs:
246
252
  if-no-files-found: error
247
253
  retention-days: 14
248
254
 
255
+ - name: Save Vite+ task cache
256
+ uses: ./.github/actions/vite-plus-cache-save
257
+
249
258
  build:
250
259
  name: Build
251
260
  if: vars.CI_BILLING_PAUSED != 'true'
@@ -311,3 +320,6 @@ jobs:
311
320
  include-hidden-files: true
312
321
  if-no-files-found: error
313
322
  retention-days: 14
323
+
324
+ - name: Save Vite+ task cache
325
+ uses: ./.github/actions/vite-plus-cache-save
@@ -124,3 +124,6 @@ jobs:
124
124
  eval-results/summary.json
125
125
  if-no-files-found: error
126
126
  retention-days: 14
127
+
128
+ - name: Save Vite+ task cache
129
+ uses: ./.github/actions/vite-plus-cache-save
@@ -311,7 +311,7 @@ jobs:
311
311
  steps.audit-toolchain.outputs.package_manager == 'bun'
312
312
  uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
313
313
  with:
314
- bun-version: 1.4.0
314
+ bun-version: 1.4.3
315
315
  - name: Enable Corepack
316
316
  if: >-
317
317
  matrix.entry.language == 'javascript' &&
@@ -161,6 +161,9 @@ jobs:
161
161
  if-no-files-found: ignore
162
162
  retention-days: 14
163
163
 
164
+ - name: Save Vite+ task cache
165
+ uses: ./.github/actions/vite-plus-cache-save
166
+
164
167
  performance:
165
168
  name: Performance
166
169
  if: vars.CI_BILLING_PAUSED != 'true'
@@ -247,6 +250,9 @@ jobs:
247
250
  if-no-files-found: ignore
248
251
  retention-days: 14
249
252
 
253
+ - name: Save Vite+ task cache
254
+ uses: ./.github/actions/vite-plus-cache-save
255
+
250
256
  integration:
251
257
  name: Integration
252
258
  if: vars.CI_BILLING_PAUSED != 'true' && inputs.unit-only != true
@@ -317,6 +323,9 @@ jobs:
317
323
  if-no-files-found: error
318
324
  retention-days: 14
319
325
 
326
+ - name: Save Vite+ task cache
327
+ uses: ./.github/actions/vite-plus-cache-save
328
+
320
329
  e2e:
321
330
  name: E2E
322
331
  if: vars.CI_BILLING_PAUSED != 'true' && inputs.unit-only != true
@@ -410,6 +419,9 @@ jobs:
410
419
  if-no-files-found: error
411
420
  retention-days: 14
412
421
 
422
+ - name: Save Vite+ task cache
423
+ uses: ./.github/actions/vite-plus-cache-save
424
+
413
425
  smoke:
414
426
  name: Smoke
415
427
  if: vars.CI_BILLING_PAUSED != 'true' && inputs.unit-only != true
@@ -479,3 +491,6 @@ jobs:
479
491
  include-hidden-files: true
480
492
  if-no-files-found: error
481
493
  retention-days: 14
494
+
495
+ - name: Save Vite+ task cache
496
+ uses: ./.github/actions/vite-plus-cache-save
@@ -469,6 +469,9 @@ jobs:
469
469
  if-no-files-found: error
470
470
  retention-days: 14
471
471
 
472
+ - name: Save Vite+ task cache
473
+ uses: ./.github/actions/vite-plus-cache-save
474
+
472
475
  lint:
473
476
  name: Lint
474
477
  if: vars.CI_BILLING_PAUSED != 'true'
@@ -530,6 +533,9 @@ jobs:
530
533
  if-no-files-found: error
531
534
  retention-days: 14
532
535
 
536
+ - name: Save Vite+ task cache
537
+ uses: ./.github/actions/vite-plus-cache-save
538
+
533
539
  type-check:
534
540
  name: Type-Check
535
541
  if: vars.CI_BILLING_PAUSED != 'true'
@@ -596,6 +602,9 @@ jobs:
596
602
  if-no-files-found: error
597
603
  retention-days: 14
598
604
 
605
+ - name: Save Vite+ task cache
606
+ uses: ./.github/actions/vite-plus-cache-save
607
+
599
608
  unit:
600
609
  name: Unit
601
610
  if: vars.CI_BILLING_PAUSED != 'true'
@@ -682,6 +691,9 @@ jobs:
682
691
  if-no-files-found: ignore
683
692
  retention-days: 14
684
693
 
694
+ - name: Save Vite+ task cache
695
+ uses: ./.github/actions/vite-plus-cache-save
696
+
685
697
  e2e:
686
698
  name: E2E
687
699
  if: vars.CI_BILLING_PAUSED != 'true' && inputs.mode == 'audit'
@@ -775,11 +787,15 @@ jobs:
775
787
  if-no-files-found: error
776
788
  retention-days: 14
777
789
 
790
+ - name: Save Vite+ task cache
791
+ uses: ./.github/actions/vite-plus-cache-save
792
+
778
793
  # Profile and dependency audit merged into one job. The split orchestrators
779
794
  # run a profile job that feeds an audit matrix; here the language blocks run
780
795
  # sequentially, driven directly by the profile step's outputs, so the second
781
796
  # runner spin-up disappears. Python requirements run in one loop inside the
782
797
  # audit step because a matrix cannot follow preceding steps in the same job.
798
+
783
799
  audit:
784
800
  name: Audit
785
801
  if: vars.CI_BILLING_PAUSED != 'true' && inputs.mode == 'audit'
@@ -934,7 +950,7 @@ jobs:
934
950
  steps.audit-toolchain.outputs.package_manager == 'bun'
935
951
  uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
936
952
  with:
937
- bun-version: 1.4.0
953
+ bun-version: 1.4.3
938
954
  - name: Enable Corepack
939
955
  if: >-
940
956
  steps.profile.outputs.javascript == 'true' &&
package/.mise.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [tools]
2
2
  node = "24.18.0"
3
- bun = "1.4.0"
3
+ bun = "1.4.3"
4
4
 
5
5
  [settings]
6
6
  experimental = true
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.48.2](https://github.com/0xPlayerOne/code-foundry/compare/v1.48.1...v1.48.2) (2026-10-17)
4
+
5
+
6
+ ### Maintenance
7
+
8
+ * **bun:** align Bun runtime pins to 1.4.3 ([#767](https://github.com/0xPlayerOne/code-foundry/issues/767)) ([402343f](https://github.com/0xPlayerOne/code-foundry/commit/402343fed2b41be3b2a55ddbc56d2256cc511b1a))
9
+
10
+ ## [1.48.1](https://github.com/0xPlayerOne/code-foundry/compare/v1.48.0...v1.48.1) (2026-10-16)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * vite-plus-cache-post-job-save ([#765](https://github.com/0xPlayerOne/code-foundry/issues/765)) ([3f82e85](https://github.com/0xPlayerOne/code-foundry/commit/3f82e850f5c09af6cea4de6f1a791d098bbd2f6e))
16
+
3
17
  ## [1.48.0](https://github.com/0xPlayerOne/code-foundry/compare/v1.47.5...v1.48.0) (2026-10-16)
4
18
 
5
19
 
@@ -126,23 +140,9 @@
126
140
 
127
141
  * **release:** retry the token probe and REST fallback writes with backoff ([#729](https://github.com/0xPlayerOne/code-foundry/issues/729)) ([ad28e18](https://github.com/0xPlayerOne/code-foundry/commit/ad28e18326f0ee8c25950fb649eb81cdb3dc0a1a))
128
142
 
129
- ## [1.44.10](https://github.com/0xPlayerOne/code-foundry/compare/v1.44.9...v1.44.10) (2026-10-06)
130
-
131
-
132
- ### Bug Fixes
133
-
134
- * **release:** treat ref-creation errors in the REST fallback as non-fatal ([#727](https://github.com/0xPlayerOne/code-foundry/issues/727)) ([75ea614](https://github.com/0xPlayerOne/code-foundry/commit/75ea61465e7c4cacd39e3aa8c52df93c2ea9bf03))
135
-
136
- ## [1.44.9](https://github.com/0xPlayerOne/code-foundry/compare/v1.44.8...v1.44.9) (2026-10-06)
137
-
138
-
139
- ### Bug Fixes
140
-
141
- * **release:** make the REST fallback draft-aware and idempotent ([#725](https://github.com/0xPlayerOne/code-foundry/issues/725)) ([c29da6e](https://github.com/0xPlayerOne/code-foundry/commit/c29da6efb919d68a568c2328eea2c2f7654334fe))
142
-
143
143
  <!-- code-foundry: packaged changelog -->
144
144
 
145
145
  ---
146
146
 
147
- This packaged changelog lists the 20 most recent releases; 248 older releases are omitted to keep the package small.
147
+ This packaged changelog lists the 20 most recent releases; 250 older releases are omitted to keep the package small.
148
148
  See the [full changelog](https://github.com/0xPlayerOne/code-foundry/blob/main/CHANGELOG.md) for the complete history.
package/docs/CACHING.md CHANGED
@@ -34,10 +34,21 @@ When opted in, the setup action:
34
34
  remote-cache step runs;
35
35
  - restores `node_modules/.vite/task-cache` as its last step, after Install and
36
36
  after every step that archives `node_modules` (Install can replace it);
37
- - saves it push-only like every other cache, so pull requests and scheduled
38
- runs cannot poison it;
37
+ - publishes a cache path, key, and save-intent contract for the explicit
38
+ `.github/actions/vite-plus-cache-save` action to use after repository tasks;
39
+ - saves it push-only, so pull requests and scheduled runs cannot poison it;
39
40
  - keeps it out of the generic JavaScript build-state archive.
40
41
 
42
+ The generated CI, test, eval, and billing workflows call the save action at the
43
+ end of each task job. Custom workflows that use `.github/actions/setup` must
44
+ also call it after their Vite+ tasks complete; it reads the setup contract from
45
+ the job environment. A job can disable saving with `cache-save: false` on every
46
+ applicable setup call. With multiple setup calls in one job, save intent is
47
+ combined so an enabled Vite+ task setup is not overridden by a later disabled
48
+ setup. The setup action also exposes `vite-plus-cache-path`,
49
+ `vite-plus-cache-key`, and `vite-plus-cache-save` outputs for workflows that
50
+ prefer to pass these values explicitly to the save action.
51
+
41
52
  Keys are `<namespace>-<workflow>-<job>-<lockfiles>-<vite.config>-<run id>-<attempt>`,
42
53
  so every push saves a refreshed entry (more storage than a fixed key). Restore
43
54
  keys fall back by lockfiles, job, then any job, but never leave the namespace
@@ -45,8 +56,8 @@ keys fall back by lockfiles, job, then any job, but never leave the namespace
45
56
  Task does not fingerprint the Node or Bun binary. If the `vite-plus` version
46
57
  cannot be resolved, nothing is restored or saved.
47
58
 
48
- If `VITE_CACHE_PATH` (absolute) is set, Vite+ writes its cache there and the
49
- setup action caches that directory instead.
59
+ If `VITE_CACHE_PATH` (absolute, from any environment source) is set, Vite+
60
+ writes its cache there and the setup action caches that directory too.
50
61
 
51
62
  Vite+ has no remote cache and this repository does not configure one.
52
63
 
@@ -298,6 +298,10 @@ behavior:
298
298
  - `cache-vite-plus: auto`, `true`, or `false` is an input of the setup action
299
299
  (not a config key). It controls the local Vite+ task cache only when
300
300
  `monorepo_tool: vite-plus` is set.
301
+ - Custom workflows using the setup action must add
302
+ `.github/actions/vite-plus-cache-save` after task execution. The generated
303
+ Code Foundry workflows already include this save boundary; see
304
+ [Caching and remote caching](CACHING.md).
301
305
 
302
306
  Use these controls only after measuring a repeatable benefit. See [Caching and
303
307
  remote caching](CACHING.md).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "code-foundry",
3
- "version": "1.48.0",
3
+ "version": "1.48.2",
4
4
  "description": "A fast, language-aware repository factory for agent-ready workflows, testing, security, and release automation.",
5
5
  "homepage": "https://github.com/0xPlayerOne/code-foundry#readme",
6
6
  "bugs": {
@@ -18,6 +18,7 @@
18
18
  "src",
19
19
  "docs",
20
20
  ".github",
21
+ "!.github/actions/**",
21
22
  ".githooks",
22
23
  ".editorconfig",
23
24
  ".gitattributes",
@@ -59,5 +60,5 @@
59
60
  "engines": {
60
61
  "node": ">=24"
61
62
  },
62
- "packageManager": "bun@1.4.0"
63
+ "packageManager": "bun@1.4.3"
63
64
  }
@@ -1,56 +0,0 @@
1
- name: Attest verified build artifacts
2
- description: Generate checksums and signed provenance for explicitly selected build outputs.
3
- inputs:
4
- artifacts:
5
- description: 'JSON array of nonempty regular artifact files relative to the workspace.'
6
- required: true
7
- outputs:
8
- manifest-path:
9
- description: Path to the generated SHA-256 JSON manifest.
10
- value: ${{ steps.manifest.outputs.manifest-path }}
11
- bundle-path:
12
- description: Path to the signed provenance bundle.
13
- value: ${{ steps.attest.outputs.bundle-path }}
14
- attestation-url:
15
- description: URL of the published attestation.
16
- value: ${{ steps.attest.outputs.attestation-url }}
17
- runs:
18
- using: composite
19
- steps:
20
- - name: Select and hash build outputs
21
- id: manifest
22
- shell: bash
23
- env:
24
- ARTIFACTS: ${{ inputs.artifacts }}
25
- run: |
26
- set -euo pipefail
27
- [[ "$GITHUB_EVENT_NAME" != pull_request && "$GITHUB_EVENT_NAME" != pull_request_target ]]
28
- node --input-type=module <<'NODE'
29
- import { appendFileSync, mkdtempSync, writeFileSync } from 'node:fs'
30
- import { join, resolve } from 'node:path'
31
- import { pathToFileURL } from 'node:url'
32
- const helper = pathToFileURL(resolve(process.env.GITHUB_ACTION_PATH, '../../../src/commands/release-integrity.mjs'))
33
- const { assetManifest } = await import(helper.href)
34
- const files = JSON.parse(process.env.ARTIFACTS)
35
- if (!Array.isArray(files) || files.some(file => typeof file !== 'string')) throw new Error('artifacts must be a JSON string array')
36
- const manifest = assetManifest(process.env.GITHUB_WORKSPACE, files)
37
- const directory = mkdtempSync(join(process.env.RUNNER_TEMP, 'foundry-attestation-'))
38
- const manifestPath = join(directory, 'manifest.json')
39
- const sumsPath = join(directory, 'SHA256SUMS')
40
- writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n')
41
- writeFileSync(sumsPath, manifest.checksums)
42
- appendFileSync(process.env.GITHUB_OUTPUT, `manifest-path=${manifestPath}\nchecksums-path=${sumsPath}\n`)
43
- NODE
44
- - name: Sign build provenance
45
- id: attest
46
- uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3
47
- with:
48
- subject-checksums: ${{ steps.manifest.outputs.checksums-path }}
49
- - name: Verify artifacts were not changed during signing
50
- shell: bash
51
- env:
52
- CHECKSUMS_PATH: ${{ steps.manifest.outputs.checksums-path }}
53
- run: |
54
- set -euo pipefail
55
- cd "$GITHUB_WORKSPACE"
56
- sha256sum --check "$CHECKSUMS_PATH"
@@ -1,47 +0,0 @@
1
- name: Repository Cache
2
- description: Restore a cache and optionally enable the post-job save performed by actions/cache.
3
-
4
- inputs:
5
- path:
6
- description: Cache paths.
7
- required: true
8
- key:
9
- description: Primary cache key.
10
- required: true
11
- restore-keys:
12
- description: Optional newline-delimited restore keys.
13
- required: false
14
- default: ''
15
- save:
16
- description: Enable cache saving after the job completes.
17
- required: false
18
- default: 'true'
19
-
20
- outputs:
21
- cache-hit:
22
- description: Whether an exact cache was restored.
23
- value: ${{ steps.cache.outputs.cache-hit || steps.restore.outputs.cache-hit }}
24
-
25
- runs:
26
- using: composite
27
- steps:
28
- # Caches are restored on every event but saved on push only: scheduled
29
- # and dispatched runs share the default branch with untrusted
30
- # runtime-ref checkouts, so letting them save would allow cache
31
- # poisoning. Push events require write access and stay trusted.
32
- - name: Restore cache
33
- id: restore
34
- if: inputs.save != 'true' || github.event_name != 'push'
35
- uses: actions/cache/restore@v5
36
- with:
37
- path: ${{ inputs.path }}
38
- key: ${{ inputs.key }}
39
- restore-keys: ${{ inputs.restore-keys }}
40
- - name: Restore and save cache
41
- id: cache
42
- if: inputs.save == 'true' && github.event_name == 'push'
43
- uses: actions/cache@v5
44
- with:
45
- path: ${{ inputs.path }}
46
- key: ${{ inputs.key }}
47
- restore-keys: ${{ inputs.restore-keys }}
@@ -1,33 +0,0 @@
1
- name: CodeQL Analyze
2
- description: Initialize and analyze one CodeQL language using the repository baseline.
3
-
4
- inputs:
5
- language:
6
- description: CodeQL language identifier.
7
- required: true
8
- build-mode:
9
- description: CodeQL build mode.
10
- required: false
11
- default: none
12
- category:
13
- description: CodeQL analysis category.
14
- required: true
15
-
16
- runs:
17
- using: composite
18
- steps:
19
- - name: Initialize
20
- uses: github/codeql-action/init@v4
21
- with:
22
- languages: ${{ inputs.language }}
23
- build-mode: ${{ inputs.build-mode }}
24
- - name: Analyze
25
- uses: github/codeql-action/analyze@v4
26
- with:
27
- category: ${{ inputs.category }}
28
- # Pin pull-request uploads to the contributor's head SHA/ref so a
29
- # moving merge ref cannot race the required code-scanning context.
30
- ref: ${{ github.event_name == 'pull_request' && format('refs/pull/{0}/head', github.event.pull_request.number) || github.ref }}
31
- sha: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
32
- upload-database: false
33
- wait-for-processing: false