code-foundry 0.12.0 → 0.14.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.
- package/.github/scripts/doctor.sh +3 -1
- package/.github/scripts/sync-template.sh +0 -6
- package/.github/workflows/codeql.yml +4 -147
- package/CHANGELOG.md +14 -0
- package/README.md +9 -0
- package/package.json +1 -1
|
@@ -91,10 +91,12 @@ for workflow in ci codeql security test draft-pr release-pr release; do
|
|
|
91
91
|
fi
|
|
92
92
|
done
|
|
93
93
|
|
|
94
|
-
for script in ci.sh
|
|
94
|
+
for script in ci.sh profile.sh doctor.sh bootstrap.sh sync-template.sh init-repo.sh sync-protection.sh sync-codeowners.sh; do
|
|
95
95
|
[ -x ".github/scripts/$script" ] || error "missing executable script: .github/scripts/$script"
|
|
96
96
|
done
|
|
97
97
|
|
|
98
|
+
printf '%s\n' 'Remote CI, Test, Security, and CodeQL runtimes are loaded by reusable workflow wrappers.'
|
|
99
|
+
|
|
98
100
|
if [ "$errors" -gt 0 ]; then
|
|
99
101
|
printf '%s\n' "Repository doctor found $errors error(s)." >&2
|
|
100
102
|
exit 1
|
|
@@ -243,17 +243,11 @@ files=(
|
|
|
243
243
|
.github/ISSUE_TEMPLATE/bug_report.yml
|
|
244
244
|
.github/ISSUE_TEMPLATE/config.yml
|
|
245
245
|
.github/ISSUE_TEMPLATE/feature_request.yml
|
|
246
|
-
.github/actions/setup/action.yml
|
|
247
|
-
.github/actions/cache/action.yml
|
|
248
|
-
.github/actions/codeql/action.yml
|
|
249
246
|
.github/scripts/profile.sh
|
|
250
247
|
.github/scripts/bootstrap.sh
|
|
251
248
|
.github/scripts/changed-files.sh
|
|
252
249
|
.github/scripts/ci.sh
|
|
253
|
-
.github/scripts/codeql-languages.sh
|
|
254
250
|
.github/scripts/doctor.sh
|
|
255
|
-
.github/scripts/security.sh
|
|
256
|
-
.github/scripts/sitecustomize.py
|
|
257
251
|
.github/scripts/pre-commit.sh
|
|
258
252
|
.github/scripts/sync-template.sh
|
|
259
253
|
.github/scripts/init-repo.sh
|
|
@@ -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
|
-
|
|
29
|
-
name:
|
|
30
|
-
|
|
31
|
-
|
|
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
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.14.0](https://github.com/0xPlayerOne/code-foundry/compare/v0.13.0...v0.14.0) (2026-07-28)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **init:** minimize consumer workflow footprint ([4427c1f](https://github.com/0xPlayerOne/code-foundry/commit/4427c1f964c3a0dc6ffe080ea3779ad2b8a1d170))
|
|
9
|
+
|
|
10
|
+
## [0.13.0](https://github.com/0xPlayerOne/code-foundry/compare/v0.12.0...v0.13.0) (2026-07-28)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* **codeql:** document centralized CodeQL runtime ([2aa20a9](https://github.com/0xPlayerOne/code-foundry/commit/2aa20a946d0979cb12af87cb2ea2d0b50f279965))
|
|
16
|
+
|
|
3
17
|
## [0.12.0](https://github.com/0xPlayerOne/code-foundry/compare/v0.11.0...v0.12.0) (2026-07-28)
|
|
4
18
|
|
|
5
19
|
|
package/README.md
CHANGED
|
@@ -42,10 +42,19 @@ the selected repository is saved in `.github/template.yml` and rendered into
|
|
|
42
42
|
the small `ci.yml` and `test.yml` wrappers automatically. The equivalent
|
|
43
43
|
environment variable is `REPO_FOUNDRY_RUNTIME_REPOSITORY`.
|
|
44
44
|
|
|
45
|
+
Normal synchronization imports only the local hook, agent-facing command,
|
|
46
|
+
profile/release, initializer, doctor, ownership, and protection entrypoints.
|
|
47
|
+
Workflow-only actions and Security/CodeQL analyzers stay in the versioned
|
|
48
|
+
runtime package and are not duplicated in consumer repositories.
|
|
49
|
+
|
|
45
50
|
The standard Security wrapper uses the same runtime contract, so dependency
|
|
46
51
|
audits and the public-only Dependency Review policy can be upgraded centrally
|
|
47
52
|
without copying security scripts into every consumer repository.
|
|
48
53
|
|
|
54
|
+
CodeQL is also independently reusable through the same contract. It retains
|
|
55
|
+
GitHub's native security-event permissions and language-specific analysis while
|
|
56
|
+
keeping CodeQL separate from CI and dependency security checks.
|
|
57
|
+
|
|
49
58
|
Initialization defaults to AGPL for new repositories. Synchronization defaults
|
|
50
59
|
to `--license preserve`, so an existing repository's license is never replaced
|
|
51
60
|
unless you explicitly select a license or provide `--license-file`.
|
package/package.json
CHANGED