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