From 46e05154f61d42017f064d99df3cccfb2a9260e0 Mon Sep 17 00:00:00 2001 From: Jean-Christophe Fillion-Robin Date: Wed, 23 Oct 2024 17:09:05 -0400 Subject: [PATCH] fix: Update to MorphoCloud/MorphoCloudWorkflow@a4ec942 List of MorphoCloudWorkflow changes: ``` $ git shortlog 2486394..a4ec942 --no-merges Jean-Christophe Fillion-Robin (1): chore(update-issue): Split functionality into reusable compsite action ``` See https://github.com/MorphoCloud/MorphoCloudWorkflow/compare/2486394...a4ec942 --- .../update-issue-description/action.yml | 177 ++++++++++++++++++ .github/workflows/update-issue.yml | 157 +--------------- 2 files changed, 183 insertions(+), 151 deletions(-) create mode 100644 .github/actions/update-issue-description/action.yml diff --git a/.github/actions/update-issue-description/action.yml b/.github/actions/update-issue-description/action.yml new file mode 100644 index 00000000..fccd99ab --- /dev/null +++ b/.github/actions/update-issue-description/action.yml @@ -0,0 +1,177 @@ +name: "Update Issue Description" +description: "Update Issue Description" +inputs: + issue_number: + description: "Issue number" + required: true + command_name: + description: "Name of the command to execute: encode_email, decode_email" + required: true + token: + description: "GITHUB_TOKEN or repo scoped PAT" + required: true + string_encryption_key: + description: "Encryption key to encode and decode the email address" + required: true +runs: + using: "composite" + steps: + - name: Validate command + shell: bash + run: | + if [[ ! $COMMAND_NAME =~ ^encode_email|decode_email$ ]]; then + echo "::error ::Unknown command name 'COMMAND_NAME'. Valid commands are 'encode_email' or 'decode_email'." + exit 1 + fi + env: + COMMAND_NAME: ${{ inputs.command_name }} + + - name: Extract fields + id: extract + uses: ./.github/actions/extract-issue-fields + with: + token: ${{ inputs.token }} + repository: ${{ github.repository }} + issue_number: ${{ inputs.issue_number }} + + - name: Check if email is encoded + id: check_email_encryption + shell: bash + run: | + if [[ "$EMAIL" != *"@"* ]]; then + encoded="true" + else + encoded="false" + fi + echo "encoded=$encoded" >> $GITHUB_OUTPUT + env: + EMAIL: ${{ steps.extract.outputs.email }} + + - name: Encode email + id: encode_email + if: ${{ inputs.command_name == 'encode_email' }} + uses: ./.github/actions/encode-decode-string + with: + input_string: ${{ steps.extract.outputs.email }} + encryption_key: ${{ inputs.string_encryption_key }} + operation: "encode" + skip: ${{ steps.check_email_encryption.outputs.encoded == 'true' }} + + - name: Decode email + id: decode_email + if: ${{ inputs.command_name == 'decode_email' }} + uses: ./.github/actions/encode-decode-string + with: + input_string: ${{ steps.extract.outputs.email }} + encryption_key: ${{ inputs.string_encryption_key }} + operation: "decode" + skip: ${{ steps.check_email_encryption.outputs.encoded == 'false' }} + + - name: Check if confirm email is encoded + id: check_confirm_email_encryption + shell: bash + run: | + if [[ "$EMAIL" != *"@"* ]]; then + encoded="true" + else + encoded="false" + fi + echo "encoded=$encoded" >> $GITHUB_OUTPUT + env: + CONFIRM_EMAIL: ${{ steps.extract.outputs.confirm_email }} + + - name: Encode confirm email + id: encode_confirm_email + if: ${{ inputs.command_name == 'encode_email' }} + uses: ./.github/actions/encode-decode-string + with: + input_string: ${{ steps.extract.outputs.confirm_email }} + encryption_key: ${{ inputs.string_encryption_key }} + operation: "encode" + skip: + ${{ steps.check_confirm_email_encryption.outputs.encoded == 'true' }} + + - name: Decode confirm email + id: decode_confirm_email + if: ${{ inputs.command_name == 'decode_email' }} + uses: ./.github/actions/encode-decode-string + with: + input_string: ${{ steps.extract.outputs.confirm_email }} + encryption_key: ${{ inputs.string_encryption_key }} + operation: "decode" + skip: + ${{ steps.check_confirm_email_encryption.outputs.encoded == 'false' }} + + - name: Set updated email + id: set_updated_email + shell: bash + run: | + updated_email="" + updated_confirm_email="" + if [[ "$COMMAND_NAME" == "encode_email" ]]; then + updated_email="$ENCODED_EMAIL" + updated_confirm_email="$ENCODED_CONFIRM_EMAIL" + elif [[ "$COMMAND_NAME" == "decode_email" ]]; then + updated_email="$DECODED_EMAIL" + updated_confirm_email="$DECODED_CONFIRM_EMAIL" + fi + echo "updated_email=$updated_email" >> $GITHUB_OUTPUT + echo "updated_confirm_email=$updated_confirm_email" >> $GITHUB_OUTPUT + env: + COMMAND_NAME: ${{ inputs.command_name }} + ENCODED_EMAIL: ${{ steps.encode_email.outputs.output_string }} + ENCODED_CONFIRM_EMAIL: + ${{ steps.encode_confirm_email.outputs.output_string }} + DECODED_EMAIL: ${{ steps.decode_email.outputs.output_string }} + DECODED_CONFIRM_EMAIL: + ${{ steps.decode_confirm_email.outputs.output_string }} + + - name: Update issue body + id: update_issue_body + shell: bash + run: | + gh issue view $ISSUE_NUMBER \ + --repo $GH_REPO \ + --json body \ + --jq .body > ./body.md + + # Replace email and confirm emails + sed \ + -e "s#$OLD_EMAIL#$NEW_EMAIL#" \ + -e "s#$OLD_CONFIRM_EMAIL#$NEW_CONFIRM_EMAIL#" \ + ./body.md > ./updated_body.md + + gh issue edit $ISSUE_NUMBER \ + --repo $GH_REPO \ + --body-file ./updated_body.md + env: + GITHUB_TOKEN: ${{ inputs.token }} + GH_REPO: ${{ github.repository }} + ISSUE_NUMBER: ${{ inputs.issue_number }} + OLD_EMAIL: ${{ steps.extract.outputs.email }} + NEW_EMAIL: ${{ steps.set_updated_email.outputs.updated_email }} + OLD_CONFIRM_EMAIL: ${{ steps.extract.outputs.confirm_email }} + NEW_CONFIRM_EMAIL: + ${{ steps.set_updated_email.outputs.updated_confirm_email }} + + - name: command results comment (success) + if: ${{ success() }} + uses: peter-evans/create-or-update-comment@v4.0.0 + with: + issue-number: ${{ inputs.issue_number }} + body: | + ### Command Results ✅ + + `${{ inputs.command_name }}` command successfully applied to this issue. + + - name: command results comment (failure) + if: ${{ failure() }} + uses: peter-evans/create-or-update-comment@v4.0.0 + with: + issue-number: ${{ inputs.issue_number }} + body: | + ### Command Results ❌ + + `${{ inputs.command_name }}` command failed to be applied to this issue. + + See details at https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} diff --git a/.github/workflows/update-issue.yml b/.github/workflows/update-issue.yml index eeb2df47..c1dbeca1 100644 --- a/.github/workflows/update-issue.yml +++ b/.github/workflows/update-issue.yml @@ -71,156 +71,11 @@ jobs: - uses: actions/checkout@v4 - - name: Extract fields - id: extract - uses: ./.github/actions/extract-issue-fields - with: - token: ${{ secrets.GITHUB_TOKEN }} - repository: ${{ github.repository }} - issue_number: ${{ github.event.issue.number }} - - - name: Check if email is encoded - id: check_email_encryption - run: | - if [[ "$EMAIL" != *"@"* ]]; then - encoded="true" - else - encoded="false" - fi - echo "encoded=$encoded" >> $GITHUB_OUTPUT - env: - EMAIL: ${{ steps.extract.outputs.email }} - - - name: Encode email - id: encode_email - if: ${{ steps.encode_email_command.outputs.continue == 'true' }} - uses: ./.github/actions/encode-decode-string - with: - input_string: ${{ steps.extract.outputs.email }} - encryption_key: ${{ secrets.STRING_ENCRYPTION_KEY }} - operation: "encode" - skip: ${{ steps.check_email_encryption.outputs.encoded == 'true' }} - - - name: Decode email - id: decode_email - if: ${{ steps.decode_email_command.outputs.continue == 'true' }} - uses: ./.github/actions/encode-decode-string - with: - input_string: ${{ steps.extract.outputs.email }} - encryption_key: ${{ secrets.STRING_ENCRYPTION_KEY }} - operation: "decode" - skip: ${{ steps.check_email_encryption.outputs.encoded == 'false' }} - - - name: Check if confirm email is encoded - id: check_confirm_email_encryption - run: | - if [[ "$EMAIL" != *"@"* ]]; then - encoded="true" - else - encoded="false" - fi - echo "encoded=$encoded" >> $GITHUB_OUTPUT - env: - CONFIRM_EMAIL: ${{ steps.extract.outputs.confirm_email }} - - - name: Encode confirm email - id: encode_confirm_email - if: ${{ steps.encode_email_command.outputs.continue == 'true' }} - uses: ./.github/actions/encode-decode-string - with: - input_string: ${{ steps.extract.outputs.confirm_email }} - encryption_key: ${{ secrets.STRING_ENCRYPTION_KEY }} - operation: "encode" - skip: - ${{ steps.check_confirm_email_encryption.outputs.encoded == 'true' - }} - - - name: Decode confirm email - id: decode_confirm_email - if: ${{ steps.decode_email_command.outputs.continue == 'true' }} - uses: ./.github/actions/encode-decode-string - with: - input_string: ${{ steps.extract.outputs.confirm_email }} - encryption_key: ${{ secrets.STRING_ENCRYPTION_KEY }} - operation: "decode" - skip: - ${{ steps.check_confirm_email_encryption.outputs.encoded == 'false' - }} - - - name: Set updated email - id: set_updated_email + - name: Update issue description if: ${{ steps.command.outputs.continue == 'true' }} - run: | - updated_email="" - updated_confirm_email="" - if [[ "$ENCODE_EMAIL_COMMAND_CONTINUE" == "true" ]]; then - updated_email="$ENCODED_EMAIL" - updated_confirm_email="$ENCODED_CONFIRM_EMAIL" - elif [[ "$DECODE_EMAIL_COMMAND_CONTINUE" == "true" ]]; then - updated_email="$DECODED_EMAIL" - updated_confirm_email="$DECODED_CONFIRM_EMAIL" - fi - echo "updated_email=$updated_email" >> $GITHUB_OUTPUT - echo "updated_confirm_email=$updated_confirm_email" >> $GITHUB_OUTPUT - env: - ENCODE_EMAIL_COMMAND_CONTINUE: - ${{ steps.encode_email_command.outputs.continue }} - ENCODED_EMAIL: ${{ steps.encode_email.outputs.output_string }} - ENCODED_CONFIRM_EMAIL: - ${{ steps.encode_confirm_email.outputs.output_string }} - DECODE_EMAIL_COMMAND_CONTINUE: - ${{ steps.decode_email_command.outputs.continue }} - DECODED_EMAIL: ${{ steps.decode_email.outputs.output_string }} - DECODED_CONFIRM_EMAIL: - ${{ steps.decode_confirm_email.outputs.output_string }} - - - name: Update issue body - id: update_issue_body - if: ${{ steps.command.outputs.continue == 'true' }} - shell: bash - run: | - gh issue view $ISSUE_NUMBER \ - --repo $GH_REPO \ - --json body \ - --jq .body > ./body.md - - # Replace email and confirm emails - sed \ - -e "s#$OLD_EMAIL#$NEW_EMAIL#" \ - -e "s#$OLD_CONFIRM_EMAIL#$NEW_CONFIRM_EMAIL#" \ - ./body.md > ./updated_body.md - - gh issue edit $ISSUE_NUMBER \ - --repo $GH_REPO \ - --body-file ./updated_body.md - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GH_REPO: ${{ github.repository }} - ISSUE_NUMBER: ${{ github.event.issue.number }} - OLD_EMAIL: ${{ steps.extract.outputs.email }} - NEW_EMAIL: ${{ steps.set_updated_email.outputs.updated_email }} - OLD_CONFIRM_EMAIL: ${{ steps.extract.outputs.confirm_email }} - NEW_CONFIRM_EMAIL: - ${{ steps.set_updated_email.outputs.updated_confirm_email }} - - - name: command results comment (success) - if: ${{ steps.command.outputs.continue == 'true' && success() }} - uses: peter-evans/create-or-update-comment@v4.0.0 + uses: ./.github/actions/update-issue-description with: - issue-number: ${{ github.event.issue.number }} - body: | - ### Command Results ✅ - - `${{ steps.command.outputs.command_name }}` command successfully applied to this issue. - - - name: command results comment (failure) - if: ${{ steps.command.outputs.continue == 'true' && failure() }} - uses: peter-evans/create-or-update-comment@v4.0.0 - with: - issue-number: ${{ github.event.issue.number }} - body: | - ### Command Results ❌ - - `${{ steps.command.outputs.command_name }}` command failed to be applied to this issue. - - See details at https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} + issue_number: ${{ github.event.issue.number }} + command_name: ${{ steps.command.outputs.command_name }} + token: ${{ secrets.GITHUB_TOKEN }} + string_encryption_key: ${{ secrets.STRING_ENCRYPTION_KEY }}