cokit-cli 1.0.0 → 1.0.2
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.md +103 -0
- package/FAQ.md +5 -5
- package/QUICK-START.md +4 -4
- package/README.FLOW.md +237 -0
- package/README.md +153 -92
- package/agents/brainstormer.agent.md +71 -0
- package/agents/code-reviewer.agent.md +128 -0
- package/agents/database-admin.agent.md +91 -0
- package/agents/debugger.agent.md +128 -0
- package/agents/docs-manager.agent.md +121 -0
- package/agents/fullstack-developer.agent.md +96 -0
- package/agents/git-manager.agent.md +392 -0
- package/agents/mcp-manager.agent.md +93 -0
- package/agents/planner.agent.md +94 -0
- package/agents/project-manager.agent.md +124 -0
- package/agents/researcher.agent.md +32 -0
- package/agents/scout-external.agent.md +141 -0
- package/agents/scout.agent.md +107 -0
- package/agents/tester.agent.md +106 -0
- package/agents/ui-ux-designer.agent.md +225 -0
- package/collections/ck-core.collection.yml +30 -0
- package/collections/ck-development-rules.collection.yml +18 -0
- package/collections/ck-documentation.collection.yml +18 -0
- package/collections/ck-git-workflow.collection.yml +18 -0
- package/collections/ck-orchestration.collection.yml +22 -0
- package/collections/ck-ui-design.collection.yml +18 -0
- package/docs/README.md +85 -0
- package/docs/copilot-processing-flow.md +128 -0
- package/docs/migration-guide.md +12 -12
- package/instructions/ck-backend.instructions.md +48 -0
- package/instructions/ck-development.instructions.md +40 -0
- package/instructions/ck-frontend-design-pro.instructions.md +58 -0
- package/instructions/ck-frontend.instructions.md +44 -0
- package/instructions/ck-google-adk-python.instructions.md +242 -0
- package/instructions/ck-research.instructions.md +167 -0
- package/instructions/ck-testing.instructions.md +36 -0
- package/package.json +9 -2
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-01-restructure-folders.md +183 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-02-convert-agents.md +206 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-03-convert-commands-to-prompts.md +284 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-04-convert-skills-to-instructions.md +349 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-05-create-collections.md +320 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-06-update-cli-build-scripts.md +450 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/phase-07-update-documentation.md +407 -0
- package/plans/260108-0924-rebuild-cokit-awesome-copilot-format/plan.md +136 -0
- package/prompts/ck-ask.prompt.md +57 -0
- package/prompts/ck-bootstrap-auto-fast.prompt.md +108 -0
- package/prompts/ck-bootstrap-auto-parallel.prompt.md +66 -0
- package/prompts/ck-bootstrap-auto.prompt.md +114 -0
- package/prompts/ck-bootstrap.prompt.md +136 -0
- package/prompts/ck-brainstorm.prompt.md +68 -0
- package/prompts/ck-ck-help.prompt.md +114 -0
- package/prompts/ck-code-auto.prompt.md +171 -0
- package/prompts/ck-code-no-test.prompt.md +159 -0
- package/prompts/ck-code-parallel.prompt.md +56 -0
- package/prompts/ck-code.prompt.md +177 -0
- package/prompts/ck-coding-level.prompt.md +54 -0
- package/prompts/ck-cook-auto-fast.prompt.md +26 -0
- package/prompts/ck-cook-auto-parallel.prompt.md +49 -0
- package/prompts/ck-cook-auto.prompt.md +15 -0
- package/prompts/ck-cook.prompt.md +96 -0
- package/prompts/ck-debug.prompt.md +14 -0
- package/prompts/ck-design-3d.prompt.md +84 -0
- package/prompts/ck-design-describe.prompt.md +24 -0
- package/prompts/ck-design-fast.prompt.md +32 -0
- package/prompts/ck-design-good.prompt.md +36 -0
- package/prompts/ck-design-screenshot.prompt.md +35 -0
- package/prompts/ck-design-video.prompt.md +35 -0
- package/prompts/ck-docs-init.prompt.md +27 -0
- package/prompts/ck-docs-summarize.prompt.md +23 -0
- package/prompts/ck-docs-update.prompt.md +36 -0
- package/prompts/ck-fix-ci.prompt.md +18 -0
- package/prompts/ck-fix-fast.prompt.md +18 -0
- package/prompts/ck-fix-hard.prompt.md +36 -0
- package/prompts/ck-fix-logs.prompt.md +27 -0
- package/prompts/ck-fix-parallel.prompt.md +54 -0
- package/prompts/ck-fix-test.prompt.md +19 -0
- package/prompts/ck-fix-types.prompt.md +11 -0
- package/prompts/ck-fix-ui.prompt.md +49 -0
- package/prompts/ck-fix.prompt.md +44 -0
- package/prompts/ck-git-cm.prompt.md +8 -0
- package/prompts/ck-git-cp.prompt.md +7 -0
- package/prompts/ck-git-merge.prompt.md +41 -0
- package/prompts/ck-git-pr.prompt.md +49 -0
- package/prompts/ck-kanban.prompt.md +77 -0
- package/prompts/ck-plan-archive.prompt.md +58 -0
- package/prompts/ck-plan-ci.prompt.md +34 -0
- package/prompts/ck-plan-cro.prompt.md +66 -0
- package/prompts/ck-plan-fast.prompt.md +67 -0
- package/prompts/ck-plan-hard.prompt.md +89 -0
- package/prompts/ck-plan-parallel.prompt.md +126 -0
- package/prompts/ck-plan-two.prompt.md +43 -0
- package/prompts/ck-plan-validate.prompt.md +118 -0
- package/prompts/ck-plan.prompt.md +29 -1
- package/prompts/ck-preview.prompt.md +65 -0
- package/prompts/ck-review-codebase.prompt.md +44 -0
- package/prompts/ck-scout-ext.prompt.md +35 -0
- package/prompts/ck-scout.prompt.md +25 -0
- package/prompts/ck-skill-add.prompt.md +36 -0
- package/prompts/ck-skill-create.prompt.md +29 -0
- package/prompts/ck-skill-fix-logs.prompt.md +22 -0
- package/prompts/ck-skill-optimize-auto.prompt.md +25 -0
- package/prompts/ck-skill-optimize.prompt.md +34 -0
- package/prompts/ck-skill-plan.prompt.md +46 -0
- package/prompts/ck-test-ui.prompt.md +92 -0
- package/prompts/ck-test.prompt.md +10 -0
- package/prompts/ck-use-mcp.prompt.md +27 -0
- package/prompts/ck-watzup.prompt.md +11 -0
- package/prompts/ck-worktree.prompt.md +127 -0
- package/rules/README.agents.md +55 -0
- package/rules/README.collections.md +78 -0
- package/rules/README.copilot-instructions.md +66 -0
- package/rules/README.instructions.md +73 -0
- package/rules/README.md +39 -0
- package/rules/README.prompts.md +76 -0
- package/rules/README.skills.md +71 -0
- package/skills/ck-ai-artist/SKILL.md +73 -0
- package/skills/ck-ai-artist/references/advanced-techniques.md +184 -0
- package/skills/ck-ai-artist/references/domain-code.md +66 -0
- package/skills/ck-ai-artist/references/domain-data.md +72 -0
- package/skills/ck-ai-artist/references/domain-marketing.md +66 -0
- package/skills/ck-ai-artist/references/domain-patterns.md +33 -0
- package/skills/ck-ai-artist/references/domain-writing.md +68 -0
- package/skills/ck-ai-artist/references/image-prompting.md +141 -0
- package/skills/ck-ai-artist/references/llm-prompting.md +165 -0
- package/skills/ck-ai-artist/references/nano-banana.md +59 -0
- package/skills/ck-ai-artist/references/reasoning-techniques.md +201 -0
- package/skills/ck-backend-development/SKILL.md +93 -0
- package/skills/ck-backend-development/references/backend-api-design.md +495 -0
- package/skills/ck-backend-development/references/backend-architecture.md +454 -0
- package/skills/ck-backend-development/references/backend-authentication.md +338 -0
- package/skills/ck-backend-development/references/backend-code-quality.md +659 -0
- package/skills/ck-backend-development/references/backend-debugging.md +904 -0
- package/skills/ck-backend-development/references/backend-devops.md +494 -0
- package/skills/ck-backend-development/references/backend-mindset.md +387 -0
- package/skills/ck-backend-development/references/backend-performance.md +397 -0
- package/skills/ck-backend-development/references/backend-security.md +290 -0
- package/skills/ck-backend-development/references/backend-technologies.md +256 -0
- package/skills/ck-backend-development/references/backend-testing.md +429 -0
- package/skills/ck-better-auth/SKILL.md +202 -0
- package/skills/ck-better-auth/references/advanced-features.md +553 -0
- package/skills/ck-better-auth/references/database-integration.md +577 -0
- package/skills/ck-better-auth/references/email-password-auth.md +416 -0
- package/skills/ck-better-auth/references/oauth-providers.md +430 -0
- package/skills/ck-better-auth/scripts/.coverage +0 -0
- package/skills/ck-better-auth/scripts/better_auth_init.py +521 -0
- package/skills/ck-better-auth/scripts/requirements.txt +15 -0
- package/skills/ck-better-auth/scripts/tests/.coverage +0 -0
- package/skills/ck-better-auth/scripts/tests/test_better_auth_init.py +421 -0
- package/skills/ck-chrome-devtools/SKILL.md +470 -0
- package/skills/ck-chrome-devtools/references/cdp-domains.md +694 -0
- package/skills/ck-chrome-devtools/references/performance-guide.md +940 -0
- package/skills/ck-chrome-devtools/references/puppeteer-reference.md +953 -0
- package/skills/ck-chrome-devtools/scripts/README.md +272 -0
- package/skills/ck-chrome-devtools/scripts/__tests__/selector.test.js +210 -0
- package/skills/ck-chrome-devtools/scripts/aria-snapshot.js +362 -0
- package/skills/ck-chrome-devtools/scripts/click.js +83 -0
- package/skills/ck-chrome-devtools/scripts/console.js +79 -0
- package/skills/ck-chrome-devtools/scripts/evaluate.js +53 -0
- package/skills/ck-chrome-devtools/scripts/fill.js +76 -0
- package/skills/ck-chrome-devtools/scripts/inject-auth.js +229 -0
- package/skills/ck-chrome-devtools/scripts/install-deps.sh +181 -0
- package/skills/ck-chrome-devtools/scripts/install.sh +83 -0
- package/skills/ck-chrome-devtools/scripts/lib/browser.js +318 -0
- package/skills/ck-chrome-devtools/scripts/lib/selector.js +178 -0
- package/skills/ck-chrome-devtools/scripts/navigate.js +54 -0
- package/skills/ck-chrome-devtools/scripts/network.js +106 -0
- package/skills/ck-chrome-devtools/scripts/package-lock.json +1589 -0
- package/skills/ck-chrome-devtools/scripts/package.json +16 -0
- package/skills/ck-chrome-devtools/scripts/performance.js +149 -0
- package/skills/ck-chrome-devtools/scripts/screenshot.js +198 -0
- package/skills/ck-chrome-devtools/scripts/select-ref.js +131 -0
- package/skills/ck-chrome-devtools/scripts/snapshot.js +135 -0
- package/skills/ck-code-review/SKILL.md +143 -0
- package/skills/ck-code-review/references/code-review-reception.md +209 -0
- package/skills/ck-code-review/references/requesting-code-review.md +105 -0
- package/skills/ck-code-review/references/verification-before-completion.md +139 -0
- package/skills/ck-databases/SKILL.md +231 -0
- package/skills/ck-databases/references/mongodb-aggregation.md +447 -0
- package/skills/ck-databases/references/mongodb-atlas.md +465 -0
- package/skills/ck-databases/references/mongodb-crud.md +408 -0
- package/skills/ck-databases/references/mongodb-indexing.md +442 -0
- package/skills/ck-databases/references/postgresql-administration.md +594 -0
- package/skills/ck-databases/references/postgresql-performance.md +527 -0
- package/skills/ck-databases/references/postgresql-psql-cli.md +467 -0
- package/skills/ck-databases/references/postgresql-queries.md +475 -0
- package/skills/ck-databases/scripts/.coverage +0 -0
- package/skills/ck-databases/scripts/db_backup.py +502 -0
- package/skills/ck-databases/scripts/db_migrate.py +425 -0
- package/skills/ck-databases/scripts/db_performance_check.py +456 -0
- package/skills/ck-databases/scripts/requirements.txt +20 -0
- package/skills/ck-databases/scripts/tests/coverage-db.json +1 -0
- package/skills/ck-databases/scripts/tests/requirements.txt +4 -0
- package/skills/ck-databases/scripts/tests/test_db_backup.py +340 -0
- package/skills/ck-databases/scripts/tests/test_db_migrate.py +277 -0
- package/skills/ck-databases/scripts/tests/test_db_performance_check.py +370 -0
- package/skills/ck-debugging/SKILL.md +82 -0
- package/skills/ck-debugging/references/defense-in-depth.md +124 -0
- package/skills/ck-debugging/references/root-cause-tracing.md +122 -0
- package/skills/ck-debugging/references/systematic-debugging.md +102 -0
- package/skills/ck-debugging/references/verification.md +123 -0
- package/skills/ck-debugging/scripts/find-polluter.sh +63 -0
- package/skills/ck-debugging/scripts/find-polluter.test.md +102 -0
- package/skills/ck-devops/.env.example +76 -0
- package/skills/ck-devops/SKILL.md +283 -0
- package/skills/ck-devops/references/browser-rendering.md +305 -0
- package/skills/ck-devops/references/cloudflare-d1-kv.md +123 -0
- package/skills/ck-devops/references/cloudflare-platform.md +271 -0
- package/skills/ck-devops/references/cloudflare-r2-storage.md +280 -0
- package/skills/ck-devops/references/cloudflare-workers-advanced.md +312 -0
- package/skills/ck-devops/references/cloudflare-workers-apis.md +309 -0
- package/skills/ck-devops/references/cloudflare-workers-basics.md +418 -0
- package/skills/ck-devops/references/docker-basics.md +297 -0
- package/skills/ck-devops/references/docker-compose.md +292 -0
- package/skills/ck-devops/references/gcloud-platform.md +297 -0
- package/skills/ck-devops/references/gcloud-services.md +304 -0
- package/skills/ck-devops/scripts/cloudflare_deploy.py +269 -0
- package/skills/ck-devops/scripts/docker_optimize.py +331 -0
- package/skills/ck-devops/scripts/requirements.txt +20 -0
- package/skills/ck-devops/scripts/tests/requirements.txt +3 -0
- package/skills/ck-devops/scripts/tests/test_cloudflare_deploy.py +285 -0
- package/skills/ck-devops/scripts/tests/test_docker_optimize.py +436 -0
- package/skills/ck-docs-seeker/.env.example +15 -0
- package/skills/ck-docs-seeker/SKILL.md +96 -0
- package/skills/ck-docs-seeker/package.json +25 -0
- package/skills/ck-docs-seeker/references/advanced.md +79 -0
- package/skills/ck-docs-seeker/references/context7-patterns.md +68 -0
- package/skills/ck-docs-seeker/references/errors.md +68 -0
- package/skills/ck-docs-seeker/scripts/analyze-llms-txt.js +211 -0
- package/skills/ck-docs-seeker/scripts/detect-topic.js +172 -0
- package/skills/ck-docs-seeker/scripts/fetch-docs.js +213 -0
- package/skills/ck-docs-seeker/scripts/tests/run-tests.js +72 -0
- package/skills/ck-docs-seeker/scripts/tests/test-analyze-llms.js +119 -0
- package/skills/ck-docs-seeker/scripts/tests/test-detect-topic.js +112 -0
- package/skills/ck-docs-seeker/scripts/tests/test-fetch-docs.js +84 -0
- package/skills/ck-docs-seeker/scripts/utils/env-loader.js +94 -0
- package/skills/ck-docs-seeker/workflows/library-search.md +87 -0
- package/skills/ck-docs-seeker/workflows/repo-analysis.md +91 -0
- package/skills/ck-docs-seeker/workflows/topic-search.md +77 -0
- package/skills/ck-frontend-design/SKILL.md +79 -0
- package/skills/ck-frontend-design/references/analysis-best-practices.md +80 -0
- package/skills/ck-frontend-design/references/analysis-prompts.md +141 -0
- package/skills/ck-frontend-design/references/analysis-techniques.md +118 -0
- package/skills/ck-frontend-design/references/animejs.md +396 -0
- package/skills/ck-frontend-design/references/design-extraction-overview.md +71 -0
- package/skills/ck-frontend-design/references/extraction-best-practices.md +141 -0
- package/skills/ck-frontend-design/references/extraction-output-templates.md +162 -0
- package/skills/ck-frontend-design/references/extraction-prompts.md +127 -0
- package/skills/ck-frontend-design/references/technical-accessibility.md +119 -0
- package/skills/ck-frontend-design/references/technical-best-practices.md +97 -0
- package/skills/ck-frontend-design/references/technical-optimization.md +44 -0
- package/skills/ck-frontend-design/references/technical-overview.md +90 -0
- package/skills/ck-frontend-design/references/technical-workflows.md +150 -0
- package/skills/ck-frontend-design/references/visual-analysis-overview.md +95 -0
- package/skills/ck-frontend-development/SKILL.md +399 -0
- package/skills/ck-frontend-development/resources/common-patterns.md +331 -0
- package/skills/ck-frontend-development/resources/complete-examples.md +872 -0
- package/skills/ck-frontend-development/resources/component-patterns.md +502 -0
- package/skills/ck-frontend-development/resources/data-fetching.md +767 -0
- package/skills/ck-frontend-development/resources/file-organization.md +502 -0
- package/skills/ck-frontend-development/resources/loading-and-error-states.md +501 -0
- package/skills/ck-frontend-development/resources/performance.md +406 -0
- package/skills/ck-frontend-development/resources/routing-guide.md +364 -0
- package/skills/ck-frontend-development/resources/styling-guide.md +428 -0
- package/skills/ck-frontend-development/resources/typescript-standards.md +418 -0
- package/skills/ck-markdown-novel-viewer/SKILL.md +190 -0
- package/skills/ck-markdown-novel-viewer/assets/directory-browser.css +215 -0
- package/skills/ck-markdown-novel-viewer/assets/favicon.png +0 -0
- package/skills/ck-markdown-novel-viewer/assets/novel-theme.css +818 -0
- package/skills/ck-markdown-novel-viewer/assets/reader.js +262 -0
- package/skills/ck-markdown-novel-viewer/assets/template.html +80 -0
- package/skills/ck-markdown-novel-viewer/package.json +15 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +272 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/plan-navigator.cjs +509 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/port-finder.cjs +48 -0
- package/skills/ck-markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
- package/skills/ck-markdown-novel-viewer/scripts/server.cjs +411 -0
- package/skills/ck-markdown-novel-viewer/scripts/tests/server.test.cjs +283 -0
- package/skills/ck-markdown-novel-viewer/tests/dashboard-assets.test.cjs +340 -0
- package/skills/ck-markdown-novel-viewer/tests/dashboard-renderer.test.cjs +404 -0
- package/skills/ck-markdown-novel-viewer/tests/http-server.test.cjs +271 -0
- package/skills/ck-markdown-novel-viewer/tests/run-tests.cjs +51 -0
- package/skills/ck-markdown-novel-viewer/tests/test-framework.cjs +154 -0
- package/skills/ck-markdown-novel-viewer/tests/verify-xss.cjs +90 -0
- package/skills/ck-mcp-builder/LICENSE.txt +202 -0
- package/skills/ck-mcp-builder/SKILL.md +327 -0
- package/skills/ck-mcp-builder/reference/evaluation.md +602 -0
- package/skills/ck-mcp-builder/reference/mcp_best_practices.md +915 -0
- package/skills/ck-mcp-builder/reference/node_mcp_server.md +916 -0
- package/skills/ck-mcp-builder/reference/python_mcp_server.md +752 -0
- package/skills/ck-mcp-builder/scripts/connections.py +151 -0
- package/skills/ck-mcp-builder/scripts/evaluation.py +373 -0
- package/skills/ck-mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/ck-mcp-builder/scripts/requirements.txt +2 -0
- package/skills/ck-mcp-management/README.md +219 -0
- package/skills/ck-mcp-management/SKILL.md +209 -0
- package/skills/ck-mcp-management/assets/tools.json +3146 -0
- package/skills/ck-mcp-management/references/configuration.md +114 -0
- package/skills/ck-mcp-management/references/gemini-cli-integration.md +215 -0
- package/skills/ck-mcp-management/references/mcp-protocol.md +116 -0
- package/skills/ck-mcp-management/scripts/.env.example +10 -0
- package/skills/ck-mcp-management/scripts/cli.ts +195 -0
- package/skills/ck-mcp-management/scripts/dist/analyze-tools.js +70 -0
- package/skills/ck-mcp-management/scripts/dist/cli.js +160 -0
- package/skills/ck-mcp-management/scripts/dist/mcp-client.js +183 -0
- package/skills/ck-mcp-management/scripts/mcp-client.ts +230 -0
- package/skills/ck-mcp-management/scripts/package.json +20 -0
- package/skills/ck-mcp-management/scripts/tsconfig.json +15 -0
- package/skills/ck-media-processing/SKILL.md +90 -0
- package/skills/ck-media-processing/references/common-workflows.md +132 -0
- package/skills/ck-media-processing/references/ffmpeg-encoding.md +358 -0
- package/skills/ck-media-processing/references/ffmpeg-filters.md +503 -0
- package/skills/ck-media-processing/references/ffmpeg-streaming.md +403 -0
- package/skills/ck-media-processing/references/format-compatibility.md +375 -0
- package/skills/ck-media-processing/references/imagemagick-batch.md +612 -0
- package/skills/ck-media-processing/references/imagemagick-editing.md +623 -0
- package/skills/ck-media-processing/references/rmbg-background-removal.md +66 -0
- package/skills/ck-media-processing/references/troubleshooting.md +109 -0
- package/skills/ck-media-processing/scripts/README.md +111 -0
- package/skills/ck-media-processing/scripts/batch-remove-background.sh +124 -0
- package/skills/ck-media-processing/scripts/batch_resize.py +342 -0
- package/skills/ck-media-processing/scripts/media_convert.py +311 -0
- package/skills/ck-media-processing/scripts/remove-background.sh +96 -0
- package/skills/ck-media-processing/scripts/remove-bg-node.js +158 -0
- package/skills/ck-media-processing/scripts/requirements.txt +24 -0
- package/skills/ck-media-processing/scripts/tests/.coverage +0 -0
- package/skills/ck-media-processing/scripts/tests/requirements.txt +2 -0
- package/skills/ck-media-processing/scripts/tests/test_batch_resize.py +372 -0
- package/skills/ck-media-processing/scripts/tests/test_media_convert.py +259 -0
- package/skills/ck-media-processing/scripts/tests/test_video_optimize.py +397 -0
- package/skills/ck-media-processing/scripts/video_optimize.py +414 -0
- package/skills/ck-mobile-development/SKILL.md +210 -0
- package/skills/ck-mobile-development/references/mobile-android.md +604 -0
- package/skills/ck-mobile-development/references/mobile-best-practices.md +545 -0
- package/skills/ck-mobile-development/references/mobile-debugging.md +1089 -0
- package/skills/ck-mobile-development/references/mobile-frameworks.md +465 -0
- package/skills/ck-mobile-development/references/mobile-ios.md +496 -0
- package/skills/ck-mobile-development/references/mobile-mindset.md +544 -0
- package/skills/ck-payment-integration/README.md +185 -0
- package/skills/ck-payment-integration/SKILL.md +116 -0
- package/skills/ck-payment-integration/references/polar/benefits.md +396 -0
- package/skills/ck-payment-integration/references/polar/best-practices.md +482 -0
- package/skills/ck-payment-integration/references/polar/checkouts.md +266 -0
- package/skills/ck-payment-integration/references/polar/overview.md +184 -0
- package/skills/ck-payment-integration/references/polar/products.md +244 -0
- package/skills/ck-payment-integration/references/polar/sdk.md +436 -0
- package/skills/ck-payment-integration/references/polar/subscriptions.md +340 -0
- package/skills/ck-payment-integration/references/polar/webhooks.md +405 -0
- package/skills/ck-payment-integration/references/sepay/api.md +140 -0
- package/skills/ck-payment-integration/references/sepay/best-practices.md +337 -0
- package/skills/ck-payment-integration/references/sepay/overview.md +138 -0
- package/skills/ck-payment-integration/references/sepay/qr-codes.md +228 -0
- package/skills/ck-payment-integration/references/sepay/sdk.md +213 -0
- package/skills/ck-payment-integration/references/sepay/webhooks.md +208 -0
- package/skills/ck-payment-integration/scripts/.env.example +20 -0
- package/skills/ck-payment-integration/scripts/checkout-helper.js +244 -0
- package/skills/ck-payment-integration/scripts/package.json +17 -0
- package/skills/ck-payment-integration/scripts/polar-webhook-verify.js +202 -0
- package/skills/ck-payment-integration/scripts/sepay-webhook-verify.js +193 -0
- package/skills/ck-payment-integration/scripts/test-scripts.js +237 -0
- package/skills/ck-planning/SKILL.md +112 -0
- package/skills/ck-planning/references/codebase-understanding.md +62 -0
- package/skills/ck-planning/references/output-standards.md +127 -0
- package/skills/ck-planning/references/plan-organization.md +150 -0
- package/skills/ck-planning/references/research-phase.md +49 -0
- package/skills/ck-planning/references/solution-design.md +63 -0
- package/skills/ck-problem-solving/SKILL.md +95 -0
- package/skills/ck-problem-solving/references/attribution.md +69 -0
- package/skills/ck-problem-solving/references/collision-zone-thinking.md +79 -0
- package/skills/ck-problem-solving/references/inversion-exercise.md +91 -0
- package/skills/ck-problem-solving/references/meta-pattern-recognition.md +87 -0
- package/skills/ck-problem-solving/references/scale-game.md +95 -0
- package/skills/ck-problem-solving/references/simplification-cascades.md +80 -0
- package/skills/ck-problem-solving/references/when-stuck.md +72 -0
- package/skills/ck-repomix/SKILL.md +247 -0
- package/skills/ck-repomix/references/configuration.md +211 -0
- package/skills/ck-repomix/references/usage-patterns.md +232 -0
- package/skills/ck-repomix/scripts/.coverage +0 -0
- package/skills/ck-repomix/scripts/README.md +179 -0
- package/skills/ck-repomix/scripts/repomix_batch.py +455 -0
- package/skills/ck-repomix/scripts/repos.example.json +15 -0
- package/skills/ck-repomix/scripts/requirements.txt +15 -0
- package/skills/ck-repomix/scripts/tests/test_repomix_batch.py +531 -0
- package/skills/ck-sequential-thinking/.env.example +8 -0
- package/skills/ck-sequential-thinking/README.md +183 -0
- package/skills/{sequential-thinking → ck-sequential-thinking}/SKILL.md +14 -2
- package/skills/ck-sequential-thinking/package.json +31 -0
- package/skills/ck-sequential-thinking/references/advanced-strategies.md +79 -0
- package/skills/{sequential-thinking → ck-sequential-thinking}/references/advanced-techniques.md +2 -14
- package/skills/{sequential-thinking → ck-sequential-thinking}/references/core-patterns.md +8 -0
- package/skills/ck-sequential-thinking/references/examples-api.md +88 -0
- package/skills/ck-sequential-thinking/references/examples-architecture.md +94 -0
- package/skills/ck-sequential-thinking/references/examples-debug.md +90 -0
- package/skills/ck-sequential-thinking/scripts/format-thought.js +159 -0
- package/skills/ck-sequential-thinking/scripts/process-thought.js +236 -0
- package/skills/ck-sequential-thinking/tests/format-thought.test.js +133 -0
- package/skills/ck-sequential-thinking/tests/process-thought.test.js +215 -0
- package/skills/ck-shopify/README.md +66 -0
- package/skills/ck-shopify/SKILL.md +319 -0
- package/skills/ck-shopify/references/app-development.md +470 -0
- package/skills/ck-shopify/references/extensions.md +493 -0
- package/skills/ck-shopify/references/themes.md +498 -0
- package/skills/ck-shopify/scripts/.coverage +0 -0
- package/skills/ck-shopify/scripts/requirements.txt +19 -0
- package/skills/ck-shopify/scripts/shopify_init.py +423 -0
- package/skills/ck-shopify/scripts/tests/.coverage +0 -0
- package/skills/ck-shopify/scripts/tests/test_shopify_init.py +385 -0
- package/skills/ck-skill-creator/LICENSE.txt +202 -0
- package/skills/ck-skill-creator/SKILL.md +265 -0
- package/skills/ck-skill-creator/scripts/init_skill.py +303 -0
- package/skills/ck-skill-creator/scripts/package_skill.py +110 -0
- package/skills/ck-skill-creator/scripts/quick_validate.py +65 -0
- package/skills/ck-threejs/SKILL.md +87 -0
- package/skills/ck-threejs/references/01-getting-started.md +177 -0
- package/skills/ck-threejs/references/02-loaders.md +169 -0
- package/skills/ck-threejs/references/03-textures.md +170 -0
- package/skills/ck-threejs/references/04-cameras.md +195 -0
- package/skills/ck-threejs/references/05-lights.md +183 -0
- package/skills/ck-threejs/references/06-animations.md +214 -0
- package/skills/ck-threejs/references/07-math.md +260 -0
- package/skills/ck-threejs/references/08-interaction.md +267 -0
- package/skills/ck-threejs/references/09-postprocessing.md +240 -0
- package/skills/ck-threejs/references/10-controls.md +259 -0
- package/skills/ck-threejs/references/11-materials-advanced.md +270 -0
- package/skills/ck-threejs/references/12-performance.md +269 -0
- package/skills/ck-threejs/references/13-node-materials.md +298 -0
- package/skills/ck-threejs/references/14-physics-vr.md +304 -0
- package/skills/ck-threejs/references/15-specialized-loaders.md +333 -0
- package/skills/ck-threejs/references/16-webgpu.md +302 -0
- package/skills/ck-ui-styling/LICENSE.txt +202 -0
- package/skills/ck-ui-styling/SKILL.md +319 -0
- package/skills/ck-ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/ck-ui-styling/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/ck-ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/ck-ui-styling/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/ck-ui-styling/references/canvas-design-system.md +320 -0
- package/skills/ck-ui-styling/references/shadcn-accessibility.md +471 -0
- package/skills/ck-ui-styling/references/shadcn-components.md +424 -0
- package/skills/ck-ui-styling/references/shadcn-theming.md +373 -0
- package/skills/ck-ui-styling/references/tailwind-customization.md +483 -0
- package/skills/ck-ui-styling/references/tailwind-responsive.md +382 -0
- package/skills/ck-ui-styling/references/tailwind-utilities.md +455 -0
- package/skills/ck-ui-styling/scripts/.coverage +0 -0
- package/skills/ck-ui-styling/scripts/requirements.txt +17 -0
- package/skills/ck-ui-styling/scripts/shadcn_add.py +292 -0
- package/skills/ck-ui-styling/scripts/tailwind_config_gen.py +456 -0
- package/skills/ck-ui-styling/scripts/tests/coverage-ui.json +1 -0
- package/skills/ck-ui-styling/scripts/tests/requirements.txt +3 -0
- package/skills/ck-ui-styling/scripts/tests/test_shadcn_add.py +266 -0
- package/skills/ck-ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -0
- package/skills/ck-ui-ux-pro-max/SKILL.md +227 -0
- package/skills/ck-ui-ux-pro-max/data/charts.csv +26 -0
- package/skills/ck-ui-ux-pro-max/data/colors.csv +97 -0
- package/skills/ck-ui-ux-pro-max/data/landing.csv +31 -0
- package/skills/ck-ui-ux-pro-max/data/products.csv +97 -0
- package/skills/ck-ui-ux-pro-max/data/prompts.csv +24 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/html-tailwind.csv +51 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills/ck-ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills/ck-ui-ux-pro-max/data/styles.csv +59 -0
- package/skills/ck-ui-ux-pro-max/data/typography.csv +58 -0
- package/skills/ck-ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills/ck-ui-ux-pro-max/scripts/core.py +236 -0
- package/skills/ck-ui-ux-pro-max/scripts/search.py +76 -0
- package/skills/ck-web-frameworks/SKILL.md +322 -0
- package/skills/ck-web-frameworks/references/nextjs-app-router.md +465 -0
- package/skills/ck-web-frameworks/references/nextjs-data-fetching.md +459 -0
- package/skills/ck-web-frameworks/references/nextjs-optimization.md +511 -0
- package/skills/ck-web-frameworks/references/nextjs-server-components.md +495 -0
- package/skills/ck-web-frameworks/references/remix-icon-integration.md +603 -0
- package/skills/ck-web-frameworks/references/turborepo-caching.md +551 -0
- package/skills/ck-web-frameworks/references/turborepo-pipelines.md +517 -0
- package/skills/ck-web-frameworks/references/turborepo-setup.md +542 -0
- package/skills/ck-web-frameworks/scripts/.coverage +0 -0
- package/skills/ck-web-frameworks/scripts/__init__.py +0 -0
- package/skills/ck-web-frameworks/scripts/nextjs_init.py +547 -0
- package/skills/ck-web-frameworks/scripts/requirements.txt +16 -0
- package/skills/ck-web-frameworks/scripts/tests/coverage-web.json +1 -0
- package/skills/ck-web-frameworks/scripts/tests/requirements.txt +3 -0
- package/skills/ck-web-frameworks/scripts/tests/test_nextjs_init.py +319 -0
- package/skills/ck-web-frameworks/scripts/tests/test_turborepo_migrate.py +374 -0
- package/skills/ck-web-frameworks/scripts/turborepo_migrate.py +394 -0
- package/src/commands/init.js +62 -31
- package/src/utils/paths.js +35 -4
- package/skills/code-review/SKILL.md +0 -86
- package/skills/code-review/references/code-review-reception.md +0 -76
- package/skills/code-review/references/verification-before-completion.md +0 -86
- package/skills/debugging/SKILL.md +0 -70
- package/skills/debugging/references/root-cause-tracing.md +0 -65
- package/skills/debugging/references/systematic-debugging.md +0 -74
- package/skills/debugging/references/verification.md +0 -74
- package/skills/docs-seeker/SKILL.md +0 -91
- package/skills/planning/SKILL.md +0 -82
- package/skills/planning/references/plan-organization.md +0 -88
- package/skills/planning/references/research-phase.md +0 -56
- package/skills/planning/references/solution-design.md +0 -65
- package/templates/repo/prompts/code.prompt.md +0 -40
- package/templates/repo/prompts/docs.prompt.md +0 -29
- package/templates/repo/prompts/fix.prompt.md +0 -35
- package/templates/repo/prompts/plan.prompt.md +0 -41
- package/templates/repo/prompts/review.prompt.md +0 -38
- package/templates/repo/prompts/test.prompt.md +0 -29
- /package/skills/{docs-seeker → ck-docs-seeker}/references/search-patterns.md +0 -0
- /package/skills/{docs-seeker → ck-docs-seeker}/references/source-evaluation.md +0 -0
- /package/templates/repo/.github/instructions/{backend.instructions.md → ck-backend.instructions.md} +0 -0
- /package/templates/repo/.github/instructions/{development.instructions.md → ck-development.instructions.md} +0 -0
- /package/templates/repo/.github/instructions/{frontend.instructions.md → ck-frontend.instructions.md} +0 -0
- /package/templates/repo/.github/instructions/{testing.instructions.md → ck-testing.instructions.md} +0 -0
- /package/templates/repo/.github/prompts/{code.prompt.md → ck-code.prompt.md} +0 -0
- /package/templates/repo/.github/prompts/{docs.prompt.md → ck-docs.prompt.md} +0 -0
- /package/templates/repo/.github/prompts/{fix.prompt.md → ck-fix.prompt.md} +0 -0
- /package/templates/repo/.github/prompts/{plan.prompt.md → ck-plan.prompt.md} +0 -0
- /package/templates/repo/.github/prompts/{review.prompt.md → ck-review.prompt.md} +0 -0
- /package/templates/repo/.github/prompts/{test.prompt.md → ck-test.prompt.md} +0 -0
- /package/templates/repo/.github/skills/{code-review → ck-code-review}/SKILL.md +0 -0
- /package/templates/repo/.github/skills/{debugging → ck-debugging}/SKILL.md +0 -0
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
# Cloudflare Workers Basics
|
|
2
|
+
|
|
3
|
+
Getting started with Cloudflare Workers: serverless functions that run on edge network across 300+ cities.
|
|
4
|
+
|
|
5
|
+
## Handler Types
|
|
6
|
+
|
|
7
|
+
### Fetch Handler (HTTP Requests)
|
|
8
|
+
```typescript
|
|
9
|
+
export default {
|
|
10
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
|
|
11
|
+
return new Response('Hello World!');
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### Scheduled Handler (Cron Jobs)
|
|
17
|
+
```typescript
|
|
18
|
+
export default {
|
|
19
|
+
async scheduled(event: ScheduledEvent, env: Env, ctx: ExecutionContext): Promise<void> {
|
|
20
|
+
await fetch('https://api.example.com/cleanup');
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Configure in wrangler.toml:**
|
|
26
|
+
```toml
|
|
27
|
+
[triggers]
|
|
28
|
+
crons = ["0 0 * * *"] # Daily at midnight
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Queue Handler (Message Processing)
|
|
32
|
+
```typescript
|
|
33
|
+
export default {
|
|
34
|
+
async queue(batch: MessageBatch, env: Env, ctx: ExecutionContext): Promise<void> {
|
|
35
|
+
for (const message of batch.messages) {
|
|
36
|
+
await processMessage(message.body);
|
|
37
|
+
message.ack(); // Acknowledge success
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Email Handler (Email Routing)
|
|
44
|
+
```typescript
|
|
45
|
+
export default {
|
|
46
|
+
async email(message: ForwardableEmailMessage, env: Env, ctx: ExecutionContext): Promise<void> {
|
|
47
|
+
await message.forward('destination@example.com');
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Request/Response Basics
|
|
53
|
+
|
|
54
|
+
### Parsing Request
|
|
55
|
+
```typescript
|
|
56
|
+
const url = new URL(request.url);
|
|
57
|
+
const method = request.method;
|
|
58
|
+
const headers = request.headers;
|
|
59
|
+
|
|
60
|
+
// Query parameters
|
|
61
|
+
const name = url.searchParams.get('name');
|
|
62
|
+
|
|
63
|
+
// JSON body
|
|
64
|
+
const data = await request.json();
|
|
65
|
+
|
|
66
|
+
// Text body
|
|
67
|
+
const text = await request.text();
|
|
68
|
+
|
|
69
|
+
// Form data
|
|
70
|
+
const formData = await request.formData();
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Creating Response
|
|
74
|
+
```typescript
|
|
75
|
+
// Text response
|
|
76
|
+
return new Response('Hello', { status: 200 });
|
|
77
|
+
|
|
78
|
+
// JSON response
|
|
79
|
+
return new Response(JSON.stringify({ message: 'Hello' }), {
|
|
80
|
+
status: 200,
|
|
81
|
+
headers: { 'Content-Type': 'application/json' }
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// Stream response
|
|
85
|
+
return new Response(readable, {
|
|
86
|
+
headers: { 'Content-Type': 'text/plain' }
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
// Redirect
|
|
90
|
+
return Response.redirect('https://example.com', 302);
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Routing Patterns
|
|
94
|
+
|
|
95
|
+
### URL-Based Routing
|
|
96
|
+
```typescript
|
|
97
|
+
export default {
|
|
98
|
+
async fetch(request: Request): Promise<Response> {
|
|
99
|
+
const url = new URL(request.url);
|
|
100
|
+
|
|
101
|
+
switch (url.pathname) {
|
|
102
|
+
case '/':
|
|
103
|
+
return new Response('Home');
|
|
104
|
+
case '/about':
|
|
105
|
+
return new Response('About');
|
|
106
|
+
default:
|
|
107
|
+
return new Response('Not Found', { status: 404 });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Using Hono Framework (Recommended)
|
|
114
|
+
```typescript
|
|
115
|
+
import { Hono } from 'hono';
|
|
116
|
+
|
|
117
|
+
const app = new Hono();
|
|
118
|
+
|
|
119
|
+
app.get('/', (c) => c.text('Home'));
|
|
120
|
+
app.get('/api/users/:id', async (c) => {
|
|
121
|
+
const id = c.req.param('id');
|
|
122
|
+
const user = await getUser(id);
|
|
123
|
+
return c.json(user);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
export default app;
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Working with Bindings
|
|
130
|
+
|
|
131
|
+
### Environment Variables
|
|
132
|
+
```toml
|
|
133
|
+
# wrangler.toml
|
|
134
|
+
[vars]
|
|
135
|
+
API_URL = "https://api.example.com"
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
const apiUrl = env.API_URL;
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### KV Namespace
|
|
143
|
+
```typescript
|
|
144
|
+
// Put with TTL
|
|
145
|
+
await env.KV.put('session:token', JSON.stringify(data), {
|
|
146
|
+
expirationTtl: 3600
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// Get
|
|
150
|
+
const data = await env.KV.get('session:token', 'json');
|
|
151
|
+
|
|
152
|
+
// Delete
|
|
153
|
+
await env.KV.delete('session:token');
|
|
154
|
+
|
|
155
|
+
// List with prefix
|
|
156
|
+
const list = await env.KV.list({ prefix: 'user:123:' });
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### D1 Database
|
|
160
|
+
```typescript
|
|
161
|
+
// Query
|
|
162
|
+
const result = await env.DB.prepare(
|
|
163
|
+
'SELECT * FROM users WHERE id = ?'
|
|
164
|
+
).bind(userId).first();
|
|
165
|
+
|
|
166
|
+
// Insert
|
|
167
|
+
await env.DB.prepare(
|
|
168
|
+
'INSERT INTO users (name, email) VALUES (?, ?)'
|
|
169
|
+
).bind('Alice', 'alice@example.com').run();
|
|
170
|
+
|
|
171
|
+
// Batch (atomic)
|
|
172
|
+
await env.DB.batch([
|
|
173
|
+
env.DB.prepare('UPDATE accounts SET balance = balance - 100 WHERE id = ?').bind(1),
|
|
174
|
+
env.DB.prepare('UPDATE accounts SET balance = balance + 100 WHERE id = ?').bind(2)
|
|
175
|
+
]);
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### R2 Bucket
|
|
179
|
+
```typescript
|
|
180
|
+
// Put object
|
|
181
|
+
await env.R2_BUCKET.put('path/to/file.jpg', fileBuffer, {
|
|
182
|
+
httpMetadata: {
|
|
183
|
+
contentType: 'image/jpeg'
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
// Get object
|
|
188
|
+
const object = await env.R2_BUCKET.get('path/to/file.jpg');
|
|
189
|
+
if (!object) {
|
|
190
|
+
return new Response('Not found', { status: 404 });
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Stream response
|
|
194
|
+
return new Response(object.body, {
|
|
195
|
+
headers: {
|
|
196
|
+
'Content-Type': object.httpMetadata?.contentType || 'application/octet-stream'
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
// Delete
|
|
201
|
+
await env.R2_BUCKET.delete('path/to/file.jpg');
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Context API
|
|
205
|
+
|
|
206
|
+
### waitUntil (Background Tasks)
|
|
207
|
+
```typescript
|
|
208
|
+
export default {
|
|
209
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
|
|
210
|
+
// Run analytics after response sent
|
|
211
|
+
ctx.waitUntil(
|
|
212
|
+
fetch('https://analytics.example.com/log', {
|
|
213
|
+
method: 'POST',
|
|
214
|
+
body: JSON.stringify({ url: request.url })
|
|
215
|
+
})
|
|
216
|
+
);
|
|
217
|
+
|
|
218
|
+
return new Response('OK');
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### passThroughOnException
|
|
224
|
+
```typescript
|
|
225
|
+
// Continue to origin on error
|
|
226
|
+
ctx.passThroughOnException();
|
|
227
|
+
|
|
228
|
+
// Your code that might throw
|
|
229
|
+
const data = await riskyOperation();
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Error Handling
|
|
233
|
+
|
|
234
|
+
```typescript
|
|
235
|
+
export default {
|
|
236
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
|
|
237
|
+
try {
|
|
238
|
+
const response = await processRequest(request, env);
|
|
239
|
+
return response;
|
|
240
|
+
} catch (error) {
|
|
241
|
+
console.error('Error:', error);
|
|
242
|
+
|
|
243
|
+
// Log to external service
|
|
244
|
+
ctx.waitUntil(
|
|
245
|
+
fetch('https://logging.example.com/error', {
|
|
246
|
+
method: 'POST',
|
|
247
|
+
body: JSON.stringify({
|
|
248
|
+
error: error.message,
|
|
249
|
+
url: request.url
|
|
250
|
+
})
|
|
251
|
+
})
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
return new Response('Internal Server Error', { status: 500 });
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## CORS
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
function corsHeaders(origin: string) {
|
|
264
|
+
return {
|
|
265
|
+
'Access-Control-Allow-Origin': origin,
|
|
266
|
+
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
|
|
267
|
+
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
|
|
268
|
+
'Access-Control-Max-Age': '86400'
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
export default {
|
|
273
|
+
async fetch(request: Request): Promise<Response> {
|
|
274
|
+
const origin = request.headers.get('Origin') || '*';
|
|
275
|
+
|
|
276
|
+
// Handle preflight
|
|
277
|
+
if (request.method === 'OPTIONS') {
|
|
278
|
+
return new Response(null, { headers: corsHeaders(origin) });
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Handle request
|
|
282
|
+
const response = await handleRequest(request);
|
|
283
|
+
const headers = new Headers(response.headers);
|
|
284
|
+
Object.entries(corsHeaders(origin)).forEach(([key, value]) => {
|
|
285
|
+
headers.set(key, value);
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
return new Response(response.body, {
|
|
289
|
+
status: response.status,
|
|
290
|
+
headers
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
## Cache API
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
export default {
|
|
300
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
|
|
301
|
+
const cache = caches.default;
|
|
302
|
+
const cacheKey = new Request(request.url);
|
|
303
|
+
|
|
304
|
+
// Check cache
|
|
305
|
+
let response = await cache.match(cacheKey);
|
|
306
|
+
if (response) return response;
|
|
307
|
+
|
|
308
|
+
// Fetch from origin
|
|
309
|
+
response = await fetch(request);
|
|
310
|
+
|
|
311
|
+
// Cache response
|
|
312
|
+
ctx.waitUntil(cache.put(cacheKey, response.clone()));
|
|
313
|
+
|
|
314
|
+
return response;
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
## Secrets Management
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
# Add secret
|
|
323
|
+
wrangler secret put API_KEY
|
|
324
|
+
# Enter value when prompted
|
|
325
|
+
|
|
326
|
+
# Use in Worker
|
|
327
|
+
const apiKey = env.API_KEY;
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
## Local Development
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
# Start local dev server
|
|
334
|
+
wrangler dev
|
|
335
|
+
|
|
336
|
+
# Test with remote edge
|
|
337
|
+
wrangler dev --remote
|
|
338
|
+
|
|
339
|
+
# Custom port
|
|
340
|
+
wrangler dev --port 8080
|
|
341
|
+
|
|
342
|
+
# Access at http://localhost:8787
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
## Deployment
|
|
346
|
+
|
|
347
|
+
```bash
|
|
348
|
+
# Deploy to production
|
|
349
|
+
wrangler deploy
|
|
350
|
+
|
|
351
|
+
# Deploy to specific environment
|
|
352
|
+
wrangler deploy --env staging
|
|
353
|
+
|
|
354
|
+
# Preview deployment
|
|
355
|
+
wrangler deploy --dry-run
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
## Common Patterns
|
|
359
|
+
|
|
360
|
+
### API Gateway
|
|
361
|
+
```typescript
|
|
362
|
+
import { Hono } from 'hono';
|
|
363
|
+
|
|
364
|
+
const app = new Hono();
|
|
365
|
+
|
|
366
|
+
app.get('/api/users', async (c) => {
|
|
367
|
+
const users = await c.env.DB.prepare('SELECT * FROM users').all();
|
|
368
|
+
return c.json(users.results);
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
app.post('/api/users', async (c) => {
|
|
372
|
+
const { name, email } = await c.req.json();
|
|
373
|
+
await c.env.DB.prepare(
|
|
374
|
+
'INSERT INTO users (name, email) VALUES (?, ?)'
|
|
375
|
+
).bind(name, email).run();
|
|
376
|
+
return c.json({ success: true }, 201);
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
export default app;
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### Rate Limiting
|
|
383
|
+
```typescript
|
|
384
|
+
async function rateLimit(ip: string, env: Env): Promise<boolean> {
|
|
385
|
+
const key = `ratelimit:${ip}`;
|
|
386
|
+
const limit = 100;
|
|
387
|
+
const window = 60;
|
|
388
|
+
|
|
389
|
+
const current = await env.KV.get(key);
|
|
390
|
+
const count = current ? parseInt(current) : 0;
|
|
391
|
+
|
|
392
|
+
if (count >= limit) return false;
|
|
393
|
+
|
|
394
|
+
await env.KV.put(key, (count + 1).toString(), {
|
|
395
|
+
expirationTtl: window
|
|
396
|
+
});
|
|
397
|
+
|
|
398
|
+
return true;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
export default {
|
|
402
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
403
|
+
const ip = request.headers.get('CF-Connecting-IP') || 'unknown';
|
|
404
|
+
|
|
405
|
+
if (!await rateLimit(ip, env)) {
|
|
406
|
+
return new Response('Rate limit exceeded', { status: 429 });
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
return new Response('OK');
|
|
410
|
+
}
|
|
411
|
+
};
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
## Resources
|
|
415
|
+
|
|
416
|
+
- Docs: https://developers.cloudflare.com/workers/
|
|
417
|
+
- Examples: https://developers.cloudflare.com/workers/examples/
|
|
418
|
+
- Runtime APIs: https://developers.cloudflare.com/workers/runtime-apis/
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
# Docker Basics
|
|
2
|
+
|
|
3
|
+
Core concepts and workflows for Docker containerization.
|
|
4
|
+
|
|
5
|
+
## Core Concepts
|
|
6
|
+
|
|
7
|
+
**Containers:** Lightweight, isolated processes bundling apps with dependencies. Ephemeral by default.
|
|
8
|
+
|
|
9
|
+
**Images:** Read-only blueprints for containers. Layered filesystem for reusability.
|
|
10
|
+
|
|
11
|
+
**Volumes:** Persistent storage surviving container deletion.
|
|
12
|
+
|
|
13
|
+
**Networks:** Enable container communication.
|
|
14
|
+
|
|
15
|
+
## Dockerfile Best Practices
|
|
16
|
+
|
|
17
|
+
### Essential Instructions
|
|
18
|
+
```dockerfile
|
|
19
|
+
FROM node:20-alpine # Base image (use specific versions)
|
|
20
|
+
WORKDIR /app # Working directory
|
|
21
|
+
COPY package*.json ./ # Copy dependency files first
|
|
22
|
+
RUN npm install --production # Execute build commands
|
|
23
|
+
COPY . . # Copy application code
|
|
24
|
+
ENV NODE_ENV=production # Environment variables
|
|
25
|
+
EXPOSE 3000 # Document exposed ports
|
|
26
|
+
USER node # Run as non-root (security)
|
|
27
|
+
CMD ["node", "server.js"] # Default command
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Multi-Stage Builds (Production)
|
|
31
|
+
```dockerfile
|
|
32
|
+
# Stage 1: Build
|
|
33
|
+
FROM node:20-alpine AS build
|
|
34
|
+
WORKDIR /app
|
|
35
|
+
COPY package*.json ./
|
|
36
|
+
RUN npm install
|
|
37
|
+
COPY . .
|
|
38
|
+
RUN npm run build
|
|
39
|
+
|
|
40
|
+
# Stage 2: Production
|
|
41
|
+
FROM node:20-alpine AS production
|
|
42
|
+
WORKDIR /app
|
|
43
|
+
COPY --from=build /app/dist ./dist
|
|
44
|
+
COPY --from=build /app/node_modules ./node_modules
|
|
45
|
+
USER node
|
|
46
|
+
EXPOSE 3000
|
|
47
|
+
CMD ["node", "dist/server.js"]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Benefits: Smaller images, improved security, no build tools in production.
|
|
51
|
+
|
|
52
|
+
### .dockerignore
|
|
53
|
+
```
|
|
54
|
+
node_modules
|
|
55
|
+
.git
|
|
56
|
+
.env
|
|
57
|
+
*.log
|
|
58
|
+
.DS_Store
|
|
59
|
+
README.md
|
|
60
|
+
docker-compose.yml
|
|
61
|
+
dist
|
|
62
|
+
coverage
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Building Images
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Build with tag
|
|
69
|
+
docker build -t myapp:1.0 .
|
|
70
|
+
|
|
71
|
+
# Build targeting specific stage
|
|
72
|
+
docker build -t myapp:dev --target build .
|
|
73
|
+
|
|
74
|
+
# Build for multiple platforms
|
|
75
|
+
docker buildx build --platform linux/amd64,linux/arm64 -t myapp:1.0 .
|
|
76
|
+
|
|
77
|
+
# View layers
|
|
78
|
+
docker image history myapp:1.0
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Running Containers
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# Basic run
|
|
85
|
+
docker run myapp:1.0
|
|
86
|
+
|
|
87
|
+
# Background (detached)
|
|
88
|
+
docker run -d --name myapp myapp:1.0
|
|
89
|
+
|
|
90
|
+
# Port mapping (host:container)
|
|
91
|
+
docker run -p 8080:3000 myapp:1.0
|
|
92
|
+
|
|
93
|
+
# Environment variables
|
|
94
|
+
docker run -e NODE_ENV=production myapp:1.0
|
|
95
|
+
|
|
96
|
+
# Volume mount (named volume)
|
|
97
|
+
docker run -v mydata:/app/data myapp:1.0
|
|
98
|
+
|
|
99
|
+
# Bind mount (development)
|
|
100
|
+
docker run -v $(pwd)/src:/app/src myapp:1.0
|
|
101
|
+
|
|
102
|
+
# Resource limits
|
|
103
|
+
docker run --memory 512m --cpus 0.5 myapp:1.0
|
|
104
|
+
|
|
105
|
+
# Interactive terminal
|
|
106
|
+
docker run -it myapp:1.0 /bin/sh
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Container Management
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# List containers
|
|
113
|
+
docker ps
|
|
114
|
+
docker ps -a
|
|
115
|
+
|
|
116
|
+
# Logs
|
|
117
|
+
docker logs myapp
|
|
118
|
+
docker logs -f myapp # Follow
|
|
119
|
+
docker logs --tail 100 myapp # Last 100 lines
|
|
120
|
+
|
|
121
|
+
# Execute command
|
|
122
|
+
docker exec myapp ls /app
|
|
123
|
+
docker exec -it myapp /bin/sh # Interactive shell
|
|
124
|
+
|
|
125
|
+
# Stop/start
|
|
126
|
+
docker stop myapp
|
|
127
|
+
docker start myapp
|
|
128
|
+
|
|
129
|
+
# Remove
|
|
130
|
+
docker rm myapp
|
|
131
|
+
docker rm -f myapp # Force remove running
|
|
132
|
+
|
|
133
|
+
# Inspect
|
|
134
|
+
docker inspect myapp
|
|
135
|
+
|
|
136
|
+
# Monitor resources
|
|
137
|
+
docker stats myapp
|
|
138
|
+
|
|
139
|
+
# Copy files
|
|
140
|
+
docker cp myapp:/app/logs ./logs
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Volume Management
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# Create volume
|
|
147
|
+
docker volume create mydata
|
|
148
|
+
|
|
149
|
+
# List volumes
|
|
150
|
+
docker volume ls
|
|
151
|
+
|
|
152
|
+
# Remove volume
|
|
153
|
+
docker volume rm mydata
|
|
154
|
+
|
|
155
|
+
# Remove unused volumes
|
|
156
|
+
docker volume prune
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Network Management
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# Create network
|
|
163
|
+
docker network create my-network
|
|
164
|
+
|
|
165
|
+
# List networks
|
|
166
|
+
docker network ls
|
|
167
|
+
|
|
168
|
+
# Connect container
|
|
169
|
+
docker network connect my-network myapp
|
|
170
|
+
|
|
171
|
+
# Disconnect
|
|
172
|
+
docker network disconnect my-network myapp
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Language-Specific Dockerfiles
|
|
176
|
+
|
|
177
|
+
### Node.js
|
|
178
|
+
```dockerfile
|
|
179
|
+
FROM node:20-alpine AS build
|
|
180
|
+
WORKDIR /app
|
|
181
|
+
COPY package*.json ./
|
|
182
|
+
RUN npm ci --only=production
|
|
183
|
+
COPY . .
|
|
184
|
+
RUN npm run build
|
|
185
|
+
|
|
186
|
+
FROM node:20-alpine
|
|
187
|
+
WORKDIR /app
|
|
188
|
+
COPY --from=build /app/dist ./dist
|
|
189
|
+
COPY --from=build /app/node_modules ./node_modules
|
|
190
|
+
USER node
|
|
191
|
+
CMD ["node", "dist/server.js"]
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Python
|
|
195
|
+
```dockerfile
|
|
196
|
+
FROM python:3.11-slim AS build
|
|
197
|
+
WORKDIR /app
|
|
198
|
+
COPY requirements.txt .
|
|
199
|
+
RUN pip install --no-cache-dir -r requirements.txt
|
|
200
|
+
|
|
201
|
+
FROM python:3.11-slim
|
|
202
|
+
WORKDIR /app
|
|
203
|
+
COPY --from=build /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
|
|
204
|
+
COPY . .
|
|
205
|
+
RUN adduser --disabled-password appuser
|
|
206
|
+
USER appuser
|
|
207
|
+
CMD ["python", "app.py"]
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Go
|
|
211
|
+
```dockerfile
|
|
212
|
+
FROM golang:1.21-alpine AS build
|
|
213
|
+
WORKDIR /app
|
|
214
|
+
COPY go.mod go.sum ./
|
|
215
|
+
RUN go mod download
|
|
216
|
+
COPY . .
|
|
217
|
+
RUN CGO_ENABLED=0 go build -o main .
|
|
218
|
+
|
|
219
|
+
FROM scratch
|
|
220
|
+
COPY --from=build /app/main /main
|
|
221
|
+
CMD ["/main"]
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Security Hardening
|
|
225
|
+
|
|
226
|
+
```dockerfile
|
|
227
|
+
# Use specific versions
|
|
228
|
+
FROM node:20.11.0-alpine3.19
|
|
229
|
+
|
|
230
|
+
# Create non-root user
|
|
231
|
+
RUN addgroup -g 1001 -S nodejs && \
|
|
232
|
+
adduser -S nodejs -u 1001
|
|
233
|
+
|
|
234
|
+
# Set ownership
|
|
235
|
+
COPY --chown=nodejs:nodejs . .
|
|
236
|
+
|
|
237
|
+
# Switch to non-root
|
|
238
|
+
USER nodejs
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
## Troubleshooting
|
|
242
|
+
|
|
243
|
+
### Container exits immediately
|
|
244
|
+
```bash
|
|
245
|
+
docker logs myapp
|
|
246
|
+
docker run -it myapp /bin/sh
|
|
247
|
+
docker run -it --entrypoint /bin/sh myapp
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Cannot connect
|
|
251
|
+
```bash
|
|
252
|
+
docker ps
|
|
253
|
+
docker port myapp
|
|
254
|
+
docker network inspect bridge
|
|
255
|
+
docker inspect myapp | grep IPAddress
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Out of disk space
|
|
259
|
+
```bash
|
|
260
|
+
docker system df
|
|
261
|
+
docker system prune -a
|
|
262
|
+
docker volume prune
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Build cache issues
|
|
266
|
+
```bash
|
|
267
|
+
docker build --no-cache -t myapp .
|
|
268
|
+
docker builder prune
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## Best Practices
|
|
272
|
+
|
|
273
|
+
- Use specific image versions, not `latest`
|
|
274
|
+
- Run as non-root user
|
|
275
|
+
- Multi-stage builds to minimize size
|
|
276
|
+
- Implement health checks
|
|
277
|
+
- Set resource limits
|
|
278
|
+
- Keep images under 500MB
|
|
279
|
+
- Scan for vulnerabilities: `docker scout cves myapp:1.0`
|
|
280
|
+
|
|
281
|
+
## Quick Reference
|
|
282
|
+
|
|
283
|
+
| Task | Command |
|
|
284
|
+
|------|---------|
|
|
285
|
+
| Build | `docker build -t myapp:1.0 .` |
|
|
286
|
+
| Run | `docker run -d -p 8080:3000 myapp:1.0` |
|
|
287
|
+
| Logs | `docker logs -f myapp` |
|
|
288
|
+
| Shell | `docker exec -it myapp /bin/sh` |
|
|
289
|
+
| Stop | `docker stop myapp` |
|
|
290
|
+
| Remove | `docker rm myapp` |
|
|
291
|
+
| Clean | `docker system prune -a` |
|
|
292
|
+
|
|
293
|
+
## Resources
|
|
294
|
+
|
|
295
|
+
- Docs: https://docs.docker.com
|
|
296
|
+
- Best Practices: https://docs.docker.com/develop/dev-best-practices/
|
|
297
|
+
- Dockerfile Reference: https://docs.docker.com/engine/reference/builder/
|