diff --git a/.changeset/smart-ghosts-complain.md b/.changeset/smart-ghosts-complain.md new file mode 100644 index 000000000..b3a224007 --- /dev/null +++ b/.changeset/smart-ghosts-complain.md @@ -0,0 +1,5 @@ +--- +'skuba': minor +--- + +init: Support `main` default branch diff --git a/docs/cli/init.md b/docs/cli/init.md index 13eff82ef..09cfc6e7a 100644 --- a/docs/cli/init.md +++ b/docs/cli/init.md @@ -134,10 +134,11 @@ git remote get-url origin ``` **skuba** has committed its initial template files and configured a remote `origin` for you. -You should create the corresponding repository on GitHub and push to it: +You should create the corresponding repository on GitHub and push to it. +Replace `main` with your default branch name as appropriate: ```shell -git push --set-upstream origin master +git push --set-upstream origin main ``` ### Directory structure diff --git a/scripts/test-template.sh b/scripts/test-template.sh index 4ae01a497..9bbc9e26b 100755 --- a/scripts/test-template.sh +++ b/scripts/test-template.sh @@ -34,7 +34,8 @@ yarn skuba init << EOF "platformName": "arm64", "repoName": "${directory}", "serviceName": "serviceName", - "region": "ap-southeast-2" + "region": "ap-southeast-2", + "defaultBranch": "main" }, "templateName": "${template}" } diff --git a/src/cli/init/getConfig.ts b/src/cli/init/getConfig.ts index 1faff6409..af6bc1045 100644 --- a/src/cli/init/getConfig.ts +++ b/src/cli/init/getConfig.ts @@ -150,6 +150,7 @@ const baseToTemplateData = async ({ ownerName, platformName, repoName, + defaultBranch, }: BaseFields) => { const [orgName, teamName] = ownerName.split('/'); @@ -163,6 +164,7 @@ const baseToTemplateData = async ({ orgName, ownerName, repoName, + defaultBranch, // Use standalone username in `teamName` contexts teamName: teamName ?? orgName, @@ -176,7 +178,7 @@ const baseToTemplateData = async ({ }; export const configureFromPrompt = async (): Promise => { - const { ownerName, platformName, repoName } = + const { ownerName, platformName, repoName, defaultBranch } = await runForm(BASE_PROMPT_PROPS); log.plain(chalk.cyan(repoName), 'by', chalk.cyan(ownerName)); @@ -184,6 +186,7 @@ export const configureFromPrompt = async (): Promise => { ownerName, platformName, repoName, + defaultBranch, }); const destinationDir = repoName; diff --git a/src/cli/init/git.ts b/src/cli/init/git.ts index 585890a7c..a9063cc4a 100644 --- a/src/cli/init/git.ts +++ b/src/cli/init/git.ts @@ -10,15 +10,15 @@ import { log } from '../../utils/logging'; interface GitHubProject { orgName: string; repoName: string; + defaultBranch: string; } export const initialiseRepo = async ( dir: string, - { orgName, repoName }: GitHubProject, + { orgName, repoName, defaultBranch }: GitHubProject, ) => { await git.init({ - // TODO: support main as an alternative. - defaultBranch: 'master', + defaultBranch, dir, fs, }); diff --git a/src/cli/init/index.ts b/src/cli/init/index.ts index 6dd33bcbd..c40d766a2 100644 --- a/src/cli/init/index.ts +++ b/src/cli/init/index.ts @@ -116,7 +116,7 @@ export const init = async () => { log.ok('yarn add --dev', skubaSlug); log.ok('git add --all'); log.ok('git commit --message', `'Pin ${skubaSlug}'`); - log.ok('git push --set-upstream origin master'); + log.ok(`git push --set-upstream origin ${templateData.defaultBranch}`); log.newline(); process.exitCode = 1; @@ -132,7 +132,7 @@ export const init = async () => { log.newline(); log.plain('Then, push your local changes:'); log.ok('cd', destinationDir); - log.ok('git push --set-upstream origin master'); + log.ok(`git push --set-upstream origin ${templateData.defaultBranch}`); log.newline(); }; diff --git a/src/cli/init/prompts.ts b/src/cli/init/prompts.ts index 7372d099a..142e99410 100644 --- a/src/cli/init/prompts.ts +++ b/src/cli/init/prompts.ts @@ -66,6 +66,13 @@ const BASE_CHOICES = [ validate: (value: unknown) => isPlatform(value) || `must be ${PLATFORM_OPTIONS}`, }, + { + name: 'defaultBranch', + message: 'Default Branch', + initial: 'master | main', + validate: (value: unknown) => + typeof value === 'string' && value.length > 0 ? true : 'required', + }, ] as const; export const BASE_PROMPT_PROPS = { diff --git a/src/cli/init/types.ts b/src/cli/init/types.ts index 1654404fc..d72bce896 100644 --- a/src/cli/init/types.ts +++ b/src/cli/init/types.ts @@ -12,6 +12,7 @@ export const initConfigInputSchema = z.object({ ownerName: z.string(), repoName: z.string(), platformName: z.union([z.literal('amd64'), z.literal('arm64')]), + defaultBranch: z.string(), }) .catchall(z.string()), templateName: z.string(), @@ -28,6 +29,7 @@ const initConfigSchema = initConfigInputSchema .object({ ownerName: z.string(), repoName: z.string(), + defaultBranch: z.string(), // Derived from ownerName // TODO: use zod to transform `InitConfigInput` -> `InitConfig`?