From 73b00d12e0be00415295be8f4f395bef96efa2f4 Mon Sep 17 00:00:00 2001 From: hossainemruz Date: Sat, 30 Oct 2021 01:43:56 +0600 Subject: [PATCH] Update workflow Signed-off-by: hossainemruz --- .github/workflows/project-automation-pr.yaml | 110 ++++++++++++------- 1 file changed, 71 insertions(+), 39 deletions(-) diff --git a/.github/workflows/project-automation-pr.yaml b/.github/workflows/project-automation-pr.yaml index d77b33b..401d10f 100644 --- a/.github/workflows/project-automation-pr.yaml +++ b/.github/workflows/project-automation-pr.yaml @@ -37,10 +37,19 @@ jobs: }' -f org="$ORGANIZATION" -F number=$PROJECT_NUMBER > project_data.json echo 'PROJECT_ID='$(jq -r '.data.organization.projectNext.id' project_data.json) >> $GITHUB_ENV - echo 'TYPE_ID='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.id' project_data.json) >> $GITHUB_ENV - echo 'OPTION_PR='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Pull Requests") |.id' project_data.json) >> $GITHUB_ENV - echo 'STATUS_ID='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "STATUS") |.id' project_data.json) >> $GITHUB_ENV + # Read the ID of the "Type" field options + echo 'TYPE_ID='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.id' project_data.json) >> $GITHUB_ENV + echo 'PROJECT_ID='$(jq -r '.data.organization.projectNext.id' project_data.json) >> $GITHUB_ENV + echo 'TYPE_ID='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.id' project_data.json) >> $GITHUB_ENV + echo 'TYPE_BUG='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Bug") |.id' project_data.json) >> $GITHUB_ENV + echo 'TYPE_FEATURE='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Feature") |.id' project_data.json) >> $GITHUB_ENV + echo 'TYPE_ENHANCEMENT='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Enhancement") |.id' project_data.json) >> $GITHUB_ENV + echo 'TYPE_DOCUMENTATION='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Documentation") |.id' project_data.json) >> $GITHUB_ENV + echo 'TYPE_TRANSLATION='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Type") |.settings | fromjson.options[] | select(.name=="Translation") |.id' project_data.json) >> $GITHUB_ENV + + # Read the id of the "Status" field options + echo 'STATUS_ID='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.id' project_data.json) >> $GITHUB_ENV echo 'STATUS_IN_PROGRESS='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.settings | fromjson.options[] | select(.name=="In Progress") |.id' project_data.json) >> $GITHUB_ENV echo 'STATUS_READY_FOR_REVIEW='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.settings | fromjson.options[] | select(.name=="Ready for Review") |.id' project_data.json) >> $GITHUB_ENV echo 'STATUS_DONE='$(jq -r '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.settings | fromjson.options[] | select(.name=="Done") |.id' project_data.json) >> $GITHUB_ENV @@ -61,49 +70,72 @@ jobs: echo 'ITEM_ID='$item_id >> $GITHUB_ENV - - name: Print Labels + - name: Export Labels env: PR_DATA: ${{ toJson(github.event.pull_request) }} run: | - echo "================================ LABELS DETAILS ==========================" - echo "$PR_DATA" | jq '.labels[]' - echo "================================= LABELS =================================" - LABELS=($(echo "$PR_DATA" | jq '.labels[]' | jq -r '.name')) - echo "${LABELS[*]}" - echo "================================== END ===================================" + echo "LABELS=($(echo "$PR_DATA" | jq '.labels[]' | jq -r '.name'))" >> $GITHUB_ENV - name: Set "Type" field env: GITHUB_TOKEN: ${{secrets.PROJECT_AUTOMATION}} run: | - gh api graphql -f query=' - mutation ($project: ID!, $item: ID!, $field: ID!, $opt_id: ID!) { - updateProjectNextItemField(input: { - projectId: $project - itemId: $item - fieldId: $field - value: $opt_id - }) { - projectNextItem { - id - } - } - }' -f project="$PROJECT_ID" -f item="$ITEM_ID" -f field="$TYPE_ID" -f opt_id="$OPTION_PR" --silent + # Only execute this step if the PR contains at least one label + if [ "${#LABELS[@]}" -gt 0 ]; then - - name: Set "Status" field - env: - GITHUB_TOKEN: ${{secrets.PROJECT_AUTOMATION}} - run: | - gh api graphql -f query=' - mutation ($project: ID!, $item: ID!, $field: ID!, $status_id: ID!) { - updateProjectNextItemField(input: { - projectId: $project - itemId: $item - fieldId: $field - value: $status_id - }) { - projectNextItem { - id + # Let by default the type is "Bug" + OPTION_ID=$TYPE_BUG + + # If it has "feature" label then set the type to "Feature" + if [[ "${LABELS[*]}" =~ "feature" ]]; then + OPTION_ID=$TYPE_FEATURE + fi + + # If it has "enhancement" label then set the type to "Enhancement" + if [[ "${LABELS[*]}" =~ "enhancement" ]]; then + OPTION_ID=$TYPE_ENHANCEMENT + fi + + # If it has "documentation" label then set the type to "Documentation" + if [[ "${LABELS[*]}" =~ "documentation" ]]; then + OPTION_ID=$TYPE_DOCUMENTATION + fi + + # If it has "translation" label then set the type to "Translation" + if [[ "${LABELS[*]}" =~ "translation" ]]; then + OPTION_ID=$TYPE_TRANSLATION + fi + + # Set the "Type" field to appropriate option + gh api graphql -f query=' + mutation ($project: ID!, $item: ID!, $field: ID!, $opt_id: ID!) { + updateProjectNextItemField(input: { + projectId: $project + itemId: $item + fieldId: $field + value: $opt_id + }) { + projectNextItem { + id + } } - } - }' -f project="$PROJECT_ID" -f item="$ITEM_ID" -f field="$STATUS_ID" -f status_id="$STATUS_IN_PROGRESS" --silent + }' -f project="$PROJECT_ID" -f item="$ITEM_ID" -f field="$TYPE_ID" -f opt_id="$OPTION_ID" --silent + fi + + # - name: Set "Status" field + # env: + # GITHUB_TOKEN: ${{secrets.PROJECT_AUTOMATION}} + # run: | + # gh api graphql -f query=' + # mutation ($project: ID!, $item: ID!, $field: ID!, $status_id: ID!) { + # updateProjectNextItemField(input: { + # projectId: $project + # itemId: $item + # fieldId: $field + # value: $status_id + # }) { + # projectNextItem { + # id + # } + # } + # }' -f project="$PROJECT_ID" -f item="$ITEM_ID" -f field="$STATUS_ID" -f status_id="$STATUS_IN_PROGRESS" --silent