Skip to content

Commit

Permalink
Extract version parsing from release script
Browse files Browse the repository at this point in the history
Summary: Changelog: [Internal] - extract logic for parsing version in bump-oss-version and add tests

Reviewed By: cortinico

Differential Revision: D32196238

fbshipit-source-id: 6ea7af3d282eea1d876118f056bca94a151e6182
  • Loading branch information
Luna Wei committed Nov 10, 2021
1 parent d08397a commit 8a67aaa
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 8 deletions.
39 changes: 39 additions & 0 deletions scripts/__tests__/version-utils-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/

const {parseVersion} = require('../version-utils');

describe('version-utils', () => {
describe('parseVersion', () => {
it('should throw error if invalid match', () => {
function testInvalidVersion() {
parseVersion('<invalid version>');
}
expect(testInvalidVersion).toThrowErrorMatchingInlineSnapshot(
`"You must pass a correctly formatted version; couldn't parse <invalid version>"`,
);
});

it('should parse pre-release version with .', () => {
const {major, minor, patch, prerelease} = parseVersion('0.66.0-rc.4');
expect(major).toBe('0');
expect(minor).toBe('66');
expect(patch).toBe('0');
expect(prerelease).toBe('rc.4');
});

it('should parse stable version', () => {
const {major, minor, patch, prerelease} = parseVersion('0.66.0');
expect(major).toBe('0');
expect(minor).toBe('66');
expect(patch).toBe('0');
expect(prerelease).toBeUndefined();
});
});
});
18 changes: 10 additions & 8 deletions scripts/bump-oss-version.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
const fs = require('fs');
const {cat, echo, exec, exit, sed} = require('shelljs');
const yargs = require('yargs');
const {parseVersion} = require('./version-utils');

let argv = yargs
.option('r', {
Expand Down Expand Up @@ -70,15 +71,16 @@ if (!nightlyBuild) {
}
}

// Generate version files to detect mismatches between JS and native.
let match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/);
if (!match) {
echo(
`You must pass a correctly formatted version; couldn't parse ${version}`,
);
let major,
minor,
patch,
prerelease = -1;
try {
({major, minor, patch, prerelease} = parseVersion(version));
} catch (e) {
echo(e.message);
exit(1);
}
let [, major, minor, patch, prerelease] = match;

fs.writeFileSync(
'ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java',
Expand Down Expand Up @@ -211,7 +213,7 @@ if (!nightlyBuild) {
exec(`git push ${remote} v${version}`);

// Tag latest if doing stable release
if (version.indexOf('rc') === -1) {
if (prerelease == null) {
exec('git tag -d latest');
exec(`git push ${remote} :latest`);
exec('git tag latest');
Expand Down
28 changes: 28 additions & 0 deletions scripts/version-utils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/

function parseVersion(version) {
const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/);
if (!match) {
throw new Error(
`You must pass a correctly formatted version; couldn't parse ${version}`,
);
}
const [, major, minor, patch, prerelease] = match;
return {
major,
minor,
patch,
prerelease,
};
}

module.exports = {
parseVersion,
};

0 comments on commit 8a67aaa

Please sign in to comment.