UNPKG

@atomist/sdm-core

Version:

Atomist Software Delivery Machine - Implementation

152 lines 5.33 kB
import { GitProject, HandlerContext } from "@atomist/automation-client"; import { FulfillableGoalDetails, FulfillableGoalWithRegistrations, Fulfillment, Goal, GoalFulfillmentCallback, ImplementationRegistration, SdmGoalEvent, SoftwareDeliveryMachine } from "@atomist/sdm"; import { CacheEntry } from "../cache/goalCaching"; /** * Create and return a container goal with the provided container * specification. * * @param displayName Goal display name * @param registration Goal containers, volumes, cache details, etc. * @return SDM container goal */ export declare function container<T extends ContainerRegistration>(displayName: string, registration: T): Container; /** * Ports to expose from container. */ export interface ContainerPort { /** * Number of port to expose from the container. This must be * a valid port number, 0 < x < 65536. */ containerPort: number; } /** * Volumes to mount in container. */ export interface ContainerVolumeMount { /** Path to mount point of volume. */ mountPath: string; /** Name of volume from [[GoalContainer.volumes]]. */ name: string; } /** * Simplified container abstraction for goals. */ export interface GoalContainer { /** Unique name for this container within this goal. */ name: string; /** Full Docker image name, i.e., `registry/name:tag`. */ image: string; /** * Docker command and arguments. We call this `args` rather than * `command` because we think k8s got it right. */ args?: string[]; /** * Docker image entrypoint. We call this `command` rather than * `entrypoint` because we think k8s got it right. */ command?: string[]; /** * Environment variables to set in Docker container. */ env?: Array<{ name: string; value: string; }>; /** * Ports to expose from container. */ ports?: ContainerPort[]; /** * Volumes to mount in container. */ volumeMounts?: ContainerVolumeMount[]; } /** * Volumes that containers in goal can mount. */ export interface GoalContainerVolume { /** Volume to be created from local host file system location. */ hostPath: { /** Absolute path on host to volume. */ path: string; }; /** Unique name of volume, referenced by [[ContainerVolumeMount.name]]. */ name: string; } /** * File system location of goal project in containers. */ export declare const ContainerProjectHome = "/atm/home"; /** * Specification of containers and volumes for a container goal. */ export interface GoalContainerSpec { /** * Containers to run for this goal. The goal result is based on * the exit status of the first element of the `containers` array. * The other containers are considered "sidecar" containers * provided functionality that the main container needs to * function. The working directory of the first container is set * to [[ContainerProjectHome]], which contains the project upon * which the goal should operate. */ containers: GoalContainer[]; /** * Volumes available to mount in containers. */ volumes?: GoalContainerVolume[]; } /** * Function signature for callback that can modify and return the * [[ContainerRegistration]] object. */ export declare type ContainerSpecCallback = (r: ContainerRegistration, p: GitProject, g: Container, e: SdmGoalEvent, c: HandlerContext) => Promise<GoalContainerSpec>; /** * Container goal artifacts and implementations information. */ export interface ContainerRegistration extends Partial<ImplementationRegistration>, GoalContainerSpec { /** * Callback function to dynamically modify the goal container spec * when goal is executed. */ callback?: ContainerSpecCallback; /** * Cache classifiers to retrieve from cache before starting goal * execution. The values must correspond to output classifiers * from previously executed container goals in the same goal set. */ input?: string[]; /** * File path globs to store in cache after goal execution. * They values should be glob paths relative to the root of * the project directory. */ output?: CacheEntry[]; } /** * Container goal scheduler implementation. The goal execution is * handled as part of the execution of the container. */ export declare type ContainerScheduler = (goal: Container, registration: ContainerRegistration) => void; export interface ContainerGoalDetails extends FulfillableGoalDetails { /** * Container goal scheduler. If no scheduler is provided, the k8s * scheduler is used if the SDM is running in a Kubernetes * cluster, otherwise the Docker scheduler is used. */ scheduler?: ContainerScheduler; } /** * Goal run as a container, as seen on TV. */ export declare class Container extends FulfillableGoalWithRegistrations<ContainerRegistration> { readonly details: ContainerGoalDetails; constructor(details?: ContainerGoalDetails, ...dependsOn: Goal[]); register(sdm: SoftwareDeliveryMachine): void; with(registration: ContainerRegistration): this; addFulfillment(fulfillment: Fulfillment): this; addFulfillmentCallback(cb: GoalFulfillmentCallback): this; } //# sourceMappingURL=container.d.ts.map