diff options
author | Elizabeth Hunt <me@liz.coffee> | 2025-06-29 19:46:30 -0700 |
---|---|---|
committer | Elizabeth Hunt <me@liz.coffee> | 2025-06-29 19:46:30 -0700 |
commit | 5eb1e7e8808d4de353c1a0bc87b2f5d078882d3a (patch) | |
tree | 8e33c9abc0ce0bdc2534249f7167cd620fcda277 | |
parent | 61c671f186615ef69235ddb0e3f7b127ee8449fe (diff) | |
download | ci-5eb1e7e8808d4de353c1a0bc87b2f5d078882d3a.tar.gz ci-5eb1e7e8808d4de353c1a0bc87b2f5d078882d3a.zip |
Deployment fixes
-rw-r--r-- | .ci/ci.ts | 10 | ||||
-rw-r--r-- | model/job/jobs.ts | 8 | ||||
-rw-r--r-- | model/pipeline/builder.ts | 7 | ||||
-rw-r--r-- | model/pipeline/index.ts | 2 | ||||
-rw-r--r-- | u/process/env.ts | 10 | ||||
-rw-r--r-- | worker/Dockerfile | 5 | ||||
-rwxr-xr-x | worker/scripts/ansible_playbook.ts | 2 | ||||
-rwxr-xr-x | worker/scripts/build_docker_image.ts | 3 | ||||
-rwxr-xr-x | worker/scripts/checkout_ci.ts | 4 |
9 files changed, 28 insertions, 23 deletions
@@ -5,7 +5,7 @@ import { BuildDockerImageJob, DefaultGitHookPipelineBuilder, FetchCodeJob, -} from '../model/index.js'; +} from '@emprespresso/ci_model'; const REGISTRY = 'oci.liz.coffee'; const NAMESPACE = 'emprespresso'; @@ -24,7 +24,7 @@ const getPipeline = () => { }; const baseCiPackageBuild: BuildDockerImageJob = { - type: 'build_docker_image.ts', + type: 'build_docker_image.js', arguments: { ...commonBuildArgs, context: gitHookPipeline.getSourceDestination(), @@ -38,7 +38,7 @@ const getPipeline = () => { }); const subPackages = ['worker', 'hooks'].map((_package) => ({ - type: 'build_docker_image.ts', + type: 'build_docker_image.js', arguments: { ...commonBuildArgs, repository: `${IMG}_${_package}`, @@ -56,7 +56,7 @@ const getPipeline = () => { } const fetchAnsibleCode: FetchCodeJob = { - type: 'fetch_code.ts', + type: 'fetch_code.js', arguments: { remoteUrl: `${REMOTE}/infra`, checkout: 'main', @@ -64,7 +64,7 @@ const getPipeline = () => { }, }; const thenDeploy: AnsiblePlaybookJob = { - type: 'ansible_playbook.ts', + type: 'ansible_playbook.js', arguments: { path: 'infra', playbooks: 'playbooks/ci.yml', diff --git a/model/job/jobs.ts b/model/job/jobs.ts index e201c4d..4ed5858 100644 --- a/model/job/jobs.ts +++ b/model/job/jobs.ts @@ -7,7 +7,7 @@ export interface FetchCodeJobProps extends JobArgT { } export interface FetchCodeJob { - readonly type: 'fetch_code.ts'; + readonly type: 'fetch_code.js'; readonly arguments: FetchCodeJobProps; } @@ -23,7 +23,7 @@ export interface BuildDockerImageJobProps extends JobArgT { } export interface BuildDockerImageJob extends Job { - readonly type: 'build_docker_image.ts'; + readonly type: 'build_docker_image.js'; readonly arguments: BuildDockerImageJobProps; } @@ -33,7 +33,7 @@ export interface AnsiblePlaybookJobProps extends JobArgT { } export interface AnsiblePlaybookJob extends Job { - readonly type: 'ansible_playbook.ts'; + readonly type: 'ansible_playbook.js'; readonly arguments: AnsiblePlaybookJobProps; } @@ -47,6 +47,6 @@ export interface CheckoutCiJobProps extends JobArgT { } export interface CheckoutCiJob extends Job { - readonly type: 'checkout_ci.ts'; + readonly type: 'checkout_ci.js'; readonly arguments: CheckoutCiJobProps; } diff --git a/model/pipeline/builder.ts b/model/pipeline/builder.ts index dac9452..c30867c 100644 --- a/model/pipeline/builder.ts +++ b/model/pipeline/builder.ts @@ -1,6 +1,5 @@ -import { Pipeline, PipelineStage } from './index.js'; -import { FetchCodeJob } from '../job/index.js'; -import { PipelineImpl } from './impl.js'; +import { FetchCodeJob } from '@emprespresso/ci_model'; +import { PipelineImpl, Pipeline, PipelineStage } from './index.js'; export interface PipelineBuilder { addStage(stage: PipelineStage): PipelineBuilder; @@ -31,7 +30,7 @@ export class DefaultGitHookPipelineBuilder extends BasePipelineBuilder { this.addStage({ parallelJobs: [ <FetchCodeJob>{ - type: 'fetch_code.ts', + type: 'fetch_code.js', arguments: { remoteUrl, checkout: rev, diff --git a/model/pipeline/index.ts b/model/pipeline/index.ts index fd14e8d..1c10c64 100644 --- a/model/pipeline/index.ts +++ b/model/pipeline/index.ts @@ -1,5 +1,5 @@ import { isObject } from '@emprespresso/pengueno'; -import { isJob, Job } from '../job/index.js'; +import { isJob, Job } from '@emprespresso/ci_model'; export interface PipelineStage { readonly parallelJobs: Array<Job>; diff --git a/u/process/env.ts b/u/process/env.ts index 9a55488..76961c9 100644 --- a/u/process/env.ts +++ b/u/process/env.ts @@ -1,11 +1,13 @@ import { IOptional, Either, Optional, type IEither } from '@emprespresso/pengueno'; -export const getEnv = <V extends string>(name: string): IOptional<V> => Optional.from(<V>process.env[name]); +export const getEnv = <V extends string>(name: string): IOptional<V> => + Optional.from(<V>process.env[name]).filter((val) => val.trim() !== ''); export const getRequiredEnv = <V extends string>(name: string): IEither<Error, V> => - Either.fromFailable(() => getEnv<V>(name).get()).mapLeft( - () => new Error(`environment variable "${name}" is required D:`), - ); + getEnv<V>(name) + .map((envVal) => Either.right<Error, V>(<V>envVal)) + .orSome(() => Either.left<Error, V>(new Error(`environment variable "${name}" is required D:`))) + .get(); type ObjectFromList<T extends ReadonlyArray<string>, V = string> = { [K in T extends ReadonlyArray<infer U> ? U : never]: V; diff --git a/worker/Dockerfile b/worker/Dockerfile index e2d4ac0..a8a7eb3 100644 --- a/worker/Dockerfile +++ b/worker/Dockerfile @@ -15,8 +15,11 @@ RUN tar -xvzf /docker.tgz # -- <ci_worker> -- FROM oci.liz.coffee/emprespresso/ci_base:release AS worker +RUN echo "export PATH=/app/worker/dist/scripts:$PATH" > /etc/environment +RUN chmod +x /app/worker/dist/scripts/*.js + RUN mkdir -p /var/lib/laminar/cfg -RUN cp -r /app/worker/* /var/lib/laminar/cfg +RUN cp -r /app/worker/jobs /var/lib/laminar/cfg RUN chown -R 1000:1000 /var/lib/laminar RUN groupadd docker diff --git a/worker/scripts/ansible_playbook.ts b/worker/scripts/ansible_playbook.ts index 4a22984..fb4b801 100755 --- a/worker/scripts/ansible_playbook.ts +++ b/worker/scripts/ansible_playbook.ts @@ -20,7 +20,7 @@ import { tmpdir } from 'os'; const eitherJob = getRequiredEnvVars(['path', 'playbooks']).mapRight( (baseArgs) => <AnsiblePlaybookJob>{ - type: 'ansible_playbook.ts', + type: 'ansible_playbook.js', arguments: baseArgs, }, ); diff --git a/worker/scripts/build_docker_image.ts b/worker/scripts/build_docker_image.ts index b35031a..5dd5b4e 100755 --- a/worker/scripts/build_docker_image.ts +++ b/worker/scripts/build_docker_image.ts @@ -22,10 +22,11 @@ const eitherJob = getRequiredEnvVars([ ]).mapRight( (baseArgs) => <BuildDockerImageJob>{ - type: 'build_docker_image.ts', + type: 'build_docker_image.js', arguments: baseArgs, }, ); +console.log(eitherJob); const eitherVault = Bitwarden.getConfigFromEnvironment().mapRight((config) => new Bitwarden(config)); const buildImageMetric = Metric.fromName('dockerImage.build').asResult(); diff --git a/worker/scripts/checkout_ci.ts b/worker/scripts/checkout_ci.ts index fb71a16..337aae1 100755 --- a/worker/scripts/checkout_ci.ts +++ b/worker/scripts/checkout_ci.ts @@ -22,7 +22,7 @@ const run = Date.now().toString(); const eitherJob = getRequiredEnvVars(['remote', 'refname', 'rev']).mapRight( (baseArgs) => <CheckoutCiJob>{ - type: 'checkout_ci.ts', + type: 'checkout_ci.js', arguments: { ...baseArgs, run, @@ -42,7 +42,7 @@ await LogMetricTraceable.ofLogTraceable(_logJob) tEitherJob.get().flatMapAsync((ciJob) => { const wd = getWorkingDirectoryForCiJob(ciJob); const fetchPackageJob = <FetchCodeJob>{ - type: 'fetch_code.ts', + type: 'fetch_code.js', arguments: { remoteUrl: ciJob.arguments.remote, checkout: ciJob.arguments.rev, |