2021-10-06 19:44:48 +02:00
|
|
|
const semver = require('semver');
|
|
|
|
const { version } = require('../../package.json');
|
|
|
|
|
2021-10-25 18:57:30 +02:00
|
|
|
/**
|
|
|
|
* The distribution this build is intended for.
|
|
|
|
*
|
|
|
|
* This should be kept in-sync with the `BuildType` map in `shared/constants/app.js`.
|
|
|
|
*/
|
|
|
|
const BuildType = {
|
2021-10-06 19:44:48 +02:00
|
|
|
beta: 'beta',
|
|
|
|
flask: 'flask',
|
|
|
|
main: 'main',
|
|
|
|
};
|
|
|
|
|
Rationalize build system arguments (#12047)
This rationalizes how arguments are passed to and parsed by the build system. To accomplish this, everything that isn't an environment variable from `.metamaskrc` or our CI environment is now passed as an argument on the command line.
Of such arguments, the `entryTask` is still expected as a positional argument in the first position (i.e. `process.argv[2]`), but everything else must be passed as a named argument. We use `minimist` to parse the arguments, and set defaults to preserve existing behavior.
Arguments are parsed in a new function, `parseArgv`, in `development/build/index.js`. They are assigned to environment variables where convenient, and otherwise returned from `parseArgv` to be passed to other functions invoked in the same file.
This change is motivated by our previous inconsistent handling of arguments to the build system, which will grow increasingly problematic as the build system grows in complexity. (Which it will very shortly, as we introduce Flask builds.)
Miscellaneous changes:
- Adds a build system readme at `development/build/README.md`
- Removes the `beta` package script. Now, we can instead call: `yarn dist --build-type beta`
- Fixes the casing of some log messages and reorders some parameters in the build system
2021-09-09 21:44:57 +02:00
|
|
|
/**
|
2021-10-06 19:44:48 +02:00
|
|
|
* Map the current version to a format that is compatible with each browser.
|
|
|
|
*
|
|
|
|
* The given version number is assumed to be a SemVer version number. Additionally, if the version
|
|
|
|
* has a prerelease component, it is assumed to have the format "<build type>.<build version",
|
|
|
|
* where the build version is a positive integer.
|
|
|
|
*
|
|
|
|
* @param {string[]} platforms - A list of browsers to generate versions for.
|
|
|
|
* @returns {Object} An object with the browser as the key and the browser-specific version object
|
|
|
|
* as the value. For example, the version `9.6.0-beta.1` would return the object
|
2022-01-03 15:00:13 +01:00
|
|
|
* `{ firefox: { version: '9.6.0.beta1' }, chrome: { version: '9.6.0.1', version_name: '9.6.0-beta.1' } }`.
|
Rationalize build system arguments (#12047)
This rationalizes how arguments are passed to and parsed by the build system. To accomplish this, everything that isn't an environment variable from `.metamaskrc` or our CI environment is now passed as an argument on the command line.
Of such arguments, the `entryTask` is still expected as a positional argument in the first position (i.e. `process.argv[2]`), but everything else must be passed as a named argument. We use `minimist` to parse the arguments, and set defaults to preserve existing behavior.
Arguments are parsed in a new function, `parseArgv`, in `development/build/index.js`. They are assigned to environment variables where convenient, and otherwise returned from `parseArgv` to be passed to other functions invoked in the same file.
This change is motivated by our previous inconsistent handling of arguments to the build system, which will grow increasingly problematic as the build system grows in complexity. (Which it will very shortly, as we introduce Flask builds.)
Miscellaneous changes:
- Adds a build system readme at `development/build/README.md`
- Removes the `beta` package script. Now, we can instead call: `yarn dist --build-type beta`
- Fixes the casing of some log messages and reorders some parameters in the build system
2021-09-09 21:44:57 +02:00
|
|
|
*/
|
2021-10-06 19:44:48 +02:00
|
|
|
function getBrowserVersionMap(platforms) {
|
|
|
|
const major = semver.major(version);
|
|
|
|
const minor = semver.minor(version);
|
|
|
|
const patch = semver.patch(version);
|
|
|
|
const prerelease = semver.prerelease(version);
|
|
|
|
|
|
|
|
let buildType;
|
|
|
|
let buildVersion;
|
|
|
|
if (prerelease) {
|
|
|
|
if (prerelease.length !== 2) {
|
|
|
|
throw new Error(`Invalid prerelease version: '${prerelease.join('.')}'`);
|
|
|
|
}
|
|
|
|
[buildType, buildVersion] = prerelease;
|
|
|
|
if (!String(buildVersion).match(/^\d+$/u)) {
|
|
|
|
throw new Error(`Invalid prerelease build version: '${buildVersion}'`);
|
2022-01-03 14:59:57 +01:00
|
|
|
} else if (![BuildType.beta, BuildType.flask].includes(buildType)) {
|
2021-10-06 19:44:48 +02:00
|
|
|
throw new Error(`Invalid prerelease build type: ${buildType}`);
|
|
|
|
}
|
|
|
|
}
|
2021-09-08 22:08:23 +02:00
|
|
|
|
|
|
|
return platforms.reduce((platformMap, platform) => {
|
2021-10-06 19:44:48 +02:00
|
|
|
const versionParts = [major, minor, patch];
|
|
|
|
const browserSpecificVersion = {};
|
|
|
|
if (prerelease) {
|
|
|
|
if (platform === 'firefox') {
|
2022-01-03 17:18:10 +01:00
|
|
|
versionParts[2] = `${versionParts[2]}${buildType}${buildVersion}`;
|
2021-10-06 19:44:48 +02:00
|
|
|
} else {
|
|
|
|
versionParts.push(buildVersion);
|
2022-01-03 15:00:13 +01:00
|
|
|
browserSpecificVersion.version_name = version;
|
2021-10-06 19:44:48 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
browserSpecificVersion.version = versionParts.join('.');
|
|
|
|
platformMap[platform] = browserSpecificVersion;
|
2021-09-08 22:08:23 +02:00
|
|
|
return platformMap;
|
|
|
|
}, {});
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
2021-10-25 18:57:30 +02:00
|
|
|
BuildType,
|
2021-10-06 19:44:48 +02:00
|
|
|
getBrowserVersionMap,
|
2021-09-08 22:08:23 +02:00
|
|
|
};
|