UNPKG

@atomist/atomist-sdm

Version:

Atomist SDM to deliver our own projects

123 lines 5.53 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) { 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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const sdm_1 = require("@atomist/sdm"); const sdm_pack_docker_1 = require("@atomist/sdm-pack-docker"); const sdm_pack_node_1 = require("@atomist/sdm-pack-node"); const sdm_pack_spring_1 = require("@atomist/sdm-pack-spring"); const executeLogger_1 = require("../support/executeLogger"); const identityPushTests_1 = require("../support/identityPushTests"); const goals_1 = require("./goals"); const goSupport_1 = require("./goSupport"); const release_1 = require("./release"); /** * Add Docker implementations of goals to SDM. * * @param sdm Software Delivery machine to modify * @return modified software delivery machine */ function addDockerSupport(sdm) { const simpleDockerPushTest = sdm_1.allSatisfied(sdm_pack_docker_1.HasDockerfile, sdm_1.not(sdm_pack_node_1.IsNode), sdm_1.not(sdm_pack_spring_1.IsMaven), identityPushTests_1.isOrgNamed("atomist")); goals_1.dockerBuild.with({ name: "simple-docker-build", options: Object.assign({}, sdm.configuration.sdm.docker.hub, { push: true, builder: "docker" }), logInterpreter: sdm_1.LogSuppressor, pushTest: simpleDockerPushTest, }); goals_1.releaseDocker .with({ name: "docker-release-global-sdm", goalExecutor: executeReleaseDocker(sdm.configuration.sdm.docker.t095sffbk), pushTest: sdm_1.allSatisfied(sdm_pack_node_1.IsNode, sdm_pack_docker_1.HasDockerfile, sdm_1.allSatisfied(identityPushTests_1.isOrgNamed("atomisthq"), identityPushTests_1.isNamed("global-sdm"))), logInterpreter: sdm_1.LogSuppressor, }) .with({ name: "docker-release", goalExecutor: executeReleaseDocker(sdm.configuration.sdm.docker.hub), pushTest: sdm_1.anySatisfied(sdm_1.allSatisfied(sdm_1.anySatisfied(sdm_pack_node_1.IsNode, sdm_pack_spring_1.IsMaven), sdm_pack_docker_1.HasDockerfile, sdm_1.not(sdm_1.allSatisfied(identityPushTests_1.isOrgNamed("atomisthq"), identityPushTests_1.isNamed("global-sdm")))), goSupport_1.IsGoMakeDocker), logInterpreter: sdm_1.LogSuppressor, }) .with({ name: "simple-docker-release", goalExecutor: executeReleaseDocker(sdm.configuration.sdm.docker.hub), pushTest: simpleDockerPushTest, logInterpreter: sdm_1.LogSuppressor, }); return sdm; } exports.addDockerSupport = addDockerSupport; function dockerImage(p) { return `${p.registry}/${p.name}:${p.version}`; } /** * Pull, tag, and push docker image. */ function executeReleaseDocker(options) { return (gi) => __awaiter(this, void 0, void 0, function* () { if (!options.registry) { throw new Error(`No registry defined in Docker options`); } const version = yield release_1.rwlcVersion(gi); const image = dockerImage({ registry: options.registry, name: gi.goalEvent.repo.name, version, }); const loginArgs = []; if (/[^A-Za-z0-9]/.test(options.registry)) { loginArgs.push(options.registry); } const loginCmds = [ { cmd: { command: "docker", args: ["login", "--username", options.user, "--password", options.password, ...loginArgs], }, }, { cmd: { command: "docker", args: ["pull", image] }, }, ]; let els = loginCmds.map(executeLogger_1.spawnExecuteLogger); const result = yield executeLogger_1.executeLoggers(els, gi.progressLog); if (result.code !== 0) { return result; } const versionRelease = release_1.releaseOrPreRelease(version, gi); const tag = dockerImage({ registry: options.registry, name: gi.goalEvent.repo.name, version: versionRelease, }); const cmds = [ { cmd: { command: "docker", args: ["tag", image, tag] } }, { cmd: { command: "docker", args: ["push", tag] } }, { cmd: { command: "docker", args: ["rmi", tag] } }, ]; els = cmds.map(executeLogger_1.spawnExecuteLogger); return executeLogger_1.executeLoggers(els, gi.progressLog); }); } //# sourceMappingURL=dockerSupport.js.map