summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElizabeth Hunt <me@liz.coffee>2025-06-29 19:46:30 -0700
committerElizabeth Hunt <me@liz.coffee>2025-06-29 19:46:30 -0700
commit5eb1e7e8808d4de353c1a0bc87b2f5d078882d3a (patch)
tree8e33c9abc0ce0bdc2534249f7167cd620fcda277
parent61c671f186615ef69235ddb0e3f7b127ee8449fe (diff)
downloadci-5eb1e7e8808d4de353c1a0bc87b2f5d078882d3a.tar.gz
ci-5eb1e7e8808d4de353c1a0bc87b2f5d078882d3a.zip
Deployment fixes
-rw-r--r--.ci/ci.ts10
-rw-r--r--model/job/jobs.ts8
-rw-r--r--model/pipeline/builder.ts7
-rw-r--r--model/pipeline/index.ts2
-rw-r--r--u/process/env.ts10
-rw-r--r--worker/Dockerfile5
-rwxr-xr-xworker/scripts/ansible_playbook.ts2
-rwxr-xr-xworker/scripts/build_docker_image.ts3
-rwxr-xr-xworker/scripts/checkout_ci.ts4
9 files changed, 28 insertions, 23 deletions
diff --git a/.ci/ci.ts b/.ci/ci.ts
index 7f06b26..38a8aad 100644
--- a/.ci/ci.ts
+++ b/.ci/ci.ts
@@ -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,