mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-05-14 02:10:07 +08:00
ci: disable checkout credential persistence in privileged workflows (#1851)
This commit is contained in:
parent
2486732714
commit
209abd403b
4
.github/workflows/maintenance.yml
vendored
4
.github/workflows/maintenance.yml
vendored
@ -16,6 +16,8 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
|
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version: '20.x'
|
node-version: '20.x'
|
||||||
@ -27,6 +29,8 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
|
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version: '20.x'
|
node-version: '20.x'
|
||||||
|
|||||||
1
.github/workflows/release.yml
vendored
1
.github/workflows/release.yml
vendored
@ -18,6 +18,7 @@ jobs:
|
|||||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
|
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
|
||||||
|
|||||||
1
.github/workflows/reusable-release.yml
vendored
1
.github/workflows/reusable-release.yml
vendored
@ -42,6 +42,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
ref: ${{ inputs.tag }}
|
ref: ${{ inputs.tag }}
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
|
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
|
||||||
|
|||||||
@ -108,6 +108,18 @@ function findViolations(filePath, source) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (WRITE_PERMISSION_PATTERN.test(source)) {
|
if (WRITE_PERMISSION_PATTERN.test(source)) {
|
||||||
|
for (const step of checkoutSteps) {
|
||||||
|
if (!/persist-credentials:\s*['"]?false['"]?\b/m.test(step.text)) {
|
||||||
|
violations.push({
|
||||||
|
filePath,
|
||||||
|
event: 'write-permission checkout',
|
||||||
|
description: 'workflows with write permissions must disable checkout credential persistence',
|
||||||
|
expression: 'actions/checkout without persist-credentials: false',
|
||||||
|
line: step.startLine,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (const match of source.matchAll(NPM_CI_PATTERN)) {
|
for (const match of source.matchAll(NPM_CI_PATTERN)) {
|
||||||
violations.push({
|
violations.push({
|
||||||
filePath,
|
filePath,
|
||||||
|
|||||||
@ -122,6 +122,21 @@ function run() {
|
|||||||
assert.strictEqual(result.status, 0, result.stderr || result.stdout);
|
assert.strictEqual(result.status, 0, result.stderr || result.stdout);
|
||||||
})) passed++; else failed++;
|
})) passed++; else failed++;
|
||||||
|
|
||||||
|
if (test('rejects checkout credential persistence in workflows with write permissions', () => {
|
||||||
|
const result = runValidator({
|
||||||
|
'unsafe-write-checkout.yml': `name: Unsafe\non:\n workflow_dispatch:\npermissions:\n contents: write\njobs:\n release:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - run: npm ci --ignore-scripts\n`,
|
||||||
|
});
|
||||||
|
assert.notStrictEqual(result.status, 0, 'Expected validator to fail on credential-persisting checkout');
|
||||||
|
assert.match(result.stderr, /write permissions must disable checkout credential persistence/);
|
||||||
|
})) passed++; else failed++;
|
||||||
|
|
||||||
|
if (test('allows checkout with disabled credential persistence in workflows with write permissions', () => {
|
||||||
|
const result = runValidator({
|
||||||
|
'safe-write-checkout.yml': `name: Safe\non:\n workflow_dispatch:\npermissions:\n contents: write\njobs:\n release:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n persist-credentials: false\n - run: npm ci --ignore-scripts\n`,
|
||||||
|
});
|
||||||
|
assert.strictEqual(result.status, 0, result.stderr || result.stdout);
|
||||||
|
})) passed++; else failed++;
|
||||||
|
|
||||||
if (test('rejects actions/cache in workflows with id-token write', () => {
|
if (test('rejects actions/cache in workflows with id-token write', () => {
|
||||||
const result = runValidator({
|
const result = runValidator({
|
||||||
'unsafe-oidc-cache.yml': `name: Unsafe\non:\n push:\npermissions:\n contents: read\n id-token: write\njobs:\n release:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/cache@v5\n with:\n path: ~/.npm\n key: cache\n`,
|
'unsafe-oidc-cache.yml': `name: Unsafe\non:\n push:\npermissions:\n contents: read\n id-token: write\njobs:\n release:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/cache@v5\n with:\n path: ~/.npm\n key: cache\n`,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user