@contember/cli 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -58,17 +58,12 @@ class VersionChecker {
58
58
  if (!def.image) {
59
59
  continue;
60
60
  }
61
- const [image, version2] = def.image.split(":");
62
- if (!version2 || !consts.contemberDockerImages.includes(image)) {
61
+ const [image, tag] = def.image.split(":");
62
+ if (!tag || !consts.contemberDockerImages.includes(image)) {
63
63
  continue;
64
64
  }
65
- const versionParts = version2.split(/[.-]/);
66
- if (versionParts[versionParts.length - 1] === "debian") {
67
- versionParts.pop();
68
- }
69
- const cliVersionParts = cliVersion.split(/[.-]/).slice(0, versionParts.length);
70
- if (versionParts.join(".") !== cliVersionParts.join(".")) {
71
- errors.push(`Docker service ${name} with image ${image}:${version2} does not match version of CLI ${cliVersion}.`);
65
+ if (extractVersion(tag) !== cliVersion) {
66
+ errors.push(`Docker service ${name} with image ${image}:${tag} does not match version of CLI ${cliVersion}.`);
72
67
  }
73
68
  }
74
69
  }
@@ -81,5 +76,8 @@ If you are really certain about the compatibility, you can disable this version
81
76
  });
82
77
  }
83
78
  }
79
+ const extractVersion = (tag) => {
80
+ return tag.match(/^\d+\.\d+\.\d+(-\w+\.\d+)?/)?.[0] ?? tag;
81
+ };
84
82
  exports.VersionChecker = VersionChecker;
85
83
  //# sourceMappingURL=VersionChecker.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"VersionChecker.cjs","sources":["../../../../../packages/cli/src/lib/VersionChecker.ts"],"sourcesContent":["import { join, relative } from 'node:path'\nimport * as semver from 'semver'\nimport { PackageWorkspaceResolver } from '@contember/cli-common'\nimport { DockerComposeManager } from './fs/DockerComposeManager'\nimport { contemberDockerImages } from '../consts'\n\nexport class VersionChecker {\n\tconstructor(\n\t\tprivate readonly version: string,\n\t\tprivate readonly dir: string,\n\t\tprivate readonly packageWorkspaceResolver: PackageWorkspaceResolver,\n\t\tprivate readonly dockerComposeManager: DockerComposeManager,\n\t) {\n\t}\n\n\tcheckVersions = async () => {\n\t\tconst cliVersion = this.version\n\t\tconst packageWorkspace = await this.packageWorkspaceResolver.resolve()\n\n\t\tconst errors: string[] = []\n\n\t\tfor (const packageName of ['@contember/schema', '@contember/schema-definition']) {\n\t\t\tconst installedPackages = await packageWorkspace.findInstalledDependencies(packageName)\n\t\t\tfor (const pckg of installedPackages) {\n\t\t\t\tconst jsonPath = relative(this.dir, join(pckg.defined.pckg.dir, 'package.json'))\n\n\t\t\t\tif (!pckg.installed) {\n\t\t\t\t\terrors.push(`Package ${packageName} defined in ${jsonPath} is not installed.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (pckg.defined.version !== 'workspace:*' && !semver.satisfies(pckg.installed.version, pckg.defined.version)) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match constraint ${pckg.defined.version} defined in ${jsonPath}.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (cliVersion !== pckg.installed.version) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst dockerCompose = await this.dockerComposeManager.tryReadMainDockerComposeConfig()\n\n\t\tif (!dockerCompose) {\n\t\t\terrors.push('docker-compose.yaml not found.')\n\t\t} else {\n\t\t\tfor (const [name, def] of Object.entries(dockerCompose.services ?? {})) {\n\t\t\t\tif (!def.image) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst [image, version] = def.image.split(':')\n\t\t\t\tif (!version || !contemberDockerImages.includes(image)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst versionParts = version.split(/[.-]/)\n\t\t\t\tif (versionParts[versionParts.length - 1] === 'debian') {\n\t\t\t\t\tversionParts.pop()\n\t\t\t\t}\n\t\t\t\tconst cliVersionParts = cliVersion.split(/[.-]/).slice(0, versionParts.length)\n\t\t\t\tif (versionParts.join('.') !== cliVersionParts.join('.')) {\n\t\t\t\t\terrors.push(`Docker service ${name} with image ${image}:${version} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (errors.length) {\n\t\t\tthrow `${errors.map(it => `${it}`).join('\\n')}\n\nPlease make sure all dependencies are up to date.\\nIf you are really certain about the compatibility, you can disable this version check by running the CLI with the CONTEMBER_SKIP_VERSION_CHECK=1 environment variable`\n\t\t}\n\t}\n\n}\n"],"names":["relative","join","semver","version","contemberDockerImages"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAMO,MAAM,eAAe;AAAA,EAC3B,YACkB,SACA,KACA,0BACA,sBAChB;AAJgB,SAAA,UAAA;AACA,SAAA,MAAA;AACA,SAAA,2BAAA;AACA,SAAA,uBAAA;AAIlB,kBAAA,MAAA,iBAAgB,YAAY;AAC3B,YAAM,aAAa,KAAK;AACxB,YAAM,mBAAmB,MAAM,KAAK,yBAAyB,QAAQ;AAErE,YAAM,SAAmB,CAAC;AAE1B,iBAAW,eAAe,CAAC,qBAAqB,8BAA8B,GAAG;AAChF,cAAM,oBAAoB,MAAM,iBAAiB,0BAA0B,WAAW;AACtF,mBAAW,QAAQ,mBAAmB;AAC/B,gBAAA,WAAWA,UAAAA,SAAS,KAAK,KAAKC,UAAAA,KAAK,KAAK,QAAQ,KAAK,KAAK,cAAc,CAAC;AAE3E,cAAA,CAAC,KAAK,WAAW;AACpB,mBAAO,KAAK,WAAW,WAAW,eAAe,QAAQ,oBAAoB;AAC7E;AAAA,UAAA;AAED,cAAI,KAAK,QAAQ,YAAY,iBAAiB,CAACC,kBAAO,UAAU,KAAK,UAAU,SAAS,KAAK,QAAQ,OAAO,GAAG;AAC9G,mBAAO,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,8BAA8B,KAAK,QAAQ,OAAO,eAAe,QAAQ,GAAG;AACxI;AAAA,UAAA;AAEG,cAAA,eAAe,KAAK,UAAU,SAAS;AACnC,mBAAA,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QAC5G;AAAA,MACD;AAED,YAAM,gBAAgB,MAAM,KAAK,qBAAqB,+BAA+B;AAErF,UAAI,CAAC,eAAe;AACnB,eAAO,KAAK,gCAAgC;AAAA,MAAA,OACtC;AACK,mBAAA,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,cAAc,YAAY,CAAA,CAAE,GAAG;AACnE,cAAA,CAAC,IAAI,OAAO;AACf;AAAA,UAAA;AAED,gBAAM,CAAC,OAAOC,QAAO,IAAI,IAAI,MAAM,MAAM,GAAG;AAC5C,cAAI,CAACA,YAAW,CAACC,OAAsB,sBAAA,SAAS,KAAK,GAAG;AACvD;AAAA,UAAA;AAEK,gBAAA,eAAeD,SAAQ,MAAM,MAAM;AACzC,cAAI,aAAa,aAAa,SAAS,CAAC,MAAM,UAAU;AACvD,yBAAa,IAAI;AAAA,UAAA;AAEZ,gBAAA,kBAAkB,WAAW,MAAM,MAAM,EAAE,MAAM,GAAG,aAAa,MAAM;AAC7E,cAAI,aAAa,KAAK,GAAG,MAAM,gBAAgB,KAAK,GAAG,GAAG;AAClD,mBAAA,KAAK,kBAAkB,IAAI,eAAe,KAAK,IAAIA,QAAO,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QACjH;AAAA,MACD;AAGD,UAAI,OAAO,QAAQ;AACZ,cAAA,GAAG,OAAO,IAAI,CAAM,OAAA,GAAG,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,IAG9C,CACD;AAAA,EAAA;AAED;;"}
1
+ {"version":3,"file":"VersionChecker.cjs","sources":["../../../../../packages/cli/src/lib/VersionChecker.ts"],"sourcesContent":["import { join, relative } from 'node:path'\nimport * as semver from 'semver'\nimport { PackageWorkspaceResolver } from '@contember/cli-common'\nimport { DockerComposeManager } from './fs/DockerComposeManager'\nimport { contemberDockerImages } from '../consts'\n\nexport class VersionChecker {\n\tconstructor(\n\t\tprivate readonly version: string,\n\t\tprivate readonly dir: string,\n\t\tprivate readonly packageWorkspaceResolver: PackageWorkspaceResolver,\n\t\tprivate readonly dockerComposeManager: DockerComposeManager,\n\t) {\n\t}\n\n\tcheckVersions = async () => {\n\t\tconst cliVersion = this.version\n\t\tconst packageWorkspace = await this.packageWorkspaceResolver.resolve()\n\n\t\tconst errors: string[] = []\n\n\t\tfor (const packageName of ['@contember/schema', '@contember/schema-definition']) {\n\t\t\tconst installedPackages = await packageWorkspace.findInstalledDependencies(packageName)\n\t\t\tfor (const pckg of installedPackages) {\n\t\t\t\tconst jsonPath = relative(this.dir, join(pckg.defined.pckg.dir, 'package.json'))\n\n\t\t\t\tif (!pckg.installed) {\n\t\t\t\t\terrors.push(`Package ${packageName} defined in ${jsonPath} is not installed.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (pckg.defined.version !== 'workspace:*' && !semver.satisfies(pckg.installed.version, pckg.defined.version)) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match constraint ${pckg.defined.version} defined in ${jsonPath}.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (cliVersion !== pckg.installed.version) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst dockerCompose = await this.dockerComposeManager.tryReadMainDockerComposeConfig()\n\n\t\tif (!dockerCompose) {\n\t\t\terrors.push('docker-compose.yaml not found.')\n\t\t} else {\n\t\t\tfor (const [name, def] of Object.entries(dockerCompose.services ?? {})) {\n\t\t\t\tif (!def.image) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst [image, tag] = def.image.split(':')\n\t\t\t\tif (!tag || !contemberDockerImages.includes(image)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif (extractVersion(tag) !== cliVersion) {\n\t\t\t\t\terrors.push(`Docker service ${name} with image ${image}:${tag} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (errors.length) {\n\t\t\tthrow `${errors.map(it => `${it}`).join('\\n')}\n\nPlease make sure all dependencies are up to date.\\nIf you are really certain about the compatibility, you can disable this version check by running the CLI with the CONTEMBER_SKIP_VERSION_CHECK=1 environment variable`\n\t\t}\n\t}\n\n}\n\n\nconst extractVersion = (tag: string) => {\n\t// e.g.\n\t// 2.1.0-alpha.15-foo-bar => 2.1.0-alpha.15\n\t// 2.1.0-debian => 2.1.0\n\treturn tag.match(/^\\d+\\.\\d+\\.\\d+(-\\w+\\.\\d+)?/)?.[0] ?? tag\n}\n"],"names":["relative","join","semver","contemberDockerImages"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAMO,MAAM,eAAe;AAAA,EAC3B,YACkB,SACA,KACA,0BACA,sBAChB;AAJgB,SAAA,UAAA;AACA,SAAA,MAAA;AACA,SAAA,2BAAA;AACA,SAAA,uBAAA;AAIlB,kBAAA,MAAA,iBAAgB,YAAY;AAC3B,YAAM,aAAa,KAAK;AACxB,YAAM,mBAAmB,MAAM,KAAK,yBAAyB,QAAQ;AAErE,YAAM,SAAmB,CAAC;AAE1B,iBAAW,eAAe,CAAC,qBAAqB,8BAA8B,GAAG;AAChF,cAAM,oBAAoB,MAAM,iBAAiB,0BAA0B,WAAW;AACtF,mBAAW,QAAQ,mBAAmB;AAC/B,gBAAA,WAAWA,UAAAA,SAAS,KAAK,KAAKC,UAAAA,KAAK,KAAK,QAAQ,KAAK,KAAK,cAAc,CAAC;AAE3E,cAAA,CAAC,KAAK,WAAW;AACpB,mBAAO,KAAK,WAAW,WAAW,eAAe,QAAQ,oBAAoB;AAC7E;AAAA,UAAA;AAED,cAAI,KAAK,QAAQ,YAAY,iBAAiB,CAACC,kBAAO,UAAU,KAAK,UAAU,SAAS,KAAK,QAAQ,OAAO,GAAG;AAC9G,mBAAO,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,8BAA8B,KAAK,QAAQ,OAAO,eAAe,QAAQ,GAAG;AACxI;AAAA,UAAA;AAEG,cAAA,eAAe,KAAK,UAAU,SAAS;AACnC,mBAAA,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QAC5G;AAAA,MACD;AAED,YAAM,gBAAgB,MAAM,KAAK,qBAAqB,+BAA+B;AAErF,UAAI,CAAC,eAAe;AACnB,eAAO,KAAK,gCAAgC;AAAA,MAAA,OACtC;AACK,mBAAA,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,cAAc,YAAY,CAAA,CAAE,GAAG;AACnE,cAAA,CAAC,IAAI,OAAO;AACf;AAAA,UAAA;AAED,gBAAM,CAAC,OAAO,GAAG,IAAI,IAAI,MAAM,MAAM,GAAG;AACxC,cAAI,CAAC,OAAO,CAACC,OAAsB,sBAAA,SAAS,KAAK,GAAG;AACnD;AAAA,UAAA;AAGG,cAAA,eAAe,GAAG,MAAM,YAAY;AAChC,mBAAA,KAAK,kBAAkB,IAAI,eAAe,KAAK,IAAI,GAAG,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QAC7G;AAAA,MACD;AAGD,UAAI,OAAO,QAAQ;AACZ,cAAA,GAAG,OAAO,IAAI,CAAM,OAAA,GAAG,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,IAG9C,CACD;AAAA,EAAA;AAED;AAGA,MAAM,iBAAiB,CAAC,QAAgB;AAIvC,SAAO,IAAI,MAAM,4BAA4B,IAAI,CAAC,KAAK;AACxD;;"}
@@ -39,17 +39,12 @@ class VersionChecker {
39
39
  if (!def.image) {
40
40
  continue;
41
41
  }
42
- const [image, version2] = def.image.split(":");
43
- if (!version2 || !contemberDockerImages.includes(image)) {
42
+ const [image, tag] = def.image.split(":");
43
+ if (!tag || !contemberDockerImages.includes(image)) {
44
44
  continue;
45
45
  }
46
- const versionParts = version2.split(/[.-]/);
47
- if (versionParts[versionParts.length - 1] === "debian") {
48
- versionParts.pop();
49
- }
50
- const cliVersionParts = cliVersion.split(/[.-]/).slice(0, versionParts.length);
51
- if (versionParts.join(".") !== cliVersionParts.join(".")) {
52
- errors.push(`Docker service ${name} with image ${image}:${version2} does not match version of CLI ${cliVersion}.`);
46
+ if (extractVersion(tag) !== cliVersion) {
47
+ errors.push(`Docker service ${name} with image ${image}:${tag} does not match version of CLI ${cliVersion}.`);
53
48
  }
54
49
  }
55
50
  }
@@ -62,6 +57,9 @@ If you are really certain about the compatibility, you can disable this version
62
57
  });
63
58
  }
64
59
  }
60
+ const extractVersion = (tag) => {
61
+ return tag.match(/^\d+\.\d+\.\d+(-\w+\.\d+)?/)?.[0] ?? tag;
62
+ };
65
63
  export {
66
64
  VersionChecker
67
65
  };
@@ -1 +1 @@
1
- {"version":3,"file":"VersionChecker.js","sources":["../../../../../packages/cli/src/lib/VersionChecker.ts"],"sourcesContent":["import { join, relative } from 'node:path'\nimport * as semver from 'semver'\nimport { PackageWorkspaceResolver } from '@contember/cli-common'\nimport { DockerComposeManager } from './fs/DockerComposeManager'\nimport { contemberDockerImages } from '../consts'\n\nexport class VersionChecker {\n\tconstructor(\n\t\tprivate readonly version: string,\n\t\tprivate readonly dir: string,\n\t\tprivate readonly packageWorkspaceResolver: PackageWorkspaceResolver,\n\t\tprivate readonly dockerComposeManager: DockerComposeManager,\n\t) {\n\t}\n\n\tcheckVersions = async () => {\n\t\tconst cliVersion = this.version\n\t\tconst packageWorkspace = await this.packageWorkspaceResolver.resolve()\n\n\t\tconst errors: string[] = []\n\n\t\tfor (const packageName of ['@contember/schema', '@contember/schema-definition']) {\n\t\t\tconst installedPackages = await packageWorkspace.findInstalledDependencies(packageName)\n\t\t\tfor (const pckg of installedPackages) {\n\t\t\t\tconst jsonPath = relative(this.dir, join(pckg.defined.pckg.dir, 'package.json'))\n\n\t\t\t\tif (!pckg.installed) {\n\t\t\t\t\terrors.push(`Package ${packageName} defined in ${jsonPath} is not installed.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (pckg.defined.version !== 'workspace:*' && !semver.satisfies(pckg.installed.version, pckg.defined.version)) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match constraint ${pckg.defined.version} defined in ${jsonPath}.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (cliVersion !== pckg.installed.version) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst dockerCompose = await this.dockerComposeManager.tryReadMainDockerComposeConfig()\n\n\t\tif (!dockerCompose) {\n\t\t\terrors.push('docker-compose.yaml not found.')\n\t\t} else {\n\t\t\tfor (const [name, def] of Object.entries(dockerCompose.services ?? {})) {\n\t\t\t\tif (!def.image) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst [image, version] = def.image.split(':')\n\t\t\t\tif (!version || !contemberDockerImages.includes(image)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst versionParts = version.split(/[.-]/)\n\t\t\t\tif (versionParts[versionParts.length - 1] === 'debian') {\n\t\t\t\t\tversionParts.pop()\n\t\t\t\t}\n\t\t\t\tconst cliVersionParts = cliVersion.split(/[.-]/).slice(0, versionParts.length)\n\t\t\t\tif (versionParts.join('.') !== cliVersionParts.join('.')) {\n\t\t\t\t\terrors.push(`Docker service ${name} with image ${image}:${version} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (errors.length) {\n\t\t\tthrow `${errors.map(it => `${it}`).join('\\n')}\n\nPlease make sure all dependencies are up to date.\\nIf you are really certain about the compatibility, you can disable this version check by running the CLI with the CONTEMBER_SKIP_VERSION_CHECK=1 environment variable`\n\t\t}\n\t}\n\n}\n"],"names":["version"],"mappings":";;;;;;AAMO,MAAM,eAAe;AAAA,EAC3B,YACkB,SACA,KACA,0BACA,sBAChB;AAJgB,SAAA,UAAA;AACA,SAAA,MAAA;AACA,SAAA,2BAAA;AACA,SAAA,uBAAA;AAIlB,kBAAA,MAAA,iBAAgB,YAAY;AAC3B,YAAM,aAAa,KAAK;AACxB,YAAM,mBAAmB,MAAM,KAAK,yBAAyB,QAAQ;AAErE,YAAM,SAAmB,CAAC;AAE1B,iBAAW,eAAe,CAAC,qBAAqB,8BAA8B,GAAG;AAChF,cAAM,oBAAoB,MAAM,iBAAiB,0BAA0B,WAAW;AACtF,mBAAW,QAAQ,mBAAmB;AAC/B,gBAAA,WAAW,SAAS,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,KAAK,cAAc,CAAC;AAE3E,cAAA,CAAC,KAAK,WAAW;AACpB,mBAAO,KAAK,WAAW,WAAW,eAAe,QAAQ,oBAAoB;AAC7E;AAAA,UAAA;AAED,cAAI,KAAK,QAAQ,YAAY,iBAAiB,CAAC,OAAO,UAAU,KAAK,UAAU,SAAS,KAAK,QAAQ,OAAO,GAAG;AAC9G,mBAAO,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,8BAA8B,KAAK,QAAQ,OAAO,eAAe,QAAQ,GAAG;AACxI;AAAA,UAAA;AAEG,cAAA,eAAe,KAAK,UAAU,SAAS;AACnC,mBAAA,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QAC5G;AAAA,MACD;AAED,YAAM,gBAAgB,MAAM,KAAK,qBAAqB,+BAA+B;AAErF,UAAI,CAAC,eAAe;AACnB,eAAO,KAAK,gCAAgC;AAAA,MAAA,OACtC;AACK,mBAAA,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,cAAc,YAAY,CAAA,CAAE,GAAG;AACnE,cAAA,CAAC,IAAI,OAAO;AACf;AAAA,UAAA;AAED,gBAAM,CAAC,OAAOA,QAAO,IAAI,IAAI,MAAM,MAAM,GAAG;AAC5C,cAAI,CAACA,YAAW,CAAC,sBAAsB,SAAS,KAAK,GAAG;AACvD;AAAA,UAAA;AAEK,gBAAA,eAAeA,SAAQ,MAAM,MAAM;AACzC,cAAI,aAAa,aAAa,SAAS,CAAC,MAAM,UAAU;AACvD,yBAAa,IAAI;AAAA,UAAA;AAEZ,gBAAA,kBAAkB,WAAW,MAAM,MAAM,EAAE,MAAM,GAAG,aAAa,MAAM;AAC7E,cAAI,aAAa,KAAK,GAAG,MAAM,gBAAgB,KAAK,GAAG,GAAG;AAClD,mBAAA,KAAK,kBAAkB,IAAI,eAAe,KAAK,IAAIA,QAAO,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QACjH;AAAA,MACD;AAGD,UAAI,OAAO,QAAQ;AACZ,cAAA,GAAG,OAAO,IAAI,CAAM,OAAA,GAAG,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,IAG9C,CACD;AAAA,EAAA;AAED;"}
1
+ {"version":3,"file":"VersionChecker.js","sources":["../../../../../packages/cli/src/lib/VersionChecker.ts"],"sourcesContent":["import { join, relative } from 'node:path'\nimport * as semver from 'semver'\nimport { PackageWorkspaceResolver } from '@contember/cli-common'\nimport { DockerComposeManager } from './fs/DockerComposeManager'\nimport { contemberDockerImages } from '../consts'\n\nexport class VersionChecker {\n\tconstructor(\n\t\tprivate readonly version: string,\n\t\tprivate readonly dir: string,\n\t\tprivate readonly packageWorkspaceResolver: PackageWorkspaceResolver,\n\t\tprivate readonly dockerComposeManager: DockerComposeManager,\n\t) {\n\t}\n\n\tcheckVersions = async () => {\n\t\tconst cliVersion = this.version\n\t\tconst packageWorkspace = await this.packageWorkspaceResolver.resolve()\n\n\t\tconst errors: string[] = []\n\n\t\tfor (const packageName of ['@contember/schema', '@contember/schema-definition']) {\n\t\t\tconst installedPackages = await packageWorkspace.findInstalledDependencies(packageName)\n\t\t\tfor (const pckg of installedPackages) {\n\t\t\t\tconst jsonPath = relative(this.dir, join(pckg.defined.pckg.dir, 'package.json'))\n\n\t\t\t\tif (!pckg.installed) {\n\t\t\t\t\terrors.push(`Package ${packageName} defined in ${jsonPath} is not installed.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (pckg.defined.version !== 'workspace:*' && !semver.satisfies(pckg.installed.version, pckg.defined.version)) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match constraint ${pckg.defined.version} defined in ${jsonPath}.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (cliVersion !== pckg.installed.version) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst dockerCompose = await this.dockerComposeManager.tryReadMainDockerComposeConfig()\n\n\t\tif (!dockerCompose) {\n\t\t\terrors.push('docker-compose.yaml not found.')\n\t\t} else {\n\t\t\tfor (const [name, def] of Object.entries(dockerCompose.services ?? {})) {\n\t\t\t\tif (!def.image) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst [image, tag] = def.image.split(':')\n\t\t\t\tif (!tag || !contemberDockerImages.includes(image)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif (extractVersion(tag) !== cliVersion) {\n\t\t\t\t\terrors.push(`Docker service ${name} with image ${image}:${tag} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (errors.length) {\n\t\t\tthrow `${errors.map(it => `${it}`).join('\\n')}\n\nPlease make sure all dependencies are up to date.\\nIf you are really certain about the compatibility, you can disable this version check by running the CLI with the CONTEMBER_SKIP_VERSION_CHECK=1 environment variable`\n\t\t}\n\t}\n\n}\n\n\nconst extractVersion = (tag: string) => {\n\t// e.g.\n\t// 2.1.0-alpha.15-foo-bar => 2.1.0-alpha.15\n\t// 2.1.0-debian => 2.1.0\n\treturn tag.match(/^\\d+\\.\\d+\\.\\d+(-\\w+\\.\\d+)?/)?.[0] ?? tag\n}\n"],"names":[],"mappings":";;;;;;AAMO,MAAM,eAAe;AAAA,EAC3B,YACkB,SACA,KACA,0BACA,sBAChB;AAJgB,SAAA,UAAA;AACA,SAAA,MAAA;AACA,SAAA,2BAAA;AACA,SAAA,uBAAA;AAIlB,kBAAA,MAAA,iBAAgB,YAAY;AAC3B,YAAM,aAAa,KAAK;AACxB,YAAM,mBAAmB,MAAM,KAAK,yBAAyB,QAAQ;AAErE,YAAM,SAAmB,CAAC;AAE1B,iBAAW,eAAe,CAAC,qBAAqB,8BAA8B,GAAG;AAChF,cAAM,oBAAoB,MAAM,iBAAiB,0BAA0B,WAAW;AACtF,mBAAW,QAAQ,mBAAmB;AAC/B,gBAAA,WAAW,SAAS,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,KAAK,cAAc,CAAC;AAE3E,cAAA,CAAC,KAAK,WAAW;AACpB,mBAAO,KAAK,WAAW,WAAW,eAAe,QAAQ,oBAAoB;AAC7E;AAAA,UAAA;AAED,cAAI,KAAK,QAAQ,YAAY,iBAAiB,CAAC,OAAO,UAAU,KAAK,UAAU,SAAS,KAAK,QAAQ,OAAO,GAAG;AAC9G,mBAAO,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,8BAA8B,KAAK,QAAQ,OAAO,eAAe,QAAQ,GAAG;AACxI;AAAA,UAAA;AAEG,cAAA,eAAe,KAAK,UAAU,SAAS;AACnC,mBAAA,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QAC5G;AAAA,MACD;AAED,YAAM,gBAAgB,MAAM,KAAK,qBAAqB,+BAA+B;AAErF,UAAI,CAAC,eAAe;AACnB,eAAO,KAAK,gCAAgC;AAAA,MAAA,OACtC;AACK,mBAAA,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,cAAc,YAAY,CAAA,CAAE,GAAG;AACnE,cAAA,CAAC,IAAI,OAAO;AACf;AAAA,UAAA;AAED,gBAAM,CAAC,OAAO,GAAG,IAAI,IAAI,MAAM,MAAM,GAAG;AACxC,cAAI,CAAC,OAAO,CAAC,sBAAsB,SAAS,KAAK,GAAG;AACnD;AAAA,UAAA;AAGG,cAAA,eAAe,GAAG,MAAM,YAAY;AAChC,mBAAA,KAAK,kBAAkB,IAAI,eAAe,KAAK,IAAI,GAAG,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QAC7G;AAAA,MACD;AAGD,UAAI,OAAO,QAAQ;AACZ,cAAA,GAAG,OAAO,IAAI,CAAM,OAAA,GAAG,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,IAG9C,CACD;AAAA,EAAA;AAED;AAGA,MAAM,iBAAiB,CAAC,QAAgB;AAIvC,SAAO,IAAI,MAAM,4BAA4B,IAAI,CAAC,KAAK;AACxD;"}
@@ -58,17 +58,12 @@ class VersionChecker {
58
58
  if (!def.image) {
59
59
  continue;
60
60
  }
61
- const [image, version2] = def.image.split(":");
62
- if (!version2 || !consts.contemberDockerImages.includes(image)) {
61
+ const [image, tag] = def.image.split(":");
62
+ if (!tag || !consts.contemberDockerImages.includes(image)) {
63
63
  continue;
64
64
  }
65
- const versionParts = version2.split(/[.-]/);
66
- if (versionParts[versionParts.length - 1] === "debian") {
67
- versionParts.pop();
68
- }
69
- const cliVersionParts = cliVersion.split(/[.-]/).slice(0, versionParts.length);
70
- if (versionParts.join(".") !== cliVersionParts.join(".")) {
71
- errors.push(`Docker service ${name} with image ${image}:${version2} does not match version of CLI ${cliVersion}.`);
65
+ if (extractVersion(tag) !== cliVersion) {
66
+ errors.push(`Docker service ${name} with image ${image}:${tag} does not match version of CLI ${cliVersion}.`);
72
67
  }
73
68
  }
74
69
  }
@@ -81,5 +76,8 @@ If you are really certain about the compatibility, you can disable this version
81
76
  });
82
77
  }
83
78
  }
79
+ const extractVersion = (tag) => {
80
+ return tag.match(/^\d+\.\d+\.\d+(-\w+\.\d+)?/)?.[0] ?? tag;
81
+ };
84
82
  exports.VersionChecker = VersionChecker;
85
83
  //# sourceMappingURL=VersionChecker.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"VersionChecker.cjs","sources":["../../../../../packages/cli/src/lib/VersionChecker.ts"],"sourcesContent":["import { join, relative } from 'node:path'\nimport * as semver from 'semver'\nimport { PackageWorkspaceResolver } from '@contember/cli-common'\nimport { DockerComposeManager } from './fs/DockerComposeManager'\nimport { contemberDockerImages } from '../consts'\n\nexport class VersionChecker {\n\tconstructor(\n\t\tprivate readonly version: string,\n\t\tprivate readonly dir: string,\n\t\tprivate readonly packageWorkspaceResolver: PackageWorkspaceResolver,\n\t\tprivate readonly dockerComposeManager: DockerComposeManager,\n\t) {\n\t}\n\n\tcheckVersions = async () => {\n\t\tconst cliVersion = this.version\n\t\tconst packageWorkspace = await this.packageWorkspaceResolver.resolve()\n\n\t\tconst errors: string[] = []\n\n\t\tfor (const packageName of ['@contember/schema', '@contember/schema-definition']) {\n\t\t\tconst installedPackages = await packageWorkspace.findInstalledDependencies(packageName)\n\t\t\tfor (const pckg of installedPackages) {\n\t\t\t\tconst jsonPath = relative(this.dir, join(pckg.defined.pckg.dir, 'package.json'))\n\n\t\t\t\tif (!pckg.installed) {\n\t\t\t\t\terrors.push(`Package ${packageName} defined in ${jsonPath} is not installed.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (pckg.defined.version !== 'workspace:*' && !semver.satisfies(pckg.installed.version, pckg.defined.version)) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match constraint ${pckg.defined.version} defined in ${jsonPath}.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (cliVersion !== pckg.installed.version) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst dockerCompose = await this.dockerComposeManager.tryReadMainDockerComposeConfig()\n\n\t\tif (!dockerCompose) {\n\t\t\terrors.push('docker-compose.yaml not found.')\n\t\t} else {\n\t\t\tfor (const [name, def] of Object.entries(dockerCompose.services ?? {})) {\n\t\t\t\tif (!def.image) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst [image, version] = def.image.split(':')\n\t\t\t\tif (!version || !contemberDockerImages.includes(image)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst versionParts = version.split(/[.-]/)\n\t\t\t\tif (versionParts[versionParts.length - 1] === 'debian') {\n\t\t\t\t\tversionParts.pop()\n\t\t\t\t}\n\t\t\t\tconst cliVersionParts = cliVersion.split(/[.-]/).slice(0, versionParts.length)\n\t\t\t\tif (versionParts.join('.') !== cliVersionParts.join('.')) {\n\t\t\t\t\terrors.push(`Docker service ${name} with image ${image}:${version} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (errors.length) {\n\t\t\tthrow `${errors.map(it => `${it}`).join('\\n')}\n\nPlease make sure all dependencies are up to date.\\nIf you are really certain about the compatibility, you can disable this version check by running the CLI with the CONTEMBER_SKIP_VERSION_CHECK=1 environment variable`\n\t\t}\n\t}\n\n}\n"],"names":["relative","join","semver","version","contemberDockerImages"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAMO,MAAM,eAAe;AAAA,EAC3B,YACkB,SACA,KACA,0BACA,sBAChB;AAJgB,SAAA,UAAA;AACA,SAAA,MAAA;AACA,SAAA,2BAAA;AACA,SAAA,uBAAA;AAIlB,kBAAA,MAAA,iBAAgB,YAAY;AAC3B,YAAM,aAAa,KAAK;AACxB,YAAM,mBAAmB,MAAM,KAAK,yBAAyB,QAAQ;AAErE,YAAM,SAAmB,CAAC;AAE1B,iBAAW,eAAe,CAAC,qBAAqB,8BAA8B,GAAG;AAChF,cAAM,oBAAoB,MAAM,iBAAiB,0BAA0B,WAAW;AACtF,mBAAW,QAAQ,mBAAmB;AAC/B,gBAAA,WAAWA,UAAAA,SAAS,KAAK,KAAKC,UAAAA,KAAK,KAAK,QAAQ,KAAK,KAAK,cAAc,CAAC;AAE3E,cAAA,CAAC,KAAK,WAAW;AACpB,mBAAO,KAAK,WAAW,WAAW,eAAe,QAAQ,oBAAoB;AAC7E;AAAA,UAAA;AAED,cAAI,KAAK,QAAQ,YAAY,iBAAiB,CAACC,kBAAO,UAAU,KAAK,UAAU,SAAS,KAAK,QAAQ,OAAO,GAAG;AAC9G,mBAAO,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,8BAA8B,KAAK,QAAQ,OAAO,eAAe,QAAQ,GAAG;AACxI;AAAA,UAAA;AAEG,cAAA,eAAe,KAAK,UAAU,SAAS;AACnC,mBAAA,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QAC5G;AAAA,MACD;AAED,YAAM,gBAAgB,MAAM,KAAK,qBAAqB,+BAA+B;AAErF,UAAI,CAAC,eAAe;AACnB,eAAO,KAAK,gCAAgC;AAAA,MAAA,OACtC;AACK,mBAAA,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,cAAc,YAAY,CAAA,CAAE,GAAG;AACnE,cAAA,CAAC,IAAI,OAAO;AACf;AAAA,UAAA;AAED,gBAAM,CAAC,OAAOC,QAAO,IAAI,IAAI,MAAM,MAAM,GAAG;AAC5C,cAAI,CAACA,YAAW,CAACC,OAAsB,sBAAA,SAAS,KAAK,GAAG;AACvD;AAAA,UAAA;AAEK,gBAAA,eAAeD,SAAQ,MAAM,MAAM;AACzC,cAAI,aAAa,aAAa,SAAS,CAAC,MAAM,UAAU;AACvD,yBAAa,IAAI;AAAA,UAAA;AAEZ,gBAAA,kBAAkB,WAAW,MAAM,MAAM,EAAE,MAAM,GAAG,aAAa,MAAM;AAC7E,cAAI,aAAa,KAAK,GAAG,MAAM,gBAAgB,KAAK,GAAG,GAAG;AAClD,mBAAA,KAAK,kBAAkB,IAAI,eAAe,KAAK,IAAIA,QAAO,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QACjH;AAAA,MACD;AAGD,UAAI,OAAO,QAAQ;AACZ,cAAA,GAAG,OAAO,IAAI,CAAM,OAAA,GAAG,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,IAG9C,CACD;AAAA,EAAA;AAED;;"}
1
+ {"version":3,"file":"VersionChecker.cjs","sources":["../../../../../packages/cli/src/lib/VersionChecker.ts"],"sourcesContent":["import { join, relative } from 'node:path'\nimport * as semver from 'semver'\nimport { PackageWorkspaceResolver } from '@contember/cli-common'\nimport { DockerComposeManager } from './fs/DockerComposeManager'\nimport { contemberDockerImages } from '../consts'\n\nexport class VersionChecker {\n\tconstructor(\n\t\tprivate readonly version: string,\n\t\tprivate readonly dir: string,\n\t\tprivate readonly packageWorkspaceResolver: PackageWorkspaceResolver,\n\t\tprivate readonly dockerComposeManager: DockerComposeManager,\n\t) {\n\t}\n\n\tcheckVersions = async () => {\n\t\tconst cliVersion = this.version\n\t\tconst packageWorkspace = await this.packageWorkspaceResolver.resolve()\n\n\t\tconst errors: string[] = []\n\n\t\tfor (const packageName of ['@contember/schema', '@contember/schema-definition']) {\n\t\t\tconst installedPackages = await packageWorkspace.findInstalledDependencies(packageName)\n\t\t\tfor (const pckg of installedPackages) {\n\t\t\t\tconst jsonPath = relative(this.dir, join(pckg.defined.pckg.dir, 'package.json'))\n\n\t\t\t\tif (!pckg.installed) {\n\t\t\t\t\terrors.push(`Package ${packageName} defined in ${jsonPath} is not installed.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (pckg.defined.version !== 'workspace:*' && !semver.satisfies(pckg.installed.version, pckg.defined.version)) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match constraint ${pckg.defined.version} defined in ${jsonPath}.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (cliVersion !== pckg.installed.version) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst dockerCompose = await this.dockerComposeManager.tryReadMainDockerComposeConfig()\n\n\t\tif (!dockerCompose) {\n\t\t\terrors.push('docker-compose.yaml not found.')\n\t\t} else {\n\t\t\tfor (const [name, def] of Object.entries(dockerCompose.services ?? {})) {\n\t\t\t\tif (!def.image) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst [image, tag] = def.image.split(':')\n\t\t\t\tif (!tag || !contemberDockerImages.includes(image)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif (extractVersion(tag) !== cliVersion) {\n\t\t\t\t\terrors.push(`Docker service ${name} with image ${image}:${tag} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (errors.length) {\n\t\t\tthrow `${errors.map(it => `${it}`).join('\\n')}\n\nPlease make sure all dependencies are up to date.\\nIf you are really certain about the compatibility, you can disable this version check by running the CLI with the CONTEMBER_SKIP_VERSION_CHECK=1 environment variable`\n\t\t}\n\t}\n\n}\n\n\nconst extractVersion = (tag: string) => {\n\t// e.g.\n\t// 2.1.0-alpha.15-foo-bar => 2.1.0-alpha.15\n\t// 2.1.0-debian => 2.1.0\n\treturn tag.match(/^\\d+\\.\\d+\\.\\d+(-\\w+\\.\\d+)?/)?.[0] ?? tag\n}\n"],"names":["relative","join","semver","contemberDockerImages"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAMO,MAAM,eAAe;AAAA,EAC3B,YACkB,SACA,KACA,0BACA,sBAChB;AAJgB,SAAA,UAAA;AACA,SAAA,MAAA;AACA,SAAA,2BAAA;AACA,SAAA,uBAAA;AAIlB,kBAAA,MAAA,iBAAgB,YAAY;AAC3B,YAAM,aAAa,KAAK;AACxB,YAAM,mBAAmB,MAAM,KAAK,yBAAyB,QAAQ;AAErE,YAAM,SAAmB,CAAC;AAE1B,iBAAW,eAAe,CAAC,qBAAqB,8BAA8B,GAAG;AAChF,cAAM,oBAAoB,MAAM,iBAAiB,0BAA0B,WAAW;AACtF,mBAAW,QAAQ,mBAAmB;AAC/B,gBAAA,WAAWA,UAAAA,SAAS,KAAK,KAAKC,UAAAA,KAAK,KAAK,QAAQ,KAAK,KAAK,cAAc,CAAC;AAE3E,cAAA,CAAC,KAAK,WAAW;AACpB,mBAAO,KAAK,WAAW,WAAW,eAAe,QAAQ,oBAAoB;AAC7E;AAAA,UAAA;AAED,cAAI,KAAK,QAAQ,YAAY,iBAAiB,CAACC,kBAAO,UAAU,KAAK,UAAU,SAAS,KAAK,QAAQ,OAAO,GAAG;AAC9G,mBAAO,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,8BAA8B,KAAK,QAAQ,OAAO,eAAe,QAAQ,GAAG;AACxI;AAAA,UAAA;AAEG,cAAA,eAAe,KAAK,UAAU,SAAS;AACnC,mBAAA,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QAC5G;AAAA,MACD;AAED,YAAM,gBAAgB,MAAM,KAAK,qBAAqB,+BAA+B;AAErF,UAAI,CAAC,eAAe;AACnB,eAAO,KAAK,gCAAgC;AAAA,MAAA,OACtC;AACK,mBAAA,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,cAAc,YAAY,CAAA,CAAE,GAAG;AACnE,cAAA,CAAC,IAAI,OAAO;AACf;AAAA,UAAA;AAED,gBAAM,CAAC,OAAO,GAAG,IAAI,IAAI,MAAM,MAAM,GAAG;AACxC,cAAI,CAAC,OAAO,CAACC,OAAsB,sBAAA,SAAS,KAAK,GAAG;AACnD;AAAA,UAAA;AAGG,cAAA,eAAe,GAAG,MAAM,YAAY;AAChC,mBAAA,KAAK,kBAAkB,IAAI,eAAe,KAAK,IAAI,GAAG,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QAC7G;AAAA,MACD;AAGD,UAAI,OAAO,QAAQ;AACZ,cAAA,GAAG,OAAO,IAAI,CAAM,OAAA,GAAG,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,IAG9C,CACD;AAAA,EAAA;AAED;AAGA,MAAM,iBAAiB,CAAC,QAAgB;AAIvC,SAAO,IAAI,MAAM,4BAA4B,IAAI,CAAC,KAAK;AACxD;;"}
@@ -39,17 +39,12 @@ class VersionChecker {
39
39
  if (!def.image) {
40
40
  continue;
41
41
  }
42
- const [image, version2] = def.image.split(":");
43
- if (!version2 || !contemberDockerImages.includes(image)) {
42
+ const [image, tag] = def.image.split(":");
43
+ if (!tag || !contemberDockerImages.includes(image)) {
44
44
  continue;
45
45
  }
46
- const versionParts = version2.split(/[.-]/);
47
- if (versionParts[versionParts.length - 1] === "debian") {
48
- versionParts.pop();
49
- }
50
- const cliVersionParts = cliVersion.split(/[.-]/).slice(0, versionParts.length);
51
- if (versionParts.join(".") !== cliVersionParts.join(".")) {
52
- errors.push(`Docker service ${name} with image ${image}:${version2} does not match version of CLI ${cliVersion}.`);
46
+ if (extractVersion(tag) !== cliVersion) {
47
+ errors.push(`Docker service ${name} with image ${image}:${tag} does not match version of CLI ${cliVersion}.`);
53
48
  }
54
49
  }
55
50
  }
@@ -62,6 +57,9 @@ If you are really certain about the compatibility, you can disable this version
62
57
  });
63
58
  }
64
59
  }
60
+ const extractVersion = (tag) => {
61
+ return tag.match(/^\d+\.\d+\.\d+(-\w+\.\d+)?/)?.[0] ?? tag;
62
+ };
65
63
  export {
66
64
  VersionChecker
67
65
  };
@@ -1 +1 @@
1
- {"version":3,"file":"VersionChecker.js","sources":["../../../../../packages/cli/src/lib/VersionChecker.ts"],"sourcesContent":["import { join, relative } from 'node:path'\nimport * as semver from 'semver'\nimport { PackageWorkspaceResolver } from '@contember/cli-common'\nimport { DockerComposeManager } from './fs/DockerComposeManager'\nimport { contemberDockerImages } from '../consts'\n\nexport class VersionChecker {\n\tconstructor(\n\t\tprivate readonly version: string,\n\t\tprivate readonly dir: string,\n\t\tprivate readonly packageWorkspaceResolver: PackageWorkspaceResolver,\n\t\tprivate readonly dockerComposeManager: DockerComposeManager,\n\t) {\n\t}\n\n\tcheckVersions = async () => {\n\t\tconst cliVersion = this.version\n\t\tconst packageWorkspace = await this.packageWorkspaceResolver.resolve()\n\n\t\tconst errors: string[] = []\n\n\t\tfor (const packageName of ['@contember/schema', '@contember/schema-definition']) {\n\t\t\tconst installedPackages = await packageWorkspace.findInstalledDependencies(packageName)\n\t\t\tfor (const pckg of installedPackages) {\n\t\t\t\tconst jsonPath = relative(this.dir, join(pckg.defined.pckg.dir, 'package.json'))\n\n\t\t\t\tif (!pckg.installed) {\n\t\t\t\t\terrors.push(`Package ${packageName} defined in ${jsonPath} is not installed.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (pckg.defined.version !== 'workspace:*' && !semver.satisfies(pckg.installed.version, pckg.defined.version)) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match constraint ${pckg.defined.version} defined in ${jsonPath}.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (cliVersion !== pckg.installed.version) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst dockerCompose = await this.dockerComposeManager.tryReadMainDockerComposeConfig()\n\n\t\tif (!dockerCompose) {\n\t\t\terrors.push('docker-compose.yaml not found.')\n\t\t} else {\n\t\t\tfor (const [name, def] of Object.entries(dockerCompose.services ?? {})) {\n\t\t\t\tif (!def.image) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst [image, version] = def.image.split(':')\n\t\t\t\tif (!version || !contemberDockerImages.includes(image)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst versionParts = version.split(/[.-]/)\n\t\t\t\tif (versionParts[versionParts.length - 1] === 'debian') {\n\t\t\t\t\tversionParts.pop()\n\t\t\t\t}\n\t\t\t\tconst cliVersionParts = cliVersion.split(/[.-]/).slice(0, versionParts.length)\n\t\t\t\tif (versionParts.join('.') !== cliVersionParts.join('.')) {\n\t\t\t\t\terrors.push(`Docker service ${name} with image ${image}:${version} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (errors.length) {\n\t\t\tthrow `${errors.map(it => `${it}`).join('\\n')}\n\nPlease make sure all dependencies are up to date.\\nIf you are really certain about the compatibility, you can disable this version check by running the CLI with the CONTEMBER_SKIP_VERSION_CHECK=1 environment variable`\n\t\t}\n\t}\n\n}\n"],"names":["version"],"mappings":";;;;;;AAMO,MAAM,eAAe;AAAA,EAC3B,YACkB,SACA,KACA,0BACA,sBAChB;AAJgB,SAAA,UAAA;AACA,SAAA,MAAA;AACA,SAAA,2BAAA;AACA,SAAA,uBAAA;AAIlB,kBAAA,MAAA,iBAAgB,YAAY;AAC3B,YAAM,aAAa,KAAK;AACxB,YAAM,mBAAmB,MAAM,KAAK,yBAAyB,QAAQ;AAErE,YAAM,SAAmB,CAAC;AAE1B,iBAAW,eAAe,CAAC,qBAAqB,8BAA8B,GAAG;AAChF,cAAM,oBAAoB,MAAM,iBAAiB,0BAA0B,WAAW;AACtF,mBAAW,QAAQ,mBAAmB;AAC/B,gBAAA,WAAW,SAAS,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,KAAK,cAAc,CAAC;AAE3E,cAAA,CAAC,KAAK,WAAW;AACpB,mBAAO,KAAK,WAAW,WAAW,eAAe,QAAQ,oBAAoB;AAC7E;AAAA,UAAA;AAED,cAAI,KAAK,QAAQ,YAAY,iBAAiB,CAAC,OAAO,UAAU,KAAK,UAAU,SAAS,KAAK,QAAQ,OAAO,GAAG;AAC9G,mBAAO,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,8BAA8B,KAAK,QAAQ,OAAO,eAAe,QAAQ,GAAG;AACxI;AAAA,UAAA;AAEG,cAAA,eAAe,KAAK,UAAU,SAAS;AACnC,mBAAA,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QAC5G;AAAA,MACD;AAED,YAAM,gBAAgB,MAAM,KAAK,qBAAqB,+BAA+B;AAErF,UAAI,CAAC,eAAe;AACnB,eAAO,KAAK,gCAAgC;AAAA,MAAA,OACtC;AACK,mBAAA,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,cAAc,YAAY,CAAA,CAAE,GAAG;AACnE,cAAA,CAAC,IAAI,OAAO;AACf;AAAA,UAAA;AAED,gBAAM,CAAC,OAAOA,QAAO,IAAI,IAAI,MAAM,MAAM,GAAG;AAC5C,cAAI,CAACA,YAAW,CAAC,sBAAsB,SAAS,KAAK,GAAG;AACvD;AAAA,UAAA;AAEK,gBAAA,eAAeA,SAAQ,MAAM,MAAM;AACzC,cAAI,aAAa,aAAa,SAAS,CAAC,MAAM,UAAU;AACvD,yBAAa,IAAI;AAAA,UAAA;AAEZ,gBAAA,kBAAkB,WAAW,MAAM,MAAM,EAAE,MAAM,GAAG,aAAa,MAAM;AAC7E,cAAI,aAAa,KAAK,GAAG,MAAM,gBAAgB,KAAK,GAAG,GAAG;AAClD,mBAAA,KAAK,kBAAkB,IAAI,eAAe,KAAK,IAAIA,QAAO,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QACjH;AAAA,MACD;AAGD,UAAI,OAAO,QAAQ;AACZ,cAAA,GAAG,OAAO,IAAI,CAAM,OAAA,GAAG,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,IAG9C,CACD;AAAA,EAAA;AAED;"}
1
+ {"version":3,"file":"VersionChecker.js","sources":["../../../../../packages/cli/src/lib/VersionChecker.ts"],"sourcesContent":["import { join, relative } from 'node:path'\nimport * as semver from 'semver'\nimport { PackageWorkspaceResolver } from '@contember/cli-common'\nimport { DockerComposeManager } from './fs/DockerComposeManager'\nimport { contemberDockerImages } from '../consts'\n\nexport class VersionChecker {\n\tconstructor(\n\t\tprivate readonly version: string,\n\t\tprivate readonly dir: string,\n\t\tprivate readonly packageWorkspaceResolver: PackageWorkspaceResolver,\n\t\tprivate readonly dockerComposeManager: DockerComposeManager,\n\t) {\n\t}\n\n\tcheckVersions = async () => {\n\t\tconst cliVersion = this.version\n\t\tconst packageWorkspace = await this.packageWorkspaceResolver.resolve()\n\n\t\tconst errors: string[] = []\n\n\t\tfor (const packageName of ['@contember/schema', '@contember/schema-definition']) {\n\t\t\tconst installedPackages = await packageWorkspace.findInstalledDependencies(packageName)\n\t\t\tfor (const pckg of installedPackages) {\n\t\t\t\tconst jsonPath = relative(this.dir, join(pckg.defined.pckg.dir, 'package.json'))\n\n\t\t\t\tif (!pckg.installed) {\n\t\t\t\t\terrors.push(`Package ${packageName} defined in ${jsonPath} is not installed.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (pckg.defined.version !== 'workspace:*' && !semver.satisfies(pckg.installed.version, pckg.defined.version)) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match constraint ${pckg.defined.version} defined in ${jsonPath}.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (cliVersion !== pckg.installed.version) {\n\t\t\t\t\terrors.push(`Package ${packageName}@${pckg.installed.version} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst dockerCompose = await this.dockerComposeManager.tryReadMainDockerComposeConfig()\n\n\t\tif (!dockerCompose) {\n\t\t\terrors.push('docker-compose.yaml not found.')\n\t\t} else {\n\t\t\tfor (const [name, def] of Object.entries(dockerCompose.services ?? {})) {\n\t\t\t\tif (!def.image) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst [image, tag] = def.image.split(':')\n\t\t\t\tif (!tag || !contemberDockerImages.includes(image)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif (extractVersion(tag) !== cliVersion) {\n\t\t\t\t\terrors.push(`Docker service ${name} with image ${image}:${tag} does not match version of CLI ${cliVersion}.`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (errors.length) {\n\t\t\tthrow `${errors.map(it => `${it}`).join('\\n')}\n\nPlease make sure all dependencies are up to date.\\nIf you are really certain about the compatibility, you can disable this version check by running the CLI with the CONTEMBER_SKIP_VERSION_CHECK=1 environment variable`\n\t\t}\n\t}\n\n}\n\n\nconst extractVersion = (tag: string) => {\n\t// e.g.\n\t// 2.1.0-alpha.15-foo-bar => 2.1.0-alpha.15\n\t// 2.1.0-debian => 2.1.0\n\treturn tag.match(/^\\d+\\.\\d+\\.\\d+(-\\w+\\.\\d+)?/)?.[0] ?? tag\n}\n"],"names":[],"mappings":";;;;;;AAMO,MAAM,eAAe;AAAA,EAC3B,YACkB,SACA,KACA,0BACA,sBAChB;AAJgB,SAAA,UAAA;AACA,SAAA,MAAA;AACA,SAAA,2BAAA;AACA,SAAA,uBAAA;AAIlB,kBAAA,MAAA,iBAAgB,YAAY;AAC3B,YAAM,aAAa,KAAK;AACxB,YAAM,mBAAmB,MAAM,KAAK,yBAAyB,QAAQ;AAErE,YAAM,SAAmB,CAAC;AAE1B,iBAAW,eAAe,CAAC,qBAAqB,8BAA8B,GAAG;AAChF,cAAM,oBAAoB,MAAM,iBAAiB,0BAA0B,WAAW;AACtF,mBAAW,QAAQ,mBAAmB;AAC/B,gBAAA,WAAW,SAAS,KAAK,KAAK,KAAK,KAAK,QAAQ,KAAK,KAAK,cAAc,CAAC;AAE3E,cAAA,CAAC,KAAK,WAAW;AACpB,mBAAO,KAAK,WAAW,WAAW,eAAe,QAAQ,oBAAoB;AAC7E;AAAA,UAAA;AAED,cAAI,KAAK,QAAQ,YAAY,iBAAiB,CAAC,OAAO,UAAU,KAAK,UAAU,SAAS,KAAK,QAAQ,OAAO,GAAG;AAC9G,mBAAO,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,8BAA8B,KAAK,QAAQ,OAAO,eAAe,QAAQ,GAAG;AACxI;AAAA,UAAA;AAEG,cAAA,eAAe,KAAK,UAAU,SAAS;AACnC,mBAAA,KAAK,WAAW,WAAW,IAAI,KAAK,UAAU,OAAO,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QAC5G;AAAA,MACD;AAED,YAAM,gBAAgB,MAAM,KAAK,qBAAqB,+BAA+B;AAErF,UAAI,CAAC,eAAe;AACnB,eAAO,KAAK,gCAAgC;AAAA,MAAA,OACtC;AACK,mBAAA,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,cAAc,YAAY,CAAA,CAAE,GAAG;AACnE,cAAA,CAAC,IAAI,OAAO;AACf;AAAA,UAAA;AAED,gBAAM,CAAC,OAAO,GAAG,IAAI,IAAI,MAAM,MAAM,GAAG;AACxC,cAAI,CAAC,OAAO,CAAC,sBAAsB,SAAS,KAAK,GAAG;AACnD;AAAA,UAAA;AAGG,cAAA,eAAe,GAAG,MAAM,YAAY;AAChC,mBAAA,KAAK,kBAAkB,IAAI,eAAe,KAAK,IAAI,GAAG,kCAAkC,UAAU,GAAG;AAAA,UAAA;AAAA,QAC7G;AAAA,MACD;AAGD,UAAI,OAAO,QAAQ;AACZ,cAAA,GAAG,OAAO,IAAI,CAAM,OAAA,GAAG,EAAE,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,MAAA;AAAA,IAG9C,CACD;AAAA,EAAA;AAED;AAGA,MAAM,iBAAiB,CAAC,QAAgB;AAIvC,SAAO,IAAI,MAAM,4BAA4B,IAAI,CAAC,KAAK;AACxD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"VersionChecker.d.ts","sourceRoot":"","sources":["../../../src/lib/VersionChecker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAGhE,qBAAa,cAAc;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBAHpB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,wBAAwB,EAAE,wBAAwB,EAClD,oBAAoB,EAAE,oBAAoB;IAI5D,aAAa,sBAqDZ;CAED"}
1
+ {"version":3,"file":"VersionChecker.d.ts","sourceRoot":"","sources":["../../../src/lib/VersionChecker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAGhE,qBAAa,cAAc;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBAHpB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,wBAAwB,EAAE,wBAAwB,EAClD,oBAAoB,EAAE,oBAAoB;IAI5D,aAAa,sBAiDZ;CAED"}