gg-deploy 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.env.example +7 -0
  2. package/LICENSE +661 -0
  3. package/README.md +251 -0
  4. package/config.sample.json +10 -0
  5. package/dist/cli.d.ts +3 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +124 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/commands/apply.d.ts +3 -0
  10. package/dist/commands/apply.d.ts.map +1 -0
  11. package/dist/commands/apply.js +81 -0
  12. package/dist/commands/apply.js.map +1 -0
  13. package/dist/commands/plan.d.ts +3 -0
  14. package/dist/commands/plan.d.ts.map +1 -0
  15. package/dist/commands/plan.js +105 -0
  16. package/dist/commands/plan.js.map +1 -0
  17. package/dist/commands/status.d.ts +3 -0
  18. package/dist/commands/status.d.ts.map +1 -0
  19. package/dist/commands/status.js +79 -0
  20. package/dist/commands/status.js.map +1 -0
  21. package/dist/config.d.ts +33 -0
  22. package/dist/config.d.ts.map +1 -0
  23. package/dist/config.js +87 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/index.d.ts +7 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +7 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/mcp-server.d.ts +4 -0
  30. package/dist/mcp-server.d.ts.map +1 -0
  31. package/dist/mcp-server.js +96 -0
  32. package/dist/mcp-server.js.map +1 -0
  33. package/dist/services/github.d.ts +18 -0
  34. package/dist/services/github.d.ts.map +1 -0
  35. package/dist/services/github.js +123 -0
  36. package/dist/services/github.js.map +1 -0
  37. package/dist/services/godaddy.d.ts +16 -0
  38. package/dist/services/godaddy.d.ts.map +1 -0
  39. package/dist/services/godaddy.js +69 -0
  40. package/dist/services/godaddy.js.map +1 -0
  41. package/dist/types.d.ts +52 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +2 -0
  44. package/dist/types.js.map +1 -0
  45. package/dist/ui-server.d.ts +2 -0
  46. package/dist/ui-server.d.ts.map +1 -0
  47. package/dist/ui-server.js +223 -0
  48. package/dist/ui-server.js.map +1 -0
  49. package/package.json +72 -0
  50. package/tsconfig.json +20 -0
  51. package/ui/dist/assets/index-DWy6cIAN.js +41 -0
  52. package/ui/dist/assets/index-DuQvusTC.css +1 -0
  53. package/ui/dist/index.html +16 -0
package/README.md ADDED
@@ -0,0 +1,251 @@
1
+ <p align="center">
2
+ <img src="img/Banner.png" alt="GG Deploy Banner" width="100%">
3
+ </p>
4
+
5
+ # gg-deploy
6
+
7
+ **Free hosting deserves free tooling. Domain → GitHub Pages in 60 seconds.**
8
+
9
+ Configure and connect any domain to free hosting via GitHub Pages—DNS, SSL, CNAME—automated. One command. One click. One prompt. Works via CLI, desktop app, web UI, or AI assistant (MCP).
10
+
11
+ ## Quick Start
12
+
13
+ ```bash
14
+ npx gg-deploy ui
15
+ # Opens http://localhost:3847
16
+ ```
17
+
18
+ Or via CLI:
19
+ ```bash
20
+ npx gg-deploy plan example.com user/repo # Preview (safe)
21
+ npx gg-deploy apply example.com user/repo # Deploy
22
+ npx gg-deploy status example.com user/repo # Health check
23
+ ```
24
+
25
+ ## Requirements
26
+
27
+ - **Node.js 18+** — Check with `node --version`
28
+ - **GoDaddy account** with API access enabled
29
+ - **GitHub account** with a Personal Access Token
30
+ - **Domain on GoDaddy** you want to point to GitHub Pages
31
+ - **GitHub repo** with your site content (index.html or built site)
32
+
33
+ ## Setup
34
+
35
+ Credentials are saved once to `~/.gg-deploy/config.json` and work across all projects.
36
+
37
+ ### Option 1: Web UI (Recommended)
38
+
39
+ ```bash
40
+ npx gg-deploy ui
41
+ ```
42
+
43
+ The setup wizard walks you through:
44
+ 1. Creating a GoDaddy API key
45
+ 2. Creating a GitHub token
46
+ 3. Testing and saving credentials
47
+
48
+ ### Option 2: Manual Config
49
+
50
+ Create `~/.gg-deploy/config.json`:
51
+ ```json
52
+ {
53
+ "godaddy": {
54
+ "apiKey": "YOUR_KEY",
55
+ "apiSecret": "YOUR_SECRET",
56
+ "environment": "production"
57
+ },
58
+ "github": {
59
+ "token": "ghp_YOUR_TOKEN"
60
+ }
61
+ }
62
+ ```
63
+
64
+ ### Getting Credentials
65
+
66
+ **GoDaddy API Key:**
67
+ 1. Go to https://developer.godaddy.com/keys
68
+ 2. Click "Create New API Key"
69
+ 3. Select **Production** (not OTE/Test)
70
+ 4. Copy Key and Secret immediately (secret shown only once)
71
+
72
+ **GitHub Token:**
73
+ 1. Go to https://github.com/settings/tokens/new?description=gg-deploy&scopes=repo
74
+ 2. Click "Generate token"
75
+ 3. Copy the token (starts with `ghp_`)
76
+
77
+ ## Web Interface
78
+
79
+ ### Main Screen
80
+
81
+ | Element | Description |
82
+ |---------|-------------|
83
+ | **Domain field** | Your GoDaddy domain (e.g., `example.com`) |
84
+ | **Repository field** | GitHub repo as `username/repo` |
85
+ | **Deploy button** | Starts the deployment process |
86
+ | **Status badges** | Show GoDaddy/GitHub connection status |
87
+ | **Settings gear** | Opens credential management |
88
+
89
+ ### Status Indicators
90
+
91
+ | Color | Meaning |
92
+ |-------|---------|
93
+ | Green (glowing) | Connected and verified |
94
+ | Yellow (pulsing) | Testing connection... |
95
+ | Red | Error (hover for details) |
96
+ | Gray | Not tested yet |
97
+
98
+ Hover over badges for detailed status. Click the refresh button to re-test connections.
99
+
100
+ ### Settings Screen
101
+
102
+ - **API Key / Secret / Token fields** — Pre-filled with saved values (masked)
103
+ - **Eye icon** — Click to reveal value for copying
104
+ - **Status indicators** — Show live verification status
105
+ - **Test button** — Re-verify API connections
106
+ - **Update Settings** — Save changes
107
+
108
+ ### Deployment Flow
109
+
110
+ 1. Enter domain and repo
111
+ 2. Click Deploy
112
+ 3. Watch real-time progress:
113
+ - Verify domain ownership
114
+ - Check repository access
115
+ - Configure DNS records
116
+ - Add CNAME file
117
+ - Enable GitHub Pages
118
+ - Provision SSL certificate
119
+ 4. Get your live URL
120
+
121
+ ## CLI Commands
122
+
123
+ | Command | Description | Safe |
124
+ |---------|-------------|------|
125
+ | `plan <domain> <repo>` | Preview changes | Yes |
126
+ | `apply <domain> <repo>` | Execute deployment | No |
127
+ | `status <domain> <repo>` | Check health | Yes |
128
+ | `ui` | Launch web interface | Yes |
129
+ | `mcp-serve` | Start MCP server | Yes |
130
+ | `describe` | Output tool schema | Yes |
131
+
132
+ Add `--output json` for machine-readable output.
133
+
134
+ ## Claude Code / MCP
135
+
136
+ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
137
+
138
+ ```json
139
+ {
140
+ "mcpServers": {
141
+ "gg-deploy": {
142
+ "command": "npx",
143
+ "args": ["-y", "gg-deploy", "mcp-serve"]
144
+ }
145
+ }
146
+ }
147
+ ```
148
+
149
+ Then tell Claude: "Deploy example.com using user/repo"
150
+
151
+ ## Troubleshooting
152
+
153
+ ### Node.js Issues
154
+
155
+ | Problem | Solution |
156
+ |---------|----------|
157
+ | `node: command not found` | Install Node.js from https://nodejs.org |
158
+ | `unsupported engine` | Upgrade to Node.js 18+ |
159
+ | `EACCES permission denied` | Don't use `sudo`. Fix npm permissions or use nvm |
160
+
161
+ ### GoDaddy API Issues
162
+
163
+ | Problem | Solution |
164
+ |---------|----------|
165
+ | `401 Unauthorized` | Wrong API key/secret. Regenerate at developer.godaddy.com |
166
+ | `403 Forbidden` | API key is for OTE (test). Create a **Production** key |
167
+ | `404 Not Found` | Domain not in your GoDaddy account |
168
+ | `422 Invalid` | Domain locked or has pending transfers |
169
+ | Red status dot | Hover for error. Usually auth issue |
170
+
171
+ ### GitHub API Issues
172
+
173
+ | Problem | Solution |
174
+ |---------|----------|
175
+ | `401 Bad credentials` | Token expired or invalid. Generate new one |
176
+ | `403 Forbidden` | Token missing `repo` scope. Regenerate with correct scope |
177
+ | `404 Not Found` | Repo doesn't exist or token can't access it |
178
+ | Private repo fails | Need GitHub Pro for private repo Pages |
179
+
180
+ ### DNS Issues
181
+
182
+ | Problem | Solution |
183
+ |---------|----------|
184
+ | Site not loading | Wait 10-60 min for DNS propagation |
185
+ | Wrong IP showing | Clear DNS cache: `sudo dscacheutil -flushcache` (Mac) |
186
+ | SSL not working | GitHub needs DNS to resolve first. Check Pages settings |
187
+
188
+ ### Config Issues
189
+
190
+ | Problem | Solution |
191
+ |---------|----------|
192
+ | "Not configured" | Check `~/.gg-deploy/config.json` exists |
193
+ | Can't find config | It's in your home directory: `ls -la ~/.gg-deploy/` |
194
+ | Permission denied | Run `chmod 600 ~/.gg-deploy/config.json` |
195
+
196
+ ### UI Issues
197
+
198
+ | Problem | Solution |
199
+ |---------|----------|
200
+ | Port 3847 in use | Kill existing: `lsof -i :3847` then `kill <PID>` |
201
+ | Blank page | Clear browser cache or try incognito |
202
+ | Eye icon not working | Click reveals value if credentials are saved |
203
+
204
+ ### Common Fixes
205
+
206
+ ```bash
207
+ # Check if config exists
208
+ cat ~/.gg-deploy/config.json
209
+
210
+ # Verify Node version
211
+ node --version # Should be 18+
212
+
213
+ # Test GoDaddy API manually
214
+ curl -H "Authorization: sso-key YOUR_KEY:YOUR_SECRET" \
215
+ https://api.godaddy.com/v1/domains
216
+
217
+ # Test GitHub API manually
218
+ curl -H "Authorization: Bearer ghp_YOUR_TOKEN" \
219
+ https://api.github.com/user
220
+ ```
221
+
222
+ ## How It Works
223
+
224
+ 1. **DNS** — Sets A records to GitHub IPs (185.199.108-111.153) + www CNAME
225
+ 2. **CNAME** — Creates CNAME file in repo with your domain
226
+ 3. **Pages** — Enables GitHub Pages on main branch
227
+ 4. **SSL** — GitHub auto-provisions Let's Encrypt certificate
228
+
229
+ Total time: ~60 seconds. DNS propagation: 10-60 minutes.
230
+
231
+ ## Security
232
+
233
+ - Credentials stored in `~/.gg-deploy/config.json` (permission 600)
234
+ - Never committed to git
235
+ - Eye icon reveals values only locally
236
+ - API calls made directly to GoDaddy/GitHub (no proxy)
237
+
238
+ ## Limitations
239
+
240
+ - GoDaddy only (no Cloudflare/Namecheap yet)
241
+ - Public repos or GitHub Pro required for Pages
242
+ - Only www subdomain supported
243
+ - One domain per deployment
244
+
245
+ ## License
246
+
247
+ AGPL-3.0 — Free to use, modify, and distribute. Forks must remain open source.
248
+
249
+ ---
250
+
251
+ Built by [Abe Diaz](https://abediaz.ai) | [GitHub](https://github.com/abe238)
@@ -0,0 +1,10 @@
1
+ {
2
+ "godaddy": {
3
+ "apiKey": "YOUR_GODADDY_API_KEY",
4
+ "apiSecret": "YOUR_GODADDY_API_SECRET",
5
+ "environment": "production"
6
+ },
7
+ "github": {
8
+ "token": "ghp_YOUR_GITHUB_PERSONAL_ACCESS_TOKEN"
9
+ }
10
+ }
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC"}
package/dist/cli.js ADDED
@@ -0,0 +1,124 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+ import { Command } from 'commander';
4
+ import { planCommand } from './commands/plan.js';
5
+ import { applyCommand } from './commands/apply.js';
6
+ import { statusCommand } from './commands/status.js';
7
+ import { startMcpServer } from './mcp-server.js';
8
+ import { startUiServer } from './ui-server.js';
9
+ const program = new Command();
10
+ program
11
+ .name('gg-deploy')
12
+ .description('Free hosting deserves free tooling. Domain → GitHub Pages in 60 seconds.')
13
+ .version('1.0.0');
14
+ program
15
+ .command('plan')
16
+ .description('Preview deployment without making changes (safe for AI agents)')
17
+ .argument('<domain>', 'Domain name (e.g., example.com)')
18
+ .argument('<repo>', 'GitHub repo (e.g., user/repo)')
19
+ .option('-o, --output <format>', 'Output format: human or json', 'human')
20
+ .action(async (domain, repo, opts) => {
21
+ const output = opts.output;
22
+ const result = await planCommand(domain, repo, output);
23
+ process.exit(result.status === 'success' ? 0 : 1);
24
+ });
25
+ program
26
+ .command('apply')
27
+ .description('Execute deployment (requires confirmation for AI agents)')
28
+ .argument('<domain>', 'Domain name (e.g., example.com)')
29
+ .argument('<repo>', 'GitHub repo (e.g., user/repo)')
30
+ .option('-o, --output <format>', 'Output format: human or json', 'human')
31
+ .action(async (domain, repo, opts) => {
32
+ const output = opts.output;
33
+ const result = await applyCommand(domain, repo, output);
34
+ const exitCode = result.status === 'success' ? 0 :
35
+ result.status === 'partial_success' ? 2 : 3;
36
+ process.exit(exitCode);
37
+ });
38
+ program
39
+ .command('status')
40
+ .description('Check deployment health (safe for AI agents)')
41
+ .argument('<domain>', 'Domain name (e.g., example.com)')
42
+ .argument('<repo>', 'GitHub repo (e.g., user/repo)')
43
+ .option('-o, --output <format>', 'Output format: human or json', 'human')
44
+ .action(async (domain, repo, opts) => {
45
+ const output = opts.output;
46
+ const result = await statusCommand(domain, repo, output);
47
+ process.exit(result.status === 'success' ? 0 : 1);
48
+ });
49
+ program
50
+ .command('describe')
51
+ .description('Output tool description for AI agent discovery')
52
+ .action(() => {
53
+ const description = {
54
+ name: 'gg-deploy',
55
+ version: '0.1.0',
56
+ description: 'Deploy any domain to GitHub Pages in one command',
57
+ commands: [
58
+ {
59
+ name: 'plan',
60
+ description: 'Preview deployment without making changes',
61
+ safe: true,
62
+ arguments: [
63
+ { name: 'domain', required: true, description: 'Domain name' },
64
+ { name: 'repo', required: true, description: 'GitHub repo (user/repo)' },
65
+ ],
66
+ options: [
67
+ { name: '--output', values: ['human', 'json'], default: 'human' },
68
+ ],
69
+ example: 'gg-deploy plan example.com user/example --output json',
70
+ },
71
+ {
72
+ name: 'apply',
73
+ description: 'Execute deployment',
74
+ safe: false,
75
+ requires_confirmation: true,
76
+ side_effects: ['Creates DNS records', 'Modifies GitHub Pages settings'],
77
+ rollback_available: true,
78
+ arguments: [
79
+ { name: 'domain', required: true },
80
+ { name: 'repo', required: true },
81
+ ],
82
+ options: [
83
+ { name: '--output', values: ['human', 'json'], default: 'human' },
84
+ ],
85
+ example: 'gg-deploy apply example.com user/example --output json',
86
+ },
87
+ {
88
+ name: 'status',
89
+ description: 'Check deployment health',
90
+ safe: true,
91
+ arguments: [
92
+ { name: 'domain', required: true },
93
+ { name: 'repo', required: true },
94
+ ],
95
+ options: [
96
+ { name: '--output', values: ['human', 'json'], default: 'human' },
97
+ ],
98
+ example: 'gg-deploy status example.com user/example --output json',
99
+ },
100
+ ],
101
+ exit_codes: {
102
+ 0: 'success',
103
+ 1: 'validation_error',
104
+ 2: 'partial_success',
105
+ 3: 'failure',
106
+ 4: 'rollback_needed',
107
+ },
108
+ };
109
+ console.log(JSON.stringify(description, null, 2));
110
+ });
111
+ program
112
+ .command('mcp-serve')
113
+ .description('Start MCP server for Claude Desktop/Code integration')
114
+ .action(async () => {
115
+ await startMcpServer();
116
+ });
117
+ program
118
+ .command('ui')
119
+ .description('Start local web interface')
120
+ .action(async () => {
121
+ await startUiServer();
122
+ });
123
+ program.parse();
124
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { OutputFormat, CommandResult } from '../types.js';
2
+ export declare function applyCommand(domain: string, repo: string, output: OutputFormat): Promise<CommandResult>;
3
+ //# sourceMappingURL=apply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI/D,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,aAAa,CAAC,CAqFxB"}
@@ -0,0 +1,81 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { GoDaddyService } from '../services/godaddy.js';
4
+ import { GitHubService } from '../services/github.js';
5
+ export async function applyCommand(domain, repo, output) {
6
+ const result = {
7
+ status: 'success',
8
+ completed_steps: [],
9
+ failed_steps: [],
10
+ resources_created: [],
11
+ resources_modified: [],
12
+ next_action: null,
13
+ estimated_wait_seconds: null,
14
+ rollback_available: true,
15
+ };
16
+ const spinner = output === 'human' ? ora() : null;
17
+ const log = (msg) => output === 'human' && console.log(msg);
18
+ try {
19
+ const godaddy = new GoDaddyService();
20
+ const github = new GitHubService();
21
+ const githubUser = repo.split('/')[0];
22
+ log(chalk.blue('\n=== Deploying ===\n'));
23
+ spinner?.start('Verifying domain ownership...');
24
+ const domainExists = await godaddy.verifyDomain(domain);
25
+ if (!domainExists)
26
+ throw new Error(`Domain ${domain} not in GoDaddy account`);
27
+ spinner?.succeed('Domain verified');
28
+ result.completed_steps.push('verify_domain');
29
+ spinner?.start('Verifying repository access...');
30
+ const repoExists = await github.verifyRepo(repo);
31
+ if (!repoExists)
32
+ throw new Error(`Repository ${repo} not accessible`);
33
+ spinner?.succeed('Repository verified');
34
+ result.completed_steps.push('verify_repo');
35
+ spinner?.start('Configuring DNS A records...');
36
+ await godaddy.setGitHubPagesRecords(domain, githubUser);
37
+ spinner?.succeed('DNS records configured');
38
+ result.completed_steps.push('configure_dns');
39
+ result.resources_created.push(`A records for ${domain}`);
40
+ result.resources_created.push(`CNAME www.${domain}`);
41
+ spinner?.start('Adding CNAME file to repository...');
42
+ await github.addCnameFile(repo, domain);
43
+ spinner?.succeed('CNAME file added');
44
+ result.completed_steps.push('add_cname');
45
+ result.resources_created.push('CNAME file');
46
+ spinner?.start('Enabling GitHub Pages...');
47
+ await github.enablePages(repo);
48
+ spinner?.succeed('GitHub Pages enabled');
49
+ result.completed_steps.push('enable_pages');
50
+ result.resources_modified.push('GitHub Pages settings');
51
+ spinner?.start('Setting custom domain...');
52
+ await github.setCustomDomain(repo, domain);
53
+ spinner?.succeed('Custom domain set');
54
+ result.completed_steps.push('set_custom_domain');
55
+ log('');
56
+ log(chalk.green('=== Deployment Complete ==='));
57
+ log('');
58
+ log(`Site URL: ${chalk.cyan(`https://${domain}`)}`);
59
+ log('');
60
+ log(chalk.dim('DNS propagation may take 1-48 hours.'));
61
+ log(chalk.dim('HTTPS will be enabled automatically once DNS resolves.'));
62
+ log('');
63
+ log(chalk.dim(`Check status: gg-deploy status ${domain} ${repo}`));
64
+ result.next_action = 'wait_for_dns';
65
+ result.estimated_wait_seconds = 3600;
66
+ }
67
+ catch (e) {
68
+ spinner?.fail('Deployment failed');
69
+ result.status = result.completed_steps.length > 0 ? 'partial_success' : 'failure';
70
+ result.failed_steps.push({
71
+ step: 'apply',
72
+ error: e instanceof Error ? e.message : String(e),
73
+ retriable: true,
74
+ });
75
+ }
76
+ if (output === 'json') {
77
+ console.log(JSON.stringify(result, null, 2));
78
+ }
79
+ return result;
80
+ }
81
+ //# sourceMappingURL=apply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/commands/apply.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { OutputFormat, CommandResult } from '../types.js';
2
+ export declare function planCommand(domain: string, repo: string, output: OutputFormat): Promise<CommandResult>;
3
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAc,aAAa,EAAE,MAAM,aAAa,CAAC;AAI3E,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,aAAa,CAAC,CA6GxB"}
@@ -0,0 +1,105 @@
1
+ import chalk from 'chalk';
2
+ import { GoDaddyService } from '../services/godaddy.js';
3
+ import { GitHubService } from '../services/github.js';
4
+ export async function planCommand(domain, repo, output) {
5
+ const result = {
6
+ status: 'success',
7
+ completed_steps: [],
8
+ failed_steps: [],
9
+ resources_created: [],
10
+ resources_modified: [],
11
+ next_action: null,
12
+ estimated_wait_seconds: null,
13
+ rollback_available: false,
14
+ };
15
+ const plan = {
16
+ domain,
17
+ repo,
18
+ dns_changes: [],
19
+ github_changes: [],
20
+ warnings: [],
21
+ };
22
+ try {
23
+ const godaddy = new GoDaddyService();
24
+ const github = new GitHubService();
25
+ if (output === 'human') {
26
+ console.log(chalk.blue('\n=== Deployment Plan ===\n'));
27
+ console.log(`Domain: ${chalk.cyan(domain)}`);
28
+ console.log(`Repo: ${chalk.cyan(repo)}\n`);
29
+ }
30
+ const domainExists = await godaddy.verifyDomain(domain);
31
+ if (!domainExists) {
32
+ result.status = 'failure';
33
+ result.failed_steps.push({
34
+ step: 'verify_domain',
35
+ error: `Domain ${domain} not found or not active in GoDaddy`,
36
+ retriable: false,
37
+ });
38
+ return result;
39
+ }
40
+ result.completed_steps.push('verify_domain');
41
+ const repoExists = await github.verifyRepo(repo);
42
+ if (!repoExists) {
43
+ result.status = 'failure';
44
+ result.failed_steps.push({
45
+ step: 'verify_repo',
46
+ error: `Repository ${repo} not found or no access`,
47
+ retriable: false,
48
+ });
49
+ return result;
50
+ }
51
+ result.completed_steps.push('verify_repo');
52
+ const isPublic = await github.isRepoPublic(repo);
53
+ if (!isPublic) {
54
+ plan.warnings.push('Repository is private. GitHub Pages requires public repos (or GitHub Pro).');
55
+ }
56
+ const githubUser = repo.split('/')[0];
57
+ plan.dns_changes = [
58
+ { action: 'CREATE', record: { type: 'A', name: '@', data: '185.199.108.153', ttl: 600 } },
59
+ { action: 'CREATE', record: { type: 'A', name: '@', data: '185.199.109.153', ttl: 600 } },
60
+ { action: 'CREATE', record: { type: 'A', name: '@', data: '185.199.110.153', ttl: 600 } },
61
+ { action: 'CREATE', record: { type: 'A', name: '@', data: '185.199.111.153', ttl: 600 } },
62
+ { action: 'CREATE', record: { type: 'CNAME', name: 'www', data: `${githubUser}.github.io`, ttl: 600 } },
63
+ ];
64
+ plan.github_changes = [
65
+ { action: 'CREATE', resource: 'CNAME file', details: `Add CNAME with ${domain}` },
66
+ { action: 'MODIFY', resource: 'GitHub Pages', details: 'Enable Pages with custom domain' },
67
+ ];
68
+ if (output === 'human') {
69
+ console.log(chalk.yellow('DNS Changes:'));
70
+ for (const change of plan.dns_changes) {
71
+ const icon = change.action === 'CREATE' ? '+' : change.action === 'DELETE' ? '-' : '~';
72
+ console.log(` ${chalk.green(icon)} ${change.record.type} ${change.record.name} → ${change.record.data}`);
73
+ }
74
+ console.log();
75
+ console.log(chalk.yellow('GitHub Changes:'));
76
+ for (const change of plan.github_changes) {
77
+ const icon = change.action === 'CREATE' ? '+' : '~';
78
+ console.log(` ${chalk.green(icon)} ${change.resource}: ${change.details}`);
79
+ }
80
+ if (plan.warnings.length) {
81
+ console.log();
82
+ console.log(chalk.red('Warnings:'));
83
+ for (const w of plan.warnings)
84
+ console.log(` ! ${w}`);
85
+ }
86
+ console.log();
87
+ console.log(chalk.dim('Run with "apply" to execute this plan.'));
88
+ }
89
+ else {
90
+ console.log(JSON.stringify({ ...result, plan }, null, 2));
91
+ }
92
+ result.next_action = 'apply';
93
+ result.estimated_wait_seconds = 300;
94
+ }
95
+ catch (e) {
96
+ result.status = 'failure';
97
+ result.failed_steps.push({
98
+ step: 'plan',
99
+ error: e instanceof Error ? e.message : String(e),
100
+ retriable: true,
101
+ });
102
+ }
103
+ return result;
104
+ }
105
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { OutputFormat, CommandResult } from '../types.js';
2
+ export declare function statusCommand(domain: string, repo: string, output: OutputFormat): Promise<CommandResult>;
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAgB,aAAa,EAAE,MAAM,aAAa,CAAC;AAI7E,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,aAAa,CAAC,CAwFxB"}