docker: parseImageRef
This commit is contained in:
+15
-7
@@ -26,7 +26,7 @@ exports = module.exports = {
|
||||
|
||||
update,
|
||||
|
||||
parseImageName,
|
||||
parseImageRef,
|
||||
|
||||
createExec,
|
||||
startExec,
|
||||
@@ -47,7 +47,6 @@ const apps = require('./apps.js'),
|
||||
promiseRetry = require('./promise-retry.js'),
|
||||
services = require('./services.js'),
|
||||
settings = require('./settings.js'),
|
||||
semver = require('semver'),
|
||||
shell = require('./shell.js')('docker'),
|
||||
safe = require('safetydance'),
|
||||
timers = require('timers/promises'),
|
||||
@@ -682,10 +681,19 @@ async function setRegistryConfig(registryConfig) {
|
||||
await settings.setJson(settings.REGISTRY_CONFIG_KEY, registryConfig);
|
||||
}
|
||||
|
||||
function parseImageName(imageName) {
|
||||
const repository = imageName.split(':', 1)[0];
|
||||
const tag = imageName.substr(repository.length + 1).split('@', 1)[0];
|
||||
const digest = imageName.substr(repository.length + 1 + tag.length + 1).split(':', 2)[1];
|
||||
function parseImageRef(ref) {
|
||||
// a ref is like registry.docker.com/cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4
|
||||
// registry.docker.com is registry name . cloudron is namespace . base is image name . cloudron/base is repository path
|
||||
// registry.docker.com/cloudron/base is fullRepositoryName
|
||||
const result = { fullRepositoryName: null, tag: null, digest: null };
|
||||
result.fullRepositoryName = ref.split(/[:@]/)[0];
|
||||
let remaining = ref.substr(result.fullRepositoryName.length);
|
||||
if (remaining.startsWith(':')) {
|
||||
result.tag = remaining.substr(1).split('@', 1)[0];
|
||||
remaining = remaining.substr(result.tag.length + 1); // also ':'
|
||||
}
|
||||
|
||||
return { repository, tag, version: semver.parse(tag), digest };
|
||||
if (remaining.startsWith('@sha256:')) result.digest = remaining.substr(8);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user