Show:
/*@flow*/
'use strict';

const allComplete = require('./all-complete.js');
const runGeneratedocs = require('./run-generatedocs.js');

module.exports = publishGithubPages;

/**
 * Performs the required steps for publishing to Github pages
 *
 * - runs `npm run generatedocs`
 * - `git fetch`es the `gh-pages` branch of the project into a throwaway git repository
 * - copies the documentation generated by the `generatedocs` script into the `gh-pages` branch
 * - copies any additional files required into the gh-pages branch
 * - if any files have changed, `git commit`s `git push`es on the `gh-pages` branch
 *   - this is when the files actually succeed in publishing
 * - if necessary, cleans up the throwaway git repository
 *
 * @method run
 * @for  PublishGithubPages
 */
function publishGithubPages(context/*: Object*/, callback/*: Function*/) {
  console.log('>>>>> publishGithubPages... start');
  publishGithubPagesImpl(context)
    .then((result) => {
      console.log('>>>>> publishGithubPages... finish');
      callback(undefined, context);
    })
    .catch((err) => {
      console.log('>>>>> publishGithubPages... failed');
      console.error(err, !!err && !!err.stack && err.stack.toString());
      callback(err);
    });
}

function publishGithubPagesImpl(context/*: Object*/) {
  return new Promise((resolve, reject) => {
    console.log('publishGithubPagesImpl...');

    var configVars = context.configVariables;

    // Only care about certain environment variables
    var vars = configVars.selected([
      'PROJECT_DIR',
      'PROJECT_NAME',
      'MAJOR_VERSION',
      'MINOR_VERSION',
      'PATCH_VERSION',
      'GIT_USER',
      'GIT_EMAIL',
      'REPO_SLUG',
      'SCRIPT_DIR',

      'FLAG_COPY_ASSETS',
      'FLAG_PUBLISH_ON_RELEASE',
      'FLAG_CLEAN_DOCUMENT',
      'FLAG_STRIP_TOKEN_OUTPUT',
      'FLAG_ALL_PAGE',
      'FLAG_LATEST_PAGE',
      'FLAG_SKIP_PUSH',
      'FLAG_SKIP_GENERATE',
      'FLAG_SKIP_TEST',
      'FLAG_SKIP_PUBLISH_RUN',
      'FLAG_PUBLISH_IN_ROOT',

      'DOCUMENT_BRANCH',
      'DOCUMENT_JOB_INDEX',
      'DOCUMENT_TEST_HOOK',
      'DOCUMENT_GENERATE_HOOK',
      'DOCUMENT_GENERATED_FOLDER',
      'DOCUMENT_PUBLISH_FOLDER_ROOT',
      'DOCUMENT_PUBLISH_FOLDER',
      'DOCUMENT_PUBLISH_SUBFOLDER',
      'DOCUMENT_ASSETS',
      'DOCUMENT_PUBLISH_FOLDER_ROOT',
      'DOCUMENT_PUBLISH_SUBFOLDER',
      'DOCUMENT_PUBLISH_FOLDER',

      'GH_PUBLISH_BRANCH',
      'GH_TOKEN',
      'GH_USER',
      'GH_REPO'
    ]);
    vars.PATH = process.env.PATH;
    context.vars = vars;

    context.projectDir = context.vars.PROJECT_DIR;

    if (context.vars.FLAG_SKIP_PUBLISH_RUN === 'true') {
      return resolve(allComplete(context));
    }
    else {
      return resolve(runGeneratedocs(context));
    }
  });
}