-
Notifications
You must be signed in to change notification settings - Fork 210
Expand file tree
/
Copy pathpredefined-variables.ts
More file actions
81 lines (73 loc) · 4.46 KB
/
Copy pathpredefined-variables.ts
File metadata and controls
81 lines (73 loc) · 4.46 KB
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
import camelCase from "camelcase";
import {GitData} from "./git-data.js";
import {Argv} from "./argv.js";
type PredefinedVariablesOpts = {
gitData: GitData;
argv: Argv;
envMatchedVariables: {[key: string]: string};
};
export function init ({gitData, argv, envMatchedVariables}: PredefinedVariablesOpts): {[name: string]: string} {
const _variables = {...envMatchedVariables, ...argv.variable};
// precedence:
// 1. cli option
// 2. gitlab variables files
// 3. values derieved implicitly from `git remote -v`
// 4. default value
const CI_SERVER_PROTOCOL = _variables["CI_SERVER_PROTOCOL"] ?? ((gitData.remote.schema === "http" || gitData.remote.schema === "https") ? gitData.remote.schema : "https");
const CI_SERVER_PORT = _variables["CI_SERVER_PORT"] ?? ((gitData.remote.schema === "http" || gitData.remote.schema === "https") ? gitData.remote.port : "443");
const CI_SERVER_SHELL_SSH_PORT = _variables["CI_SERVER_SHELL_SSH_PORT"] ?? ((gitData.remote.schema === "ssh") ? gitData.remote.port : "22");
const CI_SERVER_HOST = _variables["CI_SERVER_HOST"] ?? `${gitData.remote.host}`;
const CI_SERVER_FQDN = _variables["CI_SERVER_FQDN"] ?? (CI_SERVER_PORT == "443" ? gitData.remote.host : `${gitData.remote.host}:${CI_SERVER_PORT}`);
const CI_SERVER_URL = _variables["CI_SERVER_URL"] ?? `${CI_SERVER_PROTOCOL}://${CI_SERVER_FQDN}`;
const CI_PROJECT_ROOT_NAMESPACE = gitData.remote.group.split("/")[0];
const CI_PROJECT_NAMESPACE = gitData.remote.group;
const CI_DEPENDENCY_PROXY_SERVER = CI_SERVER_FQDN.includes(":") ? CI_SERVER_FQDN : `${CI_SERVER_HOST}:${CI_SERVER_PORT}`;
const predefinedVariables: {[key: string]: string} = {
CI: "true",
GITLAB_USER_LOGIN: gitData.user["GITLAB_USER_LOGIN"],
GITLAB_USER_EMAIL: gitData.user["GITLAB_USER_EMAIL"],
GITLAB_USER_NAME: gitData.user["GITLAB_USER_NAME"],
GITLAB_USER_ID: gitData.user["GITLAB_USER_ID"],
CI_COMMIT_SHORT_SHA: gitData.commit.SHA.slice(0, 8), // Changes
CI_COMMIT_SHA: gitData.commit.SHA,
CI_PROJECT_NAME: gitData.remote.project,
CI_PROJECT_TITLE: `${camelCase(gitData.remote.project)}`,
CI_PROJECT_PATH: `${gitData.remote.group}/${gitData.remote.project}`,
CI_PROJECT_PATH_SLUG: `${gitData.remote.group.replaceAll("/", "-")}-${gitData.remote.project}`.toLowerCase(),
CI_PROJECT_ROOT_NAMESPACE: CI_PROJECT_ROOT_NAMESPACE,
CI_PROJECT_NAMESPACE: CI_PROJECT_NAMESPACE,
CI_PROJECT_VISIBILITY: "internal",
CI_PROJECT_ID: "1217",
CI_COMMIT_REF_PROTECTED: "false",
CI_COMMIT_BRANCH: gitData.commit.REF_NAME, // Not available in merge request or tag pipelines
CI_COMMIT_REF_NAME: gitData.commit.REF_NAME, // Tag or branch name
CI_COMMIT_REF_SLUG: gitData.commit.REF_NAME.replaceAll(/[^a-z\d]+/ig, "-").replace(/^-/, "").slice(0, 63).replace(/-$/, "").toLowerCase(),
CI_COMMIT_TIMESTAMP: gitData.commit.TIMESTAMP,
CI_PIPELINE_CREATED_AT: new Date().toISOString().split(".")[0] + "Z",
CI_COMMIT_TITLE: "Commit Title", // First line of commit message.
CI_COMMIT_MESSAGE: "Commit Title\nMore commit text", // Full commit message
CI_COMMIT_DESCRIPTION: "More commit text",
CI_DEFAULT_BRANCH: gitData.branches.default,
CI_PIPELINE_SOURCE: "push",
CI_SERVER_FQDN: CI_SERVER_FQDN,
CI_SERVER_HOST: CI_SERVER_HOST,
CI_SERVER_PORT: CI_SERVER_PORT,
CI_SERVER_SHELL_SSH_PORT: CI_SERVER_SHELL_SSH_PORT,
CI_SERVER_URL: CI_SERVER_URL,
CI_SERVER_PROTOCOL: CI_SERVER_PROTOCOL,
CI_API_V4_URL: `${CI_SERVER_URL}/api/v4`,
CI_PROJECT_URL: `${CI_SERVER_URL}/${gitData.remote.group}/${gitData.remote.project}`,
CI_TEMPLATE_REGISTRY_HOST: "registry.gitlab.com",
GITLAB_CI: "false",
FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR: argv.umask ? "false" : "true",
CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX: `${CI_DEPENDENCY_PROXY_SERVER}/${CI_PROJECT_NAMESPACE}/dependency_proxy/containers`,
CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX: `${CI_DEPENDENCY_PROXY_SERVER}/${CI_PROJECT_ROOT_NAMESPACE}/dependency_proxy/containers`,
CI_DEPENDENCY_PROXY_SERVER: CI_DEPENDENCY_PROXY_SERVER,
CI_DEPENDENCY_PROXY_USER: "gitlab-ci-token",
};
// Delete variables the user intentionally wants unset
for (const unsetVariable of argv.unsetVariables) {
delete predefinedVariables[unsetVariable];
}
return predefinedVariables;
}