codecrypto-cli 1.0.7 → 1.0.8
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/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +239 -10
- package/dist/commands/deploy.js.map +1 -1
- package/docker-build/Dockerfile +14 -0
- package/docker-build/standalone/.next/BUILD_ID +1 -0
- package/docker-build/standalone/.next/app-path-routes-manifest.json +13 -0
- package/docker-build/standalone/.next/build-manifest.json +20 -0
- package/docker-build/standalone/.next/package.json +1 -0
- package/docker-build/standalone/.next/prerender-manifest.json +186 -0
- package/docker-build/standalone/.next/required-server-files.json +164 -0
- package/docker-build/standalone/.next/routes-manifest.json +110 -0
- package/docker-build/standalone/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
- package/docker-build/standalone/.next/server/app/_global-error/page/build-manifest.json +17 -0
- package/docker-build/standalone/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
- package/docker-build/standalone/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
- package/docker-build/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
- package/docker-build/standalone/.next/server/app/_global-error/page.js +11 -0
- package/docker-build/standalone/.next/server/app/_global-error/page.js.map +5 -0
- package/docker-build/standalone/.next/server/app/_global-error/page.js.nft.json +1 -0
- package/docker-build/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +2 -0
- package/docker-build/standalone/.next/server/app/_global-error.html +2 -0
- package/docker-build/standalone/.next/server/app/_global-error.meta +15 -0
- package/docker-build/standalone/.next/server/app/_global-error.rsc +13 -0
- package/docker-build/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
- package/docker-build/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +13 -0
- package/docker-build/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +6 -0
- package/docker-build/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +4 -0
- package/docker-build/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
- package/docker-build/standalone/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
- package/docker-build/standalone/.next/server/app/_not-found/page/build-manifest.json +17 -0
- package/docker-build/standalone/.next/server/app/_not-found/page/next-font-manifest.json +11 -0
- package/docker-build/standalone/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
- package/docker-build/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
- package/docker-build/standalone/.next/server/app/_not-found/page.js +14 -0
- package/docker-build/standalone/.next/server/app/_not-found/page.js.map +5 -0
- package/docker-build/standalone/.next/server/app/_not-found/page.js.nft.json +1 -0
- package/docker-build/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +2 -0
- package/docker-build/standalone/.next/server/app/_not-found.html +1 -0
- package/docker-build/standalone/.next/server/app/_not-found.meta +16 -0
- package/docker-build/standalone/.next/server/app/_not-found.rsc +14 -0
- package/docker-build/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +14 -0
- package/docker-build/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +6 -0
- package/docker-build/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +5 -0
- package/docker-build/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
- package/docker-build/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +4 -0
- package/docker-build/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
- package/docker-build/standalone/.next/server/app/api/deploy/route/app-paths-manifest.json +3 -0
- package/docker-build/standalone/.next/server/app/api/deploy/route/build-manifest.json +11 -0
- package/docker-build/standalone/.next/server/app/api/deploy/route/server-reference-manifest.json +4 -0
- package/docker-build/standalone/.next/server/app/api/deploy/route.js +7 -0
- package/docker-build/standalone/.next/server/app/api/deploy/route.js.map +5 -0
- package/docker-build/standalone/.next/server/app/api/deploy/route.js.nft.json +1 -0
- package/docker-build/standalone/.next/server/app/api/deploy/route_client-reference-manifest.js +2 -0
- package/docker-build/standalone/.next/server/app/api/deploy-image/route/app-paths-manifest.json +3 -0
- package/docker-build/standalone/.next/server/app/api/deploy-image/route/build-manifest.json +11 -0
- package/docker-build/standalone/.next/server/app/api/deploy-image/route/server-reference-manifest.json +4 -0
- package/docker-build/standalone/.next/server/app/api/deploy-image/route.js +6 -0
- package/docker-build/standalone/.next/server/app/api/deploy-image/route.js.map +5 -0
- package/docker-build/standalone/.next/server/app/api/deploy-image/route.js.nft.json +1 -0
- package/docker-build/standalone/.next/server/app/api/deploy-image/route_client-reference-manifest.js +2 -0
- package/docker-build/standalone/.next/server/app/api/docker-images/route/app-paths-manifest.json +3 -0
- package/docker-build/standalone/.next/server/app/api/docker-images/route/build-manifest.json +11 -0
- package/docker-build/standalone/.next/server/app/api/docker-images/route/server-reference-manifest.json +4 -0
- package/docker-build/standalone/.next/server/app/api/docker-images/route.js +6 -0
- package/docker-build/standalone/.next/server/app/api/docker-images/route.js.map +5 -0
- package/docker-build/standalone/.next/server/app/api/docker-images/route.js.nft.json +1 -0
- package/docker-build/standalone/.next/server/app/api/docker-images/route_client-reference-manifest.js +2 -0
- package/docker-build/standalone/.next/server/app/api/faucet/route/app-paths-manifest.json +3 -0
- package/docker-build/standalone/.next/server/app/api/faucet/route/build-manifest.json +11 -0
- package/docker-build/standalone/.next/server/app/api/faucet/route/server-reference-manifest.json +4 -0
- package/docker-build/standalone/.next/server/app/api/faucet/route.js +9 -0
- package/docker-build/standalone/.next/server/app/api/faucet/route.js.map +5 -0
- package/docker-build/standalone/.next/server/app/api/faucet/route.js.nft.json +1 -0
- package/docker-build/standalone/.next/server/app/api/faucet/route_client-reference-manifest.js +2 -0
- package/docker-build/standalone/.next/server/app/deploy/page/app-paths-manifest.json +3 -0
- package/docker-build/standalone/.next/server/app/deploy/page/build-manifest.json +17 -0
- package/docker-build/standalone/.next/server/app/deploy/page/next-font-manifest.json +11 -0
- package/docker-build/standalone/.next/server/app/deploy/page/react-loadable-manifest.json +1 -0
- package/docker-build/standalone/.next/server/app/deploy/page/server-reference-manifest.json +4 -0
- package/docker-build/standalone/.next/server/app/deploy/page.js +16 -0
- package/docker-build/standalone/.next/server/app/deploy/page.js.map +5 -0
- package/docker-build/standalone/.next/server/app/deploy/page.js.nft.json +1 -0
- package/docker-build/standalone/.next/server/app/deploy/page_client-reference-manifest.js +2 -0
- package/docker-build/standalone/.next/server/app/deploy.html +1 -0
- package/docker-build/standalone/.next/server/app/deploy.meta +15 -0
- package/docker-build/standalone/.next/server/app/deploy.rsc +20 -0
- package/docker-build/standalone/.next/server/app/deploy.segments/_full.segment.rsc +20 -0
- package/docker-build/standalone/.next/server/app/deploy.segments/_head.segment.rsc +6 -0
- package/docker-build/standalone/.next/server/app/deploy.segments/_index.segment.rsc +5 -0
- package/docker-build/standalone/.next/server/app/deploy.segments/_tree.segment.rsc +4 -0
- package/docker-build/standalone/.next/server/app/deploy.segments/deploy/__PAGE__.segment.rsc +9 -0
- package/docker-build/standalone/.next/server/app/deploy.segments/deploy.segment.rsc +4 -0
- package/docker-build/standalone/.next/server/app/faucet/page/app-paths-manifest.json +3 -0
- package/docker-build/standalone/.next/server/app/faucet/page/build-manifest.json +17 -0
- package/docker-build/standalone/.next/server/app/faucet/page/next-font-manifest.json +11 -0
- package/docker-build/standalone/.next/server/app/faucet/page/react-loadable-manifest.json +1 -0
- package/docker-build/standalone/.next/server/app/faucet/page/server-reference-manifest.json +4 -0
- package/docker-build/standalone/.next/server/app/faucet/page.js +16 -0
- package/docker-build/standalone/.next/server/app/faucet/page.js.map +5 -0
- package/docker-build/standalone/.next/server/app/faucet/page.js.nft.json +1 -0
- package/docker-build/standalone/.next/server/app/faucet/page_client-reference-manifest.js +2 -0
- package/docker-build/standalone/.next/server/app/faucet.html +1 -0
- package/docker-build/standalone/.next/server/app/faucet.meta +15 -0
- package/docker-build/standalone/.next/server/app/faucet.rsc +20 -0
- package/docker-build/standalone/.next/server/app/faucet.segments/_full.segment.rsc +20 -0
- package/docker-build/standalone/.next/server/app/faucet.segments/_head.segment.rsc +6 -0
- package/docker-build/standalone/.next/server/app/faucet.segments/_index.segment.rsc +5 -0
- package/docker-build/standalone/.next/server/app/faucet.segments/_tree.segment.rsc +4 -0
- package/docker-build/standalone/.next/server/app/faucet.segments/faucet/__PAGE__.segment.rsc +9 -0
- package/docker-build/standalone/.next/server/app/faucet.segments/faucet.segment.rsc +4 -0
- package/docker-build/standalone/.next/server/app/favicon.ico/route/app-paths-manifest.json +3 -0
- package/docker-build/standalone/.next/server/app/favicon.ico/route/build-manifest.json +11 -0
- package/docker-build/standalone/.next/server/app/favicon.ico/route.js +7 -0
- package/docker-build/standalone/.next/server/app/favicon.ico/route.js.map +5 -0
- package/docker-build/standalone/.next/server/app/favicon.ico/route.js.nft.json +1 -0
- package/docker-build/standalone/.next/server/app/favicon.ico.body +0 -0
- package/docker-build/standalone/.next/server/app/favicon.ico.meta +1 -0
- package/docker-build/standalone/.next/server/app/images/page/app-paths-manifest.json +3 -0
- package/docker-build/standalone/.next/server/app/images/page/build-manifest.json +17 -0
- package/docker-build/standalone/.next/server/app/images/page/next-font-manifest.json +11 -0
- package/docker-build/standalone/.next/server/app/images/page/react-loadable-manifest.json +1 -0
- package/docker-build/standalone/.next/server/app/images/page/server-reference-manifest.json +4 -0
- package/docker-build/standalone/.next/server/app/images/page.js +16 -0
- package/docker-build/standalone/.next/server/app/images/page.js.map +5 -0
- package/docker-build/standalone/.next/server/app/images/page.js.nft.json +1 -0
- package/docker-build/standalone/.next/server/app/images/page_client-reference-manifest.js +2 -0
- package/docker-build/standalone/.next/server/app/images.html +1 -0
- package/docker-build/standalone/.next/server/app/images.meta +15 -0
- package/docker-build/standalone/.next/server/app/images.rsc +20 -0
- package/docker-build/standalone/.next/server/app/images.segments/_full.segment.rsc +20 -0
- package/docker-build/standalone/.next/server/app/images.segments/_head.segment.rsc +6 -0
- package/docker-build/standalone/.next/server/app/images.segments/_index.segment.rsc +5 -0
- package/docker-build/standalone/.next/server/app/images.segments/_tree.segment.rsc +4 -0
- package/docker-build/standalone/.next/server/app/images.segments/images/__PAGE__.segment.rsc +9 -0
- package/docker-build/standalone/.next/server/app/images.segments/images.segment.rsc +4 -0
- package/docker-build/standalone/.next/server/app/index.html +1 -0
- package/docker-build/standalone/.next/server/app/index.meta +14 -0
- package/docker-build/standalone/.next/server/app/index.rsc +25 -0
- package/docker-build/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +8 -0
- package/docker-build/standalone/.next/server/app/index.segments/_full.segment.rsc +25 -0
- package/docker-build/standalone/.next/server/app/index.segments/_head.segment.rsc +6 -0
- package/docker-build/standalone/.next/server/app/index.segments/_index.segment.rsc +5 -0
- package/docker-build/standalone/.next/server/app/index.segments/_tree.segment.rsc +4 -0
- package/docker-build/standalone/.next/server/app/page/app-paths-manifest.json +3 -0
- package/docker-build/standalone/.next/server/app/page/build-manifest.json +17 -0
- package/docker-build/standalone/.next/server/app/page/next-font-manifest.json +11 -0
- package/docker-build/standalone/.next/server/app/page/react-loadable-manifest.json +1 -0
- package/docker-build/standalone/.next/server/app/page/server-reference-manifest.json +4 -0
- package/docker-build/standalone/.next/server/app/page.js +16 -0
- package/docker-build/standalone/.next/server/app/page.js.map +5 -0
- package/docker-build/standalone/.next/server/app/page.js.nft.json +1 -0
- package/docker-build/standalone/.next/server/app/page_client-reference-manifest.js +2 -0
- package/docker-build/standalone/.next/server/app-paths-manifest.json +13 -0
- package/docker-build/standalone/.next/server/chunks/10072_infra_server-cc__next-internal_server_app_api_deploy_route_actions_6cdc6432.js +3 -0
- package/docker-build/standalone/.next/server/chunks/10072_infra_server-cc__next-internal_server_app_api_faucet_route_actions_f54ec975.js +3 -0
- package/docker-build/standalone/.next/server/chunks/10072_infra_server-cc__next-internal_server_app_favicon_ico_route_actions_d73715d1.js +3 -0
- package/docker-build/standalone/.next/server/chunks/66d90_server-cc__next-internal_server_app_api_deploy-image_route_actions_b340a7f4.js +3 -0
- package/docker-build/standalone/.next/server/chunks/66d90_server-cc__next-internal_server_app_api_docker-images_route_actions_4adcb030.js +3 -0
- package/docker-build/standalone/.next/server/chunks/6f6aa_4d460f49._.js +30 -0
- package/docker-build/standalone/.next/server/chunks/6f6aa_@noble_curves_esm_secp256k1_c7f9b58b.js +3 -0
- package/docker-build/standalone/.next/server/chunks/6f6aa_next_dist_esm_build_templates_app-route_1a9ee783.js +6 -0
- package/docker-build/standalone/.next/server/chunks/6f6aa_next_dist_esm_build_templates_app-route_8d132e6a.js +3 -0
- package/docker-build/standalone/.next/server/chunks/6f6aa_viem__esm_utils_ccip_bb7bf310.js +3 -0
- package/docker-build/standalone/.next/server/chunks/[externals]_next_dist_b01ab6e1._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/[root-of-the-server]__0928cca7._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/[root-of-the-server]__0c6b3bd9._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/[root-of-the-server]__1846bb23._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/[root-of-the-server]__8f8a2ff9._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/[root-of-the-server]__90ea784b._.js +21 -0
- package/docker-build/standalone/.next/server/chunks/[root-of-the-server]__f6379956._.js +39 -0
- package/docker-build/standalone/.next/server/chunks/[turbopack]_runtime.js +795 -0
- package/docker-build/standalone/.next/server/chunks/ssr/10072_infra_server-cc__next-internal_server_app__global-error_page_actions_bdbde336.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/10072_infra_server-cc__next-internal_server_app__not-found_page_actions_41269af3.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/10072_infra_server-cc__next-internal_server_app_deploy_page_actions_3988cfb8.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/10072_infra_server-cc__next-internal_server_app_faucet_page_actions_e5e8dd8a.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/10072_infra_server-cc__next-internal_server_app_images_page_actions_bcdfd86b.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/2025_cc_CODECRYPTO_infra_server-cc_293382c4._.js +4 -0
- package/docker-build/standalone/.next/server/chunks/ssr/2025_cc_CODECRYPTO_infra_server-cc_55723634._.js +4 -0
- package/docker-build/standalone/.next/server/chunks/ssr/2025_cc_CODECRYPTO_infra_server-cc_821445df._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/2025_cc_CODECRYPTO_infra_server-cc_8545ebc7._.js +4 -0
- package/docker-build/standalone/.next/server/chunks/ssr/2025_cc_CODECRYPTO_infra_server-cc_acad38a1._.js +6 -0
- package/docker-build/standalone/.next/server/chunks/ssr/2025_cc_CODECRYPTO_infra_server-cc_app_b373a582._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/2025_cc_CODECRYPTO_infra_server-cc_d03dcb7a._.js +4 -0
- package/docker-build/standalone/.next/server/chunks/ssr/6f6aa_7c51ed4c._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/6f6aa_next_dist_05cd73d5._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/6f6aa_next_dist_3e60adb5._.js +6 -0
- package/docker-build/standalone/.next/server/chunks/ssr/6f6aa_next_dist_5002976b._.js +4 -0
- package/docker-build/standalone/.next/server/chunks/ssr/6f6aa_next_dist_client_components_a432b2d3._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/6f6aa_next_dist_client_components_builtin_forbidden_b4e63d3a.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/6f6aa_next_dist_client_components_builtin_global-error_edcabd66.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/6f6aa_next_dist_client_components_builtin_unauthorized_f08488ad.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/6f6aa_next_dist_esm_build_templates_app-page_c7a8656a.js +4 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__0e0d983d._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__0f25bf3b._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__10dae68a._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__1ebd727b._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__30996048._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__587c95dd._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__5ecc39a2._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__6382fff8._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__8ed1042a._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__91644c56._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__a2833bcd._.js +10 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__acf31a1c._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__ae009f46._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__daca67ae._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__f2372d3f._.js +4 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__f2ed834a._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[root-of-the-server]__ff0dddf3._.js +3 -0
- package/docker-build/standalone/.next/server/chunks/ssr/[turbopack]_runtime.js +795 -0
- package/docker-build/standalone/.next/server/chunks/ssr/e6d68_cc_CODECRYPTO_infra_server-cc__next-internal_server_app_page_actions_12ae3ff1.js +3 -0
- package/docker-build/standalone/.next/server/functions-config-manifest.json +4 -0
- package/docker-build/standalone/.next/server/middleware-build-manifest.js +21 -0
- package/docker-build/standalone/.next/server/middleware-manifest.json +6 -0
- package/docker-build/standalone/.next/server/next-font-manifest.js +1 -0
- package/docker-build/standalone/.next/server/next-font-manifest.json +27 -0
- package/docker-build/standalone/.next/server/pages/404.html +1 -0
- package/docker-build/standalone/.next/server/pages/500.html +2 -0
- package/docker-build/standalone/.next/server/pages-manifest.json +4 -0
- package/docker-build/standalone/.next/server/server-reference-manifest.js +1 -0
- package/docker-build/standalone/.next/server/server-reference-manifest.json +5 -0
- package/docker-build/standalone/.next/static/ZrQJjBH5oznRmy8xN4NKX/_buildManifest.js +11 -0
- package/docker-build/standalone/.next/static/ZrQJjBH5oznRmy8xN4NKX/_clientMiddlewareManifest.json +1 -0
- package/docker-build/standalone/.next/static/ZrQJjBH5oznRmy8xN4NKX/_ssgManifest.js +1 -0
- package/docker-build/standalone/.next/static/chunks/0c03a563297c48f4.js +1 -0
- package/docker-build/standalone/.next/static/chunks/3142ddfdb448fd24.js +1 -0
- package/docker-build/standalone/.next/static/chunks/35b2ae0057b43b20.js +1 -0
- package/docker-build/standalone/.next/static/chunks/5a1aef391fd12242.js +1 -0
- package/docker-build/standalone/.next/static/chunks/66401b6fc62891de.js +4 -0
- package/docker-build/standalone/.next/static/chunks/782a67ca986fb1bd.js +1 -0
- package/docker-build/standalone/.next/static/chunks/8b27abf6cb0fca62.js +2 -0
- package/docker-build/standalone/.next/static/chunks/8dba80aa68873762.css +3 -0
- package/docker-build/standalone/.next/static/chunks/902797f337bf356c.js +1 -0
- package/docker-build/standalone/.next/static/chunks/9706b17cfd50df01.js +1 -0
- package/docker-build/standalone/.next/static/chunks/a6dad97d9634a72d.js +1 -0
- package/docker-build/standalone/.next/static/chunks/a6dad97d9634a72d.js.map +1 -0
- package/docker-build/standalone/.next/static/chunks/df3b8eb181fde7c2.js +1 -0
- package/docker-build/standalone/.next/static/chunks/turbopack-237950634fd3a365.js +4 -0
- package/docker-build/standalone/.next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
- package/docker-build/standalone/.next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
- package/docker-build/standalone/.next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
- package/docker-build/standalone/.next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
- package/docker-build/standalone/.next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
- package/docker-build/standalone/.next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
- package/docker-build/standalone/.next/static/media/favicon.0b3bf435.ico +0 -0
- package/docker-build/standalone/package.json +35 -0
- package/docker-build/standalone/public/deploy-test.html +276 -0
- package/docker-build/standalone/public/file.svg +1 -0
- package/docker-build/standalone/public/globe.svg +1 -0
- package/docker-build/standalone/public/next.svg +1 -0
- package/docker-build/standalone/public/vercel.svg +1 -0
- package/docker-build/standalone/public/window.svg +1 -0
- package/docker-build/standalone/server.js +38 -0
- package/package.json +1 -1
- package/src/commands/deploy.ts +264 -11
package/src/commands/deploy.ts
CHANGED
|
@@ -4,13 +4,19 @@ import ora from 'ora';
|
|
|
4
4
|
import { execSync } from 'child_process';
|
|
5
5
|
import * as fs from 'fs';
|
|
6
6
|
import * as path from 'path';
|
|
7
|
+
import * as os from 'os';
|
|
7
8
|
|
|
8
9
|
export const deployCommand = new Command('deploy')
|
|
9
10
|
.description('Build and deploy Docker image for Next.js standalone application')
|
|
10
11
|
.argument('<project-path>', 'Path to the Next.js project directory')
|
|
11
12
|
.argument('[dest-folder]', 'Destination folder for Docker build context', './docker-build')
|
|
12
13
|
.option('--skip-build', 'Skip npm run build (assume already built)', false)
|
|
13
|
-
.option('--no-push', 'Build image but do not push to registry'
|
|
14
|
+
.option('--no-push', 'Build image but do not push to registry')
|
|
15
|
+
.option('--deploy', 'Deploy to remote server after building', false)
|
|
16
|
+
.option('--service-name <name>', 'Service name for remote deployment')
|
|
17
|
+
.option('--env-file <path>', 'Path to .env file with environment variables')
|
|
18
|
+
.option('--port <port>', 'Application port', '3000')
|
|
19
|
+
.option('--domain-base <domain>', 'Domain base for deployment', 'proyectos.codecrypto.academy')
|
|
14
20
|
.action(async (projectPath: string, destFolder: string, options) => {
|
|
15
21
|
console.log(chalk.blue('\n🐳 CodeCrypto Docker Deployment\n'));
|
|
16
22
|
|
|
@@ -37,12 +43,18 @@ export const deployCommand = new Command('deploy')
|
|
|
37
43
|
const imageName = `${imageBase}:${version}`;
|
|
38
44
|
const imageLatest = `${imageBase}:latest`;
|
|
39
45
|
|
|
40
|
-
|
|
46
|
+
// Determinar si hacer push
|
|
47
|
+
// En Commander.js, cuando defines .option('--no-push', ...) sin tercer parámetro:
|
|
48
|
+
// - Por defecto (sin flags): options.push = true (hace push)
|
|
49
|
+
// - Con --no-push: options.push = false (no hace push)
|
|
50
|
+
const shouldPush = options.push !== false;
|
|
51
|
+
|
|
52
|
+
console.log(chalk.gray('Deployment Configuration:'));
|
|
41
53
|
console.log(chalk.white(` Project: ${chalk.green(projectName)}`));
|
|
42
54
|
console.log(chalk.white(` Version: ${chalk.green(version)}`));
|
|
43
55
|
console.log(chalk.white(` Image: ${chalk.green(imageName)}`));
|
|
44
56
|
console.log(chalk.white(` Latest: ${chalk.green(imageLatest)}`));
|
|
45
|
-
console.log(chalk.white(` Push to Registry: ${
|
|
57
|
+
console.log(chalk.white(` Push to Registry: ${shouldPush ? chalk.green('Yes') : chalk.yellow('No')}\n`));
|
|
46
58
|
|
|
47
59
|
// Paso 1: Build del proyecto si es necesario
|
|
48
60
|
if (!options.skipBuild) {
|
|
@@ -112,14 +124,62 @@ export const deployCommand = new Command('deploy')
|
|
|
112
124
|
|
|
113
125
|
copySpinner.succeed('Files copied successfully');
|
|
114
126
|
|
|
115
|
-
//
|
|
127
|
+
// Leer y procesar archivo .env si existe
|
|
128
|
+
let nextPublicEnvVars: string[] = [];
|
|
129
|
+
let runtimeEnvVars: string[] = [];
|
|
130
|
+
const envFilePath = options.envFile
|
|
131
|
+
? path.resolve(options.envFile)
|
|
132
|
+
: path.join(resolvedProjectPath, '.env');
|
|
133
|
+
|
|
134
|
+
if (fs.existsSync(envFilePath)) {
|
|
135
|
+
const envContent = fs.readFileSync(envFilePath, 'utf-8');
|
|
136
|
+
const envLines = envContent.split('\n');
|
|
137
|
+
|
|
138
|
+
for (const line of envLines) {
|
|
139
|
+
const trimmed = line.trim();
|
|
140
|
+
// Ignorar comentarios y líneas vacías
|
|
141
|
+
if (!trimmed || trimmed.startsWith('#')) continue;
|
|
142
|
+
|
|
143
|
+
const equalIndex = trimmed.indexOf('=');
|
|
144
|
+
if (equalIndex === -1) continue;
|
|
145
|
+
|
|
146
|
+
const key = trimmed.substring(0, equalIndex).trim();
|
|
147
|
+
const value = trimmed.substring(equalIndex + 1).trim();
|
|
148
|
+
|
|
149
|
+
if (key.startsWith('NEXT_PUBLIC_')) {
|
|
150
|
+
nextPublicEnvVars.push(`${key}=${value}`);
|
|
151
|
+
} else {
|
|
152
|
+
runtimeEnvVars.push(`${key}=${value}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Paso 3: Crear Dockerfile con variables NEXT_PUBLIC_*
|
|
116
158
|
const dockerfilePath = path.join(resolvedDestFolder, 'Dockerfile');
|
|
159
|
+
|
|
160
|
+
// Construir ARG y ENV para NEXT_PUBLIC_*
|
|
161
|
+
const buildArgs = nextPublicEnvVars.map(env => {
|
|
162
|
+
const [key, ...valueParts] = env.split('=');
|
|
163
|
+
const value = valueParts.join('=');
|
|
164
|
+
return `ARG ${key}=${value}`;
|
|
165
|
+
}).join('\n');
|
|
166
|
+
|
|
167
|
+
const buildEnvs = nextPublicEnvVars.map(env => {
|
|
168
|
+
const [key, ...valueParts] = env.split('=');
|
|
169
|
+
const value = valueParts.join('=');
|
|
170
|
+
return `ENV ${key}=${value}`;
|
|
171
|
+
}).join('\n');
|
|
172
|
+
|
|
117
173
|
const dockerfileContent = `FROM node:20-alpine
|
|
118
174
|
WORKDIR /app
|
|
119
175
|
|
|
120
176
|
ENV NODE_ENV=production
|
|
121
177
|
ENV PORT=3000
|
|
122
178
|
|
|
179
|
+
${buildArgs}
|
|
180
|
+
|
|
181
|
+
${buildEnvs}
|
|
182
|
+
|
|
123
183
|
# Copiamos el contenido de standalone
|
|
124
184
|
COPY standalone/ .
|
|
125
185
|
|
|
@@ -148,10 +208,32 @@ CMD ["node", "server.js"]
|
|
|
148
208
|
process.exit(1);
|
|
149
209
|
}
|
|
150
210
|
|
|
211
|
+
// Verificar autenticación de Docker si se va a hacer push
|
|
212
|
+
if (shouldPush) {
|
|
213
|
+
const authSpinner = ora('Verifying Docker authentication...').start();
|
|
214
|
+
try {
|
|
215
|
+
// Verificar si hay credenciales de Docker configuradas
|
|
216
|
+
execSync('docker info', { stdio: 'pipe' });
|
|
217
|
+
// Intentar verificar login en Docker Hub
|
|
218
|
+
try {
|
|
219
|
+
execSync('docker pull hello-world:latest', { stdio: 'pipe' });
|
|
220
|
+
authSpinner.succeed('Docker authentication verified');
|
|
221
|
+
} catch {
|
|
222
|
+
// Si no puede hacer pull, verificar al menos que docker está funcionando
|
|
223
|
+
authSpinner.warn('Could not verify Docker Hub authentication. Make sure you are logged in with: docker login');
|
|
224
|
+
}
|
|
225
|
+
} catch (error) {
|
|
226
|
+
authSpinner.fail('Docker authentication failed');
|
|
227
|
+
console.error(chalk.yellow('\n⚠️ Warning: Docker authentication may be required for push'));
|
|
228
|
+
console.error(chalk.yellow(' Run: docker login'));
|
|
229
|
+
console.error(chalk.yellow(' Or use --no-push to skip pushing to registry\n'));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
151
233
|
// Paso 5: Construir y hacer push
|
|
152
234
|
const buildDockerSpinner = ora('Building Docker image for multiple platforms...').start();
|
|
153
235
|
try {
|
|
154
|
-
const tags =
|
|
236
|
+
const tags = shouldPush
|
|
155
237
|
? [`--tag ${imageName}`, `--tag ${imageLatest}`, '--push']
|
|
156
238
|
: [`--tag ${imageName}`, `--tag ${imageLatest}`, '--load'];
|
|
157
239
|
|
|
@@ -175,25 +257,173 @@ CMD ["node", "server.js"]
|
|
|
175
257
|
console.log(chalk.white(` Tags:`));
|
|
176
258
|
console.log(chalk.white(` - ${chalk.cyan(imageName)}`));
|
|
177
259
|
console.log(chalk.white(` - ${chalk.cyan(imageLatest)}`));
|
|
178
|
-
if (
|
|
260
|
+
if (shouldPush) {
|
|
179
261
|
console.log(chalk.white(` Registry: ${chalk.cyan('Docker Hub')}`));
|
|
180
262
|
console.log(chalk.white(` URL: ${chalk.cyan(`https://hub.docker.com/r/${imageBase}`)}`));
|
|
181
263
|
}
|
|
182
264
|
} catch (error) {
|
|
183
265
|
buildDockerSpinner.fail('Docker build failed');
|
|
184
266
|
console.error(chalk.red('\n❌ Error building Docker image'));
|
|
185
|
-
if (
|
|
267
|
+
if (shouldPush) {
|
|
186
268
|
console.error(chalk.yellow('Make sure you are authenticated: docker login'));
|
|
187
269
|
}
|
|
188
270
|
process.exit(1);
|
|
189
271
|
}
|
|
190
272
|
|
|
273
|
+
// Paso 6: Desplegar en servidor remoto si se solicita
|
|
274
|
+
if (options.deploy) {
|
|
275
|
+
await deployToRemoteServer({
|
|
276
|
+
imageName: shouldPush ? imageName : imageLatest,
|
|
277
|
+
serviceName: options.serviceName || projectName,
|
|
278
|
+
domainBase: options.domainBase,
|
|
279
|
+
port: options.port,
|
|
280
|
+
envVars: runtimeEnvVars,
|
|
281
|
+
envFilePath: runtimeEnvVars.length > 0 ? envFilePath : undefined,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
|
|
191
285
|
} catch (error: any) {
|
|
192
286
|
console.error(chalk.red(`\n❌ Error: ${error.message}`));
|
|
193
287
|
process.exit(1);
|
|
194
288
|
}
|
|
195
289
|
});
|
|
196
290
|
|
|
291
|
+
// Función para desplegar en servidor remoto
|
|
292
|
+
async function deployToRemoteServer(config: {
|
|
293
|
+
imageName: string;
|
|
294
|
+
serviceName: string;
|
|
295
|
+
domainBase: string;
|
|
296
|
+
port: string;
|
|
297
|
+
envVars: string[];
|
|
298
|
+
envFilePath?: string;
|
|
299
|
+
}) {
|
|
300
|
+
const deploySpinner = ora('Configuring remote Docker connection...').start();
|
|
301
|
+
|
|
302
|
+
try {
|
|
303
|
+
// Configurar variables de entorno para Docker remoto
|
|
304
|
+
const dockerCertPath = path.join(os.homedir(), '.codecrypto', 'docker-client');
|
|
305
|
+
|
|
306
|
+
if (!fs.existsSync(dockerCertPath)) {
|
|
307
|
+
deploySpinner.fail('Docker certificates not found');
|
|
308
|
+
console.error(chalk.red(`❌ Error: Docker certificates not found at ${dockerCertPath}`));
|
|
309
|
+
console.error(chalk.yellow(' Make sure you have the certificates in ~/.codecrypto/docker-client'));
|
|
310
|
+
process.exit(1);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// Verificar que existen los certificados necesarios
|
|
314
|
+
const requiredCerts = ['ca.pem', 'cert.pem', 'key.pem'];
|
|
315
|
+
for (const cert of requiredCerts) {
|
|
316
|
+
const certPath = path.join(dockerCertPath, cert);
|
|
317
|
+
if (!fs.existsSync(certPath)) {
|
|
318
|
+
deploySpinner.fail(`Certificate ${cert} not found`);
|
|
319
|
+
console.error(chalk.red(`❌ Error: Certificate ${cert} not found at ${certPath}`));
|
|
320
|
+
process.exit(1);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// Configurar variables de entorno para Docker
|
|
325
|
+
const dockerEnv: Record<string, string> = {
|
|
326
|
+
...process.env,
|
|
327
|
+
DOCKER_HOST: 'https://server.codecrypto.academy:2376',
|
|
328
|
+
DOCKER_TLS_VERIFY: '1',
|
|
329
|
+
DOCKER_CERT_PATH: dockerCertPath,
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
deploySpinner.succeed('Docker connection configured');
|
|
333
|
+
|
|
334
|
+
// Construir nombre completo del dominio
|
|
335
|
+
const fullDomain = `${config.serviceName}.${config.domainBase}`;
|
|
336
|
+
const serviceName = config.serviceName.toLowerCase().replace(/[^a-z0-9-]/g, '-');
|
|
337
|
+
|
|
338
|
+
// Detener y eliminar contenedor existente si existe
|
|
339
|
+
const stopSpinner = ora('Checking for existing container...').start();
|
|
340
|
+
try {
|
|
341
|
+
execSync(`docker ps -a --filter name=^${fullDomain}$ --format "{{.Names}}"`, {
|
|
342
|
+
env: dockerEnv,
|
|
343
|
+
stdio: 'pipe',
|
|
344
|
+
encoding: 'utf-8',
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
// Si existe, detenerlo y eliminarlo
|
|
348
|
+
try {
|
|
349
|
+
execSync(`docker stop ${fullDomain}`, { env: dockerEnv, stdio: 'pipe' });
|
|
350
|
+
} catch {
|
|
351
|
+
// Container might not be running
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
try {
|
|
355
|
+
execSync(`docker rm ${fullDomain}`, { env: dockerEnv, stdio: 'pipe' });
|
|
356
|
+
stopSpinner.succeed('Existing container removed');
|
|
357
|
+
} catch {
|
|
358
|
+
stopSpinner.warn('No existing container found');
|
|
359
|
+
}
|
|
360
|
+
} catch (error) {
|
|
361
|
+
stopSpinner.warn('Could not check for existing container');
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// Preparar opciones de entorno
|
|
365
|
+
// Para despliegue remoto, pasamos las variables directamente con -e
|
|
366
|
+
// ya que --env-file requiere que el archivo esté en el servidor remoto
|
|
367
|
+
const envOpts: string[] = [];
|
|
368
|
+
if (config.envVars.length > 0) {
|
|
369
|
+
config.envVars.forEach(env => {
|
|
370
|
+
// Escapar comillas y caracteres especiales en el valor
|
|
371
|
+
const [key, ...valueParts] = env.split('=');
|
|
372
|
+
const value = valueParts.join('=');
|
|
373
|
+
// Escapar comillas dobles en el valor
|
|
374
|
+
const escapedValue = value.replace(/"/g, '\\"');
|
|
375
|
+
envOpts.push(`-e "${key}=${escapedValue}"`);
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
// Construir comando docker run
|
|
380
|
+
const dockerRunCmd = `docker run -d \\
|
|
381
|
+
--name ${fullDomain} \\
|
|
382
|
+
--network academy-network \\
|
|
383
|
+
--restart unless-stopped \\
|
|
384
|
+
${envOpts.join(' \\\n ')} \\
|
|
385
|
+
-l traefik.enable=true \\
|
|
386
|
+
-l "traefik.http.routers.${serviceName}-router.rule=Host(\\\`${fullDomain}\\\`)" \\
|
|
387
|
+
-l traefik.http.routers.${serviceName}-router.entrypoints=websecure \\
|
|
388
|
+
-l traefik.http.routers.${serviceName}-router.tls=true \\
|
|
389
|
+
-l traefik.http.services.${serviceName}-service.loadbalancer.server.port=${config.port} \\
|
|
390
|
+
${config.imageName}`;
|
|
391
|
+
|
|
392
|
+
const runSpinner = ora('Deploying container to remote server...').start();
|
|
393
|
+
|
|
394
|
+
try {
|
|
395
|
+
execSync(dockerRunCmd, {
|
|
396
|
+
env: dockerEnv,
|
|
397
|
+
stdio: 'inherit',
|
|
398
|
+
shell: '/bin/sh',
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
runSpinner.succeed('Container deployed successfully');
|
|
402
|
+
|
|
403
|
+
console.log(chalk.green('\n✅ Remote deployment completed successfully!'));
|
|
404
|
+
console.log(chalk.gray('Deployment details:'));
|
|
405
|
+
console.log(chalk.white(` Service: ${chalk.cyan(config.serviceName)}`));
|
|
406
|
+
console.log(chalk.white(` Domain: ${chalk.cyan(fullDomain)}`));
|
|
407
|
+
console.log(chalk.white(` URL: ${chalk.cyan(`https://${fullDomain}`)}`));
|
|
408
|
+
console.log(chalk.white(` Image: ${chalk.cyan(config.imageName)}`));
|
|
409
|
+
console.log(chalk.white(` Port: ${chalk.cyan(config.port)}`));
|
|
410
|
+
} catch (error) {
|
|
411
|
+
runSpinner.fail('Failed to deploy container');
|
|
412
|
+
console.error(chalk.red('\n❌ Error deploying container to remote server'));
|
|
413
|
+
console.error(chalk.yellow(' Make sure:'));
|
|
414
|
+
console.error(chalk.yellow(' - The image is available on the remote server'));
|
|
415
|
+
console.error(chalk.yellow(' - You have push the image to Docker Hub (or use --no-push and ensure image exists)'));
|
|
416
|
+
console.error(chalk.yellow(' - The network "academy-network" exists on the remote server'));
|
|
417
|
+
process.exit(1);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
} catch (error: any) {
|
|
421
|
+
deploySpinner.fail('Failed to configure remote deployment');
|
|
422
|
+
console.error(chalk.red(`\n❌ Error: ${error.message}`));
|
|
423
|
+
process.exit(1);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
|
|
197
427
|
// Helper functions
|
|
198
428
|
function findDirectory(root: string, name: string): string | null {
|
|
199
429
|
try {
|
|
@@ -224,10 +454,33 @@ function copyDirectory(src: string, dest: string): void {
|
|
|
224
454
|
const srcPath = path.join(src, entry.name);
|
|
225
455
|
const destPath = path.join(dest, entry.name);
|
|
226
456
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
457
|
+
try {
|
|
458
|
+
// Obtener información detallada del archivo para detectar tipos especiales
|
|
459
|
+
const stats = fs.lstatSync(srcPath);
|
|
460
|
+
|
|
461
|
+
if (stats.isDirectory()) {
|
|
462
|
+
copyDirectory(srcPath, destPath);
|
|
463
|
+
} else if (stats.isFile()) {
|
|
464
|
+
// Solo copiar archivos regulares
|
|
465
|
+
fs.copyFileSync(srcPath, destPath);
|
|
466
|
+
} else if (stats.isSymbolicLink()) {
|
|
467
|
+
// Copiar symlinks preservando el target
|
|
468
|
+
const linkTarget = fs.readlinkSync(srcPath);
|
|
469
|
+
fs.symlinkSync(linkTarget, destPath);
|
|
470
|
+
} else {
|
|
471
|
+
// Saltar sockets, FIFOs, y otros tipos especiales
|
|
472
|
+
// Estos no son necesarios para el build de Docker
|
|
473
|
+
continue;
|
|
474
|
+
}
|
|
475
|
+
} catch (error: any) {
|
|
476
|
+
// Si hay un error al copiar (por ejemplo, socket), simplemente saltarlo
|
|
477
|
+
// Los sockets y otros archivos especiales no son necesarios para el build
|
|
478
|
+
if (error.code === 'ENOTSUP' || error.code === 'EINVAL' || error.code === 'EOPNOTSUPP') {
|
|
479
|
+
// Saltar silenciosamente sockets y otros archivos especiales
|
|
480
|
+
continue;
|
|
481
|
+
}
|
|
482
|
+
// Para otros errores, lanzar el error
|
|
483
|
+
throw error;
|
|
231
484
|
}
|
|
232
485
|
}
|
|
233
486
|
}
|