@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,95 @@
|
|
|
1
|
+
# Git
|
|
2
|
+
.git
|
|
3
|
+
.gitignore
|
|
4
|
+
.gitattributes
|
|
5
|
+
|
|
6
|
+
# CI/CD
|
|
7
|
+
.github
|
|
8
|
+
.gitlab-ci.yml
|
|
9
|
+
.travis.yml
|
|
10
|
+
.circleci
|
|
11
|
+
Jenkinsfile
|
|
12
|
+
|
|
13
|
+
# Documentation
|
|
14
|
+
README.md
|
|
15
|
+
CHANGELOG.md
|
|
16
|
+
CONTRIBUTING.md
|
|
17
|
+
LICENSE
|
|
18
|
+
*.md
|
|
19
|
+
docs/
|
|
20
|
+
|
|
21
|
+
# Docker
|
|
22
|
+
Dockerfile*
|
|
23
|
+
docker-compose*.yml
|
|
24
|
+
.dockerignore
|
|
25
|
+
|
|
26
|
+
# Environment
|
|
27
|
+
.env
|
|
28
|
+
.env.*
|
|
29
|
+
*.local
|
|
30
|
+
.envrc
|
|
31
|
+
|
|
32
|
+
# Logs
|
|
33
|
+
logs/
|
|
34
|
+
*.log
|
|
35
|
+
npm-debug.log*
|
|
36
|
+
yarn-debug.log*
|
|
37
|
+
yarn-error.log*
|
|
38
|
+
|
|
39
|
+
# IDE
|
|
40
|
+
.vscode/
|
|
41
|
+
.idea/
|
|
42
|
+
*.swp
|
|
43
|
+
*.swo
|
|
44
|
+
*~
|
|
45
|
+
.DS_Store
|
|
46
|
+
*.iml
|
|
47
|
+
|
|
48
|
+
# Testing
|
|
49
|
+
coverage/
|
|
50
|
+
.coverage
|
|
51
|
+
test-results/
|
|
52
|
+
*.test
|
|
53
|
+
.pytest_cache/
|
|
54
|
+
.tox/
|
|
55
|
+
|
|
56
|
+
# Node.js
|
|
57
|
+
node_modules/
|
|
58
|
+
.npm
|
|
59
|
+
.yarn
|
|
60
|
+
.pnp.*
|
|
61
|
+
|
|
62
|
+
# Python
|
|
63
|
+
__pycache__/
|
|
64
|
+
*.py[cod]
|
|
65
|
+
*$py.class
|
|
66
|
+
*.so
|
|
67
|
+
.Python
|
|
68
|
+
venv/
|
|
69
|
+
.venv/
|
|
70
|
+
env/
|
|
71
|
+
ENV/
|
|
72
|
+
pip-log.txt
|
|
73
|
+
*.egg-info/
|
|
74
|
+
|
|
75
|
+
# Go
|
|
76
|
+
vendor/
|
|
77
|
+
*.exe
|
|
78
|
+
*.out
|
|
79
|
+
go.work
|
|
80
|
+
go.work.sum
|
|
81
|
+
|
|
82
|
+
# Java
|
|
83
|
+
*.class
|
|
84
|
+
*.jar
|
|
85
|
+
*.war
|
|
86
|
+
*.ear
|
|
87
|
+
.gradle/
|
|
88
|
+
.mvn/
|
|
89
|
+
!.mvn/wrapper/maven-wrapper.jar
|
|
90
|
+
|
|
91
|
+
# Build artifacts (covers all languages)
|
|
92
|
+
dist/
|
|
93
|
+
build/
|
|
94
|
+
target/
|
|
95
|
+
out/
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# syntax=docker/dockerfile:1
|
|
2
|
+
|
|
3
|
+
# Build stage
|
|
4
|
+
FROM golang:1.21-alpine AS builder
|
|
5
|
+
WORKDIR /app
|
|
6
|
+
|
|
7
|
+
# Copy go mod files
|
|
8
|
+
COPY go.mod go.sum ./
|
|
9
|
+
RUN go mod download
|
|
10
|
+
|
|
11
|
+
# Copy source code
|
|
12
|
+
COPY . .
|
|
13
|
+
|
|
14
|
+
# Build the application with optimizations
|
|
15
|
+
RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags="-s -w" -o /app/main .
|
|
16
|
+
|
|
17
|
+
# Production stage (using distroless for minimal image)
|
|
18
|
+
# gcr.io/distroless/static-debian12 IS a specific tag; hadolint DL3006 is a
|
|
19
|
+
# false positive for non-Docker-Hub registries.
|
|
20
|
+
# hadolint ignore=DL3006
|
|
21
|
+
FROM gcr.io/distroless/static-debian12 AS production
|
|
22
|
+
WORKDIR /
|
|
23
|
+
|
|
24
|
+
# Copy binary from builder
|
|
25
|
+
COPY --from=builder /app/main /main
|
|
26
|
+
|
|
27
|
+
# Expose port
|
|
28
|
+
EXPOSE 8080
|
|
29
|
+
|
|
30
|
+
# Switch to non-root user (distroless runs as nonroot by default)
|
|
31
|
+
USER nonroot:nonroot
|
|
32
|
+
|
|
33
|
+
# Start application
|
|
34
|
+
ENTRYPOINT ["/main"]
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# syntax=docker/dockerfile:1
|
|
2
|
+
|
|
3
|
+
# Build stage
|
|
4
|
+
FROM eclipse-temurin:21-jdk-jammy AS builder
|
|
5
|
+
WORKDIR /app
|
|
6
|
+
|
|
7
|
+
# Copy Maven wrapper and pom.xml
|
|
8
|
+
COPY mvnw pom.xml ./
|
|
9
|
+
COPY .mvn .mvn
|
|
10
|
+
|
|
11
|
+
# Download dependencies (cached layer)
|
|
12
|
+
RUN ./mvnw dependency:go-offline
|
|
13
|
+
|
|
14
|
+
# Copy source code
|
|
15
|
+
COPY src ./src
|
|
16
|
+
|
|
17
|
+
# Build application
|
|
18
|
+
RUN ./mvnw clean package -DskipTests && \
|
|
19
|
+
mv target/*.jar target/app.jar
|
|
20
|
+
|
|
21
|
+
# Production stage (using JRE instead of JDK)
|
|
22
|
+
FROM eclipse-temurin:21-jre-jammy AS production
|
|
23
|
+
WORKDIR /app
|
|
24
|
+
|
|
25
|
+
# Install healthcheck dependency and create non-root user
|
|
26
|
+
# hadolint ignore=DL3008
|
|
27
|
+
RUN apt-get update && apt-get install -y --no-install-recommends curl && \
|
|
28
|
+
rm -rf /var/lib/apt/lists/* && \
|
|
29
|
+
useradd -m -u 1001 app
|
|
30
|
+
|
|
31
|
+
# Copy JAR from builder
|
|
32
|
+
COPY --from=builder --chown=app:app /app/target/app.jar ./app.jar
|
|
33
|
+
|
|
34
|
+
# Switch to non-root user
|
|
35
|
+
USER app
|
|
36
|
+
|
|
37
|
+
# Expose port
|
|
38
|
+
EXPOSE 8080
|
|
39
|
+
|
|
40
|
+
# Health check (Spring Boot Actuator)
|
|
41
|
+
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
|
|
42
|
+
CMD curl -f http://localhost:8080/actuator/health || exit 1
|
|
43
|
+
|
|
44
|
+
# Start application
|
|
45
|
+
ENTRYPOINT ["java", "-jar", "app.jar"]
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# syntax=docker/dockerfile:1
|
|
2
|
+
|
|
3
|
+
# Dependencies stage
|
|
4
|
+
FROM node:20-alpine AS deps
|
|
5
|
+
WORKDIR /app
|
|
6
|
+
|
|
7
|
+
# Copy dependency files
|
|
8
|
+
COPY package*.json ./
|
|
9
|
+
RUN npm ci
|
|
10
|
+
|
|
11
|
+
# Builder stage
|
|
12
|
+
FROM node:20-alpine AS builder
|
|
13
|
+
WORKDIR /app
|
|
14
|
+
|
|
15
|
+
# Copy dependencies and application code
|
|
16
|
+
COPY --from=deps /app/node_modules ./node_modules
|
|
17
|
+
COPY . .
|
|
18
|
+
|
|
19
|
+
# Build Next.js application
|
|
20
|
+
RUN npm run build
|
|
21
|
+
|
|
22
|
+
# Production stage
|
|
23
|
+
FROM node:20-alpine AS runner
|
|
24
|
+
WORKDIR /app
|
|
25
|
+
|
|
26
|
+
ENV NODE_ENV=production
|
|
27
|
+
|
|
28
|
+
# Create non-root user
|
|
29
|
+
RUN addgroup -g 1001 -S nodejs && \
|
|
30
|
+
adduser -S nextjs -u 1001
|
|
31
|
+
|
|
32
|
+
# Copy built application
|
|
33
|
+
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
|
|
34
|
+
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
|
|
35
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
36
|
+
COPY --from=builder /app/package.json ./package.json
|
|
37
|
+
|
|
38
|
+
# Switch to non-root user
|
|
39
|
+
USER nextjs
|
|
40
|
+
|
|
41
|
+
# Expose port
|
|
42
|
+
EXPOSE 3000
|
|
43
|
+
|
|
44
|
+
# Health check
|
|
45
|
+
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
|
|
46
|
+
CMD node -e "require('http').get('http://localhost:3000', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"
|
|
47
|
+
|
|
48
|
+
# Start application
|
|
49
|
+
CMD ["npm", "start"]
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# syntax=docker/dockerfile:1
|
|
2
|
+
|
|
3
|
+
# Build stage (for apps that compile assets, e.g. TypeScript/Vite/Webpack)
|
|
4
|
+
FROM node:20-alpine AS builder
|
|
5
|
+
WORKDIR /app
|
|
6
|
+
|
|
7
|
+
# Copy dependency files for caching
|
|
8
|
+
COPY package*.json ./
|
|
9
|
+
|
|
10
|
+
# Install full dependency tree so build tooling is available
|
|
11
|
+
RUN npm ci && \
|
|
12
|
+
npm cache clean --force
|
|
13
|
+
|
|
14
|
+
# Copy application code
|
|
15
|
+
COPY . .
|
|
16
|
+
|
|
17
|
+
# Build application and prune devDependencies afterward
|
|
18
|
+
RUN npm run build && \
|
|
19
|
+
npm prune --omit=dev
|
|
20
|
+
|
|
21
|
+
# Production stage
|
|
22
|
+
FROM node:20-alpine AS production
|
|
23
|
+
WORKDIR /app
|
|
24
|
+
|
|
25
|
+
# Set production environment
|
|
26
|
+
ENV NODE_ENV=production
|
|
27
|
+
|
|
28
|
+
# Create non-root user
|
|
29
|
+
RUN addgroup -g 1001 -S nodejs && \
|
|
30
|
+
adduser -S nodejs -u 1001
|
|
31
|
+
|
|
32
|
+
# Copy runtime dependencies and built output
|
|
33
|
+
COPY --from=builder --chown=nodejs:nodejs /app/node_modules ./node_modules
|
|
34
|
+
COPY --from=builder --chown=nodejs:nodejs /app/dist ./dist
|
|
35
|
+
COPY --from=builder --chown=nodejs:nodejs /app/package*.json ./
|
|
36
|
+
|
|
37
|
+
# Switch to non-root user
|
|
38
|
+
USER nodejs
|
|
39
|
+
|
|
40
|
+
# Expose port
|
|
41
|
+
EXPOSE 3000
|
|
42
|
+
|
|
43
|
+
# Health check
|
|
44
|
+
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
45
|
+
CMD node -e "require('http').get('http://localhost:3000/health', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})" || exit 1
|
|
46
|
+
|
|
47
|
+
# Start application
|
|
48
|
+
CMD ["node", "dist/index.js"]
|
|
49
|
+
|
|
50
|
+
# No-build variant (apps that run source directly):
|
|
51
|
+
# 1) In builder stage, replace install/build lines with:
|
|
52
|
+
# RUN npm ci --omit=dev && npm cache clean --force
|
|
53
|
+
# 2) In production stage, replace COPY/CMD with:
|
|
54
|
+
# COPY --from=builder --chown=nodejs:nodejs /app ./
|
|
55
|
+
# CMD ["node", "src/index.js"]
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# syntax=docker/dockerfile:1
|
|
2
|
+
|
|
3
|
+
# Build stage
|
|
4
|
+
FROM python:3.12-slim AS builder
|
|
5
|
+
WORKDIR /app
|
|
6
|
+
|
|
7
|
+
# Install build dependencies
|
|
8
|
+
# hadolint ignore=DL3008
|
|
9
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
10
|
+
gcc \
|
|
11
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
12
|
+
|
|
13
|
+
# Copy dependency files
|
|
14
|
+
COPY requirements.txt .
|
|
15
|
+
|
|
16
|
+
# Install Python dependencies
|
|
17
|
+
RUN pip install --no-cache-dir --user -r requirements.txt
|
|
18
|
+
|
|
19
|
+
# Production stage
|
|
20
|
+
FROM python:3.12-slim AS production
|
|
21
|
+
WORKDIR /app
|
|
22
|
+
|
|
23
|
+
# Create non-root user
|
|
24
|
+
RUN useradd -m -u 1001 app
|
|
25
|
+
|
|
26
|
+
# Copy dependencies from builder
|
|
27
|
+
COPY --from=builder /root/.local /home/app/.local
|
|
28
|
+
|
|
29
|
+
# Copy application code
|
|
30
|
+
COPY --chown=app:app . .
|
|
31
|
+
|
|
32
|
+
# Update PATH and set Python production env vars
|
|
33
|
+
ENV PATH=/home/app/.local/bin:$PATH \
|
|
34
|
+
PYTHONUNBUFFERED=1 \
|
|
35
|
+
PYTHONDONTWRITEBYTECODE=1
|
|
36
|
+
|
|
37
|
+
# Switch to non-root user
|
|
38
|
+
USER app
|
|
39
|
+
|
|
40
|
+
# Expose port
|
|
41
|
+
EXPOSE 8000
|
|
42
|
+
|
|
43
|
+
# Health check
|
|
44
|
+
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
45
|
+
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health').read()" || exit 1
|
|
46
|
+
|
|
47
|
+
# Start application with uvicorn
|
|
48
|
+
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|