diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b4013135..9b6c06b0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,28 @@ * **semver:** upgrade to version 7.5.4 ([f7c4837](https://github.com/nodkz/mongodb-memory-server/commit/f7c483743fdc90ed1eda0fec901d5673d14827f5)) * **tslib:** upgrade to version 2.6.1 ([db16d8f](https://github.com/nodkz/mongodb-memory-server/commit/db16d8fcc6bd9a6735a3f1414d1d3f4420dd9890)) +## [8.14.0-beta.1](https://github.com/nodkz/mongodb-memory-server/compare/v8.13.0...v8.14.0-beta.1) (2023-07-07) + +Note: this beta was not actually merged into 8.14.0, use 8.15.0 instead + +### Features + +* **MongoBinaryDownloadUrl:** add ability to overwrite distro used ([826c72e](https://github.com/nodkz/mongodb-memory-server/commit/826c72e1d56d409bc760949797d62fd10dc8eaf8)), closes [#753](https://github.com/nodkz/mongodb-memory-server/issues/753) + + +### Dependencies + +* **@typescript-eslint/*:** upgrade to version 5.61.0 ([121f0fc](https://github.com/nodkz/mongodb-memory-server/commit/121f0fcfb06919dbe3a778db520031f394aa4ea7)) +* **eslint:** upgrade to version 8.44.0 ([f7487b1](https://github.com/nodkz/mongodb-memory-server/commit/f7487b1027eead475f3e1057d2990a624e2d7ba4)) +* **semver:** upgrade to version 7.5.3 ([3498c33](https://github.com/nodkz/mongodb-memory-server/commit/3498c33929b54aa9d09c63021d4d2393401ce5f7)) +* **tslib:** upgrade to version 2.6.0 ([2cbd3dc](https://github.com/nodkz/mongodb-memory-server/commit/2cbd3dc6d68154295bc572dce2e5b120c629ddb1)) + + +### Style + +* **MongoBinaryDownload:** fix comment ([615b681](https://github.com/nodkz/mongodb-memory-server/commit/615b681138dc4e23bb44c94c88fa413268eb26a5)) + + ## [8.13.0](https://github.com/nodkz/mongodb-memory-server/compare/v8.12.2...v8.13.0) (2023-06-09) diff --git a/docs/api/config-options.md b/docs/api/config-options.md index 92200c6e9..df57f011e 100644 --- a/docs/api/config-options.md +++ b/docs/api/config-options.md @@ -49,6 +49,22 @@ Valid Options are `x64`, `arm64`, ~~`ia32`~~([will be removed in 9.0](../guides/ [See here for what versions are available for what architectures](https://www.mongodb.com/download-center/community/releases/archive) +### DISTRO + +| Environment Variable | PackageJson | +| :------------------: | :---------: | +| `MONGOMS_DISTRO` | `distro` | + +Option `DISTRO` is used to overwrite the Distribution used instead of the detected one. + +Only works for when [`PLATFORM`](#platform) (automatic or manually set) is `linux`. + +Format is `distro-release`, both distro and release need to be always defined. + +Example: `ubuntu-18.04` + +[See here for what versions are available for what distros](https://www.mongodb.com/download-center/community/releases/archive) + ### VERSION | Environment Variable | PackageJson | diff --git a/package.json b/package.json index 3b00195bd..a046e7cba 100644 --- a/package.json +++ b/package.json @@ -16,8 +16,8 @@ "@semantic-release/release-notes-generator": "9.0.3", "@types/jest": "^28.1.8", "@types/node": "~14.14.45", - "@typescript-eslint/eslint-plugin": "5.59.9", - "@typescript-eslint/parser": "5.59.9", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "commitlint": "16.2.4", "conventional-changelog-conventionalcommits": "5.0.0", "cross-env": "7.0.3", diff --git a/packages/mongodb-memory-server-core/src/util/MongoBinaryDownload.ts b/packages/mongodb-memory-server-core/src/util/MongoBinaryDownload.ts index 846d34595..1fb28dfbb 100644 --- a/packages/mongodb-memory-server-core/src/util/MongoBinaryDownload.ts +++ b/packages/mongodb-memory-server-core/src/util/MongoBinaryDownload.ts @@ -34,7 +34,7 @@ export class MongoBinaryDownload { dlProgress: MongoBinaryDownloadProgress; _downloadingUrl?: string; - /**These options are kind of raw, they are not run through DryMongoBinary.generateOptions */ + /** These options are kind of raw, they are not run through DryMongoBinary.generateOptions */ binaryOpts: Required; // TODO: for an major version, remove the compat get/set diff --git a/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts b/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts index 3394cd1d2..e0721f98c 100644 --- a/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts +++ b/packages/mongodb-memory-server-core/src/util/MongoBinaryDownloadUrl.ts @@ -5,6 +5,7 @@ import * as semver from 'semver'; import { isNullOrUndefined } from './utils'; import { URL } from 'url'; import { + GenericMMSError, KnownVersionIncompatibilityError, UnknownArchitectureError, UnknownPlatformError, @@ -161,10 +162,14 @@ export class MongoBinaryDownloadUrl implements MongoBinaryDownloadUrlOpts { // the highest version for "i686" seems to be 3.3 if (this.arch !== 'i686') { - if (!this.os) { + if (!this.os && resolveConfig(ResolveConfigVariables.DISTRO)) { this.os = await getOS(); } + if (resolveConfig(ResolveConfigVariables.DISTRO)) { + this.overwriteDistro(); + } + osString = this.getLinuxOSVersionString(this.os as LinuxOS); } @@ -180,6 +185,38 @@ export class MongoBinaryDownloadUrl implements MongoBinaryDownloadUrlOpts { return name; } + /** + * Parse and apply config option DISTRO + */ + protected overwriteDistro() { + const env = resolveConfig(ResolveConfigVariables.DISTRO); + + if (isNullOrUndefined(env)) { + return; + } + + const split = env.split('-'); + + const distro = split[0]; + const release = split[1]; + + if (isNullOrUndefined(distro)) { + throw new GenericMMSError('Expected DISTRO option to have a distro like "ubuntu-18.04"'); + } + + if (isNullOrUndefined(release)) { + throw new GenericMMSError( + 'Expected DISTRO option to have a release like "ubuntu-18.04" (delimited by "-")' + ); + } + + this.os = { + os: 'linux', + dist: distro, + release: release, + } as LinuxOS; + } + /** * Get the version string (with distro) * @param os LinuxOS Object diff --git a/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts b/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts index 4d45fb7dd..4e868c70e 100644 --- a/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts +++ b/packages/mongodb-memory-server-core/src/util/__tests__/MongoBinaryDownloadUrl.test.ts @@ -1766,6 +1766,41 @@ describe('MongoBinaryDownloadUrl', () => { expect(du.getLegacyVersionString).toHaveBeenCalledTimes(1); expect(ret).toBe(''); }); + + describe('wrap config options', () => { + const originalEnv = process.env; + + beforeEach(() => { + process.env = originalEnv; + }); + + afterAll(() => { + process.env = originalEnv; + }); + + it('should apply config option DISTRO', async () => { + const du = new MongoBinaryDownloadUrl({ + platform: 'linux', + arch: 'x64', + version: '5.0.0', + os: { + os: 'linux', + dist: 'unknown', + release: '0', + codename: 'unknown', + }, + }); + // @ts-expect-error "overwriteDistro" is protected + jest.spyOn(du, 'overwriteDistro'); + + process.env[envName(ResolveConfigVariables.DISTRO)] = 'ubuntu-18.04'; + + expect((await du.getArchiveNameLinux()).includes('ubuntu1804')).toBeTruthy(); + + // @ts-expect-error "overwriteDistro" is protected + expect(du.overwriteDistro).toBeCalledTimes(1); + }); + }); }); describe('translateArch()', () => { diff --git a/packages/mongodb-memory-server-core/src/util/resolveConfig.ts b/packages/mongodb-memory-server-core/src/util/resolveConfig.ts index 1f4a8d3fd..d47ad87f6 100644 --- a/packages/mongodb-memory-server-core/src/util/resolveConfig.ts +++ b/packages/mongodb-memory-server-core/src/util/resolveConfig.ts @@ -26,6 +26,7 @@ export enum ResolveConfigVariables { SYSTEM_BINARY_VERSION_CHECK = 'SYSTEM_BINARY_VERSION_CHECK', USE_ARCHIVE_NAME_FOR_BINARY_NAME = 'USE_ARCHIVE_NAME_FOR_BINARY_NAME', MAX_REDIRECTS = 'MAX_REDIRECTS', + DISTRO = 'DISTRO', } /** The Prefix for Environmental values */ diff --git a/yarn.lock b/yarn.lock index e3e19b12d..667bf98aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2198,88 +2198,88 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz#2604cfaf2b306e120044f901e20c8ed926debf15" - integrity sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA== +"@typescript-eslint/eslint-plugin@5.61.0": + version "5.61.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz#a1a5290cf33863b4db3fb79350b3c5275a7b1223" + integrity sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g== dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.59.9" - "@typescript-eslint/type-utils" "5.59.9" - "@typescript-eslint/utils" "5.59.9" + "@typescript-eslint/scope-manager" "5.61.0" + "@typescript-eslint/type-utils" "5.61.0" + "@typescript-eslint/utils" "5.61.0" debug "^4.3.4" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" natural-compare-lite "^1.4.0" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.9.tgz#a85c47ccdd7e285697463da15200f9a8561dd5fa" - integrity sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ== +"@typescript-eslint/parser@5.61.0": + version "5.61.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.61.0.tgz#7fbe3e2951904bb843f8932ebedd6e0635bffb70" + integrity sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg== dependencies: - "@typescript-eslint/scope-manager" "5.59.9" - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/typescript-estree" "5.59.9" + "@typescript-eslint/scope-manager" "5.61.0" + "@typescript-eslint/types" "5.61.0" + "@typescript-eslint/typescript-estree" "5.61.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz#eadce1f2733389cdb58c49770192c0f95470d2f4" - integrity sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ== +"@typescript-eslint/scope-manager@5.61.0": + version "5.61.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz#b670006d069c9abe6415c41f754b1b5d949ef2b2" + integrity sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw== dependencies: - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/visitor-keys" "5.59.9" + "@typescript-eslint/types" "5.61.0" + "@typescript-eslint/visitor-keys" "5.61.0" -"@typescript-eslint/type-utils@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz#53bfaae2e901e6ac637ab0536d1754dfef4dafc2" - integrity sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q== +"@typescript-eslint/type-utils@5.61.0": + version "5.61.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz#e90799eb2045c4435ea8378cb31cd8a9fddca47a" + integrity sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg== dependencies: - "@typescript-eslint/typescript-estree" "5.59.9" - "@typescript-eslint/utils" "5.59.9" + "@typescript-eslint/typescript-estree" "5.61.0" + "@typescript-eslint/utils" "5.61.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.9.tgz#3b4e7ae63718ce1b966e0ae620adc4099a6dcc52" - integrity sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw== +"@typescript-eslint/types@5.61.0": + version "5.61.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.61.0.tgz#e99ff11b5792d791554abab0f0370936d8ca50c0" + integrity sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ== -"@typescript-eslint/typescript-estree@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz#6bfea844e468427b5e72034d33c9fffc9557392b" - integrity sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA== +"@typescript-eslint/typescript-estree@5.61.0": + version "5.61.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz#4c7caca84ce95bb41aa585d46a764bcc050b92f3" + integrity sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw== dependencies: - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/visitor-keys" "5.59.9" + "@typescript-eslint/types" "5.61.0" + "@typescript-eslint/visitor-keys" "5.61.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.9.tgz#adee890107b5ffe02cd46fdaa6c2125fb3c6c7c4" - integrity sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg== +"@typescript-eslint/utils@5.61.0": + version "5.61.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.61.0.tgz#5064838a53e91c754fffbddd306adcca3fe0af36" + integrity sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.59.9" - "@typescript-eslint/types" "5.59.9" - "@typescript-eslint/typescript-estree" "5.59.9" + "@typescript-eslint/scope-manager" "5.61.0" + "@typescript-eslint/types" "5.61.0" + "@typescript-eslint/typescript-estree" "5.61.0" eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.59.9": - version "5.59.9" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz#9f86ef8e95aca30fb5a705bb7430f95fc58b146d" - integrity sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q== +"@typescript-eslint/visitor-keys@5.61.0": + version "5.61.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz#c79414fa42158fd23bd2bb70952dc5cdbb298140" + integrity sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg== dependencies: - "@typescript-eslint/types" "5.59.9" + "@typescript-eslint/types" "5.61.0" eslint-visitor-keys "^3.3.0" JSONStream@^1.0.4: @@ -3549,7 +3549,16 @@ eslint@8.46.0: strip-ansi "^6.0.1" text-table "^0.2.0" -espree@^9.6.0, espree@^9.6.1: +espree@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f" + integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +espree@^9.6.1: version "9.6.1" resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== @@ -4057,11 +4066,6 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6"