Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DO-22315 Create .github/workflows/branching.yml in release #13

Merged
merged 1 commit into from
May 15, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 132 additions & 0 deletions .github/workflows/branching.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: Check Branch Name and Verify JIRA ID on JIRA Board

on:
pull_request:
types: [opened, edited, synchronize, reopened, closed]

jobs:
run-script:
permissions: write-all
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Extract base branch name
shell: bash
run: echo "branch=${GITHUB_BASE_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT
id: base_branch
- name: Base branch
run: |
echo ${{ steps.base_branch.outputs.branch }}

- name: Extract source branch name
shell: bash
run: echo "branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" >> $GITHUB_OUTPUT
id: extract_branch

- uses: winterjung/split@v2
id: split
with:
msg: ${{ steps.extract_branch.outputs.branch }}
separator: '-'
maxsplit: 1

- name: Action PR title
if: ${{ (steps.split.outputs._0 == 'feature') || (steps.split.outputs._0 == 'hotfix') }}
uses: deepakputhraya/action-pr-title@master
with:
regex: '\w+\-\w+\-\d+' # Regex the title should match.
allowed_prefixes: '' # title should start with the given prefix
disallowed_prefixes: '' # title should not start with the given prefix
prefix_case_sensitive: true # title prefix are case insensitive
min_length: 5 # Min length of the title
max_length: 200 # Max length of the title
github_token: ${{ github.token }} # Default: ${{ github.token }}

- name: Branch matcher
if: github.event.pull_request.merged != true
run: |
if [ "${{ steps.base_branch.outputs.branch }}" == "${{ github.event.repository.default_branch }}" ]
then
if [ "${{ steps.split.outputs._0 }}" == 'release' ] || [ "${{ steps.split.outputs._0 }}" == 'hotfix' ]
then
echo "This pull request targets the default branch branching strategy."
else
echo "Please check your default branch branching strategy again!"
exit 1
fi
elif [[ "${{ steps.base_branch.outputs.branch }}" == release ]]
then
if [ ${{ steps.split.outputs._0 }} == 'feature' ] || [ ${{ steps.split.outputs._0 }} == "${{ github.event.repository.default_branch }}" ]
then
echo "This pull request targets the Release branching strategy."
else
echo "Please check your Release branch branching strategy again!"
exit 1
fi
else
echo "NO conditions matched please check again!!"
exit 1
fi
- name: Verify JIRA ID on JIRA Board
if: ${{ (steps.split.outputs._0 == 'feature') || (steps.split.outputs._0 == 'hotfix') }}
id: verify-jira-id
run: |
jira_id="${{ steps.split.outputs._1 }}"
jira_url="https://bharatpe.atlassian.net/rest/api/2/issue/$jira_id"
# Replace 'your-jira-username' and 'your-jira-api-token' with your Jira credentials
curl -u ${{ secrets.JIRA_USERNAME }}:${{ secrets.JIRA_TOKEN }} -X GET -H "Content-Type: application/json" $jira_url | grep -q 'id' && echo "JIRA ID $jira_id exists on the JIRA board" || (echo "JIRA ID $jira_id does not exist on the JIRA board" && exit 1)
- name: Add tag in default branch
if: ${{ steps.base_branch.outputs.branch == github.event.repository.default_branch && github.event.pull_request.merged == true }}
run: |
echo "Tagging The following Repo"
# Fetch latest semantic versioning tag
latest_semantic_tag=$(curl -s -H "Authorization: token ${{ secrets.github_token }}" "https://api.github.com/repos/bharatpe/${{ github.event.repository.name }}/tags" | jq -r '.[].name | select(test("^v[0-9]+\\.[0-9]+\\.[0-9]+$"))' | sort -V | tail -1)

# If no semantic versioning tags are found, fallback to non-semantic versioning tags
if [ -z "$latest_semantic_tag" ]; then
latest_non_semantic_tag=$(curl -s -H "Authorization: token ${{ secrets.github_token }}" "https://api.github.com/repos/bharatpe/${{ github.event.repository.name }}/tags" | jq -r '.[].name | select(test("^v[0-9]+$"))' | sort -V | tail -1)
latest_tag=$latest_non_semantic_tag
else
latest_tag=$latest_semantic_tag
fi
current_version="$latest_tag"
echo "Current version: $current_version"
IFS='.' read -r -a version_parts <<< "$current_version"

commit_messages=$(git log -n 3)
commit_messagesTrim=$(echo "$commit_messages" | head -c 500)
git config --global user.email "[email protected]"
git config --global user.name "deployerbharatpe"
pattern="^v[0-9]+\.[0-9]+\.[0-9]+$"
if [ -z "$current_version" ] || ! [[ "$current_version" =~ $pattern ]]; then
echo "This Repo Has Not Been Tagged Yet Starting Tagging The Following Repo"
git tag -a v0.1.0 -m "$commit_messagesTrim"
git push origin v0.1.0
else
x=${version_parts[0]}
y=${version_parts[1]}
z=${version_parts[2]}
echo "$x"
echo "$y"
echo "$z"
if [[ "${{ steps.split.outputs._0 }}" == 'hotfix' ]]; then
z=$((z+1))
elif [ "$y" -lt 9 ]; then

y=$((y+1))
z=0
else

x=$((x+1))
y=0
fi
# Create the new tag
new_version="$x.$y.$z"
echo "$new_version"
echo "This Repo is already Tagging, Old_Tag : $current_tag Incrementing it to New_Tag : $new_version"
git tag -a $new_version -m "$commit_messagesTrim"
git push origin $new_version
fi
Loading