@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,384 @@
|
|
|
1
|
+
# Modern GitHub Actions Features Reference
|
|
2
|
+
|
|
3
|
+
This reference covers validation of modern GitHub Actions features including reusable workflows, attestations, OIDC authentication, and more.
|
|
4
|
+
|
|
5
|
+
## Reusable Workflows
|
|
6
|
+
|
|
7
|
+
### Validation Points
|
|
8
|
+
- `workflow_call` trigger configuration
|
|
9
|
+
- Required and optional inputs with correct types
|
|
10
|
+
- Secrets declaration and usage
|
|
11
|
+
- Outputs definition
|
|
12
|
+
|
|
13
|
+
### Example
|
|
14
|
+
|
|
15
|
+
```yaml
|
|
16
|
+
# Reusable workflow (.github/workflows/reusable-deploy.yml)
|
|
17
|
+
on:
|
|
18
|
+
workflow_call:
|
|
19
|
+
inputs:
|
|
20
|
+
environment:
|
|
21
|
+
required: true
|
|
22
|
+
type: string
|
|
23
|
+
deploy-version:
|
|
24
|
+
required: false
|
|
25
|
+
type: string
|
|
26
|
+
default: 'latest'
|
|
27
|
+
secrets:
|
|
28
|
+
deploy-token:
|
|
29
|
+
required: true
|
|
30
|
+
outputs:
|
|
31
|
+
deployment-url:
|
|
32
|
+
description: "The URL of the deployment"
|
|
33
|
+
value: ${{ jobs.deploy.outputs.url }}
|
|
34
|
+
|
|
35
|
+
jobs:
|
|
36
|
+
deploy:
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
outputs:
|
|
39
|
+
url: ${{ steps.deploy.outputs.url }}
|
|
40
|
+
steps:
|
|
41
|
+
- name: Deploy
|
|
42
|
+
id: deploy
|
|
43
|
+
run: echo "url=https://example.com" >> $GITHUB_OUTPUT
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Common Errors
|
|
47
|
+
- Incorrect input types (string, number, boolean)
|
|
48
|
+
- Missing required secrets
|
|
49
|
+
- Invalid output references
|
|
50
|
+
|
|
51
|
+
### Workflow Limits (November 2025)
|
|
52
|
+
|
|
53
|
+
GitHub Actions increased reusable workflow limits:
|
|
54
|
+
- **Nested workflows**: Up to 10 levels (previously 4)
|
|
55
|
+
- **Total workflows per run**: Up to 50 workflows (previously 20)
|
|
56
|
+
|
|
57
|
+
This enables complex workflow compositions and better code reuse.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## SBOM and Build Provenance Attestations
|
|
62
|
+
|
|
63
|
+
### Validation Points
|
|
64
|
+
- Correct permissions (`id-token: write`, `attestations: write`)
|
|
65
|
+
- Valid artifact paths
|
|
66
|
+
- Proper attestation action usage
|
|
67
|
+
|
|
68
|
+
### Example
|
|
69
|
+
|
|
70
|
+
```yaml
|
|
71
|
+
permissions:
|
|
72
|
+
id-token: write
|
|
73
|
+
contents: read
|
|
74
|
+
attestations: write
|
|
75
|
+
|
|
76
|
+
jobs:
|
|
77
|
+
build:
|
|
78
|
+
runs-on: ubuntu-latest
|
|
79
|
+
steps:
|
|
80
|
+
- uses: actions/checkout@v6
|
|
81
|
+
|
|
82
|
+
- name: Build artifact
|
|
83
|
+
run: |
|
|
84
|
+
mkdir -p dist
|
|
85
|
+
tar -czvf dist/app.tar.gz ./src
|
|
86
|
+
|
|
87
|
+
- name: Generate SBOM
|
|
88
|
+
run: |
|
|
89
|
+
# Generate SPDX SBOM
|
|
90
|
+
syft ./src -o spdx-json > sbom.spdx.json
|
|
91
|
+
|
|
92
|
+
- uses: actions/attest-sbom@v3
|
|
93
|
+
with:
|
|
94
|
+
subject-path: '${{ github.workspace }}/dist/*.tar.gz'
|
|
95
|
+
sbom-path: '${{ github.workspace }}/sbom.spdx.json'
|
|
96
|
+
|
|
97
|
+
- uses: actions/attest-build-provenance@v3
|
|
98
|
+
with:
|
|
99
|
+
subject-path: '${{ github.workspace }}/dist/*.tar.gz'
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Common Errors
|
|
103
|
+
- Missing required permissions
|
|
104
|
+
- Invalid subject-path glob patterns
|
|
105
|
+
- Incorrect SBOM format
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## OIDC Authentication
|
|
110
|
+
|
|
111
|
+
### Validation Points
|
|
112
|
+
- Correct permissions (`id-token: write`)
|
|
113
|
+
- Valid audience claims
|
|
114
|
+
- Proper OIDC provider configuration
|
|
115
|
+
- Token claim validation in receiving systems
|
|
116
|
+
|
|
117
|
+
### Available Token Claims (November 2025)
|
|
118
|
+
|
|
119
|
+
| Claim | Description |
|
|
120
|
+
|-------|-------------|
|
|
121
|
+
| `repository` | Repository name |
|
|
122
|
+
| `ref` | Git ref (branch/tag) |
|
|
123
|
+
| `sha` | Commit SHA |
|
|
124
|
+
| `workflow` | Workflow name |
|
|
125
|
+
| `run_id` | Workflow run ID |
|
|
126
|
+
| `run_attempt` | Attempt number |
|
|
127
|
+
| `check_run_id` | **NEW** - Specific check run ID for the job |
|
|
128
|
+
| `actor` | User who triggered the workflow |
|
|
129
|
+
| `environment` | Deployment environment (if applicable) |
|
|
130
|
+
|
|
131
|
+
### Example: AWS OIDC
|
|
132
|
+
|
|
133
|
+
```yaml
|
|
134
|
+
permissions:
|
|
135
|
+
id-token: write
|
|
136
|
+
contents: read
|
|
137
|
+
|
|
138
|
+
jobs:
|
|
139
|
+
deploy:
|
|
140
|
+
runs-on: ubuntu-latest
|
|
141
|
+
steps:
|
|
142
|
+
- name: Configure AWS Credentials
|
|
143
|
+
uses: aws-actions/configure-aws-credentials@v4
|
|
144
|
+
with:
|
|
145
|
+
role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole
|
|
146
|
+
aws-region: us-east-1
|
|
147
|
+
# Token now includes check_run_id for granular tracking
|
|
148
|
+
|
|
149
|
+
- name: Deploy to AWS
|
|
150
|
+
run: aws s3 sync ./build s3://my-bucket/
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### AWS IAM Policy with check_run_id
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"Version": "2012-10-17",
|
|
158
|
+
"Statement": [{
|
|
159
|
+
"Effect": "Allow",
|
|
160
|
+
"Principal": {
|
|
161
|
+
"Federated": "arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com"
|
|
162
|
+
},
|
|
163
|
+
"Action": "sts:AssumeRoleWithWebIdentity",
|
|
164
|
+
"Condition": {
|
|
165
|
+
"StringEquals": {
|
|
166
|
+
"token.actions.githubusercontent.com:sub": "repo:org/repo:ref:refs/heads/main",
|
|
167
|
+
"token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
|
|
168
|
+
},
|
|
169
|
+
"StringLike": {
|
|
170
|
+
"token.actions.githubusercontent.com:check_run_id": "*"
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}]
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Benefits of check_run_id
|
|
178
|
+
- **Fine-grained access control**: Trace tokens to exact job and compute
|
|
179
|
+
- **Improved auditability**: Track which specific check run made API calls
|
|
180
|
+
- **Least-privilege policies**: Attribute-based access control without enumerating repositories
|
|
181
|
+
- **Faster revocation**: Reduce secret exposure risk
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Deployment Environments
|
|
186
|
+
|
|
187
|
+
### Validation Points
|
|
188
|
+
- Environment name configuration
|
|
189
|
+
- Protection rules compatibility
|
|
190
|
+
- Required reviewers setup
|
|
191
|
+
- Environment variables and secrets scope
|
|
192
|
+
|
|
193
|
+
### Example
|
|
194
|
+
|
|
195
|
+
```yaml
|
|
196
|
+
jobs:
|
|
197
|
+
deploy-staging:
|
|
198
|
+
runs-on: ubuntu-latest
|
|
199
|
+
environment:
|
|
200
|
+
name: staging
|
|
201
|
+
url: https://staging.example.com
|
|
202
|
+
steps:
|
|
203
|
+
- uses: actions/checkout@v6
|
|
204
|
+
- run: ./deploy.sh staging
|
|
205
|
+
|
|
206
|
+
deploy-production:
|
|
207
|
+
runs-on: ubuntu-latest
|
|
208
|
+
needs: deploy-staging
|
|
209
|
+
environment:
|
|
210
|
+
name: production
|
|
211
|
+
url: https://prod.example.com
|
|
212
|
+
steps:
|
|
213
|
+
- uses: actions/checkout@v6
|
|
214
|
+
- run: ./deploy.sh production
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Common Errors
|
|
218
|
+
- Undefined environment names
|
|
219
|
+
- Missing URL for environment tracking
|
|
220
|
+
- Incorrect environment variable scope
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Job Summaries
|
|
225
|
+
|
|
226
|
+
### Validation Points
|
|
227
|
+
- Correct usage of `$GITHUB_STEP_SUMMARY`
|
|
228
|
+
- Valid Markdown formatting
|
|
229
|
+
- Proper escaping of dynamic content
|
|
230
|
+
|
|
231
|
+
### Example
|
|
232
|
+
|
|
233
|
+
```yaml
|
|
234
|
+
steps:
|
|
235
|
+
- name: Run tests
|
|
236
|
+
id: tests
|
|
237
|
+
run: |
|
|
238
|
+
# Run tests and capture results
|
|
239
|
+
npm test 2>&1 | tee test-output.txt
|
|
240
|
+
PASSED=$(grep -c "PASS" test-output.txt || echo 0)
|
|
241
|
+
FAILED=$(grep -c "FAIL" test-output.txt || echo 0)
|
|
242
|
+
echo "passed=$PASSED" >> $GITHUB_OUTPUT
|
|
243
|
+
echo "failed=$FAILED" >> $GITHUB_OUTPUT
|
|
244
|
+
|
|
245
|
+
- name: Generate summary
|
|
246
|
+
run: |
|
|
247
|
+
echo "## Test Results" >> $GITHUB_STEP_SUMMARY
|
|
248
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
249
|
+
echo "| Status | Count |" >> $GITHUB_STEP_SUMMARY
|
|
250
|
+
echo "|--------|-------|" >> $GITHUB_STEP_SUMMARY
|
|
251
|
+
echo "| Passed | ${{ steps.tests.outputs.passed }} |" >> $GITHUB_STEP_SUMMARY
|
|
252
|
+
echo "| Failed | ${{ steps.tests.outputs.failed }} |" >> $GITHUB_STEP_SUMMARY
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Note:** Job summaries are runtime features - actionlint validates script syntax but not summary content.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Container Jobs
|
|
260
|
+
|
|
261
|
+
### Validation Points
|
|
262
|
+
- Valid container image references
|
|
263
|
+
- Correct volume mounts
|
|
264
|
+
- Environment variable configuration
|
|
265
|
+
- Service container networking
|
|
266
|
+
|
|
267
|
+
### Example
|
|
268
|
+
|
|
269
|
+
```yaml
|
|
270
|
+
jobs:
|
|
271
|
+
test:
|
|
272
|
+
runs-on: ubuntu-latest
|
|
273
|
+
container:
|
|
274
|
+
image: node:24
|
|
275
|
+
env:
|
|
276
|
+
NODE_ENV: test
|
|
277
|
+
volumes:
|
|
278
|
+
- /data:/data
|
|
279
|
+
|
|
280
|
+
services:
|
|
281
|
+
postgres:
|
|
282
|
+
image: postgres:16
|
|
283
|
+
env:
|
|
284
|
+
POSTGRES_PASSWORD: postgres
|
|
285
|
+
POSTGRES_DB: testdb
|
|
286
|
+
ports:
|
|
287
|
+
- 5432:5432
|
|
288
|
+
options: >-
|
|
289
|
+
--health-cmd pg_isready
|
|
290
|
+
--health-interval 10s
|
|
291
|
+
--health-timeout 5s
|
|
292
|
+
--health-retries 5
|
|
293
|
+
|
|
294
|
+
redis:
|
|
295
|
+
image: redis:7
|
|
296
|
+
ports:
|
|
297
|
+
- 6379:6379
|
|
298
|
+
|
|
299
|
+
steps:
|
|
300
|
+
- uses: actions/checkout@v6
|
|
301
|
+
|
|
302
|
+
- name: Install dependencies
|
|
303
|
+
run: npm ci
|
|
304
|
+
|
|
305
|
+
- name: Run tests
|
|
306
|
+
env:
|
|
307
|
+
DATABASE_URL: postgres://postgres:postgres@postgres:5432/testdb
|
|
308
|
+
REDIS_URL: redis://redis:6379
|
|
309
|
+
run: npm test
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### Common Errors
|
|
313
|
+
- Invalid image tags
|
|
314
|
+
- Incorrect volume mount syntax
|
|
315
|
+
- Service container networking issues
|
|
316
|
+
- Missing health checks for services
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## Matrix Strategies
|
|
321
|
+
|
|
322
|
+
### Validation Points
|
|
323
|
+
- Matrix values must be arrays
|
|
324
|
+
- Valid matrix variable references
|
|
325
|
+
- Proper include/exclude syntax
|
|
326
|
+
|
|
327
|
+
### Example
|
|
328
|
+
|
|
329
|
+
```yaml
|
|
330
|
+
jobs:
|
|
331
|
+
test:
|
|
332
|
+
runs-on: ${{ matrix.os }}
|
|
333
|
+
strategy:
|
|
334
|
+
fail-fast: false
|
|
335
|
+
matrix:
|
|
336
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
337
|
+
node: [20, 22, 24]
|
|
338
|
+
exclude:
|
|
339
|
+
- os: macos-latest
|
|
340
|
+
node: 20
|
|
341
|
+
include:
|
|
342
|
+
- os: ubuntu-latest
|
|
343
|
+
node: 24
|
|
344
|
+
experimental: true
|
|
345
|
+
|
|
346
|
+
steps:
|
|
347
|
+
- uses: actions/checkout@v6
|
|
348
|
+
- uses: actions/setup-node@v6
|
|
349
|
+
with:
|
|
350
|
+
node-version: ${{ matrix.node }}
|
|
351
|
+
- run: npm test
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## Concurrency Control
|
|
357
|
+
|
|
358
|
+
### Validation Points
|
|
359
|
+
- Valid concurrency group names
|
|
360
|
+
- Proper cancel-in-progress usage
|
|
361
|
+
|
|
362
|
+
### Example
|
|
363
|
+
|
|
364
|
+
```yaml
|
|
365
|
+
name: CI
|
|
366
|
+
|
|
367
|
+
on:
|
|
368
|
+
push:
|
|
369
|
+
branches: [main]
|
|
370
|
+
pull_request:
|
|
371
|
+
|
|
372
|
+
concurrency:
|
|
373
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
374
|
+
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
|
375
|
+
|
|
376
|
+
jobs:
|
|
377
|
+
build:
|
|
378
|
+
runs-on: ubuntu-latest
|
|
379
|
+
steps:
|
|
380
|
+
- uses: actions/checkout@v6
|
|
381
|
+
- run: npm ci && npm run build
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
This prevents redundant runs while protecting main branch runs from cancellation.
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
# GitHub-Hosted Runners Reference (2025)
|
|
2
|
+
|
|
3
|
+
This reference covers all GitHub-hosted runner types, including recent additions and deprecations.
|
|
4
|
+
|
|
5
|
+
## Standard Runner Labels
|
|
6
|
+
|
|
7
|
+
### Ubuntu
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
runs-on: ubuntu-latest # Ubuntu 24.04 (default)
|
|
11
|
+
runs-on: ubuntu-24.04 # Ubuntu 24.04
|
|
12
|
+
runs-on: ubuntu-22.04 # Ubuntu 22.04
|
|
13
|
+
runs-on: ubuntu-20.04 # Ubuntu 20.04
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### Windows
|
|
17
|
+
|
|
18
|
+
```yaml
|
|
19
|
+
runs-on: windows-latest # Windows Server 2022 (default)
|
|
20
|
+
runs-on: windows-2025 # Windows Server 2025 (NEW)
|
|
21
|
+
runs-on: windows-2022 # Windows Server 2022
|
|
22
|
+
runs-on: windows-2019 # Windows Server 2019
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### macOS
|
|
26
|
+
|
|
27
|
+
```yaml
|
|
28
|
+
runs-on: macos-latest # macOS 15 (as of Aug 2025)
|
|
29
|
+
runs-on: macos-15 # macOS 15 Sequoia (Apple Silicon)
|
|
30
|
+
runs-on: macos-14 # macOS 14 Sonoma (Apple Silicon)
|
|
31
|
+
runs-on: macos-26 # macOS 26 (PREVIEW)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## macOS Runner Updates and Deprecations
|
|
37
|
+
|
|
38
|
+
### Current Status
|
|
39
|
+
|
|
40
|
+
| Label | Status | Architecture | Notes |
|
|
41
|
+
|-------|--------|--------------|-------|
|
|
42
|
+
| `macos-latest` | **Active** | ARM64 (Apple Silicon) | Points to macOS 15 |
|
|
43
|
+
| `macos-15` | **Active** | ARM64 (Apple Silicon) | M1/M2/M3 |
|
|
44
|
+
| `macos-14` | **Active** | ARM64 (Apple Silicon) | M1/M2 |
|
|
45
|
+
| `macos-26` | **Preview** | ARM64 (Apple Silicon) | Beta |
|
|
46
|
+
| `macos-13` | **RETIRED** | Intel x86_64 | Retired November 14, 2025 |
|
|
47
|
+
| `macos-12` | **RETIRED** | Intel x86_64 | Retired |
|
|
48
|
+
|
|
49
|
+
### Intel-Specific Labels (Long-term Deprecated)
|
|
50
|
+
|
|
51
|
+
```yaml
|
|
52
|
+
runs-on: macos-15-intel # Intel x86_64 (NEW but deprecated long-term)
|
|
53
|
+
runs-on: macos-14-large # Intel x86_64
|
|
54
|
+
runs-on: macos-15-large # Intel x86_64
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Important:** Apple Silicon (ARM64) will be required after Fall 2027. Plan migration now.
|
|
58
|
+
|
|
59
|
+
### Migration Example
|
|
60
|
+
|
|
61
|
+
```yaml
|
|
62
|
+
jobs:
|
|
63
|
+
build:
|
|
64
|
+
# BAD - macos-13 retired Nov 14, 2025 (WILL FAIL)
|
|
65
|
+
# runs-on: macos-13
|
|
66
|
+
|
|
67
|
+
# GOOD - Use macos-15 or macos-latest
|
|
68
|
+
runs-on: macos-15
|
|
69
|
+
|
|
70
|
+
steps:
|
|
71
|
+
- uses: actions/checkout@v6
|
|
72
|
+
- run: ./build.sh
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## ARM64 Runners
|
|
78
|
+
|
|
79
|
+
### Availability
|
|
80
|
+
- **Generally available** as of August 2025
|
|
81
|
+
- **Free** for public repositories
|
|
82
|
+
- **Private repositories** require GitHub Enterprise Cloud plan
|
|
83
|
+
|
|
84
|
+
### Labels
|
|
85
|
+
|
|
86
|
+
```yaml
|
|
87
|
+
runs-on: ubuntu-latest-arm64 # Free for public repos
|
|
88
|
+
runs-on: ubuntu-24.04-arm64
|
|
89
|
+
runs-on: windows-latest-arm64 # ARM Windows
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Example
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
jobs:
|
|
96
|
+
build:
|
|
97
|
+
runs-on: ubuntu-latest-arm64 # Free for public repos
|
|
98
|
+
steps:
|
|
99
|
+
- uses: actions/checkout@v6
|
|
100
|
+
- name: Build on ARM64
|
|
101
|
+
run: |
|
|
102
|
+
uname -m # Should output: aarch64
|
|
103
|
+
./build.sh
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Specifications
|
|
107
|
+
- 4 vCPU ARM64 processors
|
|
108
|
+
- Available for Linux and Windows
|
|
109
|
+
- Native ARM execution (no virtualization needed)
|
|
110
|
+
- Ideal for multi-architecture builds
|
|
111
|
+
|
|
112
|
+
### Common Validation Issues
|
|
113
|
+
- Using ARM64 runners in private repos without Enterprise Cloud
|
|
114
|
+
- Assuming all community actions work on ARM64
|
|
115
|
+
- Not testing ARM-specific compilation issues
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## GPU Runners
|
|
120
|
+
|
|
121
|
+
### Availability
|
|
122
|
+
- **Generally available** for Windows and Linux
|
|
123
|
+
- Requires **Team** or **Enterprise Cloud** plan
|
|
124
|
+
|
|
125
|
+
### Labels
|
|
126
|
+
|
|
127
|
+
```yaml
|
|
128
|
+
runs-on: gpu-t4-4-core # NVIDIA Tesla T4
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Specifications
|
|
132
|
+
- **GPU:** NVIDIA Tesla T4 with 16GB VRAM
|
|
133
|
+
- **CPU:** 4 vCPUs
|
|
134
|
+
- **RAM:** 28GB
|
|
135
|
+
- **Pricing:** $0.07/minute
|
|
136
|
+
|
|
137
|
+
### Example
|
|
138
|
+
|
|
139
|
+
```yaml
|
|
140
|
+
jobs:
|
|
141
|
+
ml-training:
|
|
142
|
+
runs-on: gpu-t4-4-core
|
|
143
|
+
steps:
|
|
144
|
+
- uses: actions/checkout@v6
|
|
145
|
+
|
|
146
|
+
- name: Setup Python
|
|
147
|
+
uses: actions/setup-python@v5
|
|
148
|
+
with:
|
|
149
|
+
python-version: '3.11'
|
|
150
|
+
|
|
151
|
+
- name: Install ML dependencies
|
|
152
|
+
run: |
|
|
153
|
+
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
|
|
154
|
+
pip install -r requirements.txt
|
|
155
|
+
|
|
156
|
+
- name: Train model
|
|
157
|
+
run: python train.py --use-gpu
|
|
158
|
+
|
|
159
|
+
- name: Run inference
|
|
160
|
+
run: python inference.py
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Use Cases
|
|
164
|
+
- ML model training
|
|
165
|
+
- GPU-accelerated testing
|
|
166
|
+
- CUDA development
|
|
167
|
+
- Image/video processing
|
|
168
|
+
|
|
169
|
+
### Common Validation Issues
|
|
170
|
+
- Missing CUDA setup
|
|
171
|
+
- Incorrect GPU driver versions
|
|
172
|
+
- Not utilizing GPU in workloads (CPU fallback)
|
|
173
|
+
- Missing GPU-specific dependencies
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## M2 Pro macOS Runners (Larger Runners)
|
|
178
|
+
|
|
179
|
+
### Availability
|
|
180
|
+
- **Generally available** with M2 Pro powered runners
|
|
181
|
+
|
|
182
|
+
### Labels
|
|
183
|
+
|
|
184
|
+
```yaml
|
|
185
|
+
runs-on: macos-latest-xlarge # macOS 15, M2 Pro
|
|
186
|
+
runs-on: macos-15-xlarge # macOS 15, M2 Pro
|
|
187
|
+
runs-on: macos-14-xlarge # macOS 14, M2 Pro
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Specifications
|
|
191
|
+
- **CPU:** 5-core (vs 3-core standard)
|
|
192
|
+
- **GPU:** 8-core with hardware acceleration (enabled by default)
|
|
193
|
+
- **RAM:** 14GB
|
|
194
|
+
- **Storage:** 14GB
|
|
195
|
+
- **Performance:** Up to 15% faster than M1 runners
|
|
196
|
+
- **Pricing:** $0.16/minute
|
|
197
|
+
|
|
198
|
+
### Example
|
|
199
|
+
|
|
200
|
+
```yaml
|
|
201
|
+
jobs:
|
|
202
|
+
ios-build:
|
|
203
|
+
runs-on: macos-15-xlarge # M2 Pro with GPU acceleration
|
|
204
|
+
steps:
|
|
205
|
+
- uses: actions/checkout@v6
|
|
206
|
+
|
|
207
|
+
- name: Setup Xcode
|
|
208
|
+
uses: maxim-lobanov/setup-xcode@v1
|
|
209
|
+
with:
|
|
210
|
+
xcode-version: latest-stable
|
|
211
|
+
|
|
212
|
+
- name: Build iOS app
|
|
213
|
+
run: |
|
|
214
|
+
xcodebuild -workspace App.xcworkspace \
|
|
215
|
+
-scheme Production \
|
|
216
|
+
-configuration Release \
|
|
217
|
+
-archivePath build/App.xcarchive \
|
|
218
|
+
archive
|
|
219
|
+
|
|
220
|
+
- name: Run GPU-accelerated tests
|
|
221
|
+
run: |
|
|
222
|
+
# GPU acceleration automatically available
|
|
223
|
+
xcodebuild test -scheme AppTests
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Benefits
|
|
227
|
+
- GPU hardware acceleration for Metal-based workloads
|
|
228
|
+
- Improved build times for iOS/macOS apps
|
|
229
|
+
- Better performance for Xcode builds
|
|
230
|
+
- Native Apple Silicon performance
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Runner Selection Best Practices
|
|
235
|
+
|
|
236
|
+
### Decision Criteria
|
|
237
|
+
|
|
238
|
+
1. **Architecture compatibility:** ARM64 vs Intel x86_64
|
|
239
|
+
2. **Cost optimization:** Standard vs larger runners
|
|
240
|
+
3. **GPU requirements:** ML/AI workloads need GPU runners
|
|
241
|
+
4. **Operating system:** Latest versions recommended
|
|
242
|
+
5. **Deprecation timelines:** Avoid retired runners
|
|
243
|
+
6. **Public vs private repos:** ARM64 free only for public repos
|
|
244
|
+
|
|
245
|
+
### Validation Checklist
|
|
246
|
+
|
|
247
|
+
```yaml
|
|
248
|
+
# Check these in your workflows:
|
|
249
|
+
- [ ] Using latest runner versions (macos-15, windows-2025, ubuntu-latest)
|
|
250
|
+
- [ ] Not using deprecated runners (macos-13)
|
|
251
|
+
- [ ] Architecture-appropriate runners (ARM64 vs Intel)
|
|
252
|
+
- [ ] GPU runners for ML workloads
|
|
253
|
+
- [ ] Cost-effective runner selection
|
|
254
|
+
- [ ] ARM64 compatibility tested (if using ARM64 runners)
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Cost Comparison
|
|
258
|
+
|
|
259
|
+
| Runner Type | Pricing | Best For |
|
|
260
|
+
|-------------|---------|----------|
|
|
261
|
+
| Standard (Linux/Windows) | Included | Most workloads |
|
|
262
|
+
| Standard (macOS) | Included | iOS/macOS builds |
|
|
263
|
+
| ARM64 (public repos) | **Free** | Multi-arch builds |
|
|
264
|
+
| ARM64 (private repos) | Enterprise | ARM-native builds |
|
|
265
|
+
| GPU (T4) | $0.07/min | ML/AI workloads |
|
|
266
|
+
| M2 Pro (xlarge) | $0.16/min | Heavy iOS builds |
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Multi-Architecture Builds
|
|
271
|
+
|
|
272
|
+
### Example: Building for Multiple Architectures
|
|
273
|
+
|
|
274
|
+
```yaml
|
|
275
|
+
jobs:
|
|
276
|
+
build:
|
|
277
|
+
strategy:
|
|
278
|
+
matrix:
|
|
279
|
+
include:
|
|
280
|
+
- runner: ubuntu-latest
|
|
281
|
+
arch: x64
|
|
282
|
+
- runner: ubuntu-latest-arm64
|
|
283
|
+
arch: arm64
|
|
284
|
+
|
|
285
|
+
runs-on: ${{ matrix.runner }}
|
|
286
|
+
steps:
|
|
287
|
+
- uses: actions/checkout@v6
|
|
288
|
+
|
|
289
|
+
- name: Build
|
|
290
|
+
run: |
|
|
291
|
+
echo "Building for ${{ matrix.arch }}"
|
|
292
|
+
./build.sh --arch ${{ matrix.arch }}
|
|
293
|
+
|
|
294
|
+
- name: Upload artifact
|
|
295
|
+
uses: actions/upload-artifact@v4
|
|
296
|
+
with:
|
|
297
|
+
name: build-${{ matrix.arch }}
|
|
298
|
+
path: dist/
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## Self-Hosted Runner Configuration
|
|
304
|
+
|
|
305
|
+
When using self-hosted runners, configure actionlint to recognize custom labels:
|
|
306
|
+
|
|
307
|
+
```yaml
|
|
308
|
+
# .github/actionlint.yaml
|
|
309
|
+
self-hosted-runner:
|
|
310
|
+
labels:
|
|
311
|
+
- my-custom-runner
|
|
312
|
+
- gpu-runner
|
|
313
|
+
- arm-runner
|
|
314
|
+
- on-premises
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
This prevents actionlint from reporting unknown runner label errors.
|