@atomist/automation-client
Version:
Atomist API for software low-level client
109 lines • 4.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const axios_1 = require("axios");
const base64_1 = require("../internal/util/base64");
const logger_1 = require("../internal/util/logger");
const GitHubRepoRef_1 = require("../operations/common/GitHubRepoRef");
/**
* Return a deep link to the file location
* @param {GitHubRepoRef} grr
* @param {SourceLocation} sourceLocation
* @return {string}
*/
function deepLink(grr, sourceLocation) {
return `${grr.scheme}${grr.remoteBase}/${grr.owner}/${grr.repo}/blob/${grr.sha}` +
(!!sourceLocation ? `/${sourceLocation.path}` : "") +
(!!sourceLocation && !!sourceLocation.lineFrom1 ? `#L${sourceLocation.lineFrom1}` : "");
}
exports.deepLink = deepLink;
/**
* Check whether the given file, including path, exists
* in the GitHub repo
* @param token GitHub token. Don't try to auth if it's undefined or null
* @param user
* @param repo
* @param path
* @return {Promise<boolean|T>}
*/
function hasFile(token, user, repo, path) {
// We only care if it returns 200. Otherwise it isn't there
return filePromise(token, user, repo, path)
.then(d => true)
.catch(err => {
logger_1.logger.info("Axios error getting file: Probably not there", err.toString());
return false;
});
}
exports.hasFile = hasFile;
/**
* Return file content, or undefined if it's not found
* @param {string} token
* @param {string} user
* @param {string} repo
* @param {string} path
* @return {Promise<string>}
*/
function fileContent(token, user, repo, path) {
return filePromise(token, user, repo, path)
.then(d => base64_1.decode(d.data.content))
.catch(err => {
logger_1.logger.info("Axios error getting file: Probably not there", err.toString());
return undefined;
});
}
exports.fileContent = fileContent;
function filePromise(token, user, repo, path) {
const url = `${GitHubRepoRef_1.GitHubDotComBase}/repos/${user}/${repo}/contents/${path}`;
logger_1.logger.debug(`Request to '${url}' to check for file existence]`);
// We only care if it returns 200. Otherwise it isn't there
return axios_1.default.get(url, authHeaders(token));
}
function raiseIssue(token, rr, issue) {
const grr = GitHubRepoRef_1.isGitHubRepoRef(rr) ? rr : new GitHubRepoRef_1.GitHubRepoRef(rr.owner, rr.repo, rr.sha);
const url = `${grr.scheme}${grr.apiBase}/repos/${rr.owner}/${rr.repo}/issues`;
logger_1.logger.debug(`Request to '${url}' to raise issue`);
return axios_1.default.post(url, issue, authHeaders(token));
}
exports.raiseIssue = raiseIssue;
function addRepoWebhook(token, rr, webhookData) {
const url = `${rr.scheme}${rr.apiBase}/repos/${rr.owner}/${rr.repo}/hooks`;
logger_1.logger.debug(`Request to '${url}' to create webhook`);
return axios_1.default.post(url, webhookData, authHeaders(token));
}
exports.addRepoWebhook = addRepoWebhook;
function createCommitComment(token, rr, comment) {
const url = `${rr.scheme}${rr.apiBase}/repos/${rr.owner}/${rr.repo}/commits/${rr.sha}/comments`;
logger_1.logger.debug(`Request to '${url}' to create comment`);
return axios_1.default.post(url, comment, authHeaders(token));
}
exports.createCommitComment = createCommitComment;
function createRepo(token, rr, description, priv) {
const config = authHeaders(token);
return axios_1.default.get(`${rr.scheme}${rr.apiBase}/orgs/${rr.owner}`, config)
.then(result => {
// We now know the owner is an org
return `${rr.scheme}${rr.apiBase}/orgs/${rr.owner}/repos`;
}, err => {
// We now know the owner is an user
return `${rr.scheme}${rr.apiBase}/user/repos`;
})
.then(url => {
const payload = {
name: rr.repo,
description,
private: priv,
};
logger_1.logger.debug(`Request to '${url}' to create repo`);
return axios_1.default.post(url, payload, config);
});
}
exports.createRepo = createRepo;
function authHeaders(token) {
return token ? {
headers: {
Authorization: `token ${token}`,
},
}
: {};
}
//# sourceMappingURL=gitHub.js.map