Skip to content

Commit 57b6c9e

Browse files
authored
HPCC4J-638 Jirabot Merge improve tag regex filtering (#752)
Signed-off-by: James McMullan [email protected]
1 parent 906ab19 commit 57b6c9e

File tree

1 file changed

+53
-10
lines changed

1 file changed

+53
-10
lines changed

.github/workflows/JirabotMerge.yml

+53-10
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ jobs:
4747
PULL_REQUEST_TITLE : ${{ github.event.pull_request.title }}
4848
PULL_REQUEST_AUTHOR_NAME : ${{ github.event.pull_request.user.login }}
4949
PULL_URL: ${{ github.event.pull_request.html_url }}
50+
PROJECT_CONFIG: ${{ vars.PROJECT_CONFIG}}
5051
COMMENTS_URL: ${{ github.event.pull_request.comments_url }}
5152
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5253
BRANCH_NAME: ${{ github.ref_name }}
@@ -95,9 +96,40 @@ jobs:
9596
major, minor, point = map(int, version)
9697
return f"{major}.{minor}.{point}"
9798
98-
def generateFixVersionList(jira, projectName, branchName):
99-
cmd = "git tag --list 'hpcc4j_*-release' --sort=-v:refname | head -n 1"
100-
latestVersion = getTagVersionForCmd(cmd)
99+
def createReleaseTagPattern(projectConfig, major = None, minor = None, point = None):
100+
releaseTagPrefix = projectConfig.get('tagPrefix')
101+
releaseTagPostfix = projectConfig.get('tagPostfix')
102+
103+
if releaseTagPrefix is None or releaseTagPostfix is None:
104+
print('Error: PROJECT_CONFIG is missing required fields: tagPrefix and/or tagPostfix')
105+
sys.exit(1)
106+
107+
releaseTagPattern = releaseTagPrefix
108+
if major is not None:
109+
releaseTagPattern += str(major) + '\.'
110+
else:
111+
releaseTagPattern += '[0-9]+\.'
112+
113+
if minor is not None:
114+
releaseTagPattern += str(minor) + '\.'
115+
else:
116+
releaseTagPattern += '[0-9]+\.'
117+
118+
if point is not None:
119+
releaseTagPattern += str(point) + '(-[0-9]+)?'
120+
else:
121+
releaseTagPattern += '[0-9]+(-[0-9]+)?'
122+
123+
releaseTagPattern += releaseTagPostfix + '$'
124+
125+
return releaseTagPattern
126+
127+
def getLatestSemVer(projectConfig, major = None, minor = None, point = None):
128+
cmd = "git tag --list --sort=-v:refname | grep -E '" + createReleaseTagPattern(projectConfig, major, minor, point) + "' | head -n 1"
129+
return getTagVersionForCmd(cmd)
130+
131+
def generateFixVersionList(jira, projectConfig, projectName, branchName):
132+
latestVersion = getLatestSemVer(projectConfig)
101133
102134
# If we are merging into master we assume it is going into the next minor release
103135
fixVersions = []
@@ -110,14 +142,12 @@ jobs:
110142
branchVersion = extractVersion(branchVersionMatch.group(1))
111143
112144
# Get latest release in branch
113-
findLatestBranchVer = "git tag --list 'hpcc4j_" + str(branchVersion[0]) + "." + str(branchVersion[1]) + "*-release' --sort=-v:refname | head -n 1"
114-
latestBranchVer = getTagVersionForCmd(findLatestBranchVer)
145+
latestBranchVer = getLatestSemVer(projectConfig, branchVersion[0], branchVersion[1])
115146
116147
curMajor = branchVersion[0]
117148
latestMajor = latestVersion[0]
118149
while curMajor <= latestMajor:
119-
cmd = "git tag --list 'hpcc4j_" + str(curMajor) + "*-release' --sort=-v:refname | head -n 1"
120-
latestVersionInMajor = getTagVersionForCmd(cmd)
150+
latestVersionInMajor = getLatestSemVer(projectConfig, curMajor)
121151
122152
curMinor = 0
123153
if curMajor == branchVersion[0]:
@@ -126,7 +156,7 @@ jobs:
126156
latestMinor = latestVersionInMajor[1]
127157
128158
while curMinor <= latestMinor:
129-
latestPointInMinor = getTagVersionForCmd("git tag --list 'hpcc4j_" + str(curMajor) + "." + str(curMinor) + "*-release' --sort=-v:refname | head -n 1")
159+
latestPointInMinor = getLatestSemVer(projectConfig, curMajor, curMinor)
130160
fixVersions.append(buildVersionString([latestPointInMinor[0], latestPointInMinor[1], latestPointInMinor[2] + 2]))
131161
curMinor += 2
132162
curMajor += 1
@@ -214,7 +244,20 @@ jobs:
214244
github_token = os.environ['GITHUB_TOKEN']
215245
branch_name = os.environ['BRANCH_NAME']
216246
comments_url = os.environ['COMMENTS_URL']
217-
project_name = 'HPCC4J'
247+
248+
projectConfig = json.loads(os.environ['PROJECT_CONFIG'])
249+
if not isinstance(projectConfig, dict):
250+
print('Error: PROJECT_CONFIG is not a valid JSON object, aborting.')
251+
sys.exit(1)
252+
253+
if 'tagPrefix' not in projectConfig or 'tagPostfix' not in projectConfig:
254+
print('Error: PROJECT_CONFIG is missing required fields: tagPrefix and/or tagPostfix')
255+
sys.exit(1)
256+
257+
project_name = projectConfig.get('projectName')
258+
if project_name is None:
259+
print('Error: PROJECT_CONFIG is missing required field: projectName')
260+
sys.exit(1)
218261
219262
result = ''
220263
issuem = re.search("(" + project_name + ")-[0-9]+", title, re.IGNORECASE)
@@ -230,7 +273,7 @@ jobs:
230273
231274
result = 'Jirabot Action Result:\n'
232275
233-
fixVersions = generateFixVersionList(jira, project_name, branch_name)
276+
fixVersions = generateFixVersionList(jira, projectConfig, project_name, branch_name)
234277
result += resolveIssue(jira, project_name, issue, fixVersions)
235278
jira.issue_add_comment(issue_name, result)
236279

0 commit comments

Comments
 (0)