diff --git a/.github/workflows/build-options.json b/.github/workflows/build-options.json index 5264ed0..b167129 100644 --- a/.github/workflows/build-options.json +++ b/.github/workflows/build-options.json @@ -9,7 +9,6 @@ "5.6.7f1 (e80cc3114ac1)", "2017.4.40f1", "2018", - "2018.4", "2019.x", "2020.*", "2021.3.x", diff --git a/package-lock.json b/package-lock.json index 4b37b8a..c54603e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@rage-against-the-pixel/unity-cli", - "version": "1.7.2", + "version": "1.8.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@rage-against-the-pixel/unity-cli", - "version": "1.7.2", + "version": "1.8.0", "license": "MIT", "dependencies": { "@electron/asar": "^4.0.1", @@ -17,7 +17,7 @@ "source-map-support": "^0.5.21", "tar": "^7.5.2", "update-notifier": "^7.3.1", - "yaml": "^2.8.1" + "yaml": "^2.8.2" }, "bin": { "unity-cli": "dist/cli.js" @@ -28,7 +28,7 @@ "@types/semver": "^7.7.1", "@types/update-notifier": "^6.0.8", "jest": "^30.2.0", - "ts-jest": "^29.4.5", + "ts-jest": "^29.4.6", "ts-node": "^10.9.2", "typescript": "^5.9.3" } @@ -2269,9 +2269,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.32", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.32.tgz", - "integrity": "sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw==", + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.4.tgz", + "integrity": "sha512-ZCQ9GEWl73BVm8bu5Fts8nt7MHdbt5vY9bP6WGnUh+r3l8M7CgfyTlwsgCbMC66BNxPr6Xoce3j66Ms5YUQTNA==", "dev": true, "license": "Apache-2.0", "bin": { @@ -2325,9 +2325,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", - "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -2345,11 +2345,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.25", - "caniuse-lite": "^1.0.30001754", - "electron-to-chromium": "^1.5.249", + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", - "update-browserslist-db": "^1.1.4" + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -2411,9 +2411,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001757", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz", - "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==", + "version": "1.0.30001759", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz", + "integrity": "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==", "dev": true, "funding": [ { @@ -2811,9 +2811,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.262", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.262.tgz", - "integrity": "sha512-NlAsMteRHek05jRUxUR0a5jpjYq9ykk6+kO0yRaMi5moe7u0fVIOeQ3Y30A8dIiWFBNUoQGi1ljb1i5VtS9WQQ==", + "version": "1.5.266", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.266.tgz", + "integrity": "sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==", "dev": true, "license": "ISC" }, @@ -4719,9 +4719,9 @@ } }, "node_modules/ky": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.0.tgz", - "integrity": "sha512-Rczb6FMM6JT0lvrOlP5WUOCB7s9XKxzwgErzhKlKde1bEV90FXplV1o87fpt4PU/asJFiqjYJxAJyzJhcrxOsQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/ky/-/ky-1.14.1.tgz", + "integrity": "sha512-hYje4L9JCmpEQBtudo+v52X5X8tgWXUYyPcxKSuxQNboqufecl9VMWjGiucAFH060AwPXHZuH+WB2rrqfkmafw==", "license": "MIT", "engines": { "node": ">=18" @@ -5145,10 +5145,10 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "license": "ISC", + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", + "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", + "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" } @@ -5757,9 +5757,9 @@ } }, "node_modules/ts-jest": { - "version": "29.4.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.5.tgz", - "integrity": "sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==", + "version": "29.4.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.6.tgz", + "integrity": "sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==", "dev": true, "license": "MIT", "dependencies": { @@ -5968,9 +5968,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", + "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", "dev": true, "funding": [ { @@ -6365,15 +6365,18 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { diff --git a/package.json b/package.json index e3cd30f..5477c18 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@rage-against-the-pixel/unity-cli", - "version": "1.7.2", + "version": "1.8.0", "description": "A command line utility for the Unity Game Engine.", "author": "RageAgainstThePixel", "license": "MIT", @@ -56,7 +56,7 @@ "source-map-support": "^0.5.21", "tar": "^7.5.2", "update-notifier": "^7.3.1", - "yaml": "^2.8.1" + "yaml": "^2.8.2" }, "devDependencies": { "@types/jest": "^30.0.0", @@ -64,8 +64,8 @@ "@types/semver": "^7.7.1", "@types/update-notifier": "^6.0.8", "jest": "^30.2.0", - "ts-jest": "^29.4.5", + "ts-jest": "^29.4.6", "ts-node": "^10.9.2", "typescript": "^5.9.3" } -} +} \ No newline at end of file diff --git a/src/unity-version.ts b/src/unity-version.ts index d67766a..dae0ff8 100644 --- a/src/unity-version.ts +++ b/src/unity-version.ts @@ -271,10 +271,6 @@ export class UnityVersion { let candidates = UnityVersion.filterFinalReleases(releases, normalizedMajor, requestedMinor, channels); - if (!candidates.length && minorToken === '0') { - candidates = UnityVersion.filterFinalReleases(releases, normalizedMajor, undefined, channels); - } - Logger.instance.debug(`Found ${candidates.length} candidate(s) for version pattern ${version}`); candidates.forEach(release => { Logger.instance.debug(` - ${release.version}`); diff --git a/tests/unity-version.test.ts b/tests/unity-version.test.ts index baba947..c0e8a4c 100644 --- a/tests/unity-version.test.ts +++ b/tests/unity-version.test.ts @@ -62,6 +62,68 @@ describe('UnityVersion', () => { expect(UnityVersion.compare(match, older)).toBeGreaterThan(0); }); + it('finds latest final release when only major is provided', () => { + const available = [ + '2021.3.5f2', + '2021.3.0f1', + '2020.3.7f1', + '2021.2.9f1' + ]; + + const version = new UnityVersion('2021'); + const match = version.findMatch(available); + + expect(match.version).toBe('2021.3.5f2'); + }); + + it('finds latest minor when using wildcard', () => { + const available = [ + '2021.2.9f1', + '2021.3.5f2', + '2021.3.4f1' + ]; + + const version = new UnityVersion('2021.*'); + const match = version.findMatch(available); + + expect(match.version).toBe('2021.3.5f2'); + }); + + it('prefers newer patch channels when allowed', () => { + const available = [ + '2021.3.4f1', + '2021.3.5p2' + ]; + + const version = new UnityVersion('2021.3'); + const match = version.findMatch(available, ['f', 'p']); + + expect(match.version).toBe('2021.3.5p2'); + }); + + it('returns original when no channel candidates exist', () => { + const available = [ + '2021.3.5f2' + ]; + + const version = new UnityVersion('2021.3.x'); + const match = version.findMatch(available, ['a']); + + expect(match.version).toBe('2021.3.x'); + }); + + it('keeps explicit minor requests when no matching releases are available', () => { + const available = [ + '6000.3.0f1' + ]; + + const version = new UnityVersion('6000.0.x'); + const match = version.findMatch(available); + + // When only other minors exist (e.g., 6000.3.*), do not fall back to them. + expect(match.version).toBe('6000.0.x'); + }); + it('evaluates caret compatibility with satisfies', () => { const baseline = new UnityVersion('2021.3.5f1'); const compatible = new UnityVersion('2021.4.0f1');