@atomist/automation-client
Version:
Atomist API for software low-level client
52 lines • 2.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const _ = require("lodash");
const ActionResult_1 = require("../../action/ActionResult");
const nsp = require("../../internal/util/cls");
const GitCommandGitProject_1 = require("../../project/git/GitCommandGitProject");
const logger_1 = require("../../util/logger");
const retry_1 = require("../../util/retry");
const GitHubRepoRef_1 = require("../common/GitHubRepoRef");
const RepoId_1 = require("../common/RepoId");
/**
* Persist project to GitHub or another remote, returning remote details. Use retry.
* @param {Project} p project to persist
* @param {ProjectOperationCredentials} creds
* @param targetId id of target repo to create
* @return {Promise<ActionResult<GitProject>>}
*/
exports.RemoteGitProjectPersister = (p, creds, targetId, params) => {
// Default to github.com if we don't have more information
const gid = RepoId_1.isRemoteRepoRef(targetId) ? targetId : new GitHubRepoRef_1.GitHubRepoRef(targetId.owner, targetId.repo);
const gp = GitCommandGitProject_1.GitCommandGitProject.fromProject(p, creds);
return gp.init()
.then(() => {
return GitHubRepoRef_1.isGitHubRepoRef(gid) ? gp.configureFromRemote() : {};
})
.then(() => {
logger_1.logger.debug(`Creating new repo '${targetId.owner}/${targetId.repo}'`);
const description = _.get(params, "target.description", "");
const visibility = _.get(params, "target.visibility", "public");
return gp.createAndSetRemote(gid, description, visibility)
.catch(err => {
return Promise.reject(new Error(`Unable to create new repo '${targetId.owner}/${targetId.repo}': ` +
`Error: ${err}`));
});
})
.then(() => {
logger_1.logger.debug(`Committing to local repo at '${gp.baseDir}'`);
let msg = "Initial commit from Atomist\n\n[atomist:generated]";
const ctx = nsp.get();
if (!!ctx) {
msg = `${msg} [atomist:generator=${ctx.operation.toLowerCase()}]`;
}
return gp.commit(msg);
})
.then(() => retryPush(gp))
.then(ActionResult_1.successOn);
};
function retryPush(gp, opts = {}) {
const retryOptions = Object.assign({ retries: 5, factor: 3, minTimeout: 1 * 500, maxTimeout: 5 * 1000, randomize: true }, opts);
return retry_1.doWithRetry(() => gp.push(), `Pushing local repo at '${gp.baseDir}'`, retryOptions);
}
//# sourceMappingURL=remoteGitProjectPersister.js.map