javi-forge 1.2.0 → 1.4.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/ci-local/ci-local.sh +29 -9
- package/ci-local/hooks/commit-msg +0 -0
- package/ci-local/hooks/pre-commit +1 -1
- package/ci-local/hooks/pre-push +0 -0
- package/ci-local/install.sh +0 -0
- package/ci-local/lib/common.sh +183 -0
- package/dist/__integration__/helpers.d.ts +20 -0
- package/dist/__integration__/helpers.d.ts.map +1 -0
- package/dist/__integration__/helpers.js +31 -0
- package/dist/__integration__/helpers.js.map +1 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/ci.d.ts.map +1 -0
- package/dist/commands/ci.js +13 -8
- package/dist/commands/ci.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +1 -3
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +14 -6
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/llmstxt.d.ts.map +1 -0
- package/dist/commands/llmstxt.js.map +1 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/constants.d.ts +0 -4
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +0 -4
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -11
- package/dist/index.js.map +1 -0
- package/dist/lib/common.d.ts.map +1 -0
- package/dist/lib/common.js.map +1 -0
- package/dist/lib/docker.d.ts +2 -0
- package/dist/lib/docker.d.ts.map +1 -0
- package/dist/lib/docker.js +2 -1
- package/dist/lib/docker.js.map +1 -0
- package/dist/lib/frontmatter.d.ts.map +1 -0
- package/dist/lib/frontmatter.js.map +1 -0
- package/dist/lib/plugin.d.ts.map +1 -0
- package/dist/lib/plugin.js.map +1 -0
- package/dist/lib/template.d.ts.map +1 -0
- package/dist/lib/template.js.map +1 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/AnalyzeUI.d.ts.map +1 -0
- package/dist/ui/AnalyzeUI.js.map +1 -0
- package/dist/ui/App.d.ts.map +1 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/CI.d.ts.map +1 -0
- package/dist/ui/CI.js.map +1 -0
- package/dist/ui/CIContext.d.ts.map +1 -0
- package/dist/ui/CIContext.js.map +1 -0
- package/dist/ui/CISelector.d.ts.map +1 -0
- package/dist/ui/CISelector.js.map +1 -0
- package/dist/ui/Doctor.d.ts.map +1 -0
- package/dist/ui/Doctor.js +1 -1
- package/dist/ui/Doctor.js.map +1 -0
- package/dist/ui/Header.d.ts.map +1 -0
- package/dist/ui/Header.js.map +1 -0
- package/dist/ui/LlmsTxt.d.ts.map +1 -0
- package/dist/ui/LlmsTxt.js.map +1 -0
- package/dist/ui/MemorySelector.d.ts.map +1 -0
- package/dist/ui/MemorySelector.js.map +1 -0
- package/dist/ui/NameInput.d.ts.map +1 -0
- package/dist/ui/NameInput.js.map +1 -0
- package/dist/ui/OptionSelector.d.ts.map +1 -0
- package/dist/ui/OptionSelector.js +1 -1
- package/dist/ui/OptionSelector.js.map +1 -0
- package/dist/ui/Plugin.d.ts.map +1 -0
- package/dist/ui/Plugin.js.map +1 -0
- package/dist/ui/Progress.d.ts.map +1 -0
- package/dist/ui/Progress.js.map +1 -0
- package/dist/ui/StackSelector.d.ts.map +1 -0
- package/dist/ui/StackSelector.js.map +1 -0
- package/dist/ui/Summary.d.ts.map +1 -0
- package/dist/ui/Summary.js.map +1 -0
- package/dist/ui/Welcome.d.ts.map +1 -0
- package/dist/ui/Welcome.js.map +1 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js.map +1 -0
- package/lib/common.sh +2 -2
- package/modules/ghagga/README.md +2 -2
- package/modules/ghagga/setup-ghagga.sh +1 -1
- package/package.json +25 -12
- package/templates/github/ci-go.yml +1 -1
- package/templates/github/ci-java.yml +2 -2
- package/templates/github/ci-node.yml +1 -1
- package/templates/github/ci-python.yml +1 -1
- package/templates/github/ci-rust.yml +1 -1
- package/templates/github/ghagga-review.yml +28 -0
- package/workflows/reusable-build-go.yml +1 -1
- package/workflows/reusable-build-java.yml +1 -1
- package/workflows/reusable-build-node.yml +1 -1
- package/workflows/reusable-build-python.yml +1 -1
- package/workflows/reusable-build-rust.yml +1 -1
- package/workflows/reusable-docker.yml +1 -1
- package/workflows/reusable-ghagga-review.yml +1 -1
- package/workflows/reusable-release.yml +1 -1
- package/.releaserc +0 -45
- package/ai-config/.skillignore +0 -15
- package/ai-config/AUTO_INVOKE.md +0 -300
- package/ai-config/agents/_TEMPLATE.md +0 -93
- package/ai-config/agents/business/api-designer.md +0 -1657
- package/ai-config/agents/business/business-analyst.md +0 -1331
- package/ai-config/agents/business/product-strategist.md +0 -206
- package/ai-config/agents/business/project-manager.md +0 -178
- package/ai-config/agents/business/requirements-analyst.md +0 -1277
- package/ai-config/agents/business/technical-writer.md +0 -1679
- package/ai-config/agents/creative/ux-designer.md +0 -205
- package/ai-config/agents/data-ai/ai-engineer.md +0 -487
- package/ai-config/agents/data-ai/analytics-engineer.md +0 -953
- package/ai-config/agents/data-ai/data-engineer.md +0 -173
- package/ai-config/agents/data-ai/data-scientist.md +0 -672
- package/ai-config/agents/data-ai/mlops-engineer.md +0 -814
- package/ai-config/agents/data-ai/prompt-engineer.md +0 -772
- package/ai-config/agents/development/angular-expert.md +0 -620
- package/ai-config/agents/development/backend-architect.md +0 -795
- package/ai-config/agents/development/database-specialist.md +0 -212
- package/ai-config/agents/development/frontend-specialist.md +0 -686
- package/ai-config/agents/development/fullstack-engineer.md +0 -668
- package/ai-config/agents/development/golang-pro.md +0 -338
- package/ai-config/agents/development/java-enterprise.md +0 -400
- package/ai-config/agents/development/javascript-pro.md +0 -422
- package/ai-config/agents/development/nextjs-pro.md +0 -474
- package/ai-config/agents/development/python-pro.md +0 -570
- package/ai-config/agents/development/react-pro.md +0 -487
- package/ai-config/agents/development/rust-pro.md +0 -246
- package/ai-config/agents/development/spring-boot-4-expert.md +0 -326
- package/ai-config/agents/development/typescript-pro.md +0 -336
- package/ai-config/agents/development/vue-specialist.md +0 -605
- package/ai-config/agents/infrastructure/cloud-architect.md +0 -472
- package/ai-config/agents/infrastructure/deployment-manager.md +0 -358
- package/ai-config/agents/infrastructure/devops-engineer.md +0 -455
- package/ai-config/agents/infrastructure/incident-responder.md +0 -519
- package/ai-config/agents/infrastructure/kubernetes-expert.md +0 -705
- package/ai-config/agents/infrastructure/monitoring-specialist.md +0 -674
- package/ai-config/agents/infrastructure/performance-engineer.md +0 -658
- package/ai-config/agents/orchestrator.md +0 -241
- package/ai-config/agents/quality/accessibility-auditor.md +0 -1204
- package/ai-config/agents/quality/code-reviewer-compact.md +0 -123
- package/ai-config/agents/quality/code-reviewer.md +0 -363
- package/ai-config/agents/quality/dependency-manager.md +0 -743
- package/ai-config/agents/quality/e2e-test-specialist.md +0 -1005
- package/ai-config/agents/quality/performance-tester.md +0 -1086
- package/ai-config/agents/quality/security-auditor.md +0 -133
- package/ai-config/agents/quality/test-engineer.md +0 -453
- package/ai-config/agents/specialists/api-designer.md +0 -87
- package/ai-config/agents/specialists/backend-architect.md +0 -73
- package/ai-config/agents/specialists/code-reviewer.md +0 -77
- package/ai-config/agents/specialists/db-optimizer.md +0 -75
- package/ai-config/agents/specialists/devops-engineer.md +0 -83
- package/ai-config/agents/specialists/documentation-writer.md +0 -78
- package/ai-config/agents/specialists/frontend-developer.md +0 -75
- package/ai-config/agents/specialists/performance-analyst.md +0 -82
- package/ai-config/agents/specialists/refactor-specialist.md +0 -74
- package/ai-config/agents/specialists/security-auditor.md +0 -74
- package/ai-config/agents/specialists/test-engineer.md +0 -81
- package/ai-config/agents/specialists/ux-consultant.md +0 -76
- package/ai-config/agents/specialized/agent-generator.md +0 -1190
- package/ai-config/agents/specialized/blockchain-developer.md +0 -149
- package/ai-config/agents/specialized/code-migrator.md +0 -892
- package/ai-config/agents/specialized/context-manager.md +0 -978
- package/ai-config/agents/specialized/documentation-writer.md +0 -1078
- package/ai-config/agents/specialized/ecommerce-expert.md +0 -1756
- package/ai-config/agents/specialized/embedded-engineer.md +0 -1714
- package/ai-config/agents/specialized/error-detective.md +0 -1034
- package/ai-config/agents/specialized/fintech-specialist.md +0 -1659
- package/ai-config/agents/specialized/freelance-project-planner-v2.md +0 -1988
- package/ai-config/agents/specialized/freelance-project-planner-v3.md +0 -2136
- package/ai-config/agents/specialized/freelance-project-planner-v4.md +0 -4503
- package/ai-config/agents/specialized/freelance-project-planner.md +0 -722
- package/ai-config/agents/specialized/game-developer.md +0 -1963
- package/ai-config/agents/specialized/healthcare-dev.md +0 -1620
- package/ai-config/agents/specialized/mobile-developer.md +0 -188
- package/ai-config/agents/specialized/parallel-plan-executor.md +0 -506
- package/ai-config/agents/specialized/plan-executor.md +0 -485
- package/ai-config/agents/specialized/solo-dev-planner-modular/00-INDEX.md +0 -485
- package/ai-config/agents/specialized/solo-dev-planner-modular/01-CORE.md +0 -3493
- package/ai-config/agents/specialized/solo-dev-planner-modular/02-SELF-CORRECTION.md +0 -778
- package/ai-config/agents/specialized/solo-dev-planner-modular/03-PROGRESSIVE-SETUP.md +0 -918
- package/ai-config/agents/specialized/solo-dev-planner-modular/04-DEPLOYMENT.md +0 -1537
- package/ai-config/agents/specialized/solo-dev-planner-modular/05-TESTING.md +0 -2633
- package/ai-config/agents/specialized/solo-dev-planner-modular/06-OPERATIONS.md +0 -5610
- package/ai-config/agents/specialized/solo-dev-planner-modular/INSTALL.md +0 -335
- package/ai-config/agents/specialized/solo-dev-planner-modular/QUICK-REFERENCE.txt +0 -215
- package/ai-config/agents/specialized/solo-dev-planner-modular/README.md +0 -260
- package/ai-config/agents/specialized/solo-dev-planner-modular/START-HERE.md +0 -379
- package/ai-config/agents/specialized/solo-dev-planner-modular/WORKFLOW-DIAGRAM.md +0 -355
- package/ai-config/agents/specialized/solo-dev-planner-modular/solo-dev-planner.md +0 -279
- package/ai-config/agents/specialized/template-writer.md +0 -347
- package/ai-config/agents/specialized/test-runner.md +0 -99
- package/ai-config/agents/specialized/vibekanban-smart-worker.md +0 -244
- package/ai-config/agents/specialized/wave-executor.md +0 -138
- package/ai-config/agents/specialized/workflow-optimizer.md +0 -1114
- package/ai-config/commands/git/changelog.md +0 -32
- package/ai-config/commands/git/ci-local.md +0 -70
- package/ai-config/commands/git/commit.md +0 -35
- package/ai-config/commands/git/fix-issue.md +0 -23
- package/ai-config/commands/git/pr-create.md +0 -42
- package/ai-config/commands/git/pr-review.md +0 -50
- package/ai-config/commands/git/worktree.md +0 -39
- package/ai-config/commands/refactoring/cleanup.md +0 -24
- package/ai-config/commands/refactoring/dead-code.md +0 -40
- package/ai-config/commands/refactoring/extract.md +0 -31
- package/ai-config/commands/testing/e2e.md +0 -30
- package/ai-config/commands/testing/tdd.md +0 -36
- package/ai-config/commands/testing/test-coverage.md +0 -30
- package/ai-config/commands/testing/test-fix.md +0 -24
- package/ai-config/commands/workflow/generate-agents-md.md +0 -85
- package/ai-config/commands/workflow/planning.md +0 -47
- package/ai-config/commands/workflows/compound.md +0 -89
- package/ai-config/commands/workflows/diagnose.md +0 -70
- package/ai-config/commands/workflows/discover.md +0 -86
- package/ai-config/commands/workflows/plan.md +0 -77
- package/ai-config/commands/workflows/review.md +0 -78
- package/ai-config/commands/workflows/work.md +0 -75
- package/ai-config/config.yaml +0 -18
- package/ai-config/hooks/_TEMPLATE.md +0 -96
- package/ai-config/hooks/block-dangerous-commands.md +0 -75
- package/ai-config/hooks/commit-guard.md +0 -90
- package/ai-config/hooks/context-loader.md +0 -73
- package/ai-config/hooks/improve-prompt.md +0 -91
- package/ai-config/hooks/learning-log.md +0 -72
- package/ai-config/hooks/model-router.md +0 -86
- package/ai-config/hooks/secret-scanner.md +0 -64
- package/ai-config/hooks/skill-validator.md +0 -102
- package/ai-config/hooks/task-artifact.md +0 -114
- package/ai-config/hooks/validate-workflow.md +0 -100
- package/ai-config/prompts/base.md +0 -71
- package/ai-config/prompts/modes/debug.md +0 -34
- package/ai-config/prompts/modes/deploy.md +0 -40
- package/ai-config/prompts/modes/research.md +0 -32
- package/ai-config/prompts/modes/review.md +0 -33
- package/ai-config/prompts/review-policy.md +0 -79
- package/ai-config/skills/_TEMPLATE.md +0 -157
- package/ai-config/skills/backend/api-gateway/SKILL.md +0 -254
- package/ai-config/skills/backend/bff-concepts/SKILL.md +0 -239
- package/ai-config/skills/backend/bff-spring/SKILL.md +0 -364
- package/ai-config/skills/backend/chi-router/SKILL.md +0 -396
- package/ai-config/skills/backend/error-handling/SKILL.md +0 -255
- package/ai-config/skills/backend/exceptions-spring/SKILL.md +0 -323
- package/ai-config/skills/backend/fastapi/SKILL.md +0 -302
- package/ai-config/skills/backend/gateway-spring/SKILL.md +0 -390
- package/ai-config/skills/backend/go-backend/SKILL.md +0 -457
- package/ai-config/skills/backend/gradle-multimodule/SKILL.md +0 -274
- package/ai-config/skills/backend/graphql-concepts/SKILL.md +0 -352
- package/ai-config/skills/backend/graphql-spring/SKILL.md +0 -398
- package/ai-config/skills/backend/grpc-concepts/SKILL.md +0 -283
- package/ai-config/skills/backend/grpc-spring/SKILL.md +0 -445
- package/ai-config/skills/backend/jwt-auth/SKILL.md +0 -412
- package/ai-config/skills/backend/notifications-concepts/SKILL.md +0 -259
- package/ai-config/skills/backend/recommendations-concepts/SKILL.md +0 -261
- package/ai-config/skills/backend/search-concepts/SKILL.md +0 -263
- package/ai-config/skills/backend/search-spring/SKILL.md +0 -375
- package/ai-config/skills/backend/spring-boot-4/SKILL.md +0 -172
- package/ai-config/skills/backend/websockets/SKILL.md +0 -532
- package/ai-config/skills/data-ai/ai-ml/SKILL.md +0 -423
- package/ai-config/skills/data-ai/analytics-concepts/SKILL.md +0 -195
- package/ai-config/skills/data-ai/analytics-spring/SKILL.md +0 -340
- package/ai-config/skills/data-ai/duckdb-analytics/SKILL.md +0 -440
- package/ai-config/skills/data-ai/langchain/SKILL.md +0 -238
- package/ai-config/skills/data-ai/mlflow/SKILL.md +0 -302
- package/ai-config/skills/data-ai/onnx-inference/SKILL.md +0 -290
- package/ai-config/skills/data-ai/powerbi/SKILL.md +0 -352
- package/ai-config/skills/data-ai/pytorch/SKILL.md +0 -274
- package/ai-config/skills/data-ai/scikit-learn/SKILL.md +0 -321
- package/ai-config/skills/data-ai/vector-db/SKILL.md +0 -301
- package/ai-config/skills/database/graph-databases/SKILL.md +0 -218
- package/ai-config/skills/database/graph-spring/SKILL.md +0 -361
- package/ai-config/skills/database/pgx-postgres/SKILL.md +0 -512
- package/ai-config/skills/database/redis-cache/SKILL.md +0 -343
- package/ai-config/skills/database/sqlite-embedded/SKILL.md +0 -388
- package/ai-config/skills/database/timescaledb/SKILL.md +0 -320
- package/ai-config/skills/docs/api-documentation/SKILL.md +0 -293
- package/ai-config/skills/docs/docs-spring/SKILL.md +0 -377
- package/ai-config/skills/docs/mustache-templates/SKILL.md +0 -190
- package/ai-config/skills/docs/technical-docs/SKILL.md +0 -447
- package/ai-config/skills/frontend/astro-ssr/SKILL.md +0 -441
- package/ai-config/skills/frontend/frontend-design/SKILL.md +0 -54
- package/ai-config/skills/frontend/frontend-web/SKILL.md +0 -368
- package/ai-config/skills/frontend/mantine-ui/SKILL.md +0 -396
- package/ai-config/skills/frontend/tanstack-query/SKILL.md +0 -439
- package/ai-config/skills/frontend/zod-validation/SKILL.md +0 -417
- package/ai-config/skills/frontend/zustand-state/SKILL.md +0 -350
- package/ai-config/skills/infrastructure/chaos-engineering/SKILL.md +0 -244
- package/ai-config/skills/infrastructure/chaos-spring/SKILL.md +0 -378
- package/ai-config/skills/infrastructure/devops-infra/SKILL.md +0 -435
- package/ai-config/skills/infrastructure/docker-containers/SKILL.md +0 -420
- package/ai-config/skills/infrastructure/kubernetes/SKILL.md +0 -456
- package/ai-config/skills/infrastructure/opentelemetry/SKILL.md +0 -546
- package/ai-config/skills/infrastructure/traefik-proxy/SKILL.md +0 -474
- package/ai-config/skills/infrastructure/woodpecker-ci/SKILL.md +0 -315
- package/ai-config/skills/mobile/ionic-capacitor/SKILL.md +0 -504
- package/ai-config/skills/mobile/mobile-ionic/SKILL.md +0 -448
- package/ai-config/skills/prompt-improver/SKILL.md +0 -125
- package/ai-config/skills/quality/ghagga-review/SKILL.md +0 -216
- package/ai-config/skills/references/hooks-patterns/SKILL.md +0 -238
- package/ai-config/skills/references/mcp-servers/SKILL.md +0 -275
- package/ai-config/skills/references/plugins-reference/SKILL.md +0 -110
- package/ai-config/skills/references/skills-reference/SKILL.md +0 -420
- package/ai-config/skills/references/subagent-templates/SKILL.md +0 -193
- package/ai-config/skills/systems-iot/modbus-protocol/SKILL.md +0 -410
- package/ai-config/skills/systems-iot/mqtt-rumqttc/SKILL.md +0 -408
- package/ai-config/skills/systems-iot/rust-systems/SKILL.md +0 -386
- package/ai-config/skills/systems-iot/tokio-async/SKILL.md +0 -324
- package/ai-config/skills/testing/playwright-e2e/SKILL.md +0 -289
- package/ai-config/skills/testing/testcontainers/SKILL.md +0 -299
- package/ai-config/skills/testing/vitest-testing/SKILL.md +0 -381
- package/ai-config/skills/workflow/ci-local-guide/SKILL.md +0 -118
- package/ai-config/skills/workflow/claude-automation-recommender/SKILL.md +0 -299
- package/ai-config/skills/workflow/claude-md-improver/SKILL.md +0 -158
- package/ai-config/skills/workflow/finishing-a-development-branch/SKILL.md +0 -117
- package/ai-config/skills/workflow/git-github/SKILL.md +0 -334
- package/ai-config/skills/workflow/git-github/references/examples.md +0 -160
- package/ai-config/skills/workflow/git-workflow/SKILL.md +0 -214
- package/ai-config/skills/workflow/ide-plugins/SKILL.md +0 -277
- package/ai-config/skills/workflow/ide-plugins-intellij/SKILL.md +0 -401
- package/ai-config/skills/workflow/obsidian-brain-workflow/SKILL.md +0 -199
- package/ai-config/skills/workflow/using-git-worktrees/SKILL.md +0 -100
- package/ai-config/skills/workflow/verification-before-completion/SKILL.md +0 -73
- package/ai-config/skills/workflow/wave-workflow/SKILL.md +0 -178
- package/dist/commands/analyze.test.d.ts +0 -2
- package/dist/commands/doctor.test.d.ts +0 -2
- package/dist/commands/init.test.d.ts +0 -2
- package/dist/commands/llmstxt.test.d.ts +0 -2
- package/dist/commands/plugin.test.d.ts +0 -2
- package/dist/commands/sync.d.ts +0 -8
- package/dist/commands/sync.js +0 -201
- package/dist/e2e/aggressive.e2e.test.d.ts +0 -2
- package/dist/e2e/commands.e2e.test.d.ts +0 -2
- package/dist/lib/common.test.d.ts +0 -2
- package/dist/lib/frontmatter.test.d.ts +0 -2
- package/dist/lib/plugin.test.d.ts +0 -2
- package/dist/lib/template.test.d.ts +0 -2
- package/dist/ui/SyncUI.d.ts +0 -10
- package/dist/ui/SyncUI.js +0 -64
- package/schemas/agent.schema.json +0 -34
- package/schemas/ai-config.schema.json +0 -28
- package/schemas/plugin.schema.json +0 -62
- package/schemas/skill.schema.json +0 -44
- package/tasks/_TEMPLATE/files-edited.md +0 -3
- package/tasks/_TEMPLATE/plan.md +0 -3
- package/tasks/_TEMPLATE/research.md +0 -3
- package/tasks/_TEMPLATE/verification.md +0 -5
|
@@ -1,918 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: solo-dev-planner-progressive-setup
|
|
3
|
-
description: "Módulo 3: Setup en 3 fases (MVP, Alpha, Beta)"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# 🎯 Solo Dev Planner - Progressive Disclosure Setup
|
|
7
|
-
|
|
8
|
-
> Módulo 3 de 6: Setup en 3 fases (MVP → Alpha → Beta)
|
|
9
|
-
|
|
10
|
-
## 📚 Relacionado con:
|
|
11
|
-
- 01-CORE.md (Filosofía base)
|
|
12
|
-
- 02-SELF-CORRECTION.md (Auto-fix usado en setup)
|
|
13
|
-
- 04-DEPLOYMENT.md (Fase Beta usa deployment)
|
|
14
|
-
- 06-OPERATIONS.md (Mise, DB, Secrets)
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
patterns:
|
|
19
|
-
- "*"
|
|
20
|
-
|
|
21
|
-
# ═══════════════════════════════════════════════════════════
|
|
22
|
-
# Java/Kotlin (Gradle)
|
|
23
|
-
# ═══════════════════════════════════════════════════════════
|
|
24
|
-
- package-ecosystem: "gradle"
|
|
25
|
-
directory: "/"
|
|
26
|
-
schedule:
|
|
27
|
-
interval: "weekly"
|
|
28
|
-
day: "monday"
|
|
29
|
-
groups:
|
|
30
|
-
spring-dependencies:
|
|
31
|
-
patterns:
|
|
32
|
-
- "org.springframework.boot:*"
|
|
33
|
-
- "org.springframework:*"
|
|
34
|
-
kotlin-dependencies:
|
|
35
|
-
patterns:
|
|
36
|
-
- "org.jetbrains.kotlin:*"
|
|
37
|
-
|
|
38
|
-
# ═══════════════════════════════════════════════════════════
|
|
39
|
-
# GitHub Actions
|
|
40
|
-
# ═══════════════════════════════════════════════════════════
|
|
41
|
-
- package-ecosystem: "github-actions"
|
|
42
|
-
directory: "/"
|
|
43
|
-
schedule:
|
|
44
|
-
interval: "weekly"
|
|
45
|
-
day: "monday"
|
|
46
|
-
groups:
|
|
47
|
-
actions:
|
|
48
|
-
patterns:
|
|
49
|
-
- "*"
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### Auto-merge Dependabot PRs (Patches)
|
|
53
|
-
|
|
54
|
-
```yaml
|
|
55
|
-
# .github/workflows/dependabot-auto-merge.yml
|
|
56
|
-
name: Dependabot Auto-Merge
|
|
57
|
-
|
|
58
|
-
on:
|
|
59
|
-
pull_request:
|
|
60
|
-
types: [opened, synchronize, reopened]
|
|
61
|
-
|
|
62
|
-
permissions:
|
|
63
|
-
contents: write
|
|
64
|
-
pull-requests: write
|
|
65
|
-
|
|
66
|
-
jobs:
|
|
67
|
-
auto-merge:
|
|
68
|
-
runs-on: ubuntu-latest
|
|
69
|
-
if: github.actor == 'dependabot[bot]'
|
|
70
|
-
|
|
71
|
-
steps:
|
|
72
|
-
- name: Fetch PR Details
|
|
73
|
-
id: pr
|
|
74
|
-
uses: actions/github-script@v7
|
|
75
|
-
with:
|
|
76
|
-
script: |
|
|
77
|
-
const pr = await github.rest.pulls.get({
|
|
78
|
-
owner: context.repo.owner,
|
|
79
|
-
repo: context.repo.repo,
|
|
80
|
-
pull_number: context.issue.number
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
const title = pr.data.title;
|
|
84
|
-
|
|
85
|
-
// Detectar si es patch update
|
|
86
|
-
const isPatch = title.includes('patch') ||
|
|
87
|
-
/bump.*from \d+\.\d+\.\d+ to \d+\.\d+\.\d+$/.test(title);
|
|
88
|
-
|
|
89
|
-
console.log(`PR title: ${title}`);
|
|
90
|
-
console.log(`Is patch: ${isPatch}`);
|
|
91
|
-
|
|
92
|
-
return { isPatch };
|
|
93
|
-
|
|
94
|
-
- name: Enable Auto-merge
|
|
95
|
-
if: fromJSON(steps.pr.outputs.result).isPatch
|
|
96
|
-
run: gh pr merge --auto --squash "${{ github.event.pull_request.number }}"
|
|
97
|
-
env:
|
|
98
|
-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
99
|
-
|
|
100
|
-
- name: Approve PR
|
|
101
|
-
if: fromJSON(steps.pr.outputs.result).isPatch
|
|
102
|
-
run: gh pr review --approve "${{ github.event.pull_request.number }}"
|
|
103
|
-
env:
|
|
104
|
-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### GitHub Code Scanning (CodeQL)
|
|
108
|
-
|
|
109
|
-
```yaml
|
|
110
|
-
# .github/workflows/codeql.yml
|
|
111
|
-
name: CodeQL Security Scan
|
|
112
|
-
|
|
113
|
-
on:
|
|
114
|
-
push:
|
|
115
|
-
branches: [main, develop]
|
|
116
|
-
pull_request:
|
|
117
|
-
branches: [main, develop]
|
|
118
|
-
schedule:
|
|
119
|
-
- cron: '0 6 * * 1' # Lunes a las 6am
|
|
120
|
-
|
|
121
|
-
jobs:
|
|
122
|
-
analyze:
|
|
123
|
-
name: Analyze
|
|
124
|
-
runs-on: ubuntu-latest
|
|
125
|
-
|
|
126
|
-
permissions:
|
|
127
|
-
actions: read
|
|
128
|
-
contents: read
|
|
129
|
-
security-events: write
|
|
130
|
-
|
|
131
|
-
strategy:
|
|
132
|
-
fail-fast: false
|
|
133
|
-
matrix:
|
|
134
|
-
language: ['javascript', 'python', 'go', 'java']
|
|
135
|
-
|
|
136
|
-
steps:
|
|
137
|
-
- name: Checkout
|
|
138
|
-
uses: actions/checkout@v4
|
|
139
|
-
|
|
140
|
-
- name: Initialize CodeQL
|
|
141
|
-
uses: github/codeql-action/init@v3
|
|
142
|
-
with:
|
|
143
|
-
languages: ${{ matrix.language }}
|
|
144
|
-
queries: security-extended,security-and-quality
|
|
145
|
-
|
|
146
|
-
- name: Autobuild
|
|
147
|
-
uses: github/codeql-action/autobuild@v3
|
|
148
|
-
|
|
149
|
-
- name: Perform CodeQL Analysis
|
|
150
|
-
uses: github/codeql-action/analyze@v3
|
|
151
|
-
with:
|
|
152
|
-
category: "/language:${{ matrix.language }}"
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### Características
|
|
156
|
-
- ✅ Control total del formato del changelog
|
|
157
|
-
- ✅ Documentación generada por AI (Gemini)
|
|
158
|
-
- ✅ README.md automático
|
|
159
|
-
- ✅ Docs API automáticas por lenguaje
|
|
160
|
-
- ✅ Deploy a GitHub Pages
|
|
161
|
-
|
|
162
|
-
### Setup Avanzado
|
|
163
|
-
|
|
164
|
-
#### 1. Git Cliff para Changelog
|
|
165
|
-
|
|
166
|
-
**Instalación:**
|
|
167
|
-
```bash
|
|
168
|
-
# macOS
|
|
169
|
-
brew install git-cliff
|
|
170
|
-
|
|
171
|
-
# Linux
|
|
172
|
-
cargo install git-cliff
|
|
173
|
-
|
|
174
|
-
# O descargar binario
|
|
175
|
-
wget https://github.com/orhun/git-cliff/releases/download/v1.4.0/git-cliff-1.4.0-x86_64-unknown-linux-gnu.tar.gz
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
**cliff.toml**
|
|
179
|
-
```toml
|
|
180
|
-
[changelog]
|
|
181
|
-
header = """
|
|
182
|
-
# 📋 Changelog
|
|
183
|
-
|
|
184
|
-
Todos los cambios notables de este proyecto se documentan aquí.
|
|
185
|
-
|
|
186
|
-
El formato está basado en [Keep a Changelog](https://keepachangelog.com/es/1.0.0/),
|
|
187
|
-
y este proyecto adhiere a [Semantic Versioning](https://semver.org/lang/es/).
|
|
188
|
-
|
|
189
|
-
"""
|
|
190
|
-
|
|
191
|
-
body = """
|
|
192
|
-
{% if version %}\
|
|
193
|
-
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
|
|
194
|
-
{% else %}\
|
|
195
|
-
## [Unreleased]
|
|
196
|
-
{% endif %}\
|
|
197
|
-
|
|
198
|
-
{% for group, commits in commits | group_by(attribute="group") %}
|
|
199
|
-
### {{ group | striptags | trim | upper_first }}
|
|
200
|
-
{% for commit in commits %}
|
|
201
|
-
- {% if commit.scope %}**{{ commit.scope }}:** {% endif %}\
|
|
202
|
-
{% if commit.breaking %}[**breaking**] {% endif %}\
|
|
203
|
-
{{ commit.message | upper_first }} \
|
|
204
|
-
([{{ commit.id | truncate(length=7, end="") }}]({{ commit.link }}))
|
|
205
|
-
{% endfor %}
|
|
206
|
-
{% endfor %}\n
|
|
207
|
-
"""
|
|
208
|
-
|
|
209
|
-
trim = true
|
|
210
|
-
footer = """
|
|
211
|
-
<!-- generated by git-cliff -->
|
|
212
|
-
"""
|
|
213
|
-
|
|
214
|
-
[git]
|
|
215
|
-
conventional_commits = true
|
|
216
|
-
filter_unconventional = true
|
|
217
|
-
split_commits = false
|
|
218
|
-
|
|
219
|
-
commit_parsers = [
|
|
220
|
-
{ message = "^feat", group = "✨ Features" },
|
|
221
|
-
{ message = "^fix", group = "🐛 Bug Fixes" },
|
|
222
|
-
{ message = "^doc", group = "📚 Documentation" },
|
|
223
|
-
{ message = "^perf", group = "⚡ Performance" },
|
|
224
|
-
{ message = "^refactor", group = "♻️ Refactor" },
|
|
225
|
-
{ message = "^style", group = "🎨 Styling" },
|
|
226
|
-
{ message = "^test", group = "🧪 Testing" },
|
|
227
|
-
{ message = "^chore\\(release\\): prepare for", skip = true },
|
|
228
|
-
{ message = "^chore\\(deps\\)", skip = true },
|
|
229
|
-
{ message = "^chore\\(pr\\)", skip = true },
|
|
230
|
-
{ message = "^chore\\(pull\\)", skip = true },
|
|
231
|
-
{ message = "^chore|^ci", group = "🔧 Miscellaneous" },
|
|
232
|
-
{ body = ".*security", group = "🔒 Security" },
|
|
233
|
-
{ message = "^revert", group = "⏪ Revert" },
|
|
234
|
-
]
|
|
235
|
-
|
|
236
|
-
protect_breaking_commits = false
|
|
237
|
-
filter_commits = false
|
|
238
|
-
tag_pattern = "v[0-9].*"
|
|
239
|
-
skip_tags = "v0.1.0-beta.1"
|
|
240
|
-
ignore_tags = ""
|
|
241
|
-
topo_order = false
|
|
242
|
-
sort_commits = "oldest"
|
|
243
|
-
|
|
244
|
-
[bump]
|
|
245
|
-
features_always_bump_minor = true
|
|
246
|
-
breaking_always_bump_major = true
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
**GitHub Actions:**
|
|
250
|
-
```yaml
|
|
251
|
-
# .github/workflows/changelog-advanced.yml
|
|
252
|
-
name: Changelog (Advanced)
|
|
253
|
-
|
|
254
|
-
on:
|
|
255
|
-
push:
|
|
256
|
-
branches:
|
|
257
|
-
- main
|
|
258
|
-
tags:
|
|
259
|
-
- 'v*'
|
|
260
|
-
|
|
261
|
-
jobs:
|
|
262
|
-
changelog:
|
|
263
|
-
runs-on: ubuntu-latest
|
|
264
|
-
steps:
|
|
265
|
-
- uses: actions/checkout@v4
|
|
266
|
-
with:
|
|
267
|
-
fetch-depth: 0
|
|
268
|
-
|
|
269
|
-
- name: Install git-cliff
|
|
270
|
-
run: |
|
|
271
|
-
wget https://github.com/orhun/git-cliff/releases/download/v1.4.0/git-cliff-1.4.0-x86_64-unknown-linux-gnu.tar.gz
|
|
272
|
-
tar -xzf git-cliff-1.4.0-x86_64-unknown-linux-gnu.tar.gz
|
|
273
|
-
chmod +x git-cliff
|
|
274
|
-
sudo mv git-cliff /usr/local/bin/
|
|
275
|
-
|
|
276
|
-
- name: Generate Changelog
|
|
277
|
-
run: |
|
|
278
|
-
git-cliff -o CHANGELOG.md
|
|
279
|
-
|
|
280
|
-
- name: Commit Changelog
|
|
281
|
-
run: |
|
|
282
|
-
git config user.name "github-actions[bot]"
|
|
283
|
-
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
284
|
-
git add CHANGELOG.md
|
|
285
|
-
git commit -m "docs: update CHANGELOG.md" || echo "No changes"
|
|
286
|
-
git push
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
#### 2. Documentación AI con Gemini (Gratuita)
|
|
290
|
-
|
|
291
|
-
**scripts/generate-docs.js**
|
|
292
|
-
```javascript
|
|
293
|
-
import { GoogleGenerativeAI } from '@google/generative-ai';
|
|
294
|
-
import { readFileSync, writeFileSync, readdirSync } from 'fs';
|
|
295
|
-
import { join } from 'path';
|
|
296
|
-
|
|
297
|
-
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
|
|
298
|
-
|
|
299
|
-
async function analyzeCodebase() {
|
|
300
|
-
// Leer estructura del proyecto
|
|
301
|
-
const structure = getProjectStructure('.');
|
|
302
|
-
|
|
303
|
-
// Leer archivos principales
|
|
304
|
-
const mainFiles = [
|
|
305
|
-
'package.json',
|
|
306
|
-
'src/index.ts',
|
|
307
|
-
'src/main.py',
|
|
308
|
-
'cmd/api/main.go',
|
|
309
|
-
// ... detectar automáticamente
|
|
310
|
-
].filter(f => existsSync(f));
|
|
311
|
-
|
|
312
|
-
const codeContext = mainFiles.map(f => ({
|
|
313
|
-
path: f,
|
|
314
|
-
content: readFileSync(f, 'utf-8')
|
|
315
|
-
}));
|
|
316
|
-
|
|
317
|
-
return { structure, codeContext };
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
async function generateREADME() {
|
|
321
|
-
const model = genAI.getGenerativeModel({ model: 'gemini-1.5-flash' });
|
|
322
|
-
|
|
323
|
-
const { structure, codeContext } = await analyzeCodebase();
|
|
324
|
-
|
|
325
|
-
const prompt = `
|
|
326
|
-
Analiza este proyecto y genera un README.md profesional en markdown.
|
|
327
|
-
|
|
328
|
-
ESTRUCTURA DEL PROYECTO:
|
|
329
|
-
${JSON.stringify(structure, null, 2)}
|
|
330
|
-
|
|
331
|
-
ARCHIVOS PRINCIPALES:
|
|
332
|
-
${codeContext.map(f => `
|
|
333
|
-
### ${f.path}
|
|
334
|
-
\`\`\`
|
|
335
|
-
${f.content}
|
|
336
|
-
\`\`\`
|
|
337
|
-
`).join('\n')}
|
|
338
|
-
|
|
339
|
-
GENERA UN README.md QUE INCLUYA:
|
|
340
|
-
|
|
341
|
-
1. Título y descripción breve del proyecto
|
|
342
|
-
2. Características principales
|
|
343
|
-
3. Tech stack detectado
|
|
344
|
-
4. Requisitos previos
|
|
345
|
-
5. Instalación paso a paso
|
|
346
|
-
6. Uso con ejemplos
|
|
347
|
-
7. Estructura del proyecto
|
|
348
|
-
8. Scripts disponibles
|
|
349
|
-
9. Testing
|
|
350
|
-
10. Contribución (opcional)
|
|
351
|
-
11. Licencia
|
|
352
|
-
|
|
353
|
-
IMPORTANTE:
|
|
354
|
-
- Usa emojis apropiados
|
|
355
|
-
- Formato markdown limpio
|
|
356
|
-
- Ejemplos de código con syntax highlighting
|
|
357
|
-
- Badges relevantes (build status, license, etc.)
|
|
358
|
-
- TOC si el README es largo
|
|
359
|
-
|
|
360
|
-
RESPONDE SOLO CON EL CONTENIDO DEL README.MD, SIN EXPLICACIONES ADICIONALES.
|
|
361
|
-
`;
|
|
362
|
-
|
|
363
|
-
const result = await model.generateContent(prompt);
|
|
364
|
-
const readme = result.response.text();
|
|
365
|
-
|
|
366
|
-
writeFileSync('README.md', readme);
|
|
367
|
-
console.log('✅ README.md generado automáticamente');
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
function getProjectStructure(dir, depth = 0, maxDepth = 3) {
|
|
371
|
-
if (depth > maxDepth) return null;
|
|
372
|
-
|
|
373
|
-
const items = readdirSync(dir, { withFileTypes: true });
|
|
374
|
-
const structure = {};
|
|
375
|
-
|
|
376
|
-
for (const item of items) {
|
|
377
|
-
// Ignorar node_modules, .git, etc.
|
|
378
|
-
if (['node_modules', '.git', 'dist', 'build', '.next'].includes(item.name)) {
|
|
379
|
-
continue;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
if (item.isDirectory()) {
|
|
383
|
-
structure[item.name] = getProjectStructure(
|
|
384
|
-
join(dir, item.name),
|
|
385
|
-
depth + 1,
|
|
386
|
-
maxDepth
|
|
387
|
-
);
|
|
388
|
-
} else {
|
|
389
|
-
structure[item.name] = 'file';
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
return structure;
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
// Ejecutar
|
|
397
|
-
generateREADME().catch(console.error);
|
|
398
|
-
```
|
|
399
|
-
|
|
400
|
-
**package.json (para proyectos Node/Bun):**
|
|
401
|
-
```json
|
|
402
|
-
{
|
|
403
|
-
"scripts": {
|
|
404
|
-
"docs:generate": "bun run scripts/generate-docs.js"
|
|
405
|
-
},
|
|
406
|
-
"devDependencies": {
|
|
407
|
-
"@google/generative-ai": "^0.21.0"
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
**GitHub Actions con Gemini:**
|
|
413
|
-
```yaml
|
|
414
|
-
# .github/workflows/auto-docs.yml
|
|
415
|
-
name: Auto Documentation (AI)
|
|
416
|
-
|
|
417
|
-
on:
|
|
418
|
-
push:
|
|
419
|
-
branches: [main]
|
|
420
|
-
paths:
|
|
421
|
-
- 'src/**'
|
|
422
|
-
- 'cmd/**'
|
|
423
|
-
- 'app/**'
|
|
424
|
-
- '!README.md'
|
|
425
|
-
|
|
426
|
-
jobs:
|
|
427
|
-
generate-docs:
|
|
428
|
-
runs-on: ubuntu-latest
|
|
429
|
-
steps:
|
|
430
|
-
- uses: actions/checkout@v4
|
|
431
|
-
with:
|
|
432
|
-
fetch-depth: 0
|
|
433
|
-
|
|
434
|
-
- name: Setup Bun
|
|
435
|
-
uses: oven-sh/setup-bun@v1
|
|
436
|
-
|
|
437
|
-
- name: Install dependencies
|
|
438
|
-
run: bun install @google/generative-ai
|
|
439
|
-
|
|
440
|
-
- name: Generate README with Gemini
|
|
441
|
-
env:
|
|
442
|
-
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
|
|
443
|
-
run: bun run scripts/generate-docs.js
|
|
444
|
-
|
|
445
|
-
- name: Generate API Docs (language-specific)
|
|
446
|
-
run: |
|
|
447
|
-
if [ -f "package.json" ]; then
|
|
448
|
-
# TypeScript/JavaScript
|
|
449
|
-
npx typedoc --out docs/api src/
|
|
450
|
-
elif [ -f "pyproject.toml" ]; then
|
|
451
|
-
# Python
|
|
452
|
-
pip install pdoc3
|
|
453
|
-
pdoc --html --output-dir docs/api app/
|
|
454
|
-
elif [ -f "go.mod" ]; then
|
|
455
|
-
# Go
|
|
456
|
-
go install golang.org/x/tools/cmd/godoc@latest
|
|
457
|
-
mkdir -p docs/api
|
|
458
|
-
# Generar docs estáticas
|
|
459
|
-
elif [ -f "build.gradle.kts" ]; then
|
|
460
|
-
# Kotlin/Java
|
|
461
|
-
./gradlew dokkaHtml
|
|
462
|
-
mv build/dokka/html docs/api
|
|
463
|
-
fi
|
|
464
|
-
|
|
465
|
-
- name: Commit Documentation
|
|
466
|
-
run: |
|
|
467
|
-
git config user.name "github-actions[bot]"
|
|
468
|
-
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
469
|
-
git add README.md docs/
|
|
470
|
-
git commit -m "docs: auto-update documentation [skip ci]" || echo "No changes"
|
|
471
|
-
git push
|
|
472
|
-
|
|
473
|
-
- name: Deploy to GitHub Pages
|
|
474
|
-
uses: peaceiris/actions-gh-pages@v3
|
|
475
|
-
with:
|
|
476
|
-
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
477
|
-
publish_dir: ./docs
|
|
478
|
-
```
|
|
479
|
-
|
|
480
|
-
#### 3. Configurar GitHub Pages
|
|
481
|
-
|
|
482
|
-
```bash
|
|
483
|
-
# En GitHub repo settings:
|
|
484
|
-
# Settings > Pages > Source > gh-pages branch
|
|
485
|
-
```
|
|
486
|
-
|
|
487
|
-
---
|
|
488
|
-
|
|
489
|
-
---
|
|
490
|
-
|
|
491
|
-
## 📢 Notificaciones (Discord / Slack)
|
|
492
|
-
|
|
493
|
-
### Discord Webhooks
|
|
494
|
-
|
|
495
|
-
#### Setup
|
|
496
|
-
```bash
|
|
497
|
-
# 1. En tu servidor Discord
|
|
498
|
-
# Server Settings > Integrations > Webhooks > New Webhook
|
|
499
|
-
|
|
500
|
-
# 2. Copiar Webhook URL
|
|
501
|
-
|
|
502
|
-
# 3. GitHub Settings > Secrets
|
|
503
|
-
# Name: DISCORD_WEBHOOK
|
|
504
|
-
# Value: https://discord.com/api/webhooks/...
|
|
505
|
-
```
|
|
506
|
-
|
|
507
|
-
#### Workflow de Notificaciones
|
|
508
|
-
|
|
509
|
-
```yaml
|
|
510
|
-
# .github/workflows/notifications.yml
|
|
511
|
-
name: Notifications
|
|
512
|
-
|
|
513
|
-
on:
|
|
514
|
-
workflow_run:
|
|
515
|
-
workflows: ["CI/CD Pipeline"]
|
|
516
|
-
types: [completed]
|
|
517
|
-
|
|
518
|
-
issues:
|
|
519
|
-
types: [opened, labeled]
|
|
520
|
-
|
|
521
|
-
jobs:
|
|
522
|
-
discord-notify:
|
|
523
|
-
runs-on: ubuntu-latest
|
|
524
|
-
if: vars.DISCORD_ENABLED == 'true'
|
|
525
|
-
|
|
526
|
-
steps:
|
|
527
|
-
- name: Notify Merge Success
|
|
528
|
-
if: |
|
|
529
|
-
github.event.workflow_run.conclusion == 'success' &&
|
|
530
|
-
github.event.workflow_run.event == 'pull_request'
|
|
531
|
-
run: |
|
|
532
|
-
curl -X POST ${{ secrets.DISCORD_WEBHOOK }} \
|
|
533
|
-
-H "Content-Type: application/json" \
|
|
534
|
-
-d '{
|
|
535
|
-
"embeds": [{
|
|
536
|
-
"title": "✅ PR Auto-Merged",
|
|
537
|
-
"description": "CI passed and PR was automatically merged",
|
|
538
|
-
"color": 3066993,
|
|
539
|
-
"fields": [
|
|
540
|
-
{
|
|
541
|
-
"name": "Branch",
|
|
542
|
-
"value": "'"${{ github.event.workflow_run.head_branch }}"'",
|
|
543
|
-
"inline": true
|
|
544
|
-
},
|
|
545
|
-
{
|
|
546
|
-
"name": "Author",
|
|
547
|
-
"value": "'"${{ github.event.workflow_run.actor.login }}"'",
|
|
548
|
-
"inline": true
|
|
549
|
-
}
|
|
550
|
-
],
|
|
551
|
-
"timestamp": "'"$(date -u +%Y-%m-%dT%H:%M:%SZ)"'"
|
|
552
|
-
}]
|
|
553
|
-
}'
|
|
554
|
-
```
|
|
555
|
-
|
|
556
|
-
### Slack Webhooks (Similar config)
|
|
557
|
-
|
|
558
|
-
[Documentación similar a Discord pero para Slack]
|
|
559
|
-
|
|
560
|
-
### Configurar en Variables
|
|
561
|
-
|
|
562
|
-
```bash
|
|
563
|
-
# GitHub repo > Settings > Variables > Actions
|
|
564
|
-
# DISCORD_ENABLED = false (por defecto)
|
|
565
|
-
# SLACK_ENABLED = false (por defecto)
|
|
566
|
-
```
|
|
567
|
-
|
|
568
|
-
---
|
|
569
|
-
|
|
570
|
-
## ⏱️ Estimación de Tiempo en Planes
|
|
571
|
-
|
|
572
|
-
[Sección completa con templates y ejemplos de estimación]
|
|
573
|
-
|
|
574
|
-
---
|
|
575
|
-
|
|
576
|
-
## 💰 Cloud Cost Estimation (Desactivado por defecto)
|
|
577
|
-
|
|
578
|
-
[Sección completa con Infracost]
|
|
579
|
-
|
|
580
|
-
---
|
|
581
|
-
|
|
582
|
-
## 🎯 Modo Híbrido (Recomendado): Simple + Docs On-Demand
|
|
583
|
-
|
|
584
|
-
### Filosofía
|
|
585
|
-
```
|
|
586
|
-
Durante desarrollo:
|
|
587
|
-
✅ Release Please (changelog automático)
|
|
588
|
-
✅ Commits convencionales
|
|
589
|
-
✅ Sin complicaciones
|
|
590
|
-
|
|
591
|
-
Cuando estés listo (feature completa, v1.0, etc.):
|
|
592
|
-
✅ Ejecutar workflow manual de documentación
|
|
593
|
-
✅ Generar docs API según tu lenguaje
|
|
594
|
-
✅ Deploy automático a GitHub Pages
|
|
595
|
-
```
|
|
596
|
-
|
|
597
|
-
### Ventajas
|
|
598
|
-
- ✅ **Lo mejor de ambos mundos**
|
|
599
|
-
- ✅ **No genera docs en cada commit** (innecesario)
|
|
600
|
-
- ✅ **Control total sobre cuándo documentar**
|
|
601
|
-
- ✅ **Bajo overhead durante desarrollo**
|
|
602
|
-
|
|
603
|
-
---
|
|
604
|
-
|
|
605
|
-
## 📚 Documentación API On-Demand
|
|
606
|
-
|
|
607
|
-
### Setup: Workflow Manual con Detección Automática
|
|
608
|
-
|
|
609
|
-
```yaml
|
|
610
|
-
# .github/workflows/docs-api.yml
|
|
611
|
-
name: Generate API Documentation
|
|
612
|
-
|
|
613
|
-
on:
|
|
614
|
-
# Trigger manual desde GitHub UI
|
|
615
|
-
workflow_dispatch:
|
|
616
|
-
inputs:
|
|
617
|
-
deploy_to_pages:
|
|
618
|
-
description: 'Deploy to GitHub Pages?'
|
|
619
|
-
required: true
|
|
620
|
-
default: 'true'
|
|
621
|
-
type: boolean
|
|
622
|
-
|
|
623
|
-
# O automático en releases
|
|
624
|
-
release:
|
|
625
|
-
types: [published]
|
|
626
|
-
|
|
627
|
-
# O automático en tags
|
|
628
|
-
push:
|
|
629
|
-
tags:
|
|
630
|
-
- 'v*'
|
|
631
|
-
|
|
632
|
-
permissions:
|
|
633
|
-
contents: write
|
|
634
|
-
pages: write
|
|
635
|
-
id-token: write
|
|
636
|
-
|
|
637
|
-
jobs:
|
|
638
|
-
detect-and-generate:
|
|
639
|
-
runs-on: ubuntu-latest
|
|
640
|
-
|
|
641
|
-
steps:
|
|
642
|
-
- name: Checkout
|
|
643
|
-
uses: actions/checkout@v4
|
|
644
|
-
with:
|
|
645
|
-
fetch-depth: 0
|
|
646
|
-
|
|
647
|
-
# ═══════════════════════════════════════════════════════════
|
|
648
|
-
# DETECCIÓN AUTOMÁTICA DE LENGUAJE
|
|
649
|
-
# ═══════════════════════════════════════════════════════════
|
|
650
|
-
- name: Detect Language
|
|
651
|
-
id: detect
|
|
652
|
-
run: |
|
|
653
|
-
if [ -f "package.json" ]; then
|
|
654
|
-
echo "language=typescript" >> $GITHUB_OUTPUT
|
|
655
|
-
echo "📦 TypeScript/JavaScript detectado"
|
|
656
|
-
elif [ -f "pyproject.toml" ] || [ -f "setup.py" ]; then
|
|
657
|
-
echo "language=python" >> $GITHUB_OUTPUT
|
|
658
|
-
echo "🐍 Python detectado"
|
|
659
|
-
elif [ -f "go.mod" ]; then
|
|
660
|
-
echo "language=go" >> $GITHUB_OUTPUT
|
|
661
|
-
echo "🐹 Go detectado"
|
|
662
|
-
elif [ -f "build.gradle.kts" ] || [ -f "build.gradle" ]; then
|
|
663
|
-
echo "language=java" >> $GITHUB_OUTPUT
|
|
664
|
-
echo "☕ Java/Kotlin detectado"
|
|
665
|
-
elif [ -f "Cargo.toml" ]; then
|
|
666
|
-
echo "language=rust" >> $GITHUB_OUTPUT
|
|
667
|
-
echo "🦀 Rust detectado"
|
|
668
|
-
else
|
|
669
|
-
echo "language=unknown" >> $GITHUB_OUTPUT
|
|
670
|
-
echo "❌ Lenguaje no detectado"
|
|
671
|
-
exit 1
|
|
672
|
-
fi
|
|
673
|
-
|
|
674
|
-
# ═══════════════════════════════════════════════════════════
|
|
675
|
-
# TYPESCRIPT / JAVASCRIPT - TypeDoc
|
|
676
|
-
# ═══════════════════════════════════════════════════════════
|
|
677
|
-
- name: Setup Node
|
|
678
|
-
if: steps.detect.outputs.language == 'typescript'
|
|
679
|
-
uses: actions/setup-node@v4
|
|
680
|
-
with:
|
|
681
|
-
node-version: 20
|
|
682
|
-
|
|
683
|
-
- name: Generate TypeScript Docs
|
|
684
|
-
if: steps.detect.outputs.language == 'typescript'
|
|
685
|
-
run: |
|
|
686
|
-
# Instalar TypeDoc
|
|
687
|
-
npm install -g typedoc
|
|
688
|
-
|
|
689
|
-
# Generar docs
|
|
690
|
-
typedoc \
|
|
691
|
-
--out docs/api \
|
|
692
|
-
--entryPointStrategy expand \
|
|
693
|
-
--exclude "**/*.test.ts" \
|
|
694
|
-
--exclude "**/*.spec.ts" \
|
|
695
|
-
--excludePrivate \
|
|
696
|
-
--theme default \
|
|
697
|
-
src/
|
|
698
|
-
|
|
699
|
-
echo "✅ TypeDoc generado en docs/api"
|
|
700
|
-
|
|
701
|
-
# ═══════════════════════════════════════════════════════════
|
|
702
|
-
# PYTHON - Sphinx
|
|
703
|
-
# ═══════════════════════════════════════════════════════════
|
|
704
|
-
- name: Setup Python
|
|
705
|
-
if: steps.detect.outputs.language == 'python'
|
|
706
|
-
uses: actions/setup-python@v5
|
|
707
|
-
with:
|
|
708
|
-
python-version: '3.12'
|
|
709
|
-
|
|
710
|
-
- name: Generate Python Docs
|
|
711
|
-
if: steps.detect.outputs.language == 'python'
|
|
712
|
-
run: |
|
|
713
|
-
# Instalar Sphinx y tema
|
|
714
|
-
pip install sphinx sphinx-rtd-theme sphinx-autodoc-typehints
|
|
715
|
-
|
|
716
|
-
# Crear estructura si no existe
|
|
717
|
-
if [ ! -d "docs" ]; then
|
|
718
|
-
sphinx-quickstart docs \
|
|
719
|
-
--project="API Documentation" \
|
|
720
|
-
--author="Auto-generated" \
|
|
721
|
-
--release="1.0" \
|
|
722
|
-
--language="en" \
|
|
723
|
-
--sep \
|
|
724
|
-
--ext-autodoc \
|
|
725
|
-
--ext-viewcode \
|
|
726
|
-
--no-batchfile
|
|
727
|
-
fi
|
|
728
|
-
|
|
729
|
-
# Generar documentación automática
|
|
730
|
-
sphinx-apidoc -o docs/source app/
|
|
731
|
-
|
|
732
|
-
# Build HTML
|
|
733
|
-
sphinx-build -b html docs/source docs/api
|
|
734
|
-
|
|
735
|
-
echo "✅ Sphinx generado en docs/api"
|
|
736
|
-
|
|
737
|
-
# ═══════════════════════════════════════════════════════════
|
|
738
|
-
# GO - pkgsite (Go's official doc server)
|
|
739
|
-
# ═══════════════════════════════════════════════════════════
|
|
740
|
-
- name: Setup Go
|
|
741
|
-
if: steps.detect.outputs.language == 'go'
|
|
742
|
-
uses: actions/setup-go@v5
|
|
743
|
-
with:
|
|
744
|
-
go-version: '1.25'
|
|
745
|
-
|
|
746
|
-
- name: Generate Go Docs
|
|
747
|
-
if: steps.detect.outputs.language == 'go'
|
|
748
|
-
run: |
|
|
749
|
-
# Instalar pkgsite
|
|
750
|
-
go install golang.org/x/pkgsite/cmd/pkgsite@latest
|
|
751
|
-
|
|
752
|
-
# Generar documentación estática
|
|
753
|
-
mkdir -p docs/api
|
|
754
|
-
|
|
755
|
-
# Extraer docs en formato HTML
|
|
756
|
-
pkgsite -http=:6060 &
|
|
757
|
-
PKGSITE_PID=$!
|
|
758
|
-
sleep 5
|
|
759
|
-
|
|
760
|
-
# Descargar páginas HTML (ejemplo para módulo principal)
|
|
761
|
-
MODULE_NAME=$(go list -m)
|
|
762
|
-
wget -r -np -nH --cut-dirs=1 -P docs/api http://localhost:6060/$MODULE_NAME
|
|
763
|
-
|
|
764
|
-
kill $PKGSITE_PID
|
|
765
|
-
|
|
766
|
-
echo "✅ Go docs generado en docs/api"
|
|
767
|
-
|
|
768
|
-
# ═══════════════════════════════════════════════════════════
|
|
769
|
-
# JAVA/KOTLIN - Dokka
|
|
770
|
-
# ═══════════════════════════════════════════════════════════
|
|
771
|
-
- name: Setup Java
|
|
772
|
-
if: steps.detect.outputs.language == 'java'
|
|
773
|
-
uses: actions/setup-java@v4
|
|
774
|
-
with:
|
|
775
|
-
distribution: 'temurin'
|
|
776
|
-
java-version: '25'
|
|
777
|
-
|
|
778
|
-
- name: Generate Java/Kotlin Docs
|
|
779
|
-
if: steps.detect.outputs.language == 'java'
|
|
780
|
-
run: |
|
|
781
|
-
# Asegurar que Dokka está en build.gradle.kts
|
|
782
|
-
if ! grep -q "dokka" build.gradle.kts; then
|
|
783
|
-
echo "⚠️ Dokka no configurado. Agregando plugin..."
|
|
784
|
-
sed -i '1i id("org.jetbrains.dokka") version "1.9.20"' build.gradle.kts
|
|
785
|
-
fi
|
|
786
|
-
|
|
787
|
-
# Generar docs
|
|
788
|
-
./gradlew dokkaHtml
|
|
789
|
-
|
|
790
|
-
# Mover a docs/api
|
|
791
|
-
mkdir -p docs/api
|
|
792
|
-
cp -r build/dokka/html/* docs/api/
|
|
793
|
-
|
|
794
|
-
echo "✅ Dokka generado en docs/api"
|
|
795
|
-
|
|
796
|
-
# ═══════════════════════════════════════════════════════════
|
|
797
|
-
# RUST - rustdoc
|
|
798
|
-
# ═══════════════════════════════════════════════════════════
|
|
799
|
-
- name: Setup Rust
|
|
800
|
-
if: steps.detect.outputs.language == 'rust'
|
|
801
|
-
uses: dtolnay/rust-toolchain@stable
|
|
802
|
-
|
|
803
|
-
- name: Generate Rust Docs
|
|
804
|
-
if: steps.detect.outputs.language == 'rust'
|
|
805
|
-
run: |
|
|
806
|
-
# Generar docs
|
|
807
|
-
cargo doc --no-deps --document-private-items
|
|
808
|
-
|
|
809
|
-
# Mover a docs/api
|
|
810
|
-
mkdir -p docs/api
|
|
811
|
-
cp -r target/doc/* docs/api/
|
|
812
|
-
|
|
813
|
-
echo "✅ Rustdoc generado en docs/api"
|
|
814
|
-
|
|
815
|
-
# ═══════════════════════════════════════════════════════════
|
|
816
|
-
# CREAR INDEX.HTML PERSONALIZADO
|
|
817
|
-
# ═══════════════════════════════════════════════════════════
|
|
818
|
-
- name: Create Custom Index
|
|
819
|
-
run: |
|
|
820
|
-
cat > docs/index.html << 'EOF'
|
|
821
|
-
<!DOCTYPE html>
|
|
822
|
-
<html lang="en">
|
|
823
|
-
<head>
|
|
824
|
-
<meta charset="UTF-8">
|
|
825
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
826
|
-
<title>API Documentation</title>
|
|
827
|
-
<style>
|
|
828
|
-
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
829
|
-
body {
|
|
830
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
831
|
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
832
|
-
min-height: 100vh;
|
|
833
|
-
display: flex;
|
|
834
|
-
align-items: center;
|
|
835
|
-
justify-content: center;
|
|
836
|
-
padding: 20px;
|
|
837
|
-
}
|
|
838
|
-
.container {
|
|
839
|
-
background: white;
|
|
840
|
-
border-radius: 20px;
|
|
841
|
-
padding: 60px;
|
|
842
|
-
max-width: 600px;
|
|
843
|
-
box-shadow: 0 20px 60px rgba(0,0,0,0.3);
|
|
844
|
-
text-align: center;
|
|
845
|
-
}
|
|
846
|
-
h1 {
|
|
847
|
-
font-size: 3em;
|
|
848
|
-
margin-bottom: 20px;
|
|
849
|
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
850
|
-
-webkit-background-clip: text;
|
|
851
|
-
-webkit-text-fill-color: transparent;
|
|
852
|
-
}
|
|
853
|
-
p {
|
|
854
|
-
color: #666;
|
|
855
|
-
font-size: 1.2em;
|
|
856
|
-
margin-bottom: 40px;
|
|
857
|
-
}
|
|
858
|
-
.btn {
|
|
859
|
-
display: inline-block;
|
|
860
|
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
861
|
-
color: white;
|
|
862
|
-
padding: 15px 40px;
|
|
863
|
-
border-radius: 50px;
|
|
864
|
-
text-decoration: none;
|
|
865
|
-
font-weight: 600;
|
|
866
|
-
transition: transform 0.3s, box-shadow 0.3s;
|
|
867
|
-
font-size: 1.1em;
|
|
868
|
-
}
|
|
869
|
-
.btn:hover {
|
|
870
|
-
transform: translateY(-3px);
|
|
871
|
-
box-shadow: 0 10px 30px rgba(102, 126, 234, 0.4);
|
|
872
|
-
}
|
|
873
|
-
.meta {
|
|
874
|
-
margin-top: 40px;
|
|
875
|
-
padding-top: 40px;
|
|
876
|
-
border-top: 1px solid #eee;
|
|
877
|
-
color: #999;
|
|
878
|
-
font-size: 0.9em;
|
|
879
|
-
}
|
|
880
|
-
</style>
|
|
881
|
-
</head>
|
|
882
|
-
<body>
|
|
883
|
-
<div class="container">
|
|
884
|
-
<h1>📚 API Documentation</h1>
|
|
885
|
-
<p>Documentación completa generada automáticamente</p>
|
|
886
|
-
<a href="./api/index.html" class="btn">Ver Documentación →</a>
|
|
887
|
-
<div class="meta">
|
|
888
|
-
<p>Generado el: $(date '+%Y-%m-%d %H:%M:%S')</p>
|
|
889
|
-
<p>Commit: $(git rev-parse --short HEAD)</p>
|
|
890
|
-
</div>
|
|
891
|
-
</div>
|
|
892
|
-
</body>
|
|
893
|
-
</html>
|
|
894
|
-
EOF
|
|
895
|
-
|
|
896
|
-
echo "✅ Index personalizado creado"
|
|
897
|
-
|
|
898
|
-
# ═══════════════════════════════════════════════════════════
|
|
899
|
-
# DEPLOY A GITHUB PAGES
|
|
900
|
-
# ═══════════════════════════════════════════════════════════
|
|
901
|
-
- name: Deploy to GitHub Pages
|
|
902
|
-
if: inputs.deploy_to_pages == 'true' || github.event_name == 'release'
|
|
903
|
-
uses: peaceiris/actions-gh-pages@v3
|
|
904
|
-
with:
|
|
905
|
-
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
906
|
-
publish_dir: ./docs
|
|
907
|
-
cname: docs.tudominio.com # Opcional: custom domain
|
|
908
|
-
|
|
909
|
-
# ═══════════════════════════════════════════════════════════
|
|
910
|
-
# COMMIT DOCS AL REPO (OPCIONAL)
|
|
911
|
-
# ═══════════════════════════════════════════════════════════
|
|
912
|
-
- name: Commit Docs to Repo
|
|
913
|
-
if: inputs.deploy_to_pages == 'false'
|
|
914
|
-
run: |
|
|
915
|
-
git config user.name "github-actions[bot]"
|
|
916
|
-
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
917
|
-
git add docs/
|
|
918
|
-
git commit -m "docs: update API documentation [skip ci]" || echo "No changes"
|