diff --git a/src/UserConfig.js b/src/UserConfig.js index e088151cc..56535ec8e 100644 --- a/src/UserConfig.js +++ b/src/UserConfig.js @@ -80,7 +80,11 @@ class UserConfig { } versionCheck(expected) { - if (!semver.satisfies(pkg.version, expected)) { + if ( + !semver.satisfies(pkg.version, expected, { + includePrerelease: true, + }) + ) { throw new UserConfigError( `This project requires the Eleventy version to match '${expected}' but found ${pkg.version}. Use \`npm update @11ty/eleventy -g\` to upgrade the eleventy global or \`npm update @11ty/eleventy --save\` to upgrade your local project version.` ); diff --git a/test/SemverCheckTest.js b/test/SemverCheckTest.js new file mode 100644 index 000000000..0ed16cb3d --- /dev/null +++ b/test/SemverCheckTest.js @@ -0,0 +1,49 @@ +const test = require("ava"); +const semver = require("semver"); + +test("Satisfies sanity checks with beta/canary", (t) => { + t.true( + semver.satisfies("1.0.0-beta.1", ">= 0.7.0", { + includePrerelease: true, + }), + "1.0 Beta is valid for 0.x" + ); + + t.true( + semver.satisfies("1.0.0-canary.1", ">= 0.7.0", { + includePrerelease: true, + }), + "1.0 Canary is valid for 0.x" + ); + + t.true( + semver.satisfies("1.0.0-beta.1", ">= 0.7.0", { + includePrerelease: true, + }), + "1.0 Beta is valid for 0.x" + ); + + t.true( + semver.satisfies("1.0.0", ">= 0.7.0", { + includePrerelease: true, + }), + "1.0 is valid for 0.x" + ); + + // keep canary around, it won’t have the `includePrerelease` option in `UserConfig->versionCheck` + t.true( + semver.satisfies("1.0.0", ">=0.7 || >=1.0.0-canary", { + includePrerelease: true, + }) + ); + t.true( + semver.satisfies("1.0.0-beta.1", ">=0.7 || >=1.0.0-canary", { + includePrerelease: true, + }) + ); + t.true( + semver.satisfies("1.0.0-canary.1", ">=0.7 || >=1.0.0-canary", { + includePrerelease: true, + }) + ); +});