@hybridlabor-api/aos 4.8.0 → 4.9.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/.agents/agents.md +1 -1
- package/.agents/nodes.json +1 -1
- package/.agents/vendor-manifest.json +23 -1
- package/.claude/agents/godmode-media-eventtech.md +1 -1
- package/.claude/hooks/conventional-commits.mjs +125 -0
- package/.claude/hooks/env-file-protection.mjs +105 -0
- package/.claude/hooks/go-gate.mjs +101 -81
- package/.claude/settings.json +13 -0
- package/.opencode/agents/godmode-media-eventtech.md +1 -1
- package/.opencode/plugins/bdb-aos.js +31 -4
- package/README.de.md +1 -1
- package/README.md +1 -1
- package/README.pt.md +1 -1
- package/THIRD_PARTY_NOTICES.md +88 -0
- package/docs/skills_table.md +1 -1
- package/installer.js +174 -46
- package/package.json +6 -2
- package/packages/aos-cli/README.md +80 -0
- package/packages/aos-cli/bin/aos-cli.mjs +134 -0
- package/packages/aos-cli/core-skills.json +12 -0
- package/packages/aos-cli/extensions/aos.ts +321 -0
- package/packages/aos-cli/package-lock.json +1923 -0
- package/packages/aos-cli/package.json +29 -0
- package/packages/aos-cli/scripts/check-theme.mjs +63 -0
- package/packages/aos-cli/themes/aos.json +97 -0
- package/scripts/build-plugin-manifest.mjs +131 -0
- package/scripts/validate-skills.mjs +81 -6
- package/skills/basic/ao-orchestrator/SKILL.md +116 -0
- package/skills/global_config/agenttrail/SKILL.md +6 -1
- package/skills/global_config/ask-tim/SKILL.md +4 -4
- package/skills/global_config/bash-script-generator/SKILL.md +201 -0
- package/skills/global_config/bash-script-generator/assets/templates/standard-template.sh +96 -0
- package/skills/global_config/bash-script-generator/docs/bash-scripting-guide.md +729 -0
- package/skills/global_config/bash-script-generator/docs/generation-best-practices.md +193 -0
- package/skills/global_config/bash-script-generator/docs/script-patterns.md +566 -0
- package/skills/global_config/bash-script-generator/docs/text-processing-guide.md +437 -0
- package/skills/global_config/bash-script-generator/examples/log-analyzer.sh +92 -0
- package/skills/global_config/bash-script-generator/scripts/generate_script_template.sh +123 -0
- package/skills/global_config/bash-script-generator/scripts/run_ci_checks.sh +172 -0
- package/skills/global_config/bash-script-generator/scripts/test_generator.sh +413 -0
- package/skills/global_config/bash-script-validator/SKILL.md +249 -0
- package/skills/global_config/bash-script-validator/docs/awk-reference.md +449 -0
- package/skills/global_config/bash-script-validator/docs/bash-reference.md +468 -0
- package/skills/global_config/bash-script-validator/docs/common-mistakes.md +623 -0
- package/skills/global_config/bash-script-validator/docs/grep-reference.md +395 -0
- package/skills/global_config/bash-script-validator/docs/regex-reference.md +391 -0
- package/skills/global_config/bash-script-validator/docs/sed-reference.md +454 -0
- package/skills/global_config/bash-script-validator/docs/shell-reference.md +463 -0
- package/skills/global_config/bash-script-validator/docs/shellcheck-reference.md +399 -0
- package/skills/global_config/bash-script-validator/examples/bad-bash.sh +55 -0
- package/skills/global_config/bash-script-validator/examples/bad-shell.sh +54 -0
- package/skills/global_config/bash-script-validator/examples/good-bash.sh +71 -0
- package/skills/global_config/bash-script-validator/examples/good-shell.sh +69 -0
- package/skills/global_config/bash-script-validator/scripts/run_ci_checks.sh +23 -0
- package/skills/global_config/bash-script-validator/scripts/shellcheck_wrapper.sh +174 -0
- package/skills/global_config/bash-script-validator/scripts/test_validate.sh +446 -0
- package/skills/global_config/bash-script-validator/scripts/validate.sh +512 -0
- package/skills/global_config/ci-pipeline/SKILL.md +135 -0
- package/skills/global_config/dispatching-parallel-agents/SKILL.md +170 -0
- package/skills/global_config/dockerfile-generator/SKILL.md +1038 -0
- package/skills/global_config/dockerfile-generator/examples/example.dockerignore +95 -0
- package/skills/global_config/dockerfile-generator/examples/golang-distroless.Dockerfile +34 -0
- package/skills/global_config/dockerfile-generator/examples/java-springboot.Dockerfile +45 -0
- package/skills/global_config/dockerfile-generator/examples/nextjs-production.Dockerfile +49 -0
- package/skills/global_config/dockerfile-generator/examples/nodejs-multistage.Dockerfile +55 -0
- package/skills/global_config/dockerfile-generator/examples/python-fastapi.Dockerfile +48 -0
- package/skills/global_config/dockerfile-generator/references/language_specific_guides.md +510 -0
- package/skills/global_config/dockerfile-generator/references/multistage_builds.md +570 -0
- package/skills/global_config/dockerfile-generator/references/optimization_patterns.md +492 -0
- package/skills/global_config/dockerfile-generator/references/security_best_practices.md +375 -0
- package/skills/global_config/dockerfile-generator/scripts/generate_dockerignore.sh +199 -0
- package/skills/global_config/dockerfile-generator/scripts/generate_golang.sh +172 -0
- package/skills/global_config/dockerfile-generator/scripts/generate_java.sh +185 -0
- package/skills/global_config/dockerfile-generator/scripts/generate_nodejs.sh +279 -0
- package/skills/global_config/dockerfile-generator/scripts/generate_python.sh +218 -0
- package/skills/global_config/dockerfile-generator/scripts/test_generator.sh +210 -0
- package/skills/global_config/dockerfile-validator/SKILL.md +300 -0
- package/skills/global_config/dockerfile-validator/examples/.dockerignore.example +34 -0
- package/skills/global_config/dockerfile-validator/examples/bad-example.Dockerfile +37 -0
- package/skills/global_config/dockerfile-validator/examples/golang-distroless.Dockerfile +50 -0
- package/skills/global_config/dockerfile-validator/examples/good-example.Dockerfile +52 -0
- package/skills/global_config/dockerfile-validator/examples/python-optimized.Dockerfile +53 -0
- package/skills/global_config/dockerfile-validator/examples/security-issues.Dockerfile +42 -0
- package/skills/global_config/dockerfile-validator/references/docker_best_practices.md +348 -0
- package/skills/global_config/dockerfile-validator/references/optimization_guide.md +473 -0
- package/skills/global_config/dockerfile-validator/references/security_checklist.md +208 -0
- package/skills/global_config/dockerfile-validator/scripts/dockerfile-validate.sh +699 -0
- package/skills/global_config/dockerfile-validator/scripts/test_validate.sh +35 -0
- package/skills/global_config/dockerfile-validator/tests/fixtures/copy-before-yarn-lock-read.Dockerfile +6 -0
- package/skills/global_config/dockerfile-validator/tests/fixtures/copy-before-yarn.Dockerfile +6 -0
- package/skills/global_config/dockerfile-validator/tests/fixtures/from-platform-nonroot.Dockerfile +7 -0
- package/skills/global_config/dockerfile-validator/tests/test_regression.sh +164 -0
- package/skills/global_config/finishing-a-development-branch/SKILL.md +228 -0
- package/skills/global_config/github-actions-generator/SKILL.md +353 -0
- package/skills/global_config/github-actions-generator/assets/templates/action/composite/action.yml +82 -0
- package/skills/global_config/github-actions-generator/assets/templates/action/docker/Dockerfile +25 -0
- package/skills/global_config/github-actions-generator/assets/templates/action/docker/action.yml +42 -0
- package/skills/global_config/github-actions-generator/assets/templates/action/docker/entrypoint.sh +27 -0
- package/skills/global_config/github-actions-generator/assets/templates/action/javascript/action.yml +33 -0
- package/skills/global_config/github-actions-generator/assets/templates/action/javascript/index.js +50 -0
- package/skills/global_config/github-actions-generator/assets/templates/action/javascript/package.json +27 -0
- package/skills/global_config/github-actions-generator/assets/templates/workflow/basic_workflow.yml +242 -0
- package/skills/global_config/github-actions-generator/assets/templates/workflow/reusable_workflow.yml +106 -0
- package/skills/global_config/github-actions-generator/examples/README.md +147 -0
- package/skills/global_config/github-actions-generator/examples/actions/setup-node-cached/action.yml +93 -0
- package/skills/global_config/github-actions-generator/examples/caching/docker-buildkit.yml +256 -0
- package/skills/global_config/github-actions-generator/examples/security/dependency-review.yml +62 -0
- package/skills/global_config/github-actions-generator/examples/security/sbom-attestation.yml +119 -0
- package/skills/global_config/github-actions-generator/examples/triggers/chatops-commands.yml +475 -0
- package/skills/global_config/github-actions-generator/examples/triggers/repository-dispatch.yml +418 -0
- package/skills/global_config/github-actions-generator/examples/triggers/workflow-orchestration.yml +404 -0
- package/skills/global_config/github-actions-generator/examples/workflows/docker-build-push.yml +68 -0
- package/skills/global_config/github-actions-generator/examples/workflows/go-ci.yml +161 -0
- package/skills/global_config/github-actions-generator/examples/workflows/monorepo-ci.yml +340 -0
- package/skills/global_config/github-actions-generator/examples/workflows/multi-environment-deploy.yml +406 -0
- package/skills/global_config/github-actions-generator/examples/workflows/nodejs-ci.yml +122 -0
- package/skills/global_config/github-actions-generator/examples/workflows/python-ci.yml +157 -0
- package/skills/global_config/github-actions-generator/examples/workflows/scheduled-tasks.yml +376 -0
- package/skills/global_config/github-actions-generator/references/advanced-triggers.md +917 -0
- package/skills/global_config/github-actions-generator/references/best-practices.md +755 -0
- package/skills/global_config/github-actions-generator/references/common-actions.md +715 -0
- package/skills/global_config/github-actions-generator/references/custom-actions.md +320 -0
- package/skills/global_config/github-actions-generator/references/expressions-and-contexts.md +688 -0
- package/skills/global_config/github-actions-generator/references/modern-features.md +421 -0
- package/skills/global_config/github-actions-generator/scripts/test_generator.sh +344 -0
- package/skills/global_config/github-actions-templates/SKILL.md +7 -0
- package/skills/global_config/github-actions-validator/SKILL.md +576 -0
- package/skills/global_config/github-actions-validator/examples/README.md +88 -0
- package/skills/global_config/github-actions-validator/examples/outdated-versions.yml +76 -0
- package/skills/global_config/github-actions-validator/examples/valid-ci.yml +79 -0
- package/skills/global_config/github-actions-validator/examples/with-errors.yml +47 -0
- package/skills/global_config/github-actions-validator/references/act_usage.md +233 -0
- package/skills/global_config/github-actions-validator/references/action_versions.md +122 -0
- package/skills/global_config/github-actions-validator/references/actionlint_usage.md +343 -0
- package/skills/global_config/github-actions-validator/references/common_errors.md +512 -0
- package/skills/global_config/github-actions-validator/references/modern_features.md +384 -0
- package/skills/global_config/github-actions-validator/references/runners.md +317 -0
- package/skills/global_config/github-actions-validator/scripts/install_tools.sh +113 -0
- package/skills/global_config/github-actions-validator/scripts/validate_workflow.sh +910 -0
- package/skills/global_config/github-actions-validator/tests/test_validate_workflow.sh +237 -0
- package/skills/global_config/makefile-generator/SKILL.md +614 -0
- package/skills/global_config/makefile-generator/assets/templates/.gitkeep +1 -0
- package/skills/global_config/makefile-generator/docs/makefile-structure.md +530 -0
- package/skills/global_config/makefile-generator/docs/optimization-guide.md +784 -0
- package/skills/global_config/makefile-generator/docs/patterns-guide.md +642 -0
- package/skills/global_config/makefile-generator/docs/security-guide.md +361 -0
- package/skills/global_config/makefile-generator/docs/targets-guide.md +642 -0
- package/skills/global_config/makefile-generator/docs/variables-guide.md +596 -0
- package/skills/global_config/makefile-generator/scripts/add_standard_targets.sh +539 -0
- package/skills/global_config/makefile-generator/scripts/generate_makefile_template.sh +690 -0
- package/skills/global_config/makefile-generator/test/test_helper_scripts.sh +190 -0
- package/skills/global_config/makefile-validator/SKILL.md +244 -0
- package/skills/global_config/makefile-validator/docs/bake-tool.md +1000 -0
- package/skills/global_config/makefile-validator/docs/best-practices.md +858 -0
- package/skills/global_config/makefile-validator/docs/common-mistakes.md +944 -0
- package/skills/global_config/makefile-validator/examples/bad-makefile.mk +77 -0
- package/skills/global_config/makefile-validator/examples/good-makefile.mk +103 -0
- package/skills/global_config/makefile-validator/scripts/test_validate.sh +382 -0
- package/skills/global_config/makefile-validator/scripts/validate_makefile.sh +712 -0
- package/skills/global_config/{MCP_Manage → mcp-manage}/SKILL.md +3 -3
- package/skills/global_config/requesting-code-review/SKILL.md +98 -0
- package/skills/global_config/requesting-code-review/code-reviewer.md +198 -0
- package/skills/global_config/using-git-worktrees/SKILL.md +170 -0
- package/skills/global_config/verification-before-completion/SKILL.md +123 -0
- package/skills/global_config/writing-plans/SKILL.md +126 -46
- package/skills/global_config/writing-plans-legacy/SKILL.md +139 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# Regression test suite for scripts/validate_workflow.sh
|
|
4
|
+
#
|
|
5
|
+
# Covers:
|
|
6
|
+
# - P0: no false-success when actionlint is missing and act cannot validate target
|
|
7
|
+
# - P1: advisory policy checks (SHA pinning, permissions, script injection, OIDC)
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
set -euo pipefail
|
|
11
|
+
|
|
12
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
13
|
+
readonly SCRIPT_DIR
|
|
14
|
+
SKILL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
15
|
+
readonly SKILL_DIR
|
|
16
|
+
VALIDATOR_SOURCE="$SKILL_DIR/scripts/validate_workflow.sh"
|
|
17
|
+
readonly VALIDATOR_SOURCE
|
|
18
|
+
|
|
19
|
+
TMP_ROOT="$(mktemp -d)"
|
|
20
|
+
cleanup() {
|
|
21
|
+
rm -rf "$TMP_ROOT"
|
|
22
|
+
}
|
|
23
|
+
trap cleanup EXIT
|
|
24
|
+
|
|
25
|
+
PASS=0
|
|
26
|
+
FAIL=0
|
|
27
|
+
OUTPUT=""
|
|
28
|
+
EXIT_CODE=0
|
|
29
|
+
|
|
30
|
+
pass() { echo " PASS: $1"; PASS=$((PASS + 1)); }
|
|
31
|
+
fail() { echo " FAIL: $1"; FAIL=$((FAIL + 1)); }
|
|
32
|
+
|
|
33
|
+
new_sandbox() {
|
|
34
|
+
SANDBOX="$(mktemp -d "$TMP_ROOT/case-XXXXXX")"
|
|
35
|
+
|
|
36
|
+
mkdir -p "$SANDBOX/skill/scripts/.tools"
|
|
37
|
+
mkdir -p "$SANDBOX/repo/.github/workflows"
|
|
38
|
+
mkdir -p "$SANDBOX/repo/examples"
|
|
39
|
+
mkdir -p "$SANDBOX/bin"
|
|
40
|
+
|
|
41
|
+
cp "$VALIDATOR_SOURCE" "$SANDBOX/skill/scripts/validate_workflow.sh"
|
|
42
|
+
chmod +x "$SANDBOX/skill/scripts/validate_workflow.sh"
|
|
43
|
+
|
|
44
|
+
cat > "$SANDBOX/bin/docker" <<'EOF'
|
|
45
|
+
#!/usr/bin/env bash
|
|
46
|
+
if [[ "${1:-}" == "info" ]]; then
|
|
47
|
+
exit "${DOCKER_INFO_STUB_EXIT:-0}"
|
|
48
|
+
fi
|
|
49
|
+
exit 0
|
|
50
|
+
EOF
|
|
51
|
+
chmod +x "$SANDBOX/bin/docker"
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
create_act_stub() {
|
|
55
|
+
cat > "$SANDBOX/skill/scripts/.tools/act" <<'EOF'
|
|
56
|
+
#!/usr/bin/env bash
|
|
57
|
+
if [[ "$*" == *"--list"* ]]; then
|
|
58
|
+
exit "${ACT_LIST_STUB_EXIT:-0}"
|
|
59
|
+
fi
|
|
60
|
+
if [[ "$*" == *"--dryrun"* ]]; then
|
|
61
|
+
exit "${ACT_DRYRUN_STUB_EXIT:-0}"
|
|
62
|
+
fi
|
|
63
|
+
exit "${ACT_STUB_EXIT:-0}"
|
|
64
|
+
EOF
|
|
65
|
+
chmod +x "$SANDBOX/skill/scripts/.tools/act"
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
create_actionlint_stub() {
|
|
69
|
+
cat > "$SANDBOX/skill/scripts/.tools/actionlint" <<'EOF'
|
|
70
|
+
#!/usr/bin/env bash
|
|
71
|
+
exit "${ACTIONLINT_STUB_EXIT:-0}"
|
|
72
|
+
EOF
|
|
73
|
+
chmod +x "$SANDBOX/skill/scripts/.tools/actionlint"
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
run_validator() {
|
|
77
|
+
local -a args=("$@")
|
|
78
|
+
OUTPUT=""
|
|
79
|
+
EXIT_CODE=0
|
|
80
|
+
OUTPUT=$(
|
|
81
|
+
cd "$SANDBOX/repo" && \
|
|
82
|
+
PATH="$SANDBOX/bin:$PATH" bash "$SANDBOX/skill/scripts/validate_workflow.sh" "${args[@]}" 2>&1
|
|
83
|
+
) || EXIT_CODE=$?
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
assert_exit() {
|
|
87
|
+
local label="$1"
|
|
88
|
+
local expected="$2"
|
|
89
|
+
if [[ "$EXIT_CODE" -eq "$expected" ]]; then
|
|
90
|
+
pass "$label (exit $EXIT_CODE)"
|
|
91
|
+
else
|
|
92
|
+
fail "$label (expected exit $expected, got $EXIT_CODE)"
|
|
93
|
+
echo "$OUTPUT" | sed 's/^/ /'
|
|
94
|
+
fi
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
assert_contains() {
|
|
98
|
+
local label="$1"
|
|
99
|
+
local pattern="$2"
|
|
100
|
+
if echo "$OUTPUT" | grep -qE "$pattern"; then
|
|
101
|
+
pass "$label"
|
|
102
|
+
else
|
|
103
|
+
fail "$label (pattern not found: $pattern)"
|
|
104
|
+
echo "$OUTPUT" | sed 's/^/ /'
|
|
105
|
+
fi
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
assert_not_contains() {
|
|
109
|
+
local label="$1"
|
|
110
|
+
local pattern="$2"
|
|
111
|
+
if echo "$OUTPUT" | grep -qE "$pattern"; then
|
|
112
|
+
fail "$label (unexpected pattern found: $pattern)"
|
|
113
|
+
echo "$OUTPUT" | sed 's/^/ /'
|
|
114
|
+
else
|
|
115
|
+
pass "$label"
|
|
116
|
+
fi
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
echo "Running github-actions-validator regression tests..."
|
|
120
|
+
echo ""
|
|
121
|
+
|
|
122
|
+
echo "[P0] actionlint missing + target outside .github/workflows must fail"
|
|
123
|
+
new_sandbox
|
|
124
|
+
create_act_stub
|
|
125
|
+
cat > "$SANDBOX/repo/examples/outside.yml" <<'EOF'
|
|
126
|
+
name: Outside
|
|
127
|
+
on: push
|
|
128
|
+
jobs:
|
|
129
|
+
build:
|
|
130
|
+
runs-on: ubuntu-latest
|
|
131
|
+
steps:
|
|
132
|
+
- run: echo hi
|
|
133
|
+
EOF
|
|
134
|
+
run_validator "$SANDBOX/repo/examples/outside.yml"
|
|
135
|
+
if [[ "$EXIT_CODE" -ne 0 ]]; then
|
|
136
|
+
pass "returns non-zero when no effective validator executed"
|
|
137
|
+
else
|
|
138
|
+
fail "returns non-zero when no effective validator executed (expected non-zero, got 0)"
|
|
139
|
+
echo "$OUTPUT" | sed 's/^/ /'
|
|
140
|
+
fi
|
|
141
|
+
assert_contains "reports skipped act path" "act validation skipped"
|
|
142
|
+
assert_contains "reports no effective validator" "No effective validator executed|No validator executed; refusing to report success"
|
|
143
|
+
|
|
144
|
+
echo ""
|
|
145
|
+
echo "[P0] actionlint run + act skip should still pass"
|
|
146
|
+
new_sandbox
|
|
147
|
+
create_act_stub
|
|
148
|
+
create_actionlint_stub
|
|
149
|
+
cat > "$SANDBOX/repo/examples/outside.yml" <<'EOF'
|
|
150
|
+
name: Outside
|
|
151
|
+
on: push
|
|
152
|
+
jobs:
|
|
153
|
+
build:
|
|
154
|
+
runs-on: ubuntu-latest
|
|
155
|
+
steps:
|
|
156
|
+
- run: echo hi
|
|
157
|
+
EOF
|
|
158
|
+
run_validator "$SANDBOX/repo/examples/outside.yml"
|
|
159
|
+
assert_exit "passes when actionlint runs and act skips unsupported target" 0
|
|
160
|
+
assert_contains "shows actionlint success" "actionlint validation passed"
|
|
161
|
+
assert_contains "shows act skip message" "act validation skipped: target file is outside \\.github/workflows"
|
|
162
|
+
|
|
163
|
+
echo ""
|
|
164
|
+
echo "[P0] fallback to act-only still works for real workflow paths"
|
|
165
|
+
new_sandbox
|
|
166
|
+
create_act_stub
|
|
167
|
+
cat > "$SANDBOX/repo/.github/workflows/ci.yml" <<'EOF'
|
|
168
|
+
name: CI
|
|
169
|
+
on: push
|
|
170
|
+
jobs:
|
|
171
|
+
build:
|
|
172
|
+
runs-on: ubuntu-latest
|
|
173
|
+
steps:
|
|
174
|
+
- run: echo hi
|
|
175
|
+
EOF
|
|
176
|
+
run_validator "$SANDBOX/repo/.github/workflows/ci.yml"
|
|
177
|
+
assert_exit "passes in act-only fallback mode for workflow under .github/workflows" 0
|
|
178
|
+
assert_contains "warns about actionlint fallback" "actionlint not found\\. Falling back to act-only validation"
|
|
179
|
+
assert_contains "act dry-run success is reported" "act validation passed"
|
|
180
|
+
|
|
181
|
+
echo ""
|
|
182
|
+
echo "[P1] policy checks report hardening warnings (advisory)"
|
|
183
|
+
new_sandbox
|
|
184
|
+
create_actionlint_stub
|
|
185
|
+
cat > "$SANDBOX/repo/examples/policy-bad.yml" <<'EOF'
|
|
186
|
+
name: Policy Bad
|
|
187
|
+
on: pull_request
|
|
188
|
+
jobs:
|
|
189
|
+
release:
|
|
190
|
+
runs-on: ubuntu-latest
|
|
191
|
+
steps:
|
|
192
|
+
- uses: docker/build-push-action@v6
|
|
193
|
+
- uses: aws-actions/configure-aws-credentials@v4
|
|
194
|
+
- name: Unsafe run usage
|
|
195
|
+
run: echo "${{ github.event.pull_request.title }}"
|
|
196
|
+
EOF
|
|
197
|
+
run_validator --lint-only --policy-checks "$SANDBOX/repo/examples/policy-bad.yml"
|
|
198
|
+
assert_exit "policy warnings do not change exit code" 0
|
|
199
|
+
assert_contains "warns for unpinned third-party action" "third-party action is not SHA pinned: docker/build-push-action@v6"
|
|
200
|
+
assert_contains "warns for missing permissions" "missing explicit permissions block"
|
|
201
|
+
assert_contains "warns for script injection pattern" "potential script injection risk in run step"
|
|
202
|
+
assert_contains "warns for missing id-token with OIDC action" "OIDC-related action but does not declare id-token: write"
|
|
203
|
+
assert_contains "prints policy warning summary" "Security policy warnings:"
|
|
204
|
+
|
|
205
|
+
echo ""
|
|
206
|
+
echo "[P1] policy checks accept hardened workflow"
|
|
207
|
+
new_sandbox
|
|
208
|
+
create_actionlint_stub
|
|
209
|
+
cat > "$SANDBOX/repo/examples/policy-good.yml" <<'EOF'
|
|
210
|
+
name: Policy Good
|
|
211
|
+
on: pull_request
|
|
212
|
+
permissions:
|
|
213
|
+
contents: read
|
|
214
|
+
id-token: write
|
|
215
|
+
jobs:
|
|
216
|
+
release:
|
|
217
|
+
runs-on: ubuntu-latest
|
|
218
|
+
steps:
|
|
219
|
+
- uses: docker/build-push-action@0123456789abcdef0123456789abcdef01234567
|
|
220
|
+
- uses: aws-actions/configure-aws-credentials@0123456789abcdef0123456789abcdef01234567
|
|
221
|
+
- name: Safe run usage
|
|
222
|
+
env:
|
|
223
|
+
PR_TITLE: ${{ github.event.pull_request.title }}
|
|
224
|
+
run: echo "$PR_TITLE"
|
|
225
|
+
EOF
|
|
226
|
+
run_validator --lint-only --policy-checks "$SANDBOX/repo/examples/policy-good.yml"
|
|
227
|
+
assert_exit "hardened workflow remains successful" 0
|
|
228
|
+
assert_contains "prints clean policy summary" "No security policy warnings found"
|
|
229
|
+
assert_not_contains "does not print warning summary when clean" "Security policy warnings:"
|
|
230
|
+
|
|
231
|
+
echo ""
|
|
232
|
+
echo "Test summary: PASS=$PASS FAIL=$FAIL"
|
|
233
|
+
if [[ "$FAIL" -ne 0 ]]; then
|
|
234
|
+
exit 1
|
|
235
|
+
fi
|
|
236
|
+
|
|
237
|
+
echo "All tests passed."
|