Skip to content

Commit

Permalink
change to python
Browse files Browse the repository at this point in the history
  • Loading branch information
LukasSielski committed Sep 13, 2024
1 parent 65953d1 commit db1a4e6
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 28 deletions.
33 changes: 6 additions & 27 deletions .github/workflows/actions/ado_tag/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,42 +4,21 @@ inputs:
gh-token:
description: GitHub token necessary for interacting with GitHub CLI
required: true
repository:
description: Repsoitory name in form of OWNER/REPOSITORY_NAME
required: true
commit-sha:
description: Commit SHA by which related PR is searched for AB# tag
required: true
azure-pat:
description: PAT
required: true
deploy_env:
description: Environment to which changes were deployed
required: true
runs:
using: composite
steps:
- name: Get PR's body for commit identified by ${{ inputs.commit-sha }} SHA
id: get-pr-body
env:
- env:
GH_TOKEN: ${{ inputs.gh-token }}
run: |
PRBODY=$(gh pr list --json body --repo ${{ inputs.repository }} --state merged --search ${{ inputs.commit-sha }} --jq '.[].body')
echo "PRs body: $PRBODY"
echo "PRBODY=${PRBODY}" >> $GITHUB_ENV
shell: bash
- name: Extract work item reference number from PR's body
id: extract-reference-number
run: |
reference_num=$(echo $PRBODY | sed -n "s/^.*AB#\([0-9]*\).*$/\1/p")
if [ -z "$reference_num" ]
then
echo "Reference number not found!"
exit 1
else
echo "Reference number is $reference_num"
echo "REFERENCE=${reference_num}" >> $GITHUB_ENV
fi
AZURE_DEVOPS_EXT_PAT: ${{ inputs.azure-pat }}
shell: bash
- name: Add env tag for workitem
id: tag-workitem
run: |
echo "Going to add tag ${{ inputs.deploy_env }} to a work item identified by $REFERENCE number."
shell: bash
python /home/runner/work/workflows_tests/workflows_tests/scripts/script.py --commit-sha ${{ inputs.commit-sha }} --deploy_env ${{ inputs.deploy_env }}
4 changes: 3 additions & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,7 @@ jobs:
with:
gh-token: ${{ secrets.GITHUB_TOKEN }}
repository: ${{ github.repository }}
commit-sha: ${{ github.event.after }}
# commit-sha: ${{ github.event.after }}
commit-sha: 65953d1e6d491254ed704b80072d165ada95052f
azure-pat: ${{ secrets.ADO_PAT }}
deploy_env: DEV
65 changes: 65 additions & 0 deletions scripts/script.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import argparse
import subprocess
import json
import re

def constant(f):
def fset(self, value):
raise TypeError
def fget(self):
return f()
return property(fget, fset)

class _Const(object):
@constant
def GET_PR_DETAILS_CLI_COMMAND() -> str:
return 'gh pr list --json body --state merged --search {commit_sha}'
@constant
def ADO_TAG_PATTERN() -> re.Pattern:
return r"AB#\d{1}"
@constant
def ADO_TAGGING_COMMAND() -> str:
return 'az boards work-item update --id {work_item_id} --org https://dev.azure.com/lukaszadamsielski0187 --fields "System.Tags={deploy_env}" --output json'

CONST = _Const()

def parseArguments():
parser = argparse.ArgumentParser(description="Utility to tag ADO workitem with deployment environemnt", exit_on_error=False)
parser.add_argument('--commit-sha', type=str, required=True, dest='commit_sha')
parser.add_argument('--deploy_env', type=str, required=True, dest='deploy_env')
return parser.parse_args()

def extractWorkItemIdFromPR(args):
prDataSubprocessResponse = subprocess.run(
CONST.GET_PR_DETAILS_CLI_COMMAND.format(commit_sha = args.commit_sha),
capture_output=True, shell=True, text=True)

if prDataSubprocessResponse.returncode != 0:
raise Exception('Failed to retrieve PR body for commit identified by {} SHA! Reason: {}'.format(args.commit_sha, prDataSubprocessResponse.stderr))

prBody = json.loads(prDataSubprocessResponse.stdout)[0]['body']
adoTagsFromPrBody = re.findall(CONST.ADO_TAG_PATTERN, prBody)

if len(adoTagsFromPrBody) != 1:
raise Exception('Could not retrieve ADO tag from PR body or there is more than one!')

return adoTagsFromPrBody[0].split('#')[1]

def tagAdoWorkItem(workItemId: str, args):
deploymentEnv = args.deploy_env

adoTaggingSubprocessResponse = subprocess.run(
CONST.ADO_TAGGING_COMMAND.format(work_item_id = workItemId, deploy_env = deploymentEnv),
capture_output=True, shell=True, text=True)

if adoTaggingSubprocessResponse.returncode != 0:
raise Exception('Failed to tag ADO work item identified by id [{}] with deployment env [{}]! Reason: {}'.format(workItemId, deploymentEnv, adoTaggingSubprocessResponse.stderr))

print('Successfully tagged work item identified by id [{}] with deployment env [{}].'.format(workItemId, deploymentEnv))

def main():
args = parseArguments()
tagAdoWorkItem(extractWorkItemIdFromPR(args), args)

if __name__ == '__main__':
main()
1 change: 1 addition & 0 deletions test200.txt
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
haha
s2

0 comments on commit db1a4e6

Please sign in to comment.