From d6df1e0aa3ac1d3f2bf4d482bce0c1e7adced12f Mon Sep 17 00:00:00 2001 From: santiagosayshey Date: Wed, 3 Jul 2024 23:04:27 +0930 Subject: [PATCH] workflow: added workflows to add issues to project / change to indevelopment on branch creation --- .github/workflows/add-issue-to-project.yml | 129 +++++++++++++++++++++ .github/workflows/new-branch-created.yml | 114 ++++++++++++++++++ 2 files changed, 243 insertions(+) create mode 100644 .github/workflows/add-issue-to-project.yml create mode 100644 .github/workflows/new-branch-created.yml diff --git a/.github/workflows/add-issue-to-project.yml b/.github/workflows/add-issue-to-project.yml new file mode 100644 index 0000000..cbd2cdf --- /dev/null +++ b/.github/workflows/add-issue-to-project.yml @@ -0,0 +1,129 @@ +name: Add Issue to Project + +on: + issues: + types: [opened] + +jobs: + add-to-project: + name: Add issue to project + runs-on: ubuntu-latest + steps: + - name: Add to Project + id: add-to-project + uses: actions/add-to-project@v0.5.0 + with: + project-url: https://github.com/orgs/Dictionarry-Hub/projects/1 + github-token: ${{ secrets.ADD_TO_PROJECT_PAT }} + + - name: Get project item ID + id: get-project-item-id + env: + GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }} + PROJECT_ID: "PVT_kwDOCjbMFM4AjuUh" + ISSUE_NUMBER: ${{ github.event.issue.number }} + run: | + echo "Fetching project item ID for issue number: $ISSUE_NUMBER" + item_id=$(gh api graphql -f query=' + query($project:ID!) { + node(id: $project) { + ... on ProjectV2 { + items(first: 100) { + nodes { + id + content { + ... on Issue { + number + } + } + } + } + } + } + }' -f project=$PROJECT_ID --jq ".data.node.items.nodes[] | select(.content.number == $ISSUE_NUMBER) | .id" -F number=$ISSUE_NUMBER) + if [ -z "$item_id" ]; then + echo "Error: Project item ID not found for issue number $ISSUE_NUMBER" + exit 1 + else + echo "Project item ID found: $item_id" + echo "PROJECT_ITEM_ID=$item_id" >> $GITHUB_OUTPUT + fi + + - name: Set component, type, and status + env: + GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }} + PROJECT_ITEM_ID: ${{ steps.get-project-item-id.outputs.PROJECT_ITEM_ID }} + run: | + echo "Setting fields for Project Item ID: ${PROJECT_ITEM_ID}" + + # Set component to "Database" + result=$(gh api graphql -f query=' + mutation($project:ID!, $item:ID!, $fieldId:ID!, $value:String!) { + updateProjectV2ItemFieldValue(input: { + projectId: $project + itemId: $item + fieldId: $fieldId + value: { + singleSelectOptionId: $value + } + }) { + projectV2Item { + id + } + } + }' -f project="PVT_kwDOCjbMFM4AjuUh" -f item="${PROJECT_ITEM_ID}" -f fieldId="PVTSSF_lADOCjbMFM4AjuUhzgcCr_E" -f value="64e29a2c") + echo "Set component result: $result" + + # Set status to "Backlog" + result=$(gh api graphql -f query=' + mutation($project:ID!, $item:ID!, $fieldId:ID!, $value:String!) { + updateProjectV2ItemFieldValue(input: { + projectId: $project + itemId: $item + fieldId: $fieldId + value: { + singleSelectOptionId: $value + } + }) { + projectV2Item { + id + } + } + }' -f project="PVT_kwDOCjbMFM4AjuUh" -f item="${PROJECT_ITEM_ID}" -f fieldId="PVTSSF_lADOCjbMFM4AjuUhzgcCn8s" -f value="f75ad846") + echo "Set status result: $result" + + # Get the label of the issue + LABEL=$(gh api repos/Dictionarry-Hub/database/issues/${{ github.event.issue.number }} --jq '.labels[0].name') + echo "Issue label: $LABEL" + + # Convert label to lowercase for comparison + LABEL_LOWER=$(echo "$LABEL" | tr '[:upper:]' '[:lower:]') + + # Set issue type based on label + ISSUE_TYPE_ID=$(case $LABEL_LOWER in + "bug") echo "b760225f" ;; + "improvement") echo "269885d0" ;; + *) echo "" ;; + esac) + + if [ -z "$ISSUE_TYPE_ID" ]; then + echo "No matching issue type for label: $LABEL" + else + echo "Setting issue type to ID: $ISSUE_TYPE_ID" + result=$(gh api graphql -f query=' + mutation($project:ID!, $item:ID!, $fieldId:ID!, $value:String!) { + updateProjectV2ItemFieldValue(input: { + projectId: $project + itemId: $item + fieldId: $fieldId + value: { + singleSelectOptionId: $value + } + }) { + projectV2Item { + id + } + } + }' -f project="PVT_kwDOCjbMFM4AjuUh" -f item="${PROJECT_ITEM_ID}" -f fieldId="PVTSSF_lADOCjbMFM4AjuUhzgcCswQ" -f value="$ISSUE_TYPE_ID") + echo "Set issue type result: $result" + fi \ No newline at end of file diff --git a/.github/workflows/new-branch-created.yml b/.github/workflows/new-branch-created.yml new file mode 100644 index 0000000..8e5a2a0 --- /dev/null +++ b/.github/workflows/new-branch-created.yml @@ -0,0 +1,114 @@ +name: Update Issue Status to In Development + +on: + create: + branches: + - '*-*' + +jobs: + update-status: + runs-on: ubuntu-latest + steps: + - name: Extract Issue Number from Branch Name + id: extract-issue-number + run: | + ISSUE_NUMBER=$(echo $GITHUB_REF_NAME | cut -d'-' -f1) + echo "Issue Number extracted: $ISSUE_NUMBER" + echo "ISSUE_NUMBER=$ISSUE_NUMBER" >> $GITHUB_ENV + + - name: Get project item ID + id: get-project-item-id + env: + GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }} + PROJECT_ID: "PVT_kwDOCjbMFM4AjuUh" + run: | + echo "Fetching project item ID for issue number: $ISSUE_NUMBER" + QUERY=' + query fetchProjectItem($project: ID!) { + node(id: $project) { + ... on ProjectV2 { + items(first: 100) { + nodes { + id + content { + ... on Issue { + number + } + } + } + } + } + } + }' + item_id=$(gh api graphql -f query="$QUERY" -f project=$PROJECT_ID --jq '.data.node.items.nodes[] | select(.content.number == '"$ISSUE_NUMBER"') | .id') + if [ -z "$item_id" ]; then + echo "Error: Project item ID not found for issue number $ISSUE_NUMBER" + exit 1 + else + echo "Project item ID found: $item_id" + echo "PROJECT_ITEM_ID=$item_id" >> $GITHUB_ENV + fi + + - name: Get single select field ID and options + id: get-field-options + env: + GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }} + PROJECT_ID: "PVT_kwDOCjbMFM4AjuUh" + run: | + echo "Fetching field ID and options for status" + QUERY=' + query($project:ID!) { + node(id: $project) { + ... on ProjectV2 { + fields(first: 100) { + nodes { + ... on ProjectV2SingleSelectField { + id + name + options { + id + name + } + } + } + } + } + } + }' + field_data=$(gh api graphql -f query="$QUERY" -f project=$PROJECT_ID --jq '.data.node.fields.nodes[] | select(.name == "Status")') + field_id=$(echo $field_data | jq -r '.id') + in_development_option_id=$(echo $field_data | jq -r '.options[] | select(.name == "In Development") | .id') + if [ -z "$field_id" ] || [ -z "$in_development_option_id" ]; then + echo "Error: Field ID or In Development option ID not found" + exit 1 + else + echo "Field ID: $field_id" + echo "In Development option ID: $in_development_option_id" + echo "FIELD_ID=$field_id" >> $GITHUB_ENV + echo "IN_DEVELOPMENT_OPTION_ID=$in_development_option_id" >> $GITHUB_ENV + fi + + - name: Set status to In Development + env: + GITHUB_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }} + PROJECT_ITEM_ID: ${{ env.PROJECT_ITEM_ID }} + FIELD_ID: ${{ env.FIELD_ID }} + IN_DEVELOPMENT_OPTION_ID: ${{ env.IN_DEVELOPMENT_OPTION_ID }} + run: | + echo "Setting status for Project Item ID: ${PROJECT_ITEM_ID}" + result=$(gh api graphql -f query=' + mutation($project:ID!, $item:ID!, $fieldId:ID!, $value:String!) { + updateProjectV2ItemFieldValue(input: { + projectId: $project + itemId: $item + fieldId: $fieldId + value: { + singleSelectOptionId: $value + } + }) { + projectV2Item { + id + } + } + }' -f project="PVT_kwDOCjbMFM4AjuUh" -f item="${PROJECT_ITEM_ID}" -f fieldId="${FIELD_ID}" -f value="${IN_DEVELOPMENT_OPTION_ID}") + echo "Set status result: $result"