@factiii/stack 0.1.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/README.md +420 -0
- package/bin/factiii +229 -0
- package/dist/cli/check-config.d.ts +9 -0
- package/dist/cli/check-config.d.ts.map +1 -0
- package/dist/cli/check-config.js +19 -0
- package/dist/cli/check-config.js.map +1 -0
- package/dist/cli/deploy-secrets.d.ts +16 -0
- package/dist/cli/deploy-secrets.d.ts.map +1 -0
- package/dist/cli/deploy-secrets.js +227 -0
- package/dist/cli/deploy-secrets.js.map +1 -0
- package/dist/cli/deploy.d.ts +30 -0
- package/dist/cli/deploy.d.ts.map +1 -0
- package/dist/cli/deploy.js +306 -0
- package/dist/cli/deploy.js.map +1 -0
- package/dist/cli/deployer.d.ts +13 -0
- package/dist/cli/deployer.d.ts.map +1 -0
- package/dist/cli/deployer.js +21 -0
- package/dist/cli/deployer.js.map +1 -0
- package/dist/cli/dev-sync.d.ts +30 -0
- package/dist/cli/dev-sync.d.ts.map +1 -0
- package/dist/cli/dev-sync.js +500 -0
- package/dist/cli/dev-sync.js.map +1 -0
- package/dist/cli/execute-plugin-command.d.ts +25 -0
- package/dist/cli/execute-plugin-command.d.ts.map +1 -0
- package/dist/cli/execute-plugin-command.js +237 -0
- package/dist/cli/execute-plugin-command.js.map +1 -0
- package/dist/cli/fix.d.ts +22 -0
- package/dist/cli/fix.d.ts.map +1 -0
- package/dist/cli/fix.js +267 -0
- package/dist/cli/fix.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +31 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +9 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +190 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/plugin-commands.d.ts +22 -0
- package/dist/cli/plugin-commands.d.ts.map +1 -0
- package/dist/cli/plugin-commands.js +121 -0
- package/dist/cli/plugin-commands.js.map +1 -0
- package/dist/cli/scan.d.ts +66 -0
- package/dist/cli/scan.d.ts.map +1 -0
- package/dist/cli/scan.js +511 -0
- package/dist/cli/scan.js.map +1 -0
- package/dist/cli/secrets.d.ts +19 -0
- package/dist/cli/secrets.d.ts.map +1 -0
- package/dist/cli/secrets.js +318 -0
- package/dist/cli/secrets.js.map +1 -0
- package/dist/cli/undeploy.d.ts +9 -0
- package/dist/cli/undeploy.d.ts.map +1 -0
- package/dist/cli/undeploy.js +95 -0
- package/dist/cli/undeploy.js.map +1 -0
- package/dist/cli/upgrade.d.ts +9 -0
- package/dist/cli/upgrade.d.ts.map +1 -0
- package/dist/cli/upgrade.js +24 -0
- package/dist/cli/upgrade.js.map +1 -0
- package/dist/cli/validate.d.ts +9 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +20 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/generators/generate-factiii-auto.d.ts +31 -0
- package/dist/generators/generate-factiii-auto.d.ts.map +1 -0
- package/dist/generators/generate-factiii-auto.js +251 -0
- package/dist/generators/generate-factiii-auto.js.map +1 -0
- package/dist/generators/generate-factiii-yml.d.ts +23 -0
- package/dist/generators/generate-factiii-yml.d.ts.map +1 -0
- package/dist/generators/generate-factiii-yml.js +228 -0
- package/dist/generators/generate-factiii-yml.js.map +1 -0
- package/dist/generators/index.d.ts +8 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +14 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +90 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/addons/server-mode/index.d.ts +57 -0
- package/dist/plugins/addons/server-mode/index.d.ts.map +1 -0
- package/dist/plugins/addons/server-mode/index.js +136 -0
- package/dist/plugins/addons/server-mode/index.js.map +1 -0
- package/dist/plugins/addons/server-mode/scanfix/mac.d.ts +17 -0
- package/dist/plugins/addons/server-mode/scanfix/mac.d.ts.map +1 -0
- package/dist/plugins/addons/server-mode/scanfix/mac.js +461 -0
- package/dist/plugins/addons/server-mode/scanfix/mac.js.map +1 -0
- package/dist/plugins/addons/server-mode/scanfix/ubuntu.d.ts +12 -0
- package/dist/plugins/addons/server-mode/scanfix/ubuntu.d.ts.map +1 -0
- package/dist/plugins/addons/server-mode/scanfix/ubuntu.js +246 -0
- package/dist/plugins/addons/server-mode/scanfix/ubuntu.js.map +1 -0
- package/dist/plugins/addons/server-mode/scanfix/windows.d.ts +14 -0
- package/dist/plugins/addons/server-mode/scanfix/windows.d.ts.map +1 -0
- package/dist/plugins/addons/server-mode/scanfix/windows.js +113 -0
- package/dist/plugins/addons/server-mode/scanfix/windows.js.map +1 -0
- package/dist/plugins/approved.json +13 -0
- package/dist/plugins/frameworks/prisma-trpc/index.d.ts +65 -0
- package/dist/plugins/frameworks/prisma-trpc/index.d.ts.map +1 -0
- package/dist/plugins/frameworks/prisma-trpc/index.js +668 -0
- package/dist/plugins/frameworks/prisma-trpc/index.js.map +1 -0
- package/dist/plugins/index.d.ts +101 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +411 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/interfaces/addon.d.ts +43 -0
- package/dist/plugins/interfaces/addon.d.ts.map +1 -0
- package/dist/plugins/interfaces/addon.js +53 -0
- package/dist/plugins/interfaces/addon.js.map +1 -0
- package/dist/plugins/interfaces/framework.d.ts +43 -0
- package/dist/plugins/interfaces/framework.d.ts.map +1 -0
- package/dist/plugins/interfaces/framework.js +53 -0
- package/dist/plugins/interfaces/framework.js.map +1 -0
- package/dist/plugins/interfaces/index.d.ts +10 -0
- package/dist/plugins/interfaces/index.d.ts.map +1 -0
- package/dist/plugins/interfaces/index.js +17 -0
- package/dist/plugins/interfaces/index.js.map +1 -0
- package/dist/plugins/interfaces/pipeline.d.ts +78 -0
- package/dist/plugins/interfaces/pipeline.d.ts.map +1 -0
- package/dist/plugins/interfaces/pipeline.js +82 -0
- package/dist/plugins/interfaces/pipeline.js.map +1 -0
- package/dist/plugins/interfaces/server.d.ts +65 -0
- package/dist/plugins/interfaces/server.d.ts.map +1 -0
- package/dist/plugins/interfaces/server.js +72 -0
- package/dist/plugins/interfaces/server.js.map +1 -0
- package/dist/plugins/pipelines/aws/configs/ec2.d.ts +9 -0
- package/dist/plugins/pipelines/aws/configs/ec2.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/configs/ec2.js +34 -0
- package/dist/plugins/pipelines/aws/configs/ec2.js.map +1 -0
- package/dist/plugins/pipelines/aws/configs/free-tier.d.ts +13 -0
- package/dist/plugins/pipelines/aws/configs/free-tier.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/configs/free-tier.js +86 -0
- package/dist/plugins/pipelines/aws/configs/free-tier.js.map +1 -0
- package/dist/plugins/pipelines/aws/configs/index.d.ts +14 -0
- package/dist/plugins/pipelines/aws/configs/index.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/configs/index.js +21 -0
- package/dist/plugins/pipelines/aws/configs/index.js.map +1 -0
- package/dist/plugins/pipelines/aws/configs/types.d.ts +36 -0
- package/dist/plugins/pipelines/aws/configs/types.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/configs/types.js +9 -0
- package/dist/plugins/pipelines/aws/configs/types.js.map +1 -0
- package/dist/plugins/pipelines/aws/dev.d.ts +10 -0
- package/dist/plugins/pipelines/aws/dev.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/dev.js +70 -0
- package/dist/plugins/pipelines/aws/dev.js.map +1 -0
- package/dist/plugins/pipelines/aws/index.d.ts +118 -0
- package/dist/plugins/pipelines/aws/index.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/index.js +346 -0
- package/dist/plugins/pipelines/aws/index.js.map +1 -0
- package/dist/plugins/pipelines/aws/prod.d.ts +19 -0
- package/dist/plugins/pipelines/aws/prod.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/prod.js +362 -0
- package/dist/plugins/pipelines/aws/prod.js.map +1 -0
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts +7 -0
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.js +31 -0
- package/dist/plugins/pipelines/aws/scanfix/aws-cli.js.map +1 -0
- package/dist/plugins/pipelines/aws/scanfix/config.d.ts +7 -0
- package/dist/plugins/pipelines/aws/scanfix/config.d.ts.map +1 -0
- package/dist/plugins/pipelines/aws/scanfix/config.js +134 -0
- package/dist/plugins/pipelines/aws/scanfix/config.js.map +1 -0
- package/dist/plugins/pipelines/factiii/github-secrets-store.d.ts +65 -0
- package/dist/plugins/pipelines/factiii/github-secrets-store.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/github-secrets-store.js +221 -0
- package/dist/plugins/pipelines/factiii/github-secrets-store.js.map +1 -0
- package/dist/plugins/pipelines/factiii/index.d.ts +195 -0
- package/dist/plugins/pipelines/factiii/index.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/index.js +862 -0
- package/dist/plugins/pipelines/factiii/index.js.map +1 -0
- package/dist/plugins/pipelines/factiii/prod.d.ts +17 -0
- package/dist/plugins/pipelines/factiii/prod.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/prod.js +282 -0
- package/dist/plugins/pipelines/factiii/prod.js.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/config.d.ts +7 -0
- package/dist/plugins/pipelines/factiii/scanfix/config.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/config.js +80 -0
- package/dist/plugins/pipelines/factiii/scanfix/config.js.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/github-cli.d.ts +7 -0
- package/dist/plugins/pipelines/factiii/scanfix/github-cli.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/github-cli.js +43 -0
- package/dist/plugins/pipelines/factiii/scanfix/github-cli.js.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/secrets.d.ts +7 -0
- package/dist/plugins/pipelines/factiii/scanfix/secrets.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/secrets.js +237 -0
- package/dist/plugins/pipelines/factiii/scanfix/secrets.js.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/workflows.d.ts +7 -0
- package/dist/plugins/pipelines/factiii/scanfix/workflows.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/scanfix/workflows.js +169 -0
- package/dist/plugins/pipelines/factiii/scanfix/workflows.js.map +1 -0
- package/dist/plugins/pipelines/factiii/staging.d.ts +25 -0
- package/dist/plugins/pipelines/factiii/staging.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/staging.js +223 -0
- package/dist/plugins/pipelines/factiii/staging.js.map +1 -0
- package/dist/plugins/pipelines/factiii/utils/detection.d.ts +36 -0
- package/dist/plugins/pipelines/factiii/utils/detection.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/utils/detection.js +140 -0
- package/dist/plugins/pipelines/factiii/utils/detection.js.map +1 -0
- package/dist/plugins/pipelines/factiii/utils/workflows.d.ts +16 -0
- package/dist/plugins/pipelines/factiii/utils/workflows.d.ts.map +1 -0
- package/dist/plugins/pipelines/factiii/utils/workflows.js +129 -0
- package/dist/plugins/pipelines/factiii/utils/workflows.js.map +1 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-cicd-prod.yml +112 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-cicd-staging.yml +112 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-command.yml +130 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-deploy.yml +198 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-dev-sync.yml +179 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-fix.yml +176 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-scan.yml +176 -0
- package/dist/plugins/pipelines/factiii/workflows/factiii-undeploy.yml +95 -0
- package/dist/plugins/servers/amazon-linux/index.d.ts +93 -0
- package/dist/plugins/servers/amazon-linux/index.d.ts.map +1 -0
- package/dist/plugins/servers/amazon-linux/index.js +217 -0
- package/dist/plugins/servers/amazon-linux/index.js.map +1 -0
- package/dist/plugins/servers/mac/dev.d.ts +10 -0
- package/dist/plugins/servers/mac/dev.d.ts.map +1 -0
- package/dist/plugins/servers/mac/dev.js +71 -0
- package/dist/plugins/servers/mac/dev.js.map +1 -0
- package/dist/plugins/servers/mac/index.d.ts +101 -0
- package/dist/plugins/servers/mac/index.d.ts.map +1 -0
- package/dist/plugins/servers/mac/index.js +257 -0
- package/dist/plugins/servers/mac/index.js.map +1 -0
- package/dist/plugins/servers/mac/scanfix/config.d.ts +7 -0
- package/dist/plugins/servers/mac/scanfix/config.d.ts.map +1 -0
- package/dist/plugins/servers/mac/scanfix/config.js +168 -0
- package/dist/plugins/servers/mac/scanfix/config.js.map +1 -0
- package/dist/plugins/servers/mac/scanfix/containers.d.ts +7 -0
- package/dist/plugins/servers/mac/scanfix/containers.d.ts.map +1 -0
- package/dist/plugins/servers/mac/scanfix/containers.js +167 -0
- package/dist/plugins/servers/mac/scanfix/containers.js.map +1 -0
- package/dist/plugins/servers/mac/scanfix/system.d.ts +7 -0
- package/dist/plugins/servers/mac/scanfix/system.d.ts.map +1 -0
- package/dist/plugins/servers/mac/scanfix/system.js +144 -0
- package/dist/plugins/servers/mac/scanfix/system.js.map +1 -0
- package/dist/plugins/servers/mac/staging.d.ts +21 -0
- package/dist/plugins/servers/mac/staging.d.ts.map +1 -0
- package/dist/plugins/servers/mac/staging.js +708 -0
- package/dist/plugins/servers/mac/staging.js.map +1 -0
- package/dist/plugins/servers/ubuntu/index.d.ts +93 -0
- package/dist/plugins/servers/ubuntu/index.d.ts.map +1 -0
- package/dist/plugins/servers/ubuntu/index.js +224 -0
- package/dist/plugins/servers/ubuntu/index.js.map +1 -0
- package/dist/plugins/servers/windows/index.d.ts +90 -0
- package/dist/plugins/servers/windows/index.d.ts.map +1 -0
- package/dist/plugins/servers/windows/index.js +205 -0
- package/dist/plugins/servers/windows/index.js.map +1 -0
- package/dist/scanfix/commands/index.d.ts +27 -0
- package/dist/scanfix/commands/index.d.ts.map +1 -0
- package/dist/scanfix/commands/index.js +97 -0
- package/dist/scanfix/commands/index.js.map +1 -0
- package/dist/scanfix/commands/mac.d.ts +11 -0
- package/dist/scanfix/commands/mac.d.ts.map +1 -0
- package/dist/scanfix/commands/mac.js +31 -0
- package/dist/scanfix/commands/mac.js.map +1 -0
- package/dist/scanfix/commands/ubuntu.d.ts +11 -0
- package/dist/scanfix/commands/ubuntu.d.ts.map +1 -0
- package/dist/scanfix/commands/ubuntu.js +30 -0
- package/dist/scanfix/commands/ubuntu.js.map +1 -0
- package/dist/scanfix/fixes/certbot.d.ts +25 -0
- package/dist/scanfix/fixes/certbot.d.ts.map +1 -0
- package/dist/scanfix/fixes/certbot.js +136 -0
- package/dist/scanfix/fixes/certbot.js.map +1 -0
- package/dist/scanfix/fixes/docker.d.ts +29 -0
- package/dist/scanfix/fixes/docker.d.ts.map +1 -0
- package/dist/scanfix/fixes/docker.js +149 -0
- package/dist/scanfix/fixes/docker.js.map +1 -0
- package/dist/scanfix/fixes/git.d.ts +20 -0
- package/dist/scanfix/fixes/git.d.ts.map +1 -0
- package/dist/scanfix/fixes/git.js +71 -0
- package/dist/scanfix/fixes/git.js.map +1 -0
- package/dist/scanfix/fixes/index.d.ts +11 -0
- package/dist/scanfix/fixes/index.d.ts.map +1 -0
- package/dist/scanfix/fixes/index.js +27 -0
- package/dist/scanfix/fixes/index.js.map +1 -0
- package/dist/scanfix/fixes/node.d.ts +20 -0
- package/dist/scanfix/fixes/node.d.ts.map +1 -0
- package/dist/scanfix/fixes/node.js +71 -0
- package/dist/scanfix/fixes/node.js.map +1 -0
- package/dist/scanfix/fixes/pnpm.d.ts +20 -0
- package/dist/scanfix/fixes/pnpm.d.ts.map +1 -0
- package/dist/scanfix/fixes/pnpm.js +122 -0
- package/dist/scanfix/fixes/pnpm.js.map +1 -0
- package/dist/scanfix/index.d.ts +23 -0
- package/dist/scanfix/index.d.ts.map +1 -0
- package/dist/scanfix/index.js +44 -0
- package/dist/scanfix/index.js.map +1 -0
- package/dist/scanfix/platform.d.ts +20 -0
- package/dist/scanfix/platform.d.ts.map +1 -0
- package/dist/scanfix/platform.js +48 -0
- package/dist/scanfix/platform.js.map +1 -0
- package/dist/scanfix/ssl-cert-helper.d.ts +27 -0
- package/dist/scanfix/ssl-cert-helper.d.ts.map +1 -0
- package/dist/scanfix/ssl-cert-helper.js +117 -0
- package/dist/scanfix/ssl-cert-helper.js.map +1 -0
- package/dist/scanfix/types.d.ts +27 -0
- package/dist/scanfix/types.d.ts.map +1 -0
- package/dist/scanfix/types.js +8 -0
- package/dist/scanfix/types.js.map +1 -0
- package/dist/scripts/check-existing-secrets.d.ts +6 -0
- package/dist/scripts/check-existing-secrets.d.ts.map +1 -0
- package/dist/scripts/check-existing-secrets.js +86 -0
- package/dist/scripts/check-existing-secrets.js.map +1 -0
- package/dist/scripts/generate-all.d.ts +40 -0
- package/dist/scripts/generate-all.d.ts.map +1 -0
- package/dist/scripts/generate-all.js +373 -0
- package/dist/scripts/generate-all.js.map +1 -0
- package/dist/scripts/get-repo-name.d.ts +6 -0
- package/dist/scripts/get-repo-name.d.ts.map +1 -0
- package/dist/scripts/get-repo-name.js +54 -0
- package/dist/scripts/get-repo-name.js.map +1 -0
- package/dist/scripts/index.d.ts +7 -0
- package/dist/scripts/index.d.ts.map +1 -0
- package/dist/scripts/index.js +14 -0
- package/dist/scripts/index.js.map +1 -0
- package/dist/scripts/validate-env-files.d.ts +6 -0
- package/dist/scripts/validate-env-files.d.ts.map +1 -0
- package/dist/scripts/validate-env-files.js +126 -0
- package/dist/scripts/validate-env-files.js.map +1 -0
- package/dist/scripts/validate-example-values.d.ts +8 -0
- package/dist/scripts/validate-example-values.d.ts.map +1 -0
- package/dist/scripts/validate-example-values.js +88 -0
- package/dist/scripts/validate-example-values.js.map +1 -0
- package/dist/scripts/validate-factiii-yml.d.ts +6 -0
- package/dist/scripts/validate-factiii-yml.d.ts.map +1 -0
- package/dist/scripts/validate-factiii-yml.js +71 -0
- package/dist/scripts/validate-factiii-yml.js.map +1 -0
- package/dist/types/cli.d.ts +138 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +8 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/config.d.ts +113 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +8 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +25 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/plugin.d.ts +352 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +8 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/utils/ansible-vault-secrets.d.ts +95 -0
- package/dist/utils/ansible-vault-secrets.d.ts.map +1 -0
- package/dist/utils/ansible-vault-secrets.js +406 -0
- package/dist/utils/ansible-vault-secrets.js.map +1 -0
- package/dist/utils/config-helpers.d.ts +72 -0
- package/dist/utils/config-helpers.d.ts.map +1 -0
- package/dist/utils/config-helpers.js +171 -0
- package/dist/utils/config-helpers.js.map +1 -0
- package/dist/utils/config-schema.d.ts +17 -0
- package/dist/utils/config-schema.d.ts.map +1 -0
- package/dist/utils/config-schema.js +100 -0
- package/dist/utils/config-schema.js.map +1 -0
- package/dist/utils/config-validator.d.ts +29 -0
- package/dist/utils/config-validator.d.ts.map +1 -0
- package/dist/utils/config-validator.js +146 -0
- package/dist/utils/config-validator.js.map +1 -0
- package/dist/utils/deployment-report.d.ts +100 -0
- package/dist/utils/deployment-report.d.ts.map +1 -0
- package/dist/utils/deployment-report.js +225 -0
- package/dist/utils/deployment-report.js.map +1 -0
- package/dist/utils/dns-validator.d.ts +19 -0
- package/dist/utils/dns-validator.d.ts.map +1 -0
- package/dist/utils/dns-validator.js +94 -0
- package/dist/utils/dns-validator.js.map +1 -0
- package/dist/utils/env-validator.d.ts +108 -0
- package/dist/utils/env-validator.d.ts.map +1 -0
- package/dist/utils/env-validator.js +342 -0
- package/dist/utils/env-validator.js.map +1 -0
- package/dist/utils/github-workflow-monitor.d.ts +49 -0
- package/dist/utils/github-workflow-monitor.d.ts.map +1 -0
- package/dist/utils/github-workflow-monitor.js +145 -0
- package/dist/utils/github-workflow-monitor.js.map +1 -0
- package/dist/utils/index.d.ts +18 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +48 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/secret-prompts.d.ts +67 -0
- package/dist/utils/secret-prompts.d.ts.map +1 -0
- package/dist/utils/secret-prompts.js +369 -0
- package/dist/utils/secret-prompts.js.map +1 -0
- package/dist/utils/server-check.d.ts +43 -0
- package/dist/utils/server-check.d.ts.map +1 -0
- package/dist/utils/server-check.js +397 -0
- package/dist/utils/server-check.js.map +1 -0
- package/dist/utils/ssh-deploy.d.ts +70 -0
- package/dist/utils/ssh-deploy.d.ts.map +1 -0
- package/dist/utils/ssh-deploy.js +268 -0
- package/dist/utils/ssh-deploy.js.map +1 -0
- package/dist/utils/ssh-helper.d.ts +40 -0
- package/dist/utils/ssh-helper.d.ts.map +1 -0
- package/dist/utils/ssh-helper.js +221 -0
- package/dist/utils/ssh-helper.js.map +1 -0
- package/dist/utils/template-generator.d.ts +42 -0
- package/dist/utils/template-generator.d.ts.map +1 -0
- package/dist/utils/template-generator.js +223 -0
- package/dist/utils/template-generator.js.map +1 -0
- package/dist/utils/version-check.d.ts +69 -0
- package/dist/utils/version-check.d.ts.map +1 -0
- package/dist/utils/version-check.js +211 -0
- package/dist/utils/version-check.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Schema Validator
|
|
3
|
+
*
|
|
4
|
+
* Validates factiii.yml against schema definitions for each version.
|
|
5
|
+
* Detects missing required fields, deprecated fields, and new optional fields.
|
|
6
|
+
*/
|
|
7
|
+
import type { FactiiiConfig, ConfigVersionSchema, SchemaValidationResult } from '../types/index.js';
|
|
8
|
+
export declare const CURRENT_VERSION = "0.1.0";
|
|
9
|
+
export declare const SCHEMAS: Record<string, ConfigVersionSchema>;
|
|
10
|
+
/**
|
|
11
|
+
* Validate config against schema
|
|
12
|
+
* @param config - Parsed factiii.yml config
|
|
13
|
+
* @param targetVersion - Target schema version (defaults to current)
|
|
14
|
+
* @returns Validation result
|
|
15
|
+
*/
|
|
16
|
+
export declare function validateConfigSchema(config: FactiiiConfig, targetVersion?: string): SchemaValidationResult;
|
|
17
|
+
//# sourceMappingURL=config-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../src/utils/config-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAG3B,eAAO,MAAM,eAAe,UAAU,CAAC;AAGvC,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CA+BvD,CAAC;AAWF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,EACrB,aAAa,GAAE,MAAwB,GACtC,sBAAsB,CA6CxB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Config Schema Validator
|
|
4
|
+
*
|
|
5
|
+
* Validates factiii.yml against schema definitions for each version.
|
|
6
|
+
* Detects missing required fields, deprecated fields, and new optional fields.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.SCHEMAS = exports.CURRENT_VERSION = void 0;
|
|
10
|
+
exports.validateConfigSchema = validateConfigSchema;
|
|
11
|
+
const config_helpers_js_1 = require("./config-helpers.js");
|
|
12
|
+
exports.CURRENT_VERSION = '0.1.0';
|
|
13
|
+
// Schema definition for config version 0.1.0
|
|
14
|
+
exports.SCHEMAS = {
|
|
15
|
+
'0.1.0': {
|
|
16
|
+
// Environments are top-level keys, not nested
|
|
17
|
+
required: ['name', 'config_version'],
|
|
18
|
+
optional: [
|
|
19
|
+
'github_repo',
|
|
20
|
+
'ssl_email',
|
|
21
|
+
'pipeline', // Single pipeline name
|
|
22
|
+
'prisma_schema',
|
|
23
|
+
'prisma_version',
|
|
24
|
+
'container_exclusions',
|
|
25
|
+
'trusted_plugins',
|
|
26
|
+
],
|
|
27
|
+
awsFields: {
|
|
28
|
+
// AWS fields are per-environment, not global
|
|
29
|
+
required: [],
|
|
30
|
+
optional: [],
|
|
31
|
+
},
|
|
32
|
+
environmentFields: {
|
|
33
|
+
// Environment fields
|
|
34
|
+
required: ['server', 'domain'],
|
|
35
|
+
optional: [
|
|
36
|
+
'env_file',
|
|
37
|
+
'ssh_user',
|
|
38
|
+
'config', // AWS config type
|
|
39
|
+
'access_key_id', // AWS credentials
|
|
40
|
+
'region', // AWS region
|
|
41
|
+
'plugins', // Plugin configs
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
// Field descriptions for user-friendly messages
|
|
47
|
+
const FIELD_DESCRIPTIONS = {
|
|
48
|
+
config_version: 'Config schema version',
|
|
49
|
+
pipeline: 'Pipeline plugin to use for deployments (e.g., factiii for GitHub Actions)',
|
|
50
|
+
'environment.*.plugins': 'Plugin-specific configuration for this environment',
|
|
51
|
+
'environment.*.ssh_user': 'SSH user for connecting to this environment',
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Validate config against schema
|
|
55
|
+
* @param config - Parsed factiii.yml config
|
|
56
|
+
* @param targetVersion - Target schema version (defaults to current)
|
|
57
|
+
* @returns Validation result
|
|
58
|
+
*/
|
|
59
|
+
function validateConfigSchema(config, targetVersion = exports.CURRENT_VERSION) {
|
|
60
|
+
const result = {
|
|
61
|
+
valid: true,
|
|
62
|
+
missing: [],
|
|
63
|
+
deprecated: [],
|
|
64
|
+
newOptional: [],
|
|
65
|
+
needsMigration: false,
|
|
66
|
+
configVersion: config.config_version ?? exports.CURRENT_VERSION,
|
|
67
|
+
targetVersion,
|
|
68
|
+
};
|
|
69
|
+
// Get appropriate schema
|
|
70
|
+
const schema = exports.SCHEMAS[targetVersion];
|
|
71
|
+
if (!schema) {
|
|
72
|
+
result.valid = false,
|
|
73
|
+
result.error = `Unknown schema version: ${targetVersion}`;
|
|
74
|
+
return result;
|
|
75
|
+
}
|
|
76
|
+
// Validate required top-level fields
|
|
77
|
+
schema.required.forEach((field) => {
|
|
78
|
+
if (!(field in config)) {
|
|
79
|
+
result.valid = false;
|
|
80
|
+
result.missing.push(field);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
// Validate environment fields
|
|
84
|
+
// Environments are top-level keys
|
|
85
|
+
const environments = (0, config_helpers_js_1.extractEnvironments)(config);
|
|
86
|
+
// Validate each environment
|
|
87
|
+
Object.keys(environments).forEach((envName) => {
|
|
88
|
+
const env = environments[envName];
|
|
89
|
+
if (env && typeof env === 'object') {
|
|
90
|
+
schema.environmentFields.required.forEach((field) => {
|
|
91
|
+
if (!(field in env)) {
|
|
92
|
+
result.valid = false;
|
|
93
|
+
result.missing.push(`${envName}.${field}`);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=config-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/utils/config-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Validator
|
|
3
|
+
*
|
|
4
|
+
* Validates factiii.yml configuration and workflow sync.
|
|
5
|
+
*/
|
|
6
|
+
import type { EnvironmentConfig } from '../types/index.js';
|
|
7
|
+
interface WorkflowConfig {
|
|
8
|
+
environments: Record<string, Partial<EnvironmentConfig>>;
|
|
9
|
+
repoName: string | null;
|
|
10
|
+
}
|
|
11
|
+
interface ValidationResult {
|
|
12
|
+
valid: boolean;
|
|
13
|
+
error?: string;
|
|
14
|
+
drift?: boolean;
|
|
15
|
+
message?: string;
|
|
16
|
+
needsGeneration?: boolean;
|
|
17
|
+
needsRegeneration?: boolean;
|
|
18
|
+
mismatches?: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Extract config values from workflow file
|
|
22
|
+
*/
|
|
23
|
+
export declare function extractWorkflowConfig(workflowPath: string): WorkflowConfig | null;
|
|
24
|
+
/**
|
|
25
|
+
* Compare factiii.yml with generated workflows
|
|
26
|
+
*/
|
|
27
|
+
export declare function validateConfigSync(rootDir: string): ValidationResult;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=config-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-validator.d.ts","sourceRoot":"","sources":["../../src/utils/config-validator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAiB,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE1E,UAAU,cAAc;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACzD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAgBD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAyCjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CA8DpE"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Config Validator
|
|
4
|
+
*
|
|
5
|
+
* Validates factiii.yml configuration and workflow sync.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
41
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
42
|
+
};
|
|
43
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
+
exports.extractWorkflowConfig = extractWorkflowConfig;
|
|
45
|
+
exports.validateConfigSync = validateConfigSync;
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const js_yaml_1 = __importDefault(require("js-yaml"));
|
|
49
|
+
/**
|
|
50
|
+
* Extract config values from workflow file
|
|
51
|
+
*/
|
|
52
|
+
function extractWorkflowConfig(workflowPath) {
|
|
53
|
+
if (!fs.existsSync(workflowPath)) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const content = fs.readFileSync(workflowPath, 'utf8');
|
|
58
|
+
const workflow = js_yaml_1.default.load(content);
|
|
59
|
+
// Extract relevant config from workflow
|
|
60
|
+
// Look for yq commands that read from factiii.yml
|
|
61
|
+
const config = {
|
|
62
|
+
environments: {},
|
|
63
|
+
repoName: null,
|
|
64
|
+
};
|
|
65
|
+
// Parse the workflow to find config reads
|
|
66
|
+
// This is a simplified version - you may need to adjust based on actual workflow structure
|
|
67
|
+
const jobSteps = workflow?.jobs?.deploy?.steps ?? [];
|
|
68
|
+
for (const step of jobSteps) {
|
|
69
|
+
if (step.run && step.run.includes('yq eval')) {
|
|
70
|
+
// Extract what config values the workflow expects
|
|
71
|
+
// e.g., "yq eval '.staging.host'"
|
|
72
|
+
const hostMatch = step.run.match(/\.(\w+)\.host/);
|
|
73
|
+
if (hostMatch && hostMatch[1]) {
|
|
74
|
+
const envName = hostMatch[1];
|
|
75
|
+
// Skip reserved config keys
|
|
76
|
+
if (!['name', 'config_version', 'github_repo', 'ssl_email', 'pipeline', 'prisma_schema', 'prisma_version', 'container_exclusions', 'trusted_plugins'].includes(envName)) {
|
|
77
|
+
if (!config.environments[envName]) {
|
|
78
|
+
config.environments[envName] = {};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return config;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Compare factiii.yml with generated workflows
|
|
92
|
+
*/
|
|
93
|
+
function validateConfigSync(rootDir) {
|
|
94
|
+
const configPath = path.join(rootDir, 'factiii.yml');
|
|
95
|
+
const workflowPath = path.join(rootDir, '.github/workflows/factiii-deploy.yml');
|
|
96
|
+
if (!fs.existsSync(configPath)) {
|
|
97
|
+
return { valid: false, error: 'factiii.yml not found' };
|
|
98
|
+
}
|
|
99
|
+
if (!fs.existsSync(workflowPath)) {
|
|
100
|
+
return { valid: false, error: 'Workflows not generated', needsGeneration: true };
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
const config = js_yaml_1.default.load(fs.readFileSync(configPath, 'utf8'));
|
|
104
|
+
// Check if workflow file is older than config file
|
|
105
|
+
const configStat = fs.statSync(configPath);
|
|
106
|
+
const workflowStat = fs.statSync(workflowPath);
|
|
107
|
+
const configNewer = configStat.mtimeMs > workflowStat.mtimeMs;
|
|
108
|
+
if (configNewer) {
|
|
109
|
+
return {
|
|
110
|
+
valid: false,
|
|
111
|
+
drift: true,
|
|
112
|
+
message: 'factiii.yml modified after workflows were generated',
|
|
113
|
+
needsRegeneration: true,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// Additional validation: check if workflow references match config
|
|
117
|
+
const workflowContent = fs.readFileSync(workflowPath, 'utf8');
|
|
118
|
+
const mismatches = [];
|
|
119
|
+
// Extract environments from config (top-level keys)
|
|
120
|
+
const { extractEnvironments } = require('./config-helpers.js');
|
|
121
|
+
const environments = extractEnvironments(config);
|
|
122
|
+
// Check if all environments in config have corresponding workflow logic
|
|
123
|
+
for (const envName of Object.keys(environments)) {
|
|
124
|
+
// Check if workflow mentions this environment
|
|
125
|
+
if (!workflowContent.includes(`environment == '${envName}'`)) {
|
|
126
|
+
mismatches.push(`Environment '${envName}' not found in workflow`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (mismatches.length > 0) {
|
|
130
|
+
return {
|
|
131
|
+
valid: false,
|
|
132
|
+
drift: true,
|
|
133
|
+
mismatches,
|
|
134
|
+
needsRegeneration: true,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return { valid: true };
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
return {
|
|
141
|
+
valid: false,
|
|
142
|
+
error: error instanceof Error ? error.message : String(error),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=config-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../../src/utils/config-validator.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCH,sDAyCC;AAKD,gDA8DC;AAlJD,uCAAyB;AACzB,2CAA6B;AAC7B,sDAA2B;AAiC3B;;GAEG;AACH,SAAgB,qBAAqB,CAAC,YAAoB;IACxD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,iBAAI,CAAC,IAAI,CAAC,OAAO,CAAoB,CAAC;QAEvD,wCAAwC;QACxC,kDAAkD;QAClD,MAAM,MAAM,GAAmB;YAC7B,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,IAAI;SACf,CAAC;QAEF,0CAA0C;QAC1C,2FAA2F;QAC3F,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;QAErD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,kDAAkD;gBAClD,kCAAkC;gBAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBAClD,IAAI,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9B,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC7B,4BAA4B;oBAC5B,IAAI,CAAC,CAAC,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,iBAAiB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBACxK,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;4BAClC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;wBACpC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,OAAe;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,sCAAsC,CAAC,CAAC;IAEhF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;IACnF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,iBAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAkB,CAAC;QAE/E,mDAAmD;QACnD,MAAM,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAE/C,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;QAE9D,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,qDAAqD;gBAC9D,iBAAiB,EAAE,IAAI;aACxB,CAAC;QACJ,CAAC;QAED,mEAAmE;QACnE,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,oDAAoD;QACpD,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC/D,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAEjD,wEAAwE;QACxE,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAChD,8CAA8C;YAC9C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,mBAAmB,OAAO,GAAG,CAAC,EAAE,CAAC;gBAC7D,UAAU,CAAC,IAAI,CAAC,gBAAgB,OAAO,yBAAyB,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,IAAI;gBACX,UAAU;gBACV,iBAAiB,EAAE,IAAI;aACxB,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment Report Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates formatted deployment readiness reports.
|
|
5
|
+
*/
|
|
6
|
+
interface RepoConfig {
|
|
7
|
+
environments?: Record<string, {
|
|
8
|
+
domain?: string;
|
|
9
|
+
port?: number | string;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
interface CurrentRepoInfo {
|
|
13
|
+
deployed: boolean;
|
|
14
|
+
config?: RepoConfig;
|
|
15
|
+
comparison?: {
|
|
16
|
+
hasChanges: boolean;
|
|
17
|
+
changes: Array<{
|
|
18
|
+
field: string;
|
|
19
|
+
old: string;
|
|
20
|
+
new: string;
|
|
21
|
+
}>;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
interface DeployedRepo {
|
|
25
|
+
name: string;
|
|
26
|
+
domain: string;
|
|
27
|
+
port?: number | string;
|
|
28
|
+
}
|
|
29
|
+
interface ServerCheck {
|
|
30
|
+
environment: string;
|
|
31
|
+
user?: string;
|
|
32
|
+
host?: string;
|
|
33
|
+
error?: string;
|
|
34
|
+
connected?: boolean;
|
|
35
|
+
infrastructureExists?: boolean;
|
|
36
|
+
allDeployedRepos?: DeployedRepo[];
|
|
37
|
+
currentRepo?: CurrentRepoInfo;
|
|
38
|
+
}
|
|
39
|
+
interface LocalChecks {
|
|
40
|
+
coreYml?: boolean;
|
|
41
|
+
dockerfile?: boolean;
|
|
42
|
+
git?: boolean;
|
|
43
|
+
branch?: string;
|
|
44
|
+
workflows?: boolean;
|
|
45
|
+
scripts?: boolean;
|
|
46
|
+
}
|
|
47
|
+
interface SecretsCheck {
|
|
48
|
+
error?: string;
|
|
49
|
+
present?: string[];
|
|
50
|
+
missing?: string[];
|
|
51
|
+
}
|
|
52
|
+
interface Summary {
|
|
53
|
+
ready: boolean;
|
|
54
|
+
warnings: number;
|
|
55
|
+
errors: number;
|
|
56
|
+
nextSteps: string[];
|
|
57
|
+
}
|
|
58
|
+
interface ReportData {
|
|
59
|
+
repoName: string;
|
|
60
|
+
localChecks?: LocalChecks;
|
|
61
|
+
secretsCheck?: SecretsCheck;
|
|
62
|
+
serverChecks?: ServerCheck[];
|
|
63
|
+
summary?: Summary;
|
|
64
|
+
}
|
|
65
|
+
interface AuditResults {
|
|
66
|
+
coreYml: {
|
|
67
|
+
exists: boolean;
|
|
68
|
+
parseError?: boolean;
|
|
69
|
+
needsCustomization?: boolean;
|
|
70
|
+
};
|
|
71
|
+
workflows: {
|
|
72
|
+
allExist: boolean;
|
|
73
|
+
};
|
|
74
|
+
branches: {
|
|
75
|
+
hasGit: boolean;
|
|
76
|
+
currentBranch?: string;
|
|
77
|
+
};
|
|
78
|
+
repoScripts: {
|
|
79
|
+
hasPackageJson: boolean;
|
|
80
|
+
requiredScripts: Record<string, boolean>;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Format deployment readiness report
|
|
85
|
+
*/
|
|
86
|
+
export declare function formatDeploymentReport(data: ReportData): string;
|
|
87
|
+
/**
|
|
88
|
+
* Format report for GitHub workflow summary (supports markdown)
|
|
89
|
+
*/
|
|
90
|
+
export declare function formatWorkflowSummary(data: ReportData): string;
|
|
91
|
+
/**
|
|
92
|
+
* Generate summary statistics from check results
|
|
93
|
+
*/
|
|
94
|
+
export declare function generateSummary(_localChecks: LocalChecks | undefined, secretsCheck: SecretsCheck | undefined, serverChecks: ServerCheck[] | undefined): Summary;
|
|
95
|
+
/**
|
|
96
|
+
* Format local check results
|
|
97
|
+
*/
|
|
98
|
+
export declare function formatLocalChecks(auditResults: AuditResults): LocalChecks;
|
|
99
|
+
export {};
|
|
100
|
+
//# sourceMappingURL=deployment-report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-report.d.ts","sourceRoot":"","sources":["../../src/utils/deployment-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Deployment Report Generator
|
|
4
|
+
*
|
|
5
|
+
* Generates formatted deployment readiness reports.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.formatDeploymentReport = formatDeploymentReport;
|
|
9
|
+
exports.formatWorkflowSummary = formatWorkflowSummary;
|
|
10
|
+
exports.generateSummary = generateSummary;
|
|
11
|
+
exports.formatLocalChecks = formatLocalChecks;
|
|
12
|
+
/**
|
|
13
|
+
* Format deployment readiness report
|
|
14
|
+
*/
|
|
15
|
+
function formatDeploymentReport(data) {
|
|
16
|
+
const { repoName, localChecks, secretsCheck, serverChecks, summary } = data;
|
|
17
|
+
const lines = [];
|
|
18
|
+
const separator = '━'.repeat(60);
|
|
19
|
+
// Header
|
|
20
|
+
lines.push(`DEPLOYMENT READINESS REPORT - ${repoName}`);
|
|
21
|
+
lines.push(separator);
|
|
22
|
+
lines.push('');
|
|
23
|
+
// Local Configuration
|
|
24
|
+
if (localChecks) {
|
|
25
|
+
lines.push('LOCAL CONFIGURATION');
|
|
26
|
+
if (localChecks.coreYml) {
|
|
27
|
+
lines.push(` [OK] factiii.yml valid (${repoName})`);
|
|
28
|
+
}
|
|
29
|
+
if (localChecks.dockerfile) {
|
|
30
|
+
lines.push(' [OK] Dockerfile found');
|
|
31
|
+
}
|
|
32
|
+
if (localChecks.git) {
|
|
33
|
+
lines.push(` [OK] Git configured${localChecks.branch ? ` (${localChecks.branch} branch)` : ''}`);
|
|
34
|
+
}
|
|
35
|
+
if (localChecks.workflows) {
|
|
36
|
+
lines.push(' [OK] Workflows exist (factiii-deploy.yml, factiii-undeploy.yml)');
|
|
37
|
+
}
|
|
38
|
+
if (localChecks.scripts) {
|
|
39
|
+
lines.push(' [OK] Required scripts present');
|
|
40
|
+
}
|
|
41
|
+
lines.push('');
|
|
42
|
+
}
|
|
43
|
+
// GitHub Secrets
|
|
44
|
+
if (secretsCheck) {
|
|
45
|
+
lines.push('GITHUB SECRETS');
|
|
46
|
+
if (secretsCheck.error) {
|
|
47
|
+
lines.push(` [ERROR] ${secretsCheck.error}`);
|
|
48
|
+
lines.push(' Cannot verify secrets via API');
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// Show present secrets
|
|
52
|
+
if (secretsCheck.present && secretsCheck.present.length > 0) {
|
|
53
|
+
for (const secret of secretsCheck.present) {
|
|
54
|
+
lines.push(` [OK] ${secret} exists`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Show missing secrets
|
|
58
|
+
if (secretsCheck.missing && secretsCheck.missing.length > 0) {
|
|
59
|
+
for (const secret of secretsCheck.missing) {
|
|
60
|
+
lines.push(` [!] ${secret} not found`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
lines.push('');
|
|
65
|
+
}
|
|
66
|
+
// Server Checks
|
|
67
|
+
if (serverChecks && serverChecks.length > 0) {
|
|
68
|
+
for (const server of serverChecks) {
|
|
69
|
+
const envLabel = server.environment === 'staging' ? 'STAGING' : 'PRODUCTION';
|
|
70
|
+
const envName = server.environment.toUpperCase();
|
|
71
|
+
lines.push(`${envLabel} SERVER (${server.user}@${server.host})`);
|
|
72
|
+
if (server.error) {
|
|
73
|
+
lines.push(` [ERROR] ${server.error}`);
|
|
74
|
+
}
|
|
75
|
+
else if (!server.connected) {
|
|
76
|
+
lines.push(' [ERROR] SSH connection failed');
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
lines.push(' [OK] SSH connection successful');
|
|
80
|
+
if (server.infrastructureExists) {
|
|
81
|
+
lines.push(' [OK] Infrastructure directory exists');
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
lines.push(' [!] Infrastructure directory not found');
|
|
85
|
+
}
|
|
86
|
+
// Show currently deployed repos
|
|
87
|
+
if (server.allDeployedRepos && server.allDeployedRepos.length > 0) {
|
|
88
|
+
lines.push('');
|
|
89
|
+
lines.push(` Currently Deployed Repos (${server.allDeployedRepos.length}):`);
|
|
90
|
+
for (const repo of server.allDeployedRepos) {
|
|
91
|
+
const portInfo = repo.port ? `:${repo.port}` : '';
|
|
92
|
+
lines.push(` - ${repo.name} (${repo.domain}${portInfo}) - running`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Show current repo status
|
|
96
|
+
lines.push('');
|
|
97
|
+
lines.push(` THIS REPO (${repoName}):`);
|
|
98
|
+
if (server.currentRepo && server.currentRepo.deployed) {
|
|
99
|
+
const env = server.currentRepo.config?.environments?.[server.environment];
|
|
100
|
+
if (env) {
|
|
101
|
+
const currentPort = env.port ?? 'auto';
|
|
102
|
+
lines.push(` Current: ${env.domain}:${currentPort}`);
|
|
103
|
+
// Show changes if any
|
|
104
|
+
if (server.currentRepo.comparison &&
|
|
105
|
+
server.currentRepo.comparison.hasChanges) {
|
|
106
|
+
lines.push(` Changes detected:`);
|
|
107
|
+
for (const change of server.currentRepo.comparison.changes) {
|
|
108
|
+
lines.push(` -> ${change.field}: ${change.old} -> ${change.new}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
lines.push(` Status: No changes detected`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
lines.push(' Status: NOT DEPLOYED');
|
|
118
|
+
lines.push(' After: NEW deployment');
|
|
119
|
+
}
|
|
120
|
+
lines.push('');
|
|
121
|
+
lines.push(' Note: Deploy will regenerate configs and restart ALL services');
|
|
122
|
+
}
|
|
123
|
+
lines.push('');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// Summary
|
|
127
|
+
lines.push(separator);
|
|
128
|
+
if (summary) {
|
|
129
|
+
const { ready, warnings, errors } = summary;
|
|
130
|
+
if (ready && warnings === 0 && errors === 0) {
|
|
131
|
+
lines.push('[OK] READY TO DEPLOY');
|
|
132
|
+
}
|
|
133
|
+
else if (errors > 0) {
|
|
134
|
+
lines.push(`[ERROR] NOT READY (${errors} error${errors > 1 ? 's' : ''}, ${warnings} warning${warnings > 1 ? 's' : ''})`);
|
|
135
|
+
}
|
|
136
|
+
else if (warnings > 0) {
|
|
137
|
+
lines.push(`[!] READY TO DEPLOY (${warnings} warning${warnings > 1 ? 's' : ''})`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
lines.push('');
|
|
141
|
+
// Next Steps
|
|
142
|
+
if (summary && summary.nextSteps && summary.nextSteps.length > 0) {
|
|
143
|
+
lines.push('Next Steps:');
|
|
144
|
+
for (let i = 0; i < summary.nextSteps.length; i++) {
|
|
145
|
+
lines.push(` ${i + 1}. ${summary.nextSteps[i]}`);
|
|
146
|
+
}
|
|
147
|
+
lines.push('');
|
|
148
|
+
}
|
|
149
|
+
return lines.join('\n');
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Format report for GitHub workflow summary (supports markdown)
|
|
153
|
+
*/
|
|
154
|
+
function formatWorkflowSummary(data) {
|
|
155
|
+
const report = formatDeploymentReport(data);
|
|
156
|
+
// Workflow summaries support markdown, so we can enhance it
|
|
157
|
+
return `\`\`\`
|
|
158
|
+
${report}
|
|
159
|
+
\`\`\``;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Generate summary statistics from check results
|
|
163
|
+
*/
|
|
164
|
+
function generateSummary(_localChecks, secretsCheck, serverChecks) {
|
|
165
|
+
const summary = {
|
|
166
|
+
ready: true,
|
|
167
|
+
warnings: 0,
|
|
168
|
+
errors: 0,
|
|
169
|
+
nextSteps: [],
|
|
170
|
+
};
|
|
171
|
+
// Check for missing secrets
|
|
172
|
+
if (secretsCheck) {
|
|
173
|
+
if (secretsCheck.error) {
|
|
174
|
+
summary.errors++;
|
|
175
|
+
summary.ready = false;
|
|
176
|
+
summary.nextSteps.push('Fix GitHub token permissions to verify secrets');
|
|
177
|
+
}
|
|
178
|
+
else if (secretsCheck.missing && secretsCheck.missing.length > 0) {
|
|
179
|
+
summary.warnings += secretsCheck.missing.length;
|
|
180
|
+
for (const secret of secretsCheck.missing) {
|
|
181
|
+
summary.nextSteps.push(`Add missing GitHub secret: ${secret}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Check server connection issues
|
|
186
|
+
if (serverChecks) {
|
|
187
|
+
for (const server of serverChecks) {
|
|
188
|
+
if (server.error || !server.connected) {
|
|
189
|
+
summary.errors++;
|
|
190
|
+
summary.ready = false;
|
|
191
|
+
summary.nextSteps.push(`Fix SSH connection to ${server.environment} server`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// If ready, add deployment instructions
|
|
196
|
+
if (summary.ready && summary.warnings === 0) {
|
|
197
|
+
summary.nextSteps.push('Run: npx factiii deploy --environment staging');
|
|
198
|
+
summary.nextSteps.push('Or push to main branch to trigger automatic deployment');
|
|
199
|
+
}
|
|
200
|
+
else if (summary.ready && summary.warnings > 0) {
|
|
201
|
+
summary.nextSteps.push('Review warnings above');
|
|
202
|
+
summary.nextSteps.push('Run: npx factiii deploy (deployment will proceed with warnings)');
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
summary.nextSteps.push('Fix errors above');
|
|
206
|
+
summary.nextSteps.push('Run: npx factiii (to verify fixes)');
|
|
207
|
+
}
|
|
208
|
+
return summary;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Format local check results
|
|
212
|
+
*/
|
|
213
|
+
function formatLocalChecks(auditResults) {
|
|
214
|
+
const { coreYml, workflows, branches, repoScripts } = auditResults;
|
|
215
|
+
return {
|
|
216
|
+
coreYml: coreYml.exists && !coreYml.parseError && !coreYml.needsCustomization,
|
|
217
|
+
dockerfile: true, // Checked separately in scan
|
|
218
|
+
git: branches.hasGit,
|
|
219
|
+
branch: branches.currentBranch,
|
|
220
|
+
workflows: workflows.allExist,
|
|
221
|
+
scripts: repoScripts.hasPackageJson &&
|
|
222
|
+
Object.values(repoScripts.requiredScripts).every((v) => v),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=deployment-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-report.js","sourceRoot":"","sources":["../../src/utils/deployment-report.ts"],"names":[],"mappings":"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"}
|