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, 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' 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('#') 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) 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}