diff --git a/packages/docusaurus-types/src/index.d.ts b/packages/docusaurus-types/src/index.d.ts index 7a87d6b543e3..dd676a3cedea 100644 --- a/packages/docusaurus-types/src/index.d.ts +++ b/packages/docusaurus-types/src/index.d.ts @@ -39,6 +39,7 @@ export interface DocusaurusConfig { noIndex: boolean; organizationName?: string; projectName?: string; + deploymentBranch?: string; githubHost?: string; githubPort?: string; plugins?: PluginConfig[]; diff --git a/packages/docusaurus/src/commands/deploy.ts b/packages/docusaurus/src/commands/deploy.ts index 7c157b164f83..6b7f0d135d92 100644 --- a/packages/docusaurus/src/commands/deploy.ts +++ b/packages/docusaurus/src/commands/deploy.ts @@ -109,13 +109,18 @@ This behavior can have SEO impacts and create relative link issues. // - Site url: https://.github.io const isGitHubPagesOrganizationDeploy = projectName.indexOf('.github.io') !== -1; - if (isGitHubPagesOrganizationDeploy && !process.env.DEPLOYMENT_BRANCH) { + if ( + isGitHubPagesOrganizationDeploy && + !process.env.DEPLOYMENT_BRANCH && + !siteConfig.deploymentBranch + ) { throw new Error(`For GitHub pages organization deployments, 'docusaurus deploy' does not assume anymore that 'master' is your default Git branch. -Please provide the branch name to deploy to as an environment variable. -Try using DEPLOYMENT_BRANCH=main or DEPLOYMENT_BRANCH=master`); +Please provide the branch name to deploy to as an environment variable, for example DEPLOYMENT_BRANCH=main or DEPLOYMENT_BRANCH=master . +You can also set the deploymentBranch property in docusaurus.config.js .`); } - const deploymentBranch = process.env.DEPLOYMENT_BRANCH || 'gh-pages'; + const deploymentBranch = + process.env.DEPLOYMENT_BRANCH || siteConfig.deploymentBranch || 'gh-pages'; console.log(`${chalk.cyan('deploymentBranch:')} ${deploymentBranch}`); const githubHost = diff --git a/packages/docusaurus/src/server/configValidation.ts b/packages/docusaurus/src/server/configValidation.ts index 7f181622b02a..13567f3bbc8d 100644 --- a/packages/docusaurus/src/server/configValidation.ts +++ b/packages/docusaurus/src/server/configValidation.ts @@ -143,6 +143,7 @@ export const ConfigSchema = Joi.object({ .default(DEFAULT_CONFIG.onDuplicateRoutes), organizationName: Joi.string().allow(''), projectName: Joi.string().allow(''), + deploymentBranch: Joi.string().optional(), customFields: Joi.object().unknown().default(DEFAULT_CONFIG.customFields), githubHost: Joi.string(), plugins: Joi.array().items(PluginSchema).default(DEFAULT_CONFIG.plugins), diff --git a/website/docs/api/docusaurus.config.js.md b/website/docs/api/docusaurus.config.js.md index a5425a3e488a..638388dd2b85 100644 --- a/website/docs/api/docusaurus.config.js.md +++ b/website/docs/api/docusaurus.config.js.md @@ -194,6 +194,18 @@ module.exports = { }; ``` +### `deploymentBranch` {#deploymentbranch} + +- Type: `string` + +The name of the branch to deploy the static files to. Used by the deployment command. + +```js title="docusaurus.config.js" +module.exports = { + deploymentBranch: 'gh-pages', +}; +``` + ### `githubHost` {#githubhost} - Type: `string` diff --git a/website/docs/configuration.md b/website/docs/configuration.md index 60af67e7498a..58e21652ced2 100644 --- a/website/docs/configuration.md +++ b/website/docs/configuration.md @@ -29,7 +29,7 @@ They are used in a number of places such as your site's title and headings, brow ### Deployment configurations {#deployment-configurations} -Deployment configurations such as `projectName` and `organizationName` are used when you deploy your site with the `deploy` command. +Deployment configurations such as `projectName`, `organizationName`, and optionally `deploymentBranch` are used when you deploy your site with the `deploy` command. It is recommended to check the [deployment docs](deployment.mdx) for more information. diff --git a/website/docs/deployment.mdx b/website/docs/deployment.mdx index c593ace7cb5f..ff492bd640bb 100644 --- a/website/docs/deployment.mdx +++ b/website/docs/deployment.mdx @@ -75,6 +75,7 @@ First, modify your `docusaurus.config.js` and add the required params: | --- | --- | | `organizationName` | The GitHub user or organization that owns the repository. If you are the owner, it is your GitHub username. In the case of Docusaurus, it is "_facebook_" which is the GitHub organization that owns Docusaurus. | | `projectName` | The name of the GitHub repository. For example, the repository name for Docusaurus is "docusaurus", so the project name is "docusaurus". | +| `deploymentBranch` | The name of the branch to deploy the static files to. This defaults to "gh-pages" for non-organization GitHub Pages repos. If the repo name ends in ".github.io", you have to either specify this property or set the environment variable `DEPLOYMENT_BRANCH`. | | `url` | URL for your GitHub Page's user/organization page. This is commonly https://_username_.github.io. | | `baseUrl` | Base URL for your project. For projects hosted on GitHub pages, it follows the format "/_projectName_/". For https://github.com/facebook/docusaurus, `baseUrl` is `/docusaurus/`. | @@ -127,7 +128,7 @@ Optional parameters, also set as environment variables: | Name | Description | | --- | --- | | `USE_SSH` | Set to `true` to use SSH instead of the default HTTPS for the connection to the GitHub repo. | -| `DEPLOYMENT_BRANCH` | The branch that the website will be deployed to, defaults to `gh-pages`. For GitHub Pages Organization repos (`config.projectName` ending in `github.io`), this env variable is required. | +| `DEPLOYMENT_BRANCH` | The branch that the website will be deployed to, defaults to `gh-pages`. For GitHub Pages Organization repos (`config.projectName` ending in `github.io`), you need to either set this env variable or specify the `deploymentBranch` param in `docusaurus.config.js`. | | `CURRENT_BRANCH` | The branch that contains the latest docs changes that will be deployed. Usually, the branch will be `main`, but it could be any branch (default or otherwise) except for `gh-pages`. If nothing is set for this variable, then the current branch will be used. | | `GIT_PASS` | Password (or token) of the `git` user (specified by `GIT_USER`). For example, to facilitate non-interactive deployment (e.g. continuous deployment) |