mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-11 16:17:25 +02:00
feat(v2): docusaurus deploy: ability to configure port in git url (#4545)
* Creating a way to configure the port used on the guthub deploy. * Fixing some mistakes Documenting Adding githubPort documentation on docusaurus.config.js. Addind SSH protocol prefix. ssh:// Using the default protocol port instead of define it on the code. Prettify. * Fixing some mistakes Documenting Adding githubPort documentation on docusaurus.config.js. Addind SSH protocol prefix. ssh:// Using the default protocol port instead of define it on the code. Prettify. * Isolating the logic to generate the url and testing it. * Changing all the names used on tests to something more unserstandable. * Prettify Co-authored-by: Tales Porto <t.andrade-porto@klarna.com>
This commit is contained in:
parent
4efe6824b3
commit
e99bb43823
6 changed files with 132 additions and 8 deletions
1
packages/docusaurus-types/src/index.d.ts
vendored
1
packages/docusaurus-types/src/index.d.ts
vendored
|
@ -34,6 +34,7 @@ export interface DocusaurusConfig {
|
||||||
organizationName?: string;
|
organizationName?: string;
|
||||||
projectName?: string;
|
projectName?: string;
|
||||||
githubHost?: string;
|
githubHost?: string;
|
||||||
|
githubPort?: string;
|
||||||
plugins?: PluginConfig[];
|
plugins?: PluginConfig[];
|
||||||
themes?: PluginConfig[];
|
themes?: PluginConfig[];
|
||||||
presets?: PresetConfig[];
|
presets?: PresetConfig[];
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {buildUrl} from '../buildRemoteBranchUrl';
|
||||||
|
|
||||||
|
describe('remoteeBranchUrl', () => {
|
||||||
|
test('should build a normal ssh url', async () => {
|
||||||
|
const url = buildUrl(
|
||||||
|
'github.com',
|
||||||
|
undefined,
|
||||||
|
undefined,
|
||||||
|
'facebook',
|
||||||
|
'docusaurus',
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
expect(url).toEqual('git@github.com:facebook/docusaurus.git');
|
||||||
|
});
|
||||||
|
test('should build a ssh url with port', async () => {
|
||||||
|
const url = buildUrl(
|
||||||
|
'github.com',
|
||||||
|
'422',
|
||||||
|
undefined,
|
||||||
|
'facebook',
|
||||||
|
'docusaurus',
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
expect(url).toEqual('ssh://git@github.com:422/facebook/docusaurus.git');
|
||||||
|
});
|
||||||
|
test('should build a normal http url', async () => {
|
||||||
|
const url = buildUrl(
|
||||||
|
'github.com',
|
||||||
|
undefined,
|
||||||
|
'user:pass',
|
||||||
|
'facebook',
|
||||||
|
'docusaurus',
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
expect(url).toEqual('https://user:pass@github.com/facebook/docusaurus.git');
|
||||||
|
});
|
||||||
|
test('should build a normal http url', async () => {
|
||||||
|
const url = buildUrl(
|
||||||
|
'github.com',
|
||||||
|
'5433',
|
||||||
|
'user:pass',
|
||||||
|
'facebook',
|
||||||
|
'docusaurus',
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
expect(url).toEqual(
|
||||||
|
'https://user:pass@github.com:5433/facebook/docusaurus.git',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
50
packages/docusaurus/src/commands/buildRemoteBranchUrl.ts
Normal file
50
packages/docusaurus/src/commands/buildRemoteBranchUrl.ts
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export function buildUrl(
|
||||||
|
githubHost: string,
|
||||||
|
githubPort: string | undefined,
|
||||||
|
gitCredentials: string | undefined,
|
||||||
|
organizationName: string,
|
||||||
|
projectName: string,
|
||||||
|
useSSH: boolean | undefined,
|
||||||
|
) {
|
||||||
|
return useSSH
|
||||||
|
? buildSshUrl(githubHost, organizationName, projectName, githubPort)
|
||||||
|
: buildHttpsUrl(
|
||||||
|
gitCredentials,
|
||||||
|
githubHost,
|
||||||
|
organizationName,
|
||||||
|
projectName,
|
||||||
|
githubPort,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildSshUrl(
|
||||||
|
githubHost: string,
|
||||||
|
organizationName: string,
|
||||||
|
projectName: string,
|
||||||
|
githubPort: string | undefined,
|
||||||
|
) {
|
||||||
|
if (githubPort) {
|
||||||
|
return `ssh://git@${githubHost}:${githubPort}/${organizationName}/${projectName}.git`;
|
||||||
|
}
|
||||||
|
return `git@${githubHost}:${organizationName}/${projectName}.git`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildHttpsUrl(
|
||||||
|
gitCredentials: string | undefined,
|
||||||
|
githubHost: string,
|
||||||
|
organizationName: string,
|
||||||
|
projectName: string,
|
||||||
|
githubPort: string | undefined,
|
||||||
|
) {
|
||||||
|
if (githubPort) {
|
||||||
|
return `https://${gitCredentials}@${githubHost}:${githubPort}/${organizationName}/${projectName}.git`;
|
||||||
|
}
|
||||||
|
return `https://${gitCredentials}@${githubHost}/${organizationName}/${projectName}.git`;
|
||||||
|
}
|
|
@ -13,6 +13,7 @@ import build from './build';
|
||||||
import {BuildCLIOptions} from '@docusaurus/types';
|
import {BuildCLIOptions} from '@docusaurus/types';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
|
import {buildUrl} from './buildRemoteBranchUrl';
|
||||||
|
|
||||||
// GIT_PASS env variable should not appear in logs
|
// GIT_PASS env variable should not appear in logs
|
||||||
function obfuscateGitPass(str) {
|
function obfuscateGitPass(str) {
|
||||||
|
@ -99,21 +100,23 @@ export default async function deploy(
|
||||||
|
|
||||||
const githubHost =
|
const githubHost =
|
||||||
process.env.GITHUB_HOST || siteConfig.githubHost || 'github.com';
|
process.env.GITHUB_HOST || siteConfig.githubHost || 'github.com';
|
||||||
|
const githubPort = process.env.GITHUB_PORT || siteConfig.githubPort;
|
||||||
|
|
||||||
const useSSH = process.env.USE_SSH;
|
|
||||||
const gitPass: string | undefined = process.env.GIT_PASS;
|
const gitPass: string | undefined = process.env.GIT_PASS;
|
||||||
let gitCredentials = `${gitUser}`;
|
let gitCredentials = `${gitUser}`;
|
||||||
if (gitPass) {
|
if (gitPass) {
|
||||||
gitCredentials = `${gitCredentials}:${gitPass}`;
|
gitCredentials = `${gitCredentials}:${gitPass}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const sshRemoteBranch: string = `git@${githubHost}:${organizationName}/${projectName}.git`;
|
const useSSH = process.env.USE_SSH;
|
||||||
const nonSshRemoteBranch: string = `https://${gitCredentials}@${githubHost}/${organizationName}/${projectName}.git`;
|
const remoteBranch = buildUrl(
|
||||||
|
githubHost,
|
||||||
const remoteBranch =
|
githubPort,
|
||||||
useSSH && useSSH.toLowerCase() === 'true'
|
gitCredentials,
|
||||||
? sshRemoteBranch
|
organizationName,
|
||||||
: nonSshRemoteBranch;
|
projectName,
|
||||||
|
useSSH !== undefined && useSSH.toLowerCase() === 'true',
|
||||||
|
);
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
`${chalk.cyan('Remote branch:')} ${obfuscateGitPass(remoteBranch)}`,
|
`${chalk.cyan('Remote branch:')} ${obfuscateGitPass(remoteBranch)}`,
|
||||||
|
|
|
@ -204,6 +204,18 @@ module.exports = {
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `githubPort` {#githubPort}
|
||||||
|
|
||||||
|
- Type: `string`
|
||||||
|
|
||||||
|
The port of your server. Useful if you are using GitHub Enterprise.
|
||||||
|
|
||||||
|
```js title="docusaurus.config.js"
|
||||||
|
module.exports = {
|
||||||
|
githubPort: '22',
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
### `themeConfig` {#themeconfig}
|
### `themeConfig` {#themeconfig}
|
||||||
|
|
||||||
- Type: `Object`
|
- Type: `Object`
|
||||||
|
|
|
@ -99,6 +99,7 @@ GitHub enterprise installations should work in the same manner as github.com; yo
|
||||||
| Name | Description |
|
| Name | Description |
|
||||||
| ------------- | ----------------------------------------------- |
|
| ------------- | ----------------------------------------------- |
|
||||||
| `GITHUB_HOST` | The domain name of your GitHub enterprise site. |
|
| `GITHUB_HOST` | The domain name of your GitHub enterprise site. |
|
||||||
|
| `GITHUB_PORT` | The port of your GitHub enterprise site. |
|
||||||
|
|
||||||
### Deploy {#deploy}
|
### Deploy {#deploy}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue