UNPKG

@atomist/sdm-core

Version:

Atomist Software Delivery Machine - Implementation

119 lines 4.57 kB
"use strict"; /* * Copyright © 2019 Atomist, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const automation_client_1 = require("@atomist/automation-client"); const DefaultRetryOptions = { retries: 10, factor: 2, minTimeout: 1 * 500, maxTimeout: 5 * 1000, randomize: true, }; /** * Post to the Atomist generic build webhook URL. It creates the payload * then uses postWebhook. * * @param owner repository owner, i.e., user or organization * @param repo name of repository * @param branch commit branch * @param commit commit SHA * @param status "start", "success", or "fail" * @param teamId Atomist team ID * @param retryOptions change default retry options * @return true if successful, false on failure after retries */ function postBuildWebhook(owner, repo, branch, commit, status, teamId, retryOptions = DefaultRetryOptions) { const payload = { repository: { owner_name: owner, name: repo }, type: "push", status, commit, branch, provider: "GoogleContainerBuilder", }; return postWebhook("build", payload, teamId, retryOptions); } exports.postBuildWebhook = postBuildWebhook; /** * Post to the Atomist link-image webhook URL. It creates the payload * then uses postWebhook. * * @param owner repository owner, i.e., user or organization * @param repo name of repository * @param commit commit SHA * @param image Docker image tag, e.g., registry.com/owner/repo:version * @param teamId Atomist team ID * @param retryOptions change default retry options * @return true if successful, false on failure after retries */ function postLinkImageWebhook(owner, repo, commit, image, teamId, retryOptions = DefaultRetryOptions) { const payload = { git: { owner, repo, sha: commit, }, docker: { image, }, type: "link-image", }; return postWebhook("link-image", payload, teamId, retryOptions); } exports.postLinkImageWebhook = postLinkImageWebhook; /** * Post payload to the Atomist webhook URL. It will retry * several times. * * @param webhook type of webhook * @param payload object to post * @param teamId Atomist team ID * @param retryOptions change default retry options * @return true if successful, false on failure after retries */ function postWebhook(webhook, payload, teamId, retryOptions = DefaultRetryOptions) { return __awaiter(this, void 0, void 0, function* () { automation_client_1.logger.debug("Posting webhook: %j", payload); const baseUrl = process.env.ATOMIST_WEBHOOK_BASEURL || "https://webhook.atomist.com"; const url = `${baseUrl}/atomist/${webhook}/teams/${teamId}`; const httpClient = automation_client_1.configurationValue("http.client.factory", automation_client_1.defaultHttpClientFactory()).create(url); try { yield httpClient.exchange(url, { method: automation_client_1.HttpMethod.Post, body: payload, options: { retry: retryOptions, }, }); return true; } catch (e) { return false; } }); } exports.postWebhook = postWebhook; //# sourceMappingURL=ImageLink.js.map