🌳
pt0/deployF/dockerF/getRepoNameTagF.mts
1import * as _ from 'lodash-es'
8// single source of truth for the registry manifest URL format
9export const mkManifestUrl = (host: string | undefined, repoPath: string, tag: string) =>
10 `https://${host}/v2/${repoPath}/manifests/${tag}`
12export const get2RepoNameTag = async ({git_sha, dockerfileContent, includeShaInTag, ...props}: {
13 git_sha?: string, dockerfileContent: string, includeShaInTag?: boolean,
14 git_repo_name?: string, gitsshRepoPath?: string, dockreg_host?: string, dockLanHost?: string,
15}) => {
16 let {git_repo_name, gitsshRepoPath, dockreg_host, dockLanHost} = _.merge(props, getAppCfg())
18 git_repo_name ||= gitsshRepoPath?.match(/\/([^/]+)\.git$/)?.[1]
19 git_repo_name ||= 'localrepo'
20 assertDefined(git_repo_name)
22 dockerfileContent = _.chain(dockerfileContent).split("\n").reject((lineStr) => {
23 if (includeShaInTag) return lineStr.startsWith('#')
24 return lineStr.startsWith('ENV NEXT_PUBLIC_GIT_SHA=') || lineStr.startsWith('#')
25 }).join("\n").value()
26 const dfcSha = calcReqHash(dockerfileContent, 'sha256').substring(0,9)
28 const nameGitSha = `dfc${dfcSha}`
29 const repoPath = `${git_repo_name}/${git_repo_name}`
30 const dockImgPathname = `${repoPath}:${nameGitSha}`
31 const {kanikoClusterName, cluster_name} = getAppCfg()
32 const kanikoNeedsExternal = kanikoClusterName && kanikoClusterName !== cluster_name
33 const imgHost = kanikoNeedsExternal ? dockreg_host : (dockLanHost || dockreg_host)
34 const pushHost = await getDockerPushHost({dockreg_host, dockLanHost, builderClusterName: isKanikojob() ? kanikoClusterName : undefined})
35 const repo_name_tag = `${imgHost}/${dockImgPathname}`
36 const push_repo_name_tag = `${pushHost}/${dockImgPathname}`
37 const manifest_url = mkManifestUrl(pushHost, repoPath, nameGitSha)
39 return {repo_name_tag, push_repo_name_tag, manifest_url}