import { isObject } from "@emprespresso/pengueno"; export type JobArgT = Record; export interface Job { readonly type: string; readonly arguments: JobArgT; } export const isJob = (j: unknown): j is Job => !!( isObject(j) && "arguments" in j && isObject(j.arguments) && "type" in j && typeof j.type === "string" && j ); export interface FetchCodeJobProps extends JobArgT { readonly remoteUrl: string; readonly checkout: string; readonly path: string; } export interface FetchCodeJob { readonly type: "fetch_code"; readonly arguments: FetchCodeJobProps; } export interface BuildDockerImageJobProps extends JobArgT { readonly registry: string; readonly namespace: string; readonly repository: string; readonly imageTag: string; readonly context: string; readonly dockerfile: string; readonly buildTarget: string; } export interface BuildDockerImageJob extends Job { readonly type: "build_docker_image"; readonly arguments: BuildDockerImageJobProps; } export interface AnsiblePlaybookJobProps extends JobArgT { readonly path: string; readonly playbooks: string; } export interface AnsiblePlaybookJob extends Job { readonly type: "ansible_playbook"; readonly arguments: AnsiblePlaybookJobProps; } export interface CheckoutCiJobProps extends JobArgT { readonly remote: string; readonly refname: string; readonly rev: string; readonly run: string; readonly returnPath: string; } export interface CheckoutCiJob extends Job { readonly type: "checkout_ci"; readonly arguments: CheckoutCiJobProps; }