From 1f0247dd78490d57ce6e3fec9a48c769413bbad8 Mon Sep 17 00:00:00 2001 From: santiagosayshey Date: Fri, 28 Jun 2024 08:14:44 +0930 Subject: [PATCH] feature: Set issue status to "In Development" on branch creation --- .github/workflows/new-branch-created.yml | 99 ++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 .github/workflows/new-branch-created.yml diff --git a/.github/workflows/new-branch-created.yml b/.github/workflows/new-branch-created.yml new file mode 100644 index 0000000..e06ce15 --- /dev/null +++ b/.github/workflows/new-branch-created.yml @@ -0,0 +1,99 @@ +name: Set Issue to In Development on Branch Creation + +on: + create: + branches: + - '*' + +jobs: + update-issue-status: + runs-on: ubuntu-latest + steps: + - name: Extract issue number from branch name + id: extract-issue-number + run: | + BRANCH_NAME="${GITHUB_REF##*/}" + if [[ "$BRANCH_NAME" =~ ^([0-9]+)- ]]; then + ISSUE_NUMBER="${BASH_REMATCH[1]}" + echo "ISSUE_NUMBER=$ISSUE_NUMBER" >> $GITHUB_ENV + else + echo "No issue number found in branch name." + exit 1 + fi + + - name: Get project data + env: + GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }} + ORGANIZATION: Dictionarry-Hub + PROJECT_NUMBER: 1 + run: | + gh api graphql -f query=' + query($org: String!, $number: Int!) { + organization(login: $org){ + projectV2(number: $number) { + id + fields(first:20) { + nodes { + ... on ProjectV2Field { + id + name + } + ... on ProjectV2SingleSelectField { + id + name + options { + id + name + } + } + } + } + } + } + }' -f org=$ORGANIZATION -F number=$PROJECT_NUMBER > project_data.json + + echo 'PROJECT_ID='$(jq '.data.organization.projectV2.id' project_data.json) >> $GITHUB_ENV + echo 'STATUS_FIELD_ID='$(jq '.data.organization.projectV2.fields.nodes[] | select(.name== "Status") | .id' project_data.json) >> $GITHUB_ENV + echo 'IN_DEVELOPMENT_OPTION_ID='$(jq '.data.organization.projectV2.fields.nodes[] | select(.name== "Status") | .options[] | select(.name=="In Development") |.id' project_data.json) >> $GITHUB_ENV + + - name: Set issue status to "In Development" + env: + GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }} + PROJECT_ID: ${{ env.PROJECT_ID }} + ISSUE_NUMBER: ${{ env.ISSUE_NUMBER }} + STATUS_FIELD_ID: ${{ env.STATUS_FIELD_ID }} + IN_DEVELOPMENT_OPTION_ID: ${{ env.IN_DEVELOPMENT_OPTION_ID }} + run: | + # Get the content ID of the issue + ISSUE_NODE_ID=$(gh api graphql -f query=' + query($repository: String!, $owner: String!, $number: Int!) { + repository(name: $repository, owner: $owner) { + issue(number: $number) { + id + } + } + }' -f repository="${{ github.repository }}" -f owner="${{ github.repository_owner.login }}" -f number=$ISSUE_NUMBER --jq '.data.repository.issue.id') + echo "ISSUE_NODE_ID=$ISSUE_NODE_ID" + + # Set the status to "In Development" + result=$(gh api graphql -f query=' + mutation ( + $project: ID! + $item: ID! + $status_field: ID! + $status_value: String! + ) { + updateProjectV2ItemFieldValue(input: { + projectId: $project + itemId: $item + fieldId: $status_field + value: { + singleSelectOptionId: $status_value + } + }) { + projectV2Item { + id + } + } + }' -f project=$PROJECT_ID -f item=$ISSUE_NODE_ID -f status_field=$STATUS_FIELD_ID -f status_value=$IN_DEVELOPMENT_OPTION_ID) + echo "Set status result: $result"