diff --git a/.github/workflows/update-deployment-issue.yml b/.github/workflows/update-deployment-issue.yml index cdb000b..9414bd2 100644 --- a/.github/workflows/update-deployment-issue.yml +++ b/.github/workflows/update-deployment-issue.yml @@ -27,28 +27,11 @@ on: default: false description: more verbose output for debugging purposes -env: - CONFIGURATIONS_REPOSITORY: common-configurations - GLOBAL_CONFIGURATION: _global.yml - SECRETS_AZURE_KEYVAULT: CoveredCA-KV-Mulesoft - - CCA_BRANCH: ${{github.ref_name}} - CCA_USER_NAME: ${{github.actor}} - CCA_PROJECT_DIR: ${{inputs.serviceName}} - GH_TOKEN: ${{github.token}} - jobs: updateIssue: name: Update Project Issue runs-on: ubuntu-latest - permissions: - contents: write - checks: write - issues: write - pull-requests: write - actions: write - steps: - name: Get token from Github App @@ -58,193 +41,193 @@ jobs: client-id: ${{ secrets.MULESOFT_GITHUBAPP_CLIENTID}} privatekey: ${{ secrets.MULESOFT_GITHUBAPP_PRIVATEKEY }} - # - name: Collect ID's for Deployment Issue Update - # shell: bash - # env: - # GITHUB_TOKEN: ${{ env.github_automationbot_token }} - # GH_TOKEN: ${{ env.github_automationbot_token }} - # run: | - - # echo "*********************************************" - # echo "GitHub Graph API Grab ID's For Graph Queries " - # echo "*********************************************" - - # echo " ****************" - # echo " * Get Issue ID *" - # echo " ****************" - - # # Initial cursor is empty - # CURSOR="" - - # # Loop until all pages are fetched - # while : ; do - # # Execute GraphQL query - # RESPONSE=$(gh api graphql -f query=' - # query($org: String!, $number: Int!, $cursor: String) { - # organization(login: $org) { - # projectV2(number: $number) { - # items(first: 100, after: $cursor) { - # pageInfo { - # hasNextPage - # endCursor - # } - # nodes { - # id - # content { - # ... on Issue { - # id - # number - # title - # } - # } - # } - # } - # } - # } - # }' -f org="${{ inputs.organization }}" -F number="${{ inputs.project-number }}" -f cursor="$CURSOR") - - # # Parse items and do something with them, e.g., append to a file - # echo "$RESPONSE" | jq '.data.organization.projectV2.items.nodes[]' >> deployment_issues.json - - # # Check if there's a next page; if not, break the loop - # HAS_NEXT_PAGE=$(echo "$RESPONSE" | jq '.data.organization.projectV2.items.pageInfo.hasNextPage') - # if [ "$HAS_NEXT_PAGE" != "true" ]; then - # break - # fi - - # # Update cursor to fetch next page - # CURSOR=$(echo "$RESPONSE" | jq -r '.data.organization.projectV2.items.pageInfo.endCursor') - # done - - # echo "All items fetched successfully." - - # echo "Parsing output data file" - - # ISSUE_ID=$(jq -r '. | select(.content.title | test("Deployment")) | select(.content.title | test("${{ inputs.environment }}")) | select(.content.title | test("${{ inputs.application-name }}")) | select(.content.title | test("${{ inputs.version }}")) | .id' deployment_issues.json) - - # echo " ******************" - # echo " * Get Project ID *" - # echo " ******************" - - # PROJECT_ID=$(gh api graphql -f query='{ - # organization(login: $org) { - # login - # projectsV2(first: 100) { - # edges { - # node { - # id - # title - # } - # } - # } - # } - # }' -f org="${{ inputs.organization }}" | jq -r '.data.organization.projectsV2.edges[] | select(.node.title | test("Deployment")) | .node.id') - - # echo " ******************" - # echo " * Get Field ID's *" - # echo " ******************" - - # FIELD_DATA=$(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="${{ inputs.organization }}" -F number="5" | jq '.data.organization.projectV2.fields.nodes[] | select((.name | test("Environment")) or (.name | test("Version")))') - - # FIELD_ID_ENVIRONMENT=$(echo "$FIELD_DATA" | jq -r '. | select(.name | test("Environment")) | .id') - # FIELD_ID_VERSION=$(echo "$FIELD_DATA" | jq -r '. | select(.name | test("Version")) | .id') - - # echo " *************************************" - # echo " * Get Environment Field Option ID's *" - # echo " *************************************" - - # FIELD_ENVIRONMENT_OPTION_ID=$(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="${{ inputs.organization }}" -F number="${{ inputs.project-number }}" | jq '.data.organization.projectV2.fields.nodes[] | select(.name | test("Environment")) | .options[]' | jq -r '. | select(.name | test("${{ inputs.environment }}")) | .id') - - # echo "*******************************************************" - # echo "GitHub Graph API Update Custom Fields on Project Items " - # echo "*******************************************************" - - # echo "Updating Environment Field" - # echo "" - # gh api graphql -f query=' - # mutation { - # updateProjectV2ItemFieldValue( - # input: { - # projectId: "$PROJECT_ID" - # itemId: "$ISSUE_ID" - # fieldId: "$FIELD_ID_ENVIRONMENT" - # value: { - # singleSelectOptionId: "$FIELD_ENVIRONMENT_OPTION_ID" - # } - # } - # ) - # { - # projectV2Item { - # id - # } - # } - # }' - - # echo "" - # echo "Updating Version Field" - # echo "" - - # gh api graphql -f query=' - # mutation { - # updateProjectV2ItemFieldValue( - # input: { - # projectId: "$PROJECT_ID" - # itemId: "$ISSUE_ID" - # fieldId: "$FIELD_ID_VERSION" - # value: { - # text: "${{ inputs.version }}" - # } - # } - # ) - # { - # projectV2Item { - # id - # } - # } - # }' + - name: Collect ID's for Deployment Issue Update + shell: bash + env: + GITHUB_TOKEN: ${{ env.github_automationbot_token }} + GH_TOKEN: ${{ env.github_automationbot_token }} + run: | + + echo "*********************************************" + echo "GitHub Graph API Grab ID's For Graph Queries " + echo "*********************************************" + + echo " ****************" + echo " * Get Issue ID *" + echo " ****************" + + # Initial cursor is empty + CURSOR="" + + # Loop until all pages are fetched + while : ; do + # Execute GraphQL query + RESPONSE=$(gh api graphql -f query=' + query($org: String!, $number: Int!, $cursor: String) { + organization(login: $org) { + projectV2(number: $number) { + items(first: 100, after: $cursor) { + pageInfo { + hasNextPage + endCursor + } + nodes { + id + content { + ... on Issue { + id + number + title + } + } + } + } + } + } + }' -f org="${{ inputs.organization }}" -F number="${{ inputs.project-number }}" -f cursor="$CURSOR") + + # Parse items and do something with them, e.g., append to a file + echo "$RESPONSE" | jq '.data.organization.projectV2.items.nodes[]' >> deployment_issues.json + + # Check if there's a next page; if not, break the loop + HAS_NEXT_PAGE=$(echo "$RESPONSE" | jq '.data.organization.projectV2.items.pageInfo.hasNextPage') + if [ "$HAS_NEXT_PAGE" != "true" ]; then + break + fi + + # Update cursor to fetch next page + CURSOR=$(echo "$RESPONSE" | jq -r '.data.organization.projectV2.items.pageInfo.endCursor') + done + + echo "All items fetched successfully." + + echo "Parsing output data file" + + ISSUE_ID=$(jq -r '. | select(.content.title | test("Deployment")) | select(.content.title | test("${{ inputs.environment }}")) | select(.content.title | test("${{ inputs.application-name }}")) | select(.content.title | test("${{ inputs.version }}")) | .id' deployment_issues.json) + + echo " ******************" + echo " * Get Project ID *" + echo " ******************" + + PROJECT_ID=$(gh api graphql -f query='{ + organization(login: $org) { + login + projectsV2(first: 100) { + edges { + node { + id + title + } + } + } + } + }' -f org="${{ inputs.organization }}" | jq -r '.data.organization.projectsV2.edges[] | select(.node.title | test("Deployment")) | .node.id') + + echo " ******************" + echo " * Get Field ID's *" + echo " ******************" + + FIELD_DATA=$(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="${{ inputs.organization }}" -F number="5" | jq '.data.organization.projectV2.fields.nodes[] | select((.name | test("Environment")) or (.name | test("Version")))') + + FIELD_ID_ENVIRONMENT=$(echo "$FIELD_DATA" | jq -r '. | select(.name | test("Environment")) | .id') + FIELD_ID_VERSION=$(echo "$FIELD_DATA" | jq -r '. | select(.name | test("Version")) | .id') + + echo " *************************************" + echo " * Get Environment Field Option ID's *" + echo " *************************************" + + FIELD_ENVIRONMENT_OPTION_ID=$(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="${{ inputs.organization }}" -F number="${{ inputs.project-number }}" | jq '.data.organization.projectV2.fields.nodes[] | select(.name | test("Environment")) | .options[]' | jq -r '. | select(.name | test("${{ inputs.environment }}")) | .id') + + echo "*******************************************************" + echo "GitHub Graph API Update Custom Fields on Project Items " + echo "*******************************************************" + + echo "Updating Environment Field" + echo "" + gh api graphql -f query=' + mutation { + updateProjectV2ItemFieldValue( + input: { + projectId: "$PROJECT_ID" + itemId: "$ISSUE_ID" + fieldId: "$FIELD_ID_ENVIRONMENT" + value: { + singleSelectOptionId: "$FIELD_ENVIRONMENT_OPTION_ID" + } + } + ) + { + projectV2Item { + id + } + } + }' + + echo "" + echo "Updating Version Field" + echo "" + + gh api graphql -f query=' + mutation { + updateProjectV2ItemFieldValue( + input: { + projectId: "$PROJECT_ID" + itemId: "$ISSUE_ID" + fieldId: "$FIELD_ID_VERSION" + value: { + text: "${{ inputs.version }}" + } + } + ) + { + projectV2Item { + id + } + } + }'