1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
#!/usr/bin/env -S deno run --allow-env
import {
BuildDockerImageJob,
DefaultGitHookPipelineBuilder,
} from "@liz-ci/model";
import { AnsiblePlaybookJob, FetchCodeJob } from "../model/job.ts";
const REGISTRY = "oci.liz.coffee";
const NAMESPACE = "img";
const IMG = "liz-ci";
const getPipeline = () => {
const gitHookPipeline = new DefaultGitHookPipelineBuilder();
const branch = gitHookPipeline.getBranch();
if (!branch) return gitHookPipeline.build();
const commonBuildArgs = {
registry: REGISTRY,
namespace: NAMESPACE,
imageTag: branch,
};
const ciPackageBuild: BuildDockerImageJob = {
type: "build_docker_image",
arguments: {
...commonBuildArgs,
context: gitHookPipeline.getSourceDestination(),
repository: IMG,
buildTarget: IMG,
dockerfile: "Dockerfile",
},
};
gitHookPipeline.addStage({
parallelJobs: [ciPackageBuild],
});
const subPackages = [
"worker",
"hooks",
].map((_package) => ({
type: "build_docker_image",
arguments: {
...commonBuildArgs,
repository: `${IMG}-${_package}`,
buildTarget: _package,
dockerfile: `${_package}/Dockerfile`,
},
}));
gitHookPipeline.addStage({
parallelJobs: subPackages,
});
const isRelease = branch === "release";
if (!isRelease) {
return gitHookPipeline.build();
}
const fetchAnsibleCode: FetchCodeJob = {
type: "fetch_code",
arguments: {
remoteUrl: "ssh://src.liz.coffee:2222/infra",
checkout: "main",
path: "infra",
},
};
const thenDeploy: AnsiblePlaybookJob = {
type: "ansible_playbook",
arguments: {
path: "infra",
playbooks: "playbooks/ci.yml",
},
};
[fetchAnsibleCode, thenDeploy].forEach((deploymentStage) =>
gitHookPipeline.addStage({ parallelJobs: [deploymentStage] })
);
return gitHookPipeline.build();
};
if (import.meta.main) {
const encoder = new TextEncoder();
const data = encoder.encode(getPipeline().serialize());
await Deno.stdout.write(data);
}
|