mirror of
https://github.com/facebook/docusaurus.git
synced 2025-04-30 10:48:05 +02:00
* Add Prettier formatting to source files and example files, and check that Prettier formatting is maintained on PRs * Remove trailing-comma as we are using Node 6 on Circle * Use latest Node 6 LTS version in Circle * Remove unused test
136 lines
3.6 KiB
JavaScript
Executable file
136 lines
3.6 KiB
JavaScript
Executable file
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Copyright (c) 2017-present, Facebook, Inc.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
const shell = require('shelljs');
|
|
|
|
if (!shell.which('git')) {
|
|
shell.echo('Sorry, this script requires git');
|
|
shell.exit(1);
|
|
}
|
|
|
|
const siteConfig = require(process.cwd() + '/siteConfig.js');
|
|
const GIT_USER = process.env.GIT_USER;
|
|
const CURRENT_BRANCH =
|
|
process.env.CIRCLE_BRANCH || shell.exec('git rev-parse --abbrev-ref HEAD');
|
|
const ORGANIZATION_NAME =
|
|
siteConfig.organizationName ||
|
|
process.env.ORGANIZATION_NAME ||
|
|
process.env.CIRCLE_PROJECT_USERNAME;
|
|
const PROJECT_NAME =
|
|
siteConfig.projectName ||
|
|
process.env.PROJECT_NAME ||
|
|
process.env.CIRCLE_PROJECT_REPONAME;
|
|
const IS_PULL_REQUEST =
|
|
process.env.CI_PULL_REQUEST || process.env.CIRCLE_PULL_REQUEST;
|
|
const USE_SSH = process.env.USE_SSH;
|
|
// github.io indicates organization repos that deploy via master. All others use gh-pages.
|
|
const DEPLOYMENT_BRANCH =
|
|
PROJECT_NAME.indexOf('.github.io') !== -1 ? 'master' : 'gh-pages';
|
|
|
|
if (!ORGANIZATION_NAME) {
|
|
shell.echo(
|
|
"Missing project organization name. Did you forget to define 'organizationName' in siteConfig.js? You may also export it via the ORGANIZATION_NAME environment variable."
|
|
);
|
|
shell.exit(0);
|
|
}
|
|
|
|
if (!PROJECT_NAME) {
|
|
shell.echo(
|
|
"Missing project name. Did you forget to define 'projectName' in siteConfig.js? You may also export it via the PROJECT_NAME environment variable."
|
|
);
|
|
shell.exit(0);
|
|
}
|
|
|
|
let remoteBranch;
|
|
if (USE_SSH === 'true') {
|
|
remoteBranch = `git@github.com:${ORGANIZATION_NAME}/${PROJECT_NAME}.git`;
|
|
} else {
|
|
remoteBranch = `https://${GIT_USER}@github.com/${ORGANIZATION_NAME}/${
|
|
PROJECT_NAME
|
|
}.git`;
|
|
}
|
|
|
|
if (IS_PULL_REQUEST) {
|
|
shell.echo('Skipping deploy on a pull request');
|
|
shell.exit(0);
|
|
}
|
|
|
|
// build static html files, then push to DEPLOYMENT_BRANCH branch of specified repo
|
|
|
|
if (CURRENT_BRANCH === DEPLOYMENT_BRANCH) {
|
|
shell.echo(`Cannot deploy from a ${DEPLOYMENT_BRANCH} branch. Only to it`);
|
|
shell.exit(1);
|
|
}
|
|
|
|
if (shell.exec(`node ${__dirname}/build-files.js`).code) {
|
|
shell.echo('Error: generating html failed');
|
|
shell.exit(1);
|
|
}
|
|
|
|
shell.cd(process.cwd());
|
|
shell.cd('build');
|
|
|
|
if (
|
|
shell.exec(`git clone ${remoteBranch} ${PROJECT_NAME}-${DEPLOYMENT_BRANCH}`)
|
|
.code !== 0
|
|
) {
|
|
shell.echo('Error: git clone failed');
|
|
shell.exit(1);
|
|
}
|
|
|
|
shell.cd(`${PROJECT_NAME}-${DEPLOYMENT_BRANCH}`);
|
|
|
|
if (shell.exec(`git checkout origin/${DEPLOYMENT_BRANCH}`).code !== 0) {
|
|
if (shell.exec(`git checkout --orphan ${DEPLOYMENT_BRANCH}`).code !== 0) {
|
|
shell.echo(`Error: Git checkout ${DEPLOYMENT_BRANCH} failed`);
|
|
shell.exit(1);
|
|
}
|
|
} else {
|
|
if (
|
|
shell.exec(`git checkout -b ${DEPLOYMENT_BRANCH}`).code +
|
|
shell.exec(`git branch --set-upstream-to=origin/${DEPLOYMENT_BRANCH}`)
|
|
.code !==
|
|
0
|
|
) {
|
|
shell.echo(`Error: Git checkout ${DEPLOYMENT_BRANCH} failed`);
|
|
shell.exit(1);
|
|
}
|
|
}
|
|
|
|
shell.exec('git rm -rf .');
|
|
|
|
shell.cd('../..');
|
|
|
|
shell.cp(
|
|
'-R',
|
|
`build/${PROJECT_NAME}/*`,
|
|
`build/${PROJECT_NAME}-${DEPLOYMENT_BRANCH}/`
|
|
);
|
|
shell.cd(`build/${PROJECT_NAME}-${DEPLOYMENT_BRANCH}`);
|
|
|
|
const currentCommit = shell.exec('git rev-parse HEAD').stdout.trim();
|
|
|
|
shell.exec('git add --all');
|
|
|
|
shell.exec(
|
|
`git commit -m "Deploy website" -m "Deploy website version based on ${
|
|
currentCommit
|
|
}"`
|
|
);
|
|
if (shell.exec(`git push origin ${DEPLOYMENT_BRANCH}`).code !== 0) {
|
|
shell.echo('Error: Git push failed');
|
|
shell.exit(1);
|
|
} else {
|
|
shell.echo(
|
|
`Website is live at: https://${ORGANIZATION_NAME}.github.io/${
|
|
PROJECT_NAME
|
|
}/`
|
|
);
|
|
shell.exit(0);
|
|
}
|