UNPKG

@atomist/automation-client

Version:

Atomist API for software low-level client

52 lines 2.52 kB
"use strict"; 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