diff --git a/bin/g3n.ts b/bin/g3n.ts index c5122df..73cc3fd 100755 --- a/bin/g3n.ts +++ b/bin/g3n.ts @@ -173,7 +173,27 @@ function handleCompose(name?: string): void { return; } - compose(name); + if (!args.env) { + console.error("❌ Compose env (staging/prod) is required"); + return; + } + + if (args.env !== "staging" && args.env !== "prod") { + console.error("❌ Compose env (staging/prod) is required"); + return; + } + + if (!args.port) { + console.error("❌ Compose port is required"); + return; + } + + if(args.port.length !== 2) { + console.error("❌ Compose port must be 2 digits"); + return; + } + + compose(name, args.env, Number(args.port)); console.log(`✅ Compose file generated for ${name}`); } diff --git a/bin/src/compose.ts b/bin/src/compose.ts index b5308e7..579d4ef 100644 --- a/bin/src/compose.ts +++ b/bin/src/compose.ts @@ -78,7 +78,7 @@ networks: ` } -const generate = (name: string) => { +const generate = (name: string, env: "staging" | "prod", port: number) => { return ` #!/bin/bash @@ -86,7 +86,9 @@ echo "Generating directory..." mkdir -p data data/app data/postgres data/frpc data/ssh echo "Generating authorized_keys..." -touch data/ssh/authorized_keys +cat << EOF > data/ssh/authorized_keys +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDfXPd7ab21qdKtKKdv2bLxIa9hEqq2oLLj7c3i/rN2f bip@bips-Air +EOF echo "Generating frpc.toml..." touch data/frpc/frpc.toml @@ -102,31 +104,31 @@ transport.tls.enable = true auth_token = "" -[ssh-cld-dkr-staging-${name}.wibudev.com] +[ssh-cld-dkr-${env}-${name}.wibudev.com] type = tcp local_ip = ${name}-dev local_port = 22 -remote_port = 5102 +remote_port = 51${port} -[postgres-cld-dkr-staging-${name}.wibudev.com] +[postgres-cld-dkr-${env}-${name}.wibudev.com] type = tcp local_ip = ${name}-postgres local_port = 5432 -remote_port = 5202 +remote_port = 52${port} -[cld-dkr-staging-${name}.wibudev.com] +[cld-dkr-${env}-${name}.wibudev.com] type = http local_ip = ${name}-prod local_port = 3000 -custom_domains = "cld-dkr-staging-${name}.wibudev.com" +custom_domains = "cld-dkr-${env}-${name}.wibudev.com" EOF ` } -async function compose(name: string) { +async function compose(name: string, env: "staging" | "prod", port: number) { const composeFile = text(name); await fs.writeFile(`./compose.yml`, composeFile); - Bun.spawnSync(["bash", "-c", generate(name)]); + Bun.spawnSync(["bash", "-c", generate(name, env, port)]); console.log("✅ Compose file generated"); }