1*753557f6STomasz Sapeta/**
2*753557f6STomasz Sapeta * Copyright (c) Meta Platforms, Inc. and affiliates.
3*753557f6STomasz Sapeta *
4*753557f6STomasz Sapeta * This source code is licensed under the MIT license found in the
5*753557f6STomasz Sapeta * LICENSE file in the root directory of this source tree.
6*753557f6STomasz Sapeta *
7*753557f6STomasz Sapeta * @format
8*753557f6STomasz Sapeta */
9*753557f6STomasz Sapeta
10*753557f6STomasz Sapetaconst {exec} = require('shelljs');
11*753557f6STomasz Sapeta
12*753557f6STomasz Sapetaconst VERSION_REGEX = /^v?((\d+)\.(\d+)\.(\d+)(?:-(.+))?)$/;
13*753557f6STomasz Sapeta
14*753557f6STomasz Sapetafunction parseVersion(versionStr) {
15*753557f6STomasz Sapeta  const match = versionStr.match(VERSION_REGEX);
16*753557f6STomasz Sapeta  if (!match) {
17*753557f6STomasz Sapeta    throw new Error(
18*753557f6STomasz Sapeta      `You must pass a correctly formatted version; couldn't parse ${versionStr}`,
19*753557f6STomasz Sapeta    );
20*753557f6STomasz Sapeta  }
21*753557f6STomasz Sapeta  const [, version, major, minor, patch, prerelease] = match;
22*753557f6STomasz Sapeta  return {
23*753557f6STomasz Sapeta    version,
24*753557f6STomasz Sapeta    major,
25*753557f6STomasz Sapeta    minor,
26*753557f6STomasz Sapeta    patch,
27*753557f6STomasz Sapeta    prerelease,
28*753557f6STomasz Sapeta  };
29*753557f6STomasz Sapeta}
30*753557f6STomasz Sapeta
31*753557f6STomasz Sapetafunction isReleaseBranch(branch) {
32*753557f6STomasz Sapeta  return branch.endsWith('-stable');
33*753557f6STomasz Sapeta}
34*753557f6STomasz Sapeta
35*753557f6STomasz Sapetafunction getBranchName() {
36*753557f6STomasz Sapeta  return exec('git rev-parse --abbrev-ref HEAD', {
37*753557f6STomasz Sapeta    silent: true,
38*753557f6STomasz Sapeta  }).stdout.trim();
39*753557f6STomasz Sapeta}
40*753557f6STomasz Sapeta
41*753557f6STomasz Sapetafunction isTaggedLatest(commitSha) {
42*753557f6STomasz Sapeta  return (
43*753557f6STomasz Sapeta    exec(`git rev-list -1 latest | grep ${commitSha}`, {
44*753557f6STomasz Sapeta      silent: true,
45*753557f6STomasz Sapeta    }).stdout.trim() === commitSha
46*753557f6STomasz Sapeta  );
47*753557f6STomasz Sapeta}
48*753557f6STomasz Sapeta
49*753557f6STomasz Sapetamodule.exports = {
50*753557f6STomasz Sapeta  getBranchName,
51*753557f6STomasz Sapeta  isTaggedLatest,
52*753557f6STomasz Sapeta  parseVersion,
53*753557f6STomasz Sapeta  isReleaseBranch,
54*753557f6STomasz Sapeta};
55