@patternfly/patternfly-cli 1.0.2 → 1.0.4

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.
@@ -14,7 +14,7 @@ jobs:
14
14
 
15
15
  - uses: actions/setup-node@v4
16
16
  with:
17
- node-version: '20'
17
+ node-version: '22'
18
18
  cache: 'npm'
19
19
 
20
20
  - run: npm ci
@@ -17,7 +17,7 @@ jobs:
17
17
 
18
18
  - uses: actions/setup-node@v4
19
19
  with:
20
- node-version: '20'
20
+ node-version: '22'
21
21
  cache: 'npm'
22
22
 
23
23
  - run: npm ci
@@ -23,7 +23,7 @@ jobs:
23
23
  - name: Setup Node.js
24
24
  uses: actions/setup-node@v4
25
25
  with:
26
- node-version: "20"
26
+ node-version: "22"
27
27
  cache: "npm"
28
28
 
29
29
  - name: Install dependencies
@@ -17,7 +17,7 @@ jobs:
17
17
 
18
18
  - uses: actions/setup-node@v4
19
19
  with:
20
- node-version: '20'
20
+ node-version: '22'
21
21
  cache: 'npm'
22
22
 
23
23
  - run: npm ci
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Red Hat
3
+ Copyright (c) 2025 - 2026, Red Hat
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/dist/cli.js CHANGED
@@ -1,14 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { program } from 'commander';
3
3
  import { execa } from 'execa';
4
- import inquirer from 'inquirer';
5
4
  import fs from 'fs-extra';
6
5
  import path from 'path';
7
6
  import { defaultTemplates } from './templates.js';
8
7
  import { mergeTemplates } from './template-loader.js';
9
8
  import { offerAndCreateGitHubRepo } from './github.js';
9
+ import { runCreate } from './create.js';
10
10
  import { runSave } from './save.js';
11
11
  import { runLoad } from './load.js';
12
+ import { runDeployToGitHubPages } from './gh-pages.js';
12
13
  /** Command to create a new project */
13
14
  program
14
15
  .version('1.0.0')
@@ -19,154 +20,15 @@ program
19
20
  .option('-t, --template-file <path>', 'Path to a JSON file with custom templates (same format as built-in)')
20
21
  .option('--ssh', 'Use SSH URL for cloning the template repository')
21
22
  .action(async (projectDirectory, templateName, options) => {
22
- const templatesToUse = mergeTemplates(defaultTemplates, options?.templateFile);
23
- // If project directory is not provided, prompt for it
24
- if (!projectDirectory) {
25
- const projectDirAnswer = await inquirer.prompt([
26
- {
27
- type: 'input',
28
- name: 'projectDirectory',
29
- message: 'Please provide the directory where you want to create the project?',
30
- default: 'my-app',
31
- },
32
- ]);
33
- projectDirectory = projectDirAnswer.projectDirectory;
34
- }
35
- // If template name is not provided, show available templates and let user select
36
- if (!templateName) {
37
- console.log('\nšŸ“‹ Available templates:\n');
38
- templatesToUse.forEach(t => {
39
- console.log(` ${t.name.padEnd(12)} - ${t.description}`);
23
+ try {
24
+ await runCreate(projectDirectory, templateName, {
25
+ templateFile: options?.templateFile,
26
+ ssh: options?.ssh,
40
27
  });
41
- console.log('');
42
- const templateQuestion = [
43
- {
44
- type: 'list',
45
- name: 'templateName',
46
- message: 'Select a template:',
47
- choices: templatesToUse.map(t => ({
48
- name: `${t.name} - ${t.description}`,
49
- value: t.name
50
- }))
51
- }
52
- ];
53
- const templateAnswer = await inquirer.prompt(templateQuestion);
54
- templateName = templateAnswer.templateName;
55
28
  }
56
- // Look up the template by name
57
- const template = templatesToUse.find(t => t.name === templateName);
58
- if (!template) {
59
- console.error(`āŒ Template "${templateName}" not found.\n`);
60
- console.log('šŸ“‹ Available templates:\n');
61
- templatesToUse.forEach(t => {
62
- console.log(` ${t.name.padEnd(12)} - ${t.description}`);
63
- });
64
- console.log('');
29
+ catch {
65
30
  process.exit(1);
66
31
  }
67
- // If --ssh was not passed, prompt whether to use SSH
68
- let useSSH = options?.ssh;
69
- if (useSSH === undefined && template.repoSSH) {
70
- const sshAnswer = await inquirer.prompt([
71
- {
72
- type: 'confirm',
73
- name: 'useSSH',
74
- message: 'Use SSH URL for cloning?',
75
- default: false,
76
- },
77
- ]);
78
- useSSH = sshAnswer.useSSH;
79
- }
80
- const templateRepoUrl = useSSH && template.repoSSH ? template.repoSSH : template.repo;
81
- // Define the full path for the new project
82
- const projectPath = path.resolve(projectDirectory);
83
- console.log(`Cloning template "${templateName}" from ${templateRepoUrl} into ${projectPath}...`);
84
- try {
85
- // Clone the repository
86
- const cloneArgs = ['clone'];
87
- if (template.options && Array.isArray(template.options)) {
88
- cloneArgs.push(...template.options);
89
- }
90
- cloneArgs.push(templateRepoUrl, projectPath);
91
- await execa('git', cloneArgs, { stdio: 'inherit' });
92
- console.log('āœ… Template cloned successfully.');
93
- // Remove the .git folder from the *new* project
94
- await fs.remove(path.join(projectPath, '.git'));
95
- console.log('🧹 Cleaned up template .git directory.');
96
- // Ask user for customization details
97
- const questions = [
98
- {
99
- type: 'input',
100
- name: 'name',
101
- message: 'What is the project name?',
102
- default: path.basename(projectPath),
103
- },
104
- {
105
- type: 'input',
106
- name: 'version',
107
- message: 'What version number would you like to use?',
108
- default: '1.0.0',
109
- },
110
- {
111
- type: 'input',
112
- name: 'description',
113
- message: 'What is the project description?',
114
- default: '',
115
- },
116
- {
117
- type: 'input',
118
- name: 'author',
119
- message: 'Who is the author of the project?',
120
- default: '',
121
- },
122
- ];
123
- const answers = await inquirer.prompt(questions);
124
- // Update the package.json in the new project
125
- const pkgJsonPath = path.join(projectPath, 'package.json');
126
- if (await fs.pathExists(pkgJsonPath)) {
127
- const pkgJson = await fs.readJson(pkgJsonPath);
128
- // Overwrite fields with user's answers
129
- pkgJson.name = answers.name;
130
- pkgJson.version = answers.version;
131
- pkgJson.description = answers.description;
132
- pkgJson.author = answers.author;
133
- // Write the updated package.json back
134
- await fs.writeJson(pkgJsonPath, pkgJson, { spaces: 2 });
135
- console.log('šŸ“ Customized package.json.');
136
- }
137
- else {
138
- console.log('ā„¹ļø No package.json found in template, skipping customization.');
139
- }
140
- const packageManager = template.packageManager || "npm";
141
- // Install dependencies
142
- console.log('šŸ“¦ Installing dependencies... (This may take a moment)');
143
- await execa(packageManager, ['install'], { cwd: projectPath, stdio: 'inherit' });
144
- console.log('āœ… Dependencies installed.');
145
- // Optional: Create GitHub repository
146
- await offerAndCreateGitHubRepo(projectPath);
147
- // Let the user know the project was created successfully
148
- console.log('\n✨ Project created successfully! ✨\n');
149
- console.log(`To get started:`);
150
- console.log(` cd ${projectDirectory}`);
151
- console.log(' Happy coding! šŸš€');
152
- }
153
- catch (error) {
154
- console.error('āŒ An error occurred:');
155
- if (error instanceof Error) {
156
- console.error(error.message);
157
- }
158
- else if (error && typeof error === 'object' && 'stderr' in error) {
159
- console.error(error.stderr || String(error));
160
- }
161
- else {
162
- console.error(String(error));
163
- }
164
- // Clean up the created directory if an error occurred
165
- if (await fs.pathExists(projectPath)) {
166
- await fs.remove(projectPath);
167
- console.log('🧹 Cleaned up failed project directory.');
168
- }
169
- }
170
32
  });
171
33
  /** Command to initialize a project and optionally create a GitHub repository */
172
34
  program
@@ -268,5 +130,32 @@ program
268
130
  process.exit(1);
269
131
  }
270
132
  });
133
+ /** Command to deploy the React app to GitHub Pages */
134
+ program
135
+ .command('deploy')
136
+ .description('Build the app and deploy it to GitHub Pages (uses gh-pages branch)')
137
+ .argument('[path]', 'Path to the project (defaults to current directory)')
138
+ .option('-d, --dist-dir <dir>', 'Build output directory to deploy', 'dist')
139
+ .option('--no-build', 'Skip running the build step (deploy existing output only)')
140
+ .option('-b, --branch <branch>', 'Git branch to deploy to', 'gh-pages')
141
+ .action(async (projectPath, options) => {
142
+ const cwd = projectPath ? path.resolve(projectPath) : process.cwd();
143
+ try {
144
+ await runDeployToGitHubPages(cwd, {
145
+ distDir: options.distDir,
146
+ skipBuild: options.build === false,
147
+ branch: options.branch,
148
+ });
149
+ }
150
+ catch (error) {
151
+ if (error instanceof Error) {
152
+ console.error(`\nāŒ ${error.message}\n`);
153
+ }
154
+ else {
155
+ console.error(error);
156
+ }
157
+ process.exit(1);
158
+ }
159
+ });
271
160
  program.parse(process.argv);
272
161
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type RunCreateOptions = {
2
+ templateFile?: string;
3
+ ssh?: boolean;
4
+ };
5
+ /**
6
+ * Runs the create flow: clone template, customize package.json, install deps, optionally create GitHub repo.
7
+ * Throws on fatal errors. Caller should catch and process.exit(1).
8
+ */
9
+ export declare function runCreate(projectDirectory: string | undefined, templateName: string | undefined, options?: RunCreateOptions): Promise<void>;
10
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAEF;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,IAAI,CAAC,CAyJf"}
package/dist/create.js ADDED
@@ -0,0 +1,151 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import { execa } from 'execa';
4
+ import inquirer from 'inquirer';
5
+ import { defaultTemplates } from './templates.js';
6
+ import { mergeTemplates } from './template-loader.js';
7
+ import { offerAndCreateGitHubRepo } from './github.js';
8
+ /**
9
+ * Runs the create flow: clone template, customize package.json, install deps, optionally create GitHub repo.
10
+ * Throws on fatal errors. Caller should catch and process.exit(1).
11
+ */
12
+ export async function runCreate(projectDirectory, templateName, options) {
13
+ const templatesToUse = mergeTemplates(defaultTemplates, options?.templateFile);
14
+ // If project directory is not provided, prompt for it
15
+ if (!projectDirectory) {
16
+ const projectDirAnswer = await inquirer.prompt([
17
+ {
18
+ type: 'input',
19
+ name: 'projectDirectory',
20
+ message: 'Please provide the directory where you want to create the project?',
21
+ default: 'my-app',
22
+ },
23
+ ]);
24
+ projectDirectory = projectDirAnswer.projectDirectory;
25
+ }
26
+ // If template name is not provided, show available templates and let user select
27
+ if (!templateName) {
28
+ console.log('\nšŸ“‹ Available templates:\n');
29
+ templatesToUse.forEach(t => {
30
+ console.log(` ${t.name.padEnd(12)} - ${t.description}`);
31
+ });
32
+ console.log('');
33
+ const templateQuestion = [
34
+ {
35
+ type: 'list',
36
+ name: 'templateName',
37
+ message: 'Select a template:',
38
+ choices: templatesToUse.map(t => ({
39
+ name: `${t.name} - ${t.description}`,
40
+ value: t.name,
41
+ })),
42
+ },
43
+ ];
44
+ const templateAnswer = await inquirer.prompt(templateQuestion);
45
+ templateName = templateAnswer.templateName;
46
+ }
47
+ // Look up the template by name
48
+ const template = templatesToUse.find(t => t.name === templateName);
49
+ if (!template) {
50
+ console.error(`āŒ Template "${templateName}" not found.\n`);
51
+ console.log('šŸ“‹ Available templates:\n');
52
+ templatesToUse.forEach(t => {
53
+ console.log(` ${t.name.padEnd(12)} - ${t.description}`);
54
+ });
55
+ console.log('');
56
+ throw new Error(`Template "${templateName}" not found`);
57
+ }
58
+ const templateRepoUrl = options?.ssh && template.repoSSH ? template.repoSSH : template.repo;
59
+ // Define the full path for the new project (projectDirectory is set above via arg or prompt)
60
+ const dir = projectDirectory ?? 'my-app';
61
+ const projectPath = path.resolve(dir);
62
+ console.log(`Cloning template "${templateName}" from ${templateRepoUrl} into ${projectPath}...`);
63
+ try {
64
+ // Clone the repository
65
+ const cloneArgs = ['clone'];
66
+ if (template.options && Array.isArray(template.options)) {
67
+ cloneArgs.push(...template.options);
68
+ }
69
+ cloneArgs.push(templateRepoUrl, projectPath);
70
+ await execa('git', cloneArgs, { stdio: 'inherit' });
71
+ console.log('āœ… Template cloned successfully.');
72
+ // Remove the .git folder from the *new* project
73
+ await fs.remove(path.join(projectPath, '.git'));
74
+ console.log('🧹 Cleaned up template .git directory.');
75
+ // Ask user for customization details
76
+ const questions = [
77
+ {
78
+ type: 'input',
79
+ name: 'name',
80
+ message: 'What is the project name?',
81
+ default: path.basename(projectPath),
82
+ },
83
+ {
84
+ type: 'input',
85
+ name: 'version',
86
+ message: 'What version number would you like to use?',
87
+ default: '1.0.0',
88
+ },
89
+ {
90
+ type: 'input',
91
+ name: 'description',
92
+ message: 'What is the project description?',
93
+ default: '',
94
+ },
95
+ {
96
+ type: 'input',
97
+ name: 'author',
98
+ message: 'Who is the author of the project?',
99
+ default: '',
100
+ },
101
+ ];
102
+ const answers = await inquirer.prompt(questions);
103
+ // Update the package.json in the new project
104
+ const pkgJsonPath = path.join(projectPath, 'package.json');
105
+ if (await fs.pathExists(pkgJsonPath)) {
106
+ const pkgJson = await fs.readJson(pkgJsonPath);
107
+ // Overwrite fields with user's answers
108
+ pkgJson.name = answers.name;
109
+ pkgJson.version = answers.version;
110
+ pkgJson.description = answers.description;
111
+ pkgJson.author = answers.author;
112
+ // Write the updated package.json back
113
+ await fs.writeJson(pkgJsonPath, pkgJson, { spaces: 2 });
114
+ console.log('šŸ“ Customized package.json.');
115
+ }
116
+ else {
117
+ console.log('ā„¹ļø No package.json found in template, skipping customization.');
118
+ }
119
+ const packageManager = template.packageManager || 'npm';
120
+ // Install dependencies
121
+ console.log('šŸ“¦ Installing dependencies... (This may take a moment)');
122
+ await execa(packageManager, ['install'], { cwd: projectPath, stdio: 'inherit' });
123
+ console.log('āœ… Dependencies installed.');
124
+ // Optional: Create GitHub repository
125
+ await offerAndCreateGitHubRepo(projectPath);
126
+ // Let the user know the project was created successfully
127
+ console.log('\n✨ Project created successfully! ✨\n');
128
+ console.log(`To get started:`);
129
+ console.log(` cd ${dir}`);
130
+ console.log(' Happy coding! šŸš€');
131
+ }
132
+ catch (error) {
133
+ console.error('āŒ An error occurred:');
134
+ if (error instanceof Error) {
135
+ console.error(error.message);
136
+ }
137
+ else if (error && typeof error === 'object' && 'stderr' in error) {
138
+ console.error(error.stderr || String(error));
139
+ }
140
+ else {
141
+ console.error(String(error));
142
+ }
143
+ // Clean up the created directory if an error occurred
144
+ if (await fs.pathExists(projectPath)) {
145
+ await fs.remove(projectPath);
146
+ console.log('🧹 Cleaned up failed project directory.');
147
+ }
148
+ throw error;
149
+ }
150
+ }
151
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type DeployOptions = {
2
+ /** Build output directory to deploy (e.g. dist, build) */
3
+ distDir: string;
4
+ /** Skip running the build step */
5
+ skipBuild: boolean;
6
+ /** Branch to push to (default gh-pages) */
7
+ branch: string;
8
+ };
9
+ /**
10
+ * Deploy the built app to GitHub Pages using the gh-pages package.
11
+ * Builds the project first unless skipBuild is true, then publishes distDir to the gh-pages branch.
12
+ */
13
+ export declare function runDeployToGitHubPages(projectPath: string, options?: Partial<DeployOptions>): Promise<void>;
14
+ //# sourceMappingURL=gh-pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gh-pages.d.ts","sourceRoot":"","sources":["../src/gh-pages.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,aAAa,GAAG;IAC1B,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA+FF;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAO,CAAC,aAAa,CAAM,GACnC,OAAO,CAAC,IAAI,CAAC,CAsDf"}
@@ -0,0 +1,139 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import { execa } from 'execa';
4
+ import ghPages from 'gh-pages';
5
+ import { checkGhAuth } from './github.js';
6
+ const DEFAULT_DIST_DIR = 'dist';
7
+ const DEFAULT_BRANCH = 'gh-pages';
8
+ /**
9
+ * Parse owner and repo name from a Git remote URL.
10
+ * Supports https://github.com/owner/repo, https://github.com/owner/repo.git, git@github.com:owner/repo.git
11
+ */
12
+ function parseRepoFromUrl(repoUrl) {
13
+ const trimmed = repoUrl.trim().replace(/\.git$/, '');
14
+ // git@github.com:owner/repo or https://github.com/owner/repo
15
+ const sshMatch = trimmed.match(/git@github\.com:([^/]+)\/([^/]+)/);
16
+ if (sshMatch?.[1] && sshMatch[2]) {
17
+ return { owner: sshMatch[1], repo: sshMatch[2] };
18
+ }
19
+ const httpsMatch = trimmed.match(/github\.com[/:]([^/]+)\/([^/#?]+)/);
20
+ if (httpsMatch?.[1] && httpsMatch[2]) {
21
+ return { owner: httpsMatch[1], repo: httpsMatch[2] };
22
+ }
23
+ return null;
24
+ }
25
+ /**
26
+ * Ensure GitHub Pages is enabled for the repository, configured to use the given branch.
27
+ * Uses the GitHub API via `gh` CLI. No-op if gh is not authenticated or on failure.
28
+ */
29
+ async function ensurePagesEnabled(owner, repo, branch) {
30
+ const auth = await checkGhAuth();
31
+ if (!auth.ok)
32
+ return;
33
+ const body = JSON.stringify({ source: { branch, path: '/' } });
34
+ try {
35
+ const getResult = await execa('gh', ['api', `repos/${owner}/${repo}/pages`, '--jq', '.source.branch'], {
36
+ reject: false,
37
+ encoding: 'utf8',
38
+ });
39
+ if (getResult.exitCode === 0) {
40
+ const currentBranch = getResult.stdout?.trim();
41
+ if (currentBranch === branch)
42
+ return;
43
+ await execa('gh', [
44
+ 'api',
45
+ '-X',
46
+ 'PUT',
47
+ `repos/${owner}/${repo}/pages`,
48
+ '--input',
49
+ '-',
50
+ ], { input: body });
51
+ console.log(` GitHub Pages source updated to branch "${branch}".`);
52
+ }
53
+ else {
54
+ await execa('gh', [
55
+ 'api',
56
+ '-X',
57
+ 'POST',
58
+ `repos/${owner}/${repo}/pages`,
59
+ '--input',
60
+ '-',
61
+ ], { input: body });
62
+ console.log(` GitHub Pages enabled (source: branch "${branch}").`);
63
+ }
64
+ }
65
+ catch {
66
+ // Best-effort: continue without enabling; user can enable manually
67
+ }
68
+ }
69
+ /**
70
+ * Detect package manager from lock files.
71
+ */
72
+ async function getPackageManager(cwd) {
73
+ if (await fs.pathExists(path.join(cwd, 'yarn.lock')))
74
+ return 'yarn';
75
+ if (await fs.pathExists(path.join(cwd, 'pnpm-lock.yaml')))
76
+ return 'pnpm';
77
+ return 'npm';
78
+ }
79
+ /**
80
+ * Run build script in the project (npm run build / yarn build / pnpm build).
81
+ */
82
+ async function runBuild(cwd) {
83
+ const pkgPath = path.join(cwd, 'package.json');
84
+ const pkg = await fs.readJson(pkgPath);
85
+ const scripts = pkg.scripts || {};
86
+ if (!scripts['build']) {
87
+ throw new Error('No "build" script found in package.json. Add a build script or use --no-build and deploy an existing folder with -d/--dist-dir.');
88
+ }
89
+ const pm = await getPackageManager(cwd);
90
+ const runCmd = pm === 'npm' ? 'npm' : pm === 'yarn' ? 'yarn' : 'pnpm';
91
+ const args = pm === 'npm' ? ['run', 'build'] : ['build'];
92
+ console.log(`šŸ“¦ Running build (${runCmd} ${args.join(' ')})...`);
93
+ await execa(runCmd, args, { cwd, stdio: 'inherit' });
94
+ console.log('āœ… Build completed.\n');
95
+ }
96
+ /**
97
+ * Deploy the built app to GitHub Pages using the gh-pages package.
98
+ * Builds the project first unless skipBuild is true, then publishes distDir to the gh-pages branch.
99
+ */
100
+ export async function runDeployToGitHubPages(projectPath, options = {}) {
101
+ const distDir = options.distDir ?? DEFAULT_DIST_DIR;
102
+ const skipBuild = options.skipBuild ?? false;
103
+ const branch = options.branch ?? DEFAULT_BRANCH;
104
+ const cwd = path.resolve(projectPath);
105
+ const pkgPath = path.join(cwd, 'package.json');
106
+ if (!(await fs.pathExists(pkgPath))) {
107
+ throw new Error('No package.json found in this directory. Run this command from your project root (or pass the project path).');
108
+ }
109
+ let repoUrl;
110
+ try {
111
+ const { stdout } = await execa('git', ['remote', 'get-url', 'origin'], {
112
+ cwd,
113
+ reject: true,
114
+ });
115
+ repoUrl = stdout.trim();
116
+ }
117
+ catch {
118
+ throw new Error('Please save your changes first, before deploying to GitHub Pages.');
119
+ }
120
+ if (!skipBuild) {
121
+ await runBuild(cwd);
122
+ }
123
+ const absoluteDist = path.join(cwd, distDir);
124
+ if (!(await fs.pathExists(absoluteDist))) {
125
+ throw new Error(`Build output directory "${distDir}" does not exist. Run a build first or specify the correct directory with -d/--dist-dir.`);
126
+ }
127
+ const parsed = parseRepoFromUrl(repoUrl);
128
+ if (parsed) {
129
+ await ensurePagesEnabled(parsed.owner, parsed.repo, branch);
130
+ }
131
+ console.log(`šŸš€ Deploying "${distDir}" to GitHub Pages (branch: ${branch})...`);
132
+ await new Promise((resolve, reject) => {
133
+ ghPages.publish(absoluteDist, { branch, repo: repoUrl }, (err) => (err ? reject(err) : resolve()));
134
+ });
135
+ console.log('\nāœ… Deployed to GitHub Pages.');
136
+ console.log(' Enable GitHub Pages in your repo: Settings → Pages → Source: branch "' + branch + '".');
137
+ console.log(' If the site is at username.github.io/<repo-name>, set your app\'s base path (e.g. base: \'/<repo-name>/\' in Vite).\n');
138
+ }
139
+ //# sourceMappingURL=gh-pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gh-pages.js","sourceRoot":"","sources":["../src/gh-pages.ts"],"names":[],"mappings":"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"}