@hybridlabor-api/aos 4.8.0 → 4.10.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 → AGENTS.md} +3 -1
- package/.agents/nodes.json +3 -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/hooks/memb-inject.mjs +29 -1
- package/.claude/settings.json +13 -0
- package/.claude/workflows/startcycle-dispatch.mjs +23 -1
- package/.opencode/agents/godmode-media-eventtech.md +1 -1
- package/.opencode/plugins/bdb-aos.js +31 -4
- package/CLAUDE.md +0 -571
- package/README.de.md +1 -1
- package/README.md +1 -1
- package/README.pt.md +1 -1
- package/THIRD_PARTY_NOTICES.md +126 -0
- package/bin/aos-doctor.mjs +1 -1
- package/docs/skills_table.md +1 -1
- package/installer.js +187 -55
- package/package.json +7 -3
- 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/basic/bdb-eventagency-skill/SKILL.md +252 -0
- package/skills/basic/bdb-shipping-skill/SKILL.md +161 -0
- package/skills/basic/godmode-eventtech/SKILL.md +4 -1
- package/skills/global_config/agenttrail/SKILL.md +6 -1
- package/skills/global_config/aos-project-init/SKILL.md +2 -0
- package/skills/global_config/aos-project-init/assets/AGENTS.template.md +1 -1
- package/skills/global_config/aos-project-init/scripts/aos-project-doctor.mjs +1 -1
- package/skills/global_config/aos-setup/SKILL.md +1 -1
- package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +1 -1
- package/skills/global_config/ask-tim/SKILL.md +7 -7
- 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/deja-memory/SKILL.md +3 -1
- 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/plan-canvas/SKILL.md +9 -2
- package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/ui.js +10 -2
- package/skills/global_config/plan-canvas/scripts/plan-canvas.js +1 -1
- package/skills/global_config/read-the-damn-docs/SKILL.md +175 -0
- 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 +152 -0
- package/.claude/CLAUDE.md +0 -12
- package/mcps/RhinoMCP/docs/content/docs/getting-started/gemini.md +0 -61
- /package/{GEMINI.md → RULES.md} +0 -0
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
# Modern GitHub Actions Features
|
|
2
|
+
|
|
3
|
+
**Last Updated:** December 2025
|
|
4
|
+
|
|
5
|
+
This guide covers modern GitHub Actions capabilities for enhanced workflow output, deployment control, and containerized builds.
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
1. [Job Summaries](#job-summaries)
|
|
9
|
+
2. [Deployment Environments](#deployment-environments)
|
|
10
|
+
3. [Container Jobs](#container-jobs)
|
|
11
|
+
4. [Workflow Annotations](#workflow-annotations)
|
|
12
|
+
5. [Integration Examples](#integration-examples)
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Job Summaries
|
|
17
|
+
|
|
18
|
+
Create rich markdown summaries in the Actions UI using `$GITHUB_STEP_SUMMARY`.
|
|
19
|
+
|
|
20
|
+
### When to Use
|
|
21
|
+
- Display test results, coverage reports, benchmarks
|
|
22
|
+
- Show deployment status and URLs
|
|
23
|
+
- Present security scan findings
|
|
24
|
+
- Summarize workflow execution
|
|
25
|
+
|
|
26
|
+
### Basic Usage
|
|
27
|
+
|
|
28
|
+
```yaml
|
|
29
|
+
- name: Generate summary
|
|
30
|
+
run: |
|
|
31
|
+
echo "## Build Results :rocket:" >> $GITHUB_STEP_SUMMARY
|
|
32
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
33
|
+
echo "| Metric | Value |" >> $GITHUB_STEP_SUMMARY
|
|
34
|
+
echo "|--------|-------|" >> $GITHUB_STEP_SUMMARY
|
|
35
|
+
echo "| Tests | ${{ steps.test.outputs.passed }} passed |" >> $GITHUB_STEP_SUMMARY
|
|
36
|
+
echo "| Coverage | ${{ steps.test.outputs.coverage }}% |" >> $GITHUB_STEP_SUMMARY
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Advanced Patterns
|
|
40
|
+
|
|
41
|
+
**Test Results Table:**
|
|
42
|
+
```yaml
|
|
43
|
+
- name: Test summary
|
|
44
|
+
if: always()
|
|
45
|
+
run: |
|
|
46
|
+
echo "## Test Results :test_tube:" >> $GITHUB_STEP_SUMMARY
|
|
47
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
48
|
+
echo "| Suite | Status | Duration |" >> $GITHUB_STEP_SUMMARY
|
|
49
|
+
echo "|-------|--------|----------|" >> $GITHUB_STEP_SUMMARY
|
|
50
|
+
echo "| Unit Tests | :white_check_mark: | 45s |" >> $GITHUB_STEP_SUMMARY
|
|
51
|
+
echo "| Integration | :white_check_mark: | 2m 30s |" >> $GITHUB_STEP_SUMMARY
|
|
52
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
53
|
+
echo "### Deployment URLs" >> $GITHUB_STEP_SUMMARY
|
|
54
|
+
echo "- [Staging](https://staging.example.com)" >> $GITHUB_STEP_SUMMARY
|
|
55
|
+
echo "- [Production](https://example.com)" >> $GITHUB_STEP_SUMMARY
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Collapsible Details:**
|
|
59
|
+
```yaml
|
|
60
|
+
- name: Detailed summary
|
|
61
|
+
run: |
|
|
62
|
+
echo "## Summary" >> $GITHUB_STEP_SUMMARY
|
|
63
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
64
|
+
echo "<details>" >> $GITHUB_STEP_SUMMARY
|
|
65
|
+
echo "<summary>Click to expand test details</summary>" >> $GITHUB_STEP_SUMMARY
|
|
66
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
67
|
+
echo '```' >> $GITHUB_STEP_SUMMARY
|
|
68
|
+
cat test-output.txt >> $GITHUB_STEP_SUMMARY
|
|
69
|
+
echo '```' >> $GITHUB_STEP_SUMMARY
|
|
70
|
+
echo "</details>" >> $GITHUB_STEP_SUMMARY
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Best Practices
|
|
74
|
+
- Use `if: always()` to show summaries even on failure
|
|
75
|
+
- Include emojis for visual scanning
|
|
76
|
+
- Use markdown tables for structured data
|
|
77
|
+
- Add links to deployed environments
|
|
78
|
+
- Clear summary at start if needed: `> $GITHUB_STEP_SUMMARY`
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Deployment Environments
|
|
83
|
+
|
|
84
|
+
Use GitHub environments with protection rules, approval gates, and environment-specific secrets.
|
|
85
|
+
|
|
86
|
+
### When to Use
|
|
87
|
+
- Multi-stage deployments (dev, staging, production)
|
|
88
|
+
- Deployments requiring manual approval
|
|
89
|
+
- Environment-specific configuration
|
|
90
|
+
- Deployment tracking and rollback
|
|
91
|
+
|
|
92
|
+
### Basic Usage
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
jobs:
|
|
96
|
+
deploy-staging:
|
|
97
|
+
runs-on: ubuntu-latest
|
|
98
|
+
environment:
|
|
99
|
+
name: staging
|
|
100
|
+
url: https://staging.example.com
|
|
101
|
+
steps:
|
|
102
|
+
- name: Deploy
|
|
103
|
+
run: ./deploy.sh staging
|
|
104
|
+
|
|
105
|
+
deploy-production:
|
|
106
|
+
needs: deploy-staging
|
|
107
|
+
runs-on: ubuntu-latest
|
|
108
|
+
environment:
|
|
109
|
+
name: production
|
|
110
|
+
url: https://example.com
|
|
111
|
+
steps:
|
|
112
|
+
- name: Deploy
|
|
113
|
+
run: ./deploy.sh production
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Protection Rules
|
|
117
|
+
|
|
118
|
+
Configure in repository Settings → Environments:
|
|
119
|
+
|
|
120
|
+
| Rule | Description |
|
|
121
|
+
|------|-------------|
|
|
122
|
+
| Required reviewers | Manual approval before deployment |
|
|
123
|
+
| Wait timer | Delay deployment by N minutes |
|
|
124
|
+
| Deployment branches | Restrict which branches can deploy |
|
|
125
|
+
| Environment secrets | Secrets available only in this environment |
|
|
126
|
+
|
|
127
|
+
### Multi-Environment Pattern
|
|
128
|
+
|
|
129
|
+
```yaml
|
|
130
|
+
name: Deploy
|
|
131
|
+
|
|
132
|
+
on:
|
|
133
|
+
push:
|
|
134
|
+
branches: [main, develop]
|
|
135
|
+
|
|
136
|
+
jobs:
|
|
137
|
+
deploy:
|
|
138
|
+
runs-on: ubuntu-latest
|
|
139
|
+
environment:
|
|
140
|
+
name: ${{ github.ref_name == 'main' && 'production' || 'staging' }}
|
|
141
|
+
url: ${{ github.ref_name == 'main' && 'https://example.com' || 'https://staging.example.com' }}
|
|
142
|
+
steps:
|
|
143
|
+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
144
|
+
- name: Deploy to ${{ github.ref_name == 'main' && 'production' || 'staging' }}
|
|
145
|
+
env:
|
|
146
|
+
API_KEY: ${{ secrets.API_KEY }} # Environment-specific secret
|
|
147
|
+
run: ./deploy.sh
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Best Practices
|
|
151
|
+
- Set environment URLs for easy access
|
|
152
|
+
- Use required reviewers for production
|
|
153
|
+
- Configure branch policies
|
|
154
|
+
- Leverage environment-specific secrets
|
|
155
|
+
- Use `needs` to enforce deployment order
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Container Jobs
|
|
160
|
+
|
|
161
|
+
Run jobs inside Docker containers for consistent, isolated build environments.
|
|
162
|
+
|
|
163
|
+
### When to Use
|
|
164
|
+
- Require specific OS/tool versions
|
|
165
|
+
- Need isolated build environment
|
|
166
|
+
- Want to match local dev environment
|
|
167
|
+
- Building for specific Linux distributions
|
|
168
|
+
|
|
169
|
+
### Basic Container Job
|
|
170
|
+
|
|
171
|
+
```yaml
|
|
172
|
+
jobs:
|
|
173
|
+
build:
|
|
174
|
+
runs-on: ubuntu-latest
|
|
175
|
+
container:
|
|
176
|
+
image: node:20-alpine
|
|
177
|
+
env:
|
|
178
|
+
NODE_ENV: production
|
|
179
|
+
options: --cpus 2 --memory 4g
|
|
180
|
+
steps:
|
|
181
|
+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
182
|
+
- run: npm ci
|
|
183
|
+
- run: npm run build
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### With Service Containers
|
|
187
|
+
|
|
188
|
+
```yaml
|
|
189
|
+
jobs:
|
|
190
|
+
test:
|
|
191
|
+
runs-on: ubuntu-latest
|
|
192
|
+
container:
|
|
193
|
+
image: node:20
|
|
194
|
+
|
|
195
|
+
services:
|
|
196
|
+
postgres:
|
|
197
|
+
image: postgres:15
|
|
198
|
+
env:
|
|
199
|
+
POSTGRES_PASSWORD: postgres
|
|
200
|
+
options: >-
|
|
201
|
+
--health-cmd pg_isready
|
|
202
|
+
--health-interval 10s
|
|
203
|
+
--health-timeout 5s
|
|
204
|
+
--health-retries 5
|
|
205
|
+
|
|
206
|
+
redis:
|
|
207
|
+
image: redis:7
|
|
208
|
+
options: >-
|
|
209
|
+
--health-cmd "redis-cli ping"
|
|
210
|
+
--health-interval 10s
|
|
211
|
+
--health-timeout 5s
|
|
212
|
+
--health-retries 5
|
|
213
|
+
|
|
214
|
+
steps:
|
|
215
|
+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
216
|
+
- name: Run tests
|
|
217
|
+
env:
|
|
218
|
+
DATABASE_URL: postgres://postgres:postgres@postgres:5432/test
|
|
219
|
+
REDIS_URL: redis://redis:6379
|
|
220
|
+
run: npm test
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Best Practices
|
|
224
|
+
- Use specific image tags (avoid `latest`)
|
|
225
|
+
- Configure health checks for services
|
|
226
|
+
- Set resource limits with `options`
|
|
227
|
+
- Use volumes for persistent data
|
|
228
|
+
- Prefer official images
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Workflow Annotations
|
|
233
|
+
|
|
234
|
+
Create annotations (notices, warnings, errors) in the Actions UI and PR files.
|
|
235
|
+
|
|
236
|
+
### Annotation Commands
|
|
237
|
+
|
|
238
|
+
| Command | Level | Appearance |
|
|
239
|
+
|---------|-------|------------|
|
|
240
|
+
| `::notice::` | Info | Blue |
|
|
241
|
+
| `::warning::` | Warning | Yellow |
|
|
242
|
+
| `::error::` | Error | Red (doesn't fail step) |
|
|
243
|
+
|
|
244
|
+
### Basic Usage
|
|
245
|
+
|
|
246
|
+
```yaml
|
|
247
|
+
- name: Validate
|
|
248
|
+
run: |
|
|
249
|
+
# Simple annotations
|
|
250
|
+
echo "::notice::Build completed successfully"
|
|
251
|
+
echo "::warning::Deprecated API usage detected"
|
|
252
|
+
echo "::error::Configuration issue found"
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### File/Line Annotations
|
|
256
|
+
|
|
257
|
+
Annotations with file location appear in PR Files tab:
|
|
258
|
+
|
|
259
|
+
```yaml
|
|
260
|
+
- name: Lint results
|
|
261
|
+
run: |
|
|
262
|
+
# With file and line info
|
|
263
|
+
echo "::error file=src/app.js,line=10,col=5::Type mismatch detected"
|
|
264
|
+
echo "::warning file=config.js,line=23::Deprecated option used"
|
|
265
|
+
echo "::notice file=utils.js,line=100,endLine=105::Consider refactoring"
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### Log Groups
|
|
269
|
+
|
|
270
|
+
Collapse verbose output:
|
|
271
|
+
|
|
272
|
+
```yaml
|
|
273
|
+
- name: Build with groups
|
|
274
|
+
run: |
|
|
275
|
+
echo "::group::Installing dependencies"
|
|
276
|
+
npm ci
|
|
277
|
+
echo "::endgroup::"
|
|
278
|
+
|
|
279
|
+
echo "::group::Running tests"
|
|
280
|
+
npm test
|
|
281
|
+
echo "::endgroup::"
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### Masking Secrets
|
|
285
|
+
|
|
286
|
+
```yaml
|
|
287
|
+
- name: Process secret
|
|
288
|
+
run: |
|
|
289
|
+
SENSITIVE="$(./get-secret.sh)"
|
|
290
|
+
echo "::add-mask::$SENSITIVE"
|
|
291
|
+
echo "Using secret safely"
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### All Workflow Commands
|
|
295
|
+
|
|
296
|
+
| Command | Purpose |
|
|
297
|
+
|---------|---------|
|
|
298
|
+
| `::notice::` | Info annotation |
|
|
299
|
+
| `::warning::` | Warning annotation |
|
|
300
|
+
| `::error::` | Error annotation |
|
|
301
|
+
| `::group::` | Start collapsed section |
|
|
302
|
+
| `::endgroup::` | End collapsed section |
|
|
303
|
+
| `::add-mask::` | Mask value in logs |
|
|
304
|
+
| `::stop-commands::TOKEN` | Disable command processing |
|
|
305
|
+
| `::TOKEN::` | Re-enable commands |
|
|
306
|
+
| `::debug::` | Debug message (requires debug logging) |
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## Integration Examples
|
|
311
|
+
|
|
312
|
+
### Complete CI/CD with Modern Features
|
|
313
|
+
|
|
314
|
+
```yaml
|
|
315
|
+
name: Full-Featured CI/CD
|
|
316
|
+
|
|
317
|
+
on:
|
|
318
|
+
push:
|
|
319
|
+
branches: [main, develop]
|
|
320
|
+
pull_request:
|
|
321
|
+
|
|
322
|
+
permissions:
|
|
323
|
+
contents: read
|
|
324
|
+
deployments: write
|
|
325
|
+
|
|
326
|
+
jobs:
|
|
327
|
+
test:
|
|
328
|
+
runs-on: ubuntu-latest
|
|
329
|
+
container:
|
|
330
|
+
image: node:20-alpine
|
|
331
|
+
|
|
332
|
+
services:
|
|
333
|
+
postgres:
|
|
334
|
+
image: postgres:15
|
|
335
|
+
env:
|
|
336
|
+
POSTGRES_PASSWORD: postgres
|
|
337
|
+
|
|
338
|
+
steps:
|
|
339
|
+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
340
|
+
|
|
341
|
+
- name: Run tests
|
|
342
|
+
id: test
|
|
343
|
+
env:
|
|
344
|
+
DATABASE_URL: postgres://postgres:postgres@postgres:5432/test
|
|
345
|
+
run: |
|
|
346
|
+
npm ci
|
|
347
|
+
npm test -- --coverage
|
|
348
|
+
echo "coverage=85" >> $GITHUB_OUTPUT
|
|
349
|
+
|
|
350
|
+
- name: Coverage check
|
|
351
|
+
run: |
|
|
352
|
+
COVERAGE=${{ steps.test.outputs.coverage }}
|
|
353
|
+
if [ $COVERAGE -lt 80 ]; then
|
|
354
|
+
echo "::warning::Coverage $COVERAGE% below 80% threshold"
|
|
355
|
+
else
|
|
356
|
+
echo "::notice::Coverage $COVERAGE% meets threshold"
|
|
357
|
+
fi
|
|
358
|
+
|
|
359
|
+
- name: Test summary
|
|
360
|
+
if: always()
|
|
361
|
+
run: |
|
|
362
|
+
echo "## Test Results :test_tube:" >> $GITHUB_STEP_SUMMARY
|
|
363
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
364
|
+
echo "| Metric | Value |" >> $GITHUB_STEP_SUMMARY
|
|
365
|
+
echo "|--------|-------|" >> $GITHUB_STEP_SUMMARY
|
|
366
|
+
echo "| Coverage | ${{ steps.test.outputs.coverage }}% |" >> $GITHUB_STEP_SUMMARY
|
|
367
|
+
echo "| Status | :white_check_mark: Passed |" >> $GITHUB_STEP_SUMMARY
|
|
368
|
+
|
|
369
|
+
deploy-staging:
|
|
370
|
+
needs: test
|
|
371
|
+
if: github.ref == 'refs/heads/develop'
|
|
372
|
+
runs-on: ubuntu-latest
|
|
373
|
+
environment:
|
|
374
|
+
name: staging
|
|
375
|
+
url: https://staging.example.com
|
|
376
|
+
|
|
377
|
+
steps:
|
|
378
|
+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
379
|
+
|
|
380
|
+
- name: Deploy
|
|
381
|
+
run: ./deploy.sh staging
|
|
382
|
+
|
|
383
|
+
- name: Deployment summary
|
|
384
|
+
run: |
|
|
385
|
+
echo "## Deployment :rocket:" >> $GITHUB_STEP_SUMMARY
|
|
386
|
+
echo "- **Environment**: Staging" >> $GITHUB_STEP_SUMMARY
|
|
387
|
+
echo "- **URL**: https://staging.example.com" >> $GITHUB_STEP_SUMMARY
|
|
388
|
+
echo "- **Commit**: ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
|
|
389
|
+
|
|
390
|
+
deploy-production:
|
|
391
|
+
needs: test
|
|
392
|
+
if: github.ref == 'refs/heads/main'
|
|
393
|
+
runs-on: ubuntu-latest
|
|
394
|
+
environment:
|
|
395
|
+
name: production
|
|
396
|
+
url: https://example.com
|
|
397
|
+
|
|
398
|
+
steps:
|
|
399
|
+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
400
|
+
|
|
401
|
+
- name: Deploy
|
|
402
|
+
run: ./deploy.sh production
|
|
403
|
+
|
|
404
|
+
- name: Deployment summary
|
|
405
|
+
run: |
|
|
406
|
+
echo "## Production Deployment :rocket:" >> $GITHUB_STEP_SUMMARY
|
|
407
|
+
echo "- **Environment**: Production" >> $GITHUB_STEP_SUMMARY
|
|
408
|
+
echo "- **URL**: https://example.com" >> $GITHUB_STEP_SUMMARY
|
|
409
|
+
echo "- **Note**: Required manual approval" >> $GITHUB_STEP_SUMMARY
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
---
|
|
413
|
+
|
|
414
|
+
## Summary
|
|
415
|
+
|
|
416
|
+
| Feature | Use Case | Key Benefits |
|
|
417
|
+
|---------|----------|--------------|
|
|
418
|
+
| Job Summaries | Rich output display | Markdown support, persists in UI |
|
|
419
|
+
| Environments | Deployment control | Approvals, secrets, tracking |
|
|
420
|
+
| Container Jobs | Consistent builds | Isolation, reproducibility |
|
|
421
|
+
| Annotations | Inline feedback | PR integration, visual alerts |
|