code-foundry 0.11.0 → 0.13.0

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.
@@ -15,151 +15,8 @@ permissions:
15
15
  packages: read
16
16
  security-events: write
17
17
 
18
- env:
19
- REPO_FOUNDRY_PROFILE: ${{ vars.REPO_FOUNDRY_PROFILE }}
20
- REPO_FOUNDRY_LANGUAGES: ${{ vars.REPO_FOUNDRY_LANGUAGES }}
21
- REPO_FOUNDRY_FEATURES: ${{ vars.REPO_FOUNDRY_FEATURES }}
22
-
23
- concurrency:
24
- group: ${{ github.workflow }}-${{ github.event.pull_request.head.repo.full_name || github.repository }}-${{ github.event.pull_request.head.ref || github.ref_name }}
25
- cancel-in-progress: true
26
-
27
18
  jobs:
28
- detect:
29
- name: Detect
30
- runs-on: ubuntu-slim
31
- timeout-minutes: 10
32
- outputs:
33
- languages: ${{ steps.languages.outputs.languages }}
34
- code_security: ${{ steps.security.outputs.status }}
35
- actions_available: ${{ steps.languages.outputs.actions_available }}
36
- actions_changed: ${{ steps.languages.outputs.actions_changed }}
37
- actions_build_mode: ${{ steps.languages.outputs.actions_build_mode }}
38
- javascript_available: ${{ steps.languages.outputs.javascript_available }}
39
- javascript_changed: ${{ steps.languages.outputs.javascript_changed }}
40
- javascript_build_mode: ${{ steps.languages.outputs.javascript_build_mode }}
41
- python_available: ${{ steps.languages.outputs.python_available }}
42
- python_changed: ${{ steps.languages.outputs.python_changed }}
43
- python_build_mode: ${{ steps.languages.outputs.python_build_mode }}
44
- rust_available: ${{ steps.languages.outputs.rust_available }}
45
- rust_changed: ${{ steps.languages.outputs.rust_changed }}
46
- rust_build_mode: ${{ steps.languages.outputs.rust_build_mode }}
47
- steps:
48
- - name: Detect Code Security
49
- id: security
50
- env:
51
- GH_TOKEN: ${{ github.token }}
52
- run: |
53
- status="disabled"
54
- if [ "${{ github.event.repository.private }}" != "true" ]; then
55
- status="enabled"
56
- else
57
- status="$(gh api "repos/${GITHUB_REPOSITORY}" --jq '.security_and_analysis.code_security.status // "disabled"' 2>/dev/null || printf 'disabled')"
58
- fi
59
- printf 'status=%s\n' "$status" >> "$GITHUB_OUTPUT"
60
- - name: Checkout
61
- if: ${{ !github.event.repository.private || steps.security.outputs.status == 'enabled' }}
62
- uses: actions/checkout@v7
63
- with:
64
- fetch-depth: 2
65
- # Detection only reads Git trees, paths, and small profile files;
66
- # defer source blob transfer until the analyzer jobs.
67
- filter: blob:none
68
- sparse-checkout: |
69
- .github
70
- .mise.toml
71
- mise.lock
72
- package.json
73
- bun.lock
74
- bun.lockb
75
- pnpm-lock.yaml
76
- yarn.lock
77
- package-lock.json
78
- - id: languages
79
- name: Detect languages
80
- env:
81
- CODEQL_BASE_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }}
82
- REPO_FOUNDRY_CODE_SECURITY: ${{ steps.security.outputs.status }}
83
- REPO_FOUNDRY_PRIVATE: ${{ github.event.repository.private }}
84
- run: |
85
- if [ "$REPO_FOUNDRY_PRIVATE" = "true" ] && [ "$REPO_FOUNDRY_CODE_SECURITY" != "enabled" ]; then
86
- echo 'languages=[]' >> "$GITHUB_OUTPUT"
87
- else
88
- bash .github/scripts/codeql-languages.sh
89
- fi
90
-
91
- analyze-actions:
92
- name: Analyze (Actions)
93
- needs: detect
94
- if: >-
95
- ( !github.event.repository.private || needs.detect.outputs.code_security == 'enabled' ) &&
96
- needs.detect.outputs.actions_available == 'true' &&
97
- needs.detect.outputs.actions_changed == 'true'
98
- runs-on: ubuntu-latest
99
- timeout-minutes: 30
100
- steps:
101
- - name: Checkout
102
- uses: actions/checkout@v7
103
- - name: Analyze
104
- uses: ./.github/actions/codeql
105
- with:
106
- language: actions
107
- build-mode: ${{ needs.detect.outputs.actions_build_mode }}
108
- category: /language:actions
109
-
110
- analyze-typescript:
111
- name: Analyze (TypeScript)
112
- needs: detect
113
- if: >-
114
- ( !github.event.repository.private || needs.detect.outputs.code_security == 'enabled' ) &&
115
- needs.detect.outputs.javascript_available == 'true' &&
116
- needs.detect.outputs.javascript_changed == 'true'
117
- runs-on: ubuntu-latest
118
- timeout-minutes: 30
119
- steps:
120
- - name: Checkout
121
- uses: actions/checkout@v7
122
- - name: Analyze
123
- uses: ./.github/actions/codeql
124
- with:
125
- language: javascript-typescript
126
- build-mode: ${{ needs.detect.outputs.javascript_build_mode }}
127
- category: /language:javascript-typescript
128
-
129
- analyze-python:
130
- name: Analyze (Python)
131
- needs: detect
132
- if: >-
133
- ( !github.event.repository.private || needs.detect.outputs.code_security == 'enabled' ) &&
134
- needs.detect.outputs.python_available == 'true' &&
135
- needs.detect.outputs.python_changed == 'true'
136
- runs-on: ubuntu-latest
137
- timeout-minutes: 30
138
- steps:
139
- - name: Checkout
140
- uses: actions/checkout@v7
141
- - name: Analyze
142
- uses: ./.github/actions/codeql
143
- with:
144
- language: python
145
- build-mode: ${{ needs.detect.outputs.python_build_mode }}
146
- category: /language:python
147
-
148
- analyze-rust:
149
- name: Analyze (Rust)
150
- needs: detect
151
- if: >-
152
- ( !github.event.repository.private || needs.detect.outputs.code_security == 'enabled' ) &&
153
- needs.detect.outputs.rust_available == 'true' &&
154
- needs.detect.outputs.rust_changed == 'true'
155
- runs-on: ubuntu-latest
156
- timeout-minutes: 30
157
- steps:
158
- - name: Checkout
159
- uses: actions/checkout@v7
160
- - name: Analyze
161
- uses: ./.github/actions/codeql
162
- with:
163
- language: rust
164
- build-mode: ${{ needs.detect.outputs.rust_build_mode }}
165
- category: /language:rust
19
+ codeql:
20
+ name: CodeQL
21
+ uses: 0xPlayerOne/code-foundry/.github/workflows/reusable-codeql.yml@v0.12.0
22
+ secrets: inherit
@@ -0,0 +1,241 @@
1
+ name: Code Foundry CodeQL
2
+
3
+ on:
4
+ workflow_call:
5
+ inputs:
6
+ runtime-repository:
7
+ description: Repository containing the Code Foundry runtime.
8
+ required: false
9
+ type: string
10
+ default: 0xPlayerOne/code-foundry
11
+ runtime-ref:
12
+ description: Code Foundry runtime tag or ref.
13
+ required: false
14
+ type: string
15
+ default: v0.11.0
16
+
17
+ permissions:
18
+ actions: read
19
+ contents: read
20
+ packages: read
21
+ security-events: write
22
+
23
+ env:
24
+ REPO_FOUNDRY_PROFILE: ${{ vars.REPO_FOUNDRY_PROFILE }}
25
+ REPO_FOUNDRY_LANGUAGES: ${{ vars.REPO_FOUNDRY_LANGUAGES }}
26
+ REPO_FOUNDRY_FEATURES: ${{ vars.REPO_FOUNDRY_FEATURES }}
27
+
28
+ concurrency:
29
+ group: ${{ github.workflow }}-${{ github.event.pull_request.head.repo.full_name || github.repository }}-${{ github.event.pull_request.head.ref || github.ref_name }}
30
+ cancel-in-progress: true
31
+
32
+ jobs:
33
+ detect:
34
+ name: Detect
35
+ runs-on: ubuntu-slim
36
+ timeout-minutes: 10
37
+ outputs:
38
+ languages: ${{ steps.languages.outputs.languages }}
39
+ code_security: ${{ steps.security.outputs.status }}
40
+ actions_available: ${{ steps.languages.outputs.actions_available }}
41
+ actions_changed: ${{ steps.languages.outputs.actions_changed }}
42
+ actions_build_mode: ${{ steps.languages.outputs.actions_build_mode }}
43
+ javascript_available: ${{ steps.languages.outputs.javascript_available }}
44
+ javascript_changed: ${{ steps.languages.outputs.javascript_changed }}
45
+ javascript_build_mode: ${{ steps.languages.outputs.javascript_build_mode }}
46
+ python_available: ${{ steps.languages.outputs.python_available }}
47
+ python_changed: ${{ steps.languages.outputs.python_changed }}
48
+ python_build_mode: ${{ steps.languages.outputs.python_build_mode }}
49
+ rust_available: ${{ steps.languages.outputs.rust_available }}
50
+ rust_changed: ${{ steps.languages.outputs.rust_changed }}
51
+ rust_build_mode: ${{ steps.languages.outputs.rust_build_mode }}
52
+ steps:
53
+ - name: Detect Code Security
54
+ id: security
55
+ env:
56
+ GH_TOKEN: ${{ github.token }}
57
+ run: |
58
+ status="disabled"
59
+ if [ "${{ github.event.repository.private }}" != "true" ]; then
60
+ status="enabled"
61
+ else
62
+ status="$(gh api "repos/${GITHUB_REPOSITORY}" --jq '.security_and_analysis.code_security.status // "disabled"' 2>/dev/null || printf 'disabled')"
63
+ fi
64
+ printf 'status=%s\n' "$status" >> "$GITHUB_OUTPUT"
65
+ - name: Checkout
66
+ if: ${{ !github.event.repository.private || steps.security.outputs.status == 'enabled' }}
67
+ uses: actions/checkout@v7
68
+ with:
69
+ fetch-depth: 2
70
+ filter: blob:none
71
+ sparse-checkout: |
72
+ .github
73
+ .mise.toml
74
+ mise.lock
75
+ package.json
76
+ bun.lock
77
+ bun.lockb
78
+ pnpm-lock.yaml
79
+ yarn.lock
80
+ package-lock.json
81
+ sparse-checkout-cone-mode: false
82
+ - name: Runtime
83
+ if: ${{ !github.event.repository.private || steps.security.outputs.status == 'enabled' }}
84
+ uses: actions/checkout@v7
85
+ with:
86
+ repository: ${{ inputs.runtime-repository }}
87
+ ref: ${{ inputs.runtime-ref }}
88
+ path: .code-foundry
89
+ sparse-checkout: |
90
+ .github/actions
91
+ .github/scripts
92
+ - name: Install runtime
93
+ if: ${{ !github.event.repository.private || steps.security.outputs.status == 'enabled' }}
94
+ run: |
95
+ mkdir -p .github/actions .github/scripts
96
+ cp -R .code-foundry/.github/actions/. .github/actions/
97
+ cp -R .code-foundry/.github/scripts/. .github/scripts/
98
+ - id: languages
99
+ name: Detect languages
100
+ env:
101
+ CODEQL_BASE_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }}
102
+ REPO_FOUNDRY_CODE_SECURITY: ${{ steps.security.outputs.status }}
103
+ REPO_FOUNDRY_PRIVATE: ${{ github.event.repository.private }}
104
+ run: |
105
+ if [ "$REPO_FOUNDRY_PRIVATE" = "true" ] && [ "$REPO_FOUNDRY_CODE_SECURITY" != "enabled" ]; then
106
+ echo 'languages=[]' >> "$GITHUB_OUTPUT"
107
+ else
108
+ bash .github/scripts/codeql-languages.sh
109
+ fi
110
+
111
+ analyze-actions:
112
+ name: Analyze (Actions)
113
+ needs: detect
114
+ if: >-
115
+ ( !github.event.repository.private || needs.detect.outputs.code_security == 'enabled' ) &&
116
+ needs.detect.outputs.actions_available == 'true' &&
117
+ needs.detect.outputs.actions_changed == 'true'
118
+ runs-on: ubuntu-latest
119
+ timeout-minutes: 30
120
+ steps:
121
+ - name: Checkout
122
+ uses: actions/checkout@v7
123
+ - name: Runtime
124
+ uses: actions/checkout@v7
125
+ with:
126
+ repository: ${{ inputs.runtime-repository }}
127
+ ref: ${{ inputs.runtime-ref }}
128
+ path: .code-foundry
129
+ sparse-checkout: |
130
+ .github/actions
131
+ .github/scripts
132
+ - name: Install runtime
133
+ run: |
134
+ mkdir -p .github/actions .github/scripts
135
+ cp -R .code-foundry/.github/actions/. .github/actions/
136
+ cp -R .code-foundry/.github/scripts/. .github/scripts/
137
+ - name: Analyze
138
+ uses: ./.github/actions/codeql
139
+ with:
140
+ language: actions
141
+ build-mode: ${{ needs.detect.outputs.actions_build_mode }}
142
+ category: /language:actions
143
+
144
+ analyze-typescript:
145
+ name: Analyze (TypeScript)
146
+ needs: detect
147
+ if: >-
148
+ ( !github.event.repository.private || needs.detect.outputs.code_security == 'enabled' ) &&
149
+ needs.detect.outputs.javascript_available == 'true' &&
150
+ needs.detect.outputs.javascript_changed == 'true'
151
+ runs-on: ubuntu-latest
152
+ timeout-minutes: 30
153
+ steps:
154
+ - name: Checkout
155
+ uses: actions/checkout@v7
156
+ - name: Runtime
157
+ uses: actions/checkout@v7
158
+ with:
159
+ repository: ${{ inputs.runtime-repository }}
160
+ ref: ${{ inputs.runtime-ref }}
161
+ path: .code-foundry
162
+ sparse-checkout: |
163
+ .github/actions
164
+ .github/scripts
165
+ - name: Install runtime
166
+ run: |
167
+ mkdir -p .github/actions .github/scripts
168
+ cp -R .code-foundry/.github/actions/. .github/actions/
169
+ cp -R .code-foundry/.github/scripts/. .github/scripts/
170
+ - name: Analyze
171
+ uses: ./.github/actions/codeql
172
+ with:
173
+ language: javascript-typescript
174
+ build-mode: ${{ needs.detect.outputs.javascript_build_mode }}
175
+ category: /language:javascript-typescript
176
+
177
+ analyze-python:
178
+ name: Analyze (Python)
179
+ needs: detect
180
+ if: >-
181
+ ( !github.event.repository.private || needs.detect.outputs.code_security == 'enabled' ) &&
182
+ needs.detect.outputs.python_available == 'true' &&
183
+ needs.detect.outputs.python_changed == 'true'
184
+ runs-on: ubuntu-latest
185
+ timeout-minutes: 30
186
+ steps:
187
+ - name: Checkout
188
+ uses: actions/checkout@v7
189
+ - name: Runtime
190
+ uses: actions/checkout@v7
191
+ with:
192
+ repository: ${{ inputs.runtime-repository }}
193
+ ref: ${{ inputs.runtime-ref }}
194
+ path: .code-foundry
195
+ sparse-checkout: |
196
+ .github/actions
197
+ .github/scripts
198
+ - name: Install runtime
199
+ run: |
200
+ mkdir -p .github/actions .github/scripts
201
+ cp -R .code-foundry/.github/actions/. .github/actions/
202
+ cp -R .code-foundry/.github/scripts/. .github/scripts/
203
+ - name: Analyze
204
+ uses: ./.github/actions/codeql
205
+ with:
206
+ language: python
207
+ build-mode: ${{ needs.detect.outputs.python_build_mode }}
208
+ category: /language:python
209
+
210
+ analyze-rust:
211
+ name: Analyze (Rust)
212
+ needs: detect
213
+ if: >-
214
+ ( !github.event.repository.private || needs.detect.outputs.code_security == 'enabled' ) &&
215
+ needs.detect.outputs.rust_available == 'true' &&
216
+ needs.detect.outputs.rust_changed == 'true'
217
+ runs-on: ubuntu-latest
218
+ timeout-minutes: 30
219
+ steps:
220
+ - name: Checkout
221
+ uses: actions/checkout@v7
222
+ - name: Runtime
223
+ uses: actions/checkout@v7
224
+ with:
225
+ repository: ${{ inputs.runtime-repository }}
226
+ ref: ${{ inputs.runtime-ref }}
227
+ path: .code-foundry
228
+ sparse-checkout: |
229
+ .github/actions
230
+ .github/scripts
231
+ - name: Install runtime
232
+ run: |
233
+ mkdir -p .github/actions .github/scripts
234
+ cp -R .code-foundry/.github/actions/. .github/actions/
235
+ cp -R .code-foundry/.github/scripts/. .github/scripts/
236
+ - name: Analyze
237
+ uses: ./.github/actions/codeql
238
+ with:
239
+ language: rust
240
+ build-mode: ${{ needs.detect.outputs.rust_build_mode }}
241
+ category: /language:rust
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.13.0](https://github.com/0xPlayerOne/code-foundry/compare/v0.12.0...v0.13.0) (2026-07-28)
4
+
5
+
6
+ ### Features
7
+
8
+ * **codeql:** document centralized CodeQL runtime ([2aa20a9](https://github.com/0xPlayerOne/code-foundry/commit/2aa20a946d0979cb12af87cb2ea2d0b50f279965))
9
+
10
+ ## [0.12.0](https://github.com/0xPlayerOne/code-foundry/compare/v0.11.0...v0.12.0) (2026-07-28)
11
+
12
+
13
+ ### Features
14
+
15
+ * **codeql:** add reusable CodeQL workflow runtime ([65896bb](https://github.com/0xPlayerOne/code-foundry/commit/65896bb407ad9d792c962e86d63384849f711a16))
16
+
3
17
  ## [0.11.0](https://github.com/0xPlayerOne/code-foundry/compare/v0.10.0...v0.11.0) (2026-07-28)
4
18
 
5
19
 
package/README.md CHANGED
@@ -46,6 +46,10 @@ The standard Security wrapper uses the same runtime contract, so dependency
46
46
  audits and the public-only Dependency Review policy can be upgraded centrally
47
47
  without copying security scripts into every consumer repository.
48
48
 
49
+ CodeQL is also independently reusable through the same contract. It retains
50
+ GitHub's native security-event permissions and language-specific analysis while
51
+ keeping CodeQL separate from CI and dependency security checks.
52
+
49
53
  Initialization defaults to AGPL for new repositories. Synchronization defaults
50
54
  to `--license preserve`, so an existing repository's license is never replaced
51
55
  unless you explicitly select a license or provide `--license-file`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "code-foundry",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "A fast, language-aware repository factory for agent-ready workflows, testing, security, and release automation.",
5
5
  "type": "module",
6
6
  "license": "AGPL-3.0-or-later",