Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
List of MorphoCloudWorkflow changes:

```
$ git shortlog a644d53..cdc0a0f --no-merges
Jean-Christophe Fillion-Robin (1):
      fix(extract-issue-fields): Avoid evaluation of backticks as bash command
```

See MorphoCloud/MorphoCloudWorkflow@a644d53...cdc0a0f
  • Loading branch information
jcfr committed Dec 15, 2024
1 parent cdb9126 commit 73ee209
Show file tree
Hide file tree
Showing 3 changed files with 225 additions and 35 deletions.
39 changes: 4 additions & 35 deletions .github/actions/extract-issue-fields/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,42 +48,11 @@ runs:
- name: Display parsed data
shell: bash
run: |
echo ${{ toJSON(steps.parse.outputs.data) }} | jq .
cat <<'EOF' | jq .
${{ steps.parse.outputs.data }}
EOF
- name: Extract fields
id: extract
shell: bash
run: |
instance_flavor=$(echo ${{ toJSON(steps.parse.outputs.data) }} | \
jq -r '."cloud-computing-instance-flavor".text | split(" - ")[0]')
echo "instance_flavor [$instance_flavor]"
echo "instance_flavor=$instance_flavor" >> $GITHUB_OUTPUT
orcid=$(
echo ${{ toJSON(steps.parse.outputs.data) }} |
jq -r ".orcid.text"
)
echo "orcid=$orcid" >> $GITHUB_OUTPUT
# Also strip "<" and ">" to convert from "<[email protected]>" to "[email protected]"
email=$(
echo ${{ toJSON(steps.parse.outputs.data) }} |
jq -r ".email.text" |
sed -E 's/^<([^<>]+)>$/\1/'
)
echo "email=$email" >> $GITHUB_OUTPUT
# Also strip "<" and ">" to convert from "<[email protected]>" to "[email protected]"
confirm_email=$(
echo ${{ toJSON(steps.parse.outputs.data) }} |
jq -r '."confirm-email".text // empty' |
sed -E 's/^<([^<>]+)>$/\1/'
)
# If the "Confirm Email" field is missing (e.g., in older issues),
# set confirm_email to match email to ensure compatibility.
if [[ -z "$confirm_email" ]]; then
confirm_email="$email"
fi
echo "confirm_email=$confirm_email" >> $GITHUB_OUTPUT
run: extract-issue-fields.sh
46 changes: 46 additions & 0 deletions .github/actions/extract-issue-fields/extract-issue-fields.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
instance_flavor=$(
cat <<'EOF_INSTANCE_FLAVOR' | \
jq -r '."cloud-computing-instance-flavor".text | split(" - ")[0]'
${{ steps.parse.outputs.data }}
EOF_INSTANCE_FLAVOR
)
echo "instance_flavor [$instance_flavor]"
echo "instance_flavor=$instance_flavor" >> $GITHUB_OUTPUT

orcid=$(
cat <<'EOF_ORCID' | \
jq -r ".orcid.text"
${{ steps.parse.outputs.data }}
EOF_ORCID
)
echo "orcid [$orcid]"
echo "orcid=$orcid" >> $GITHUB_OUTPUT

# Also strip "<" and ">" to convert from "<[email protected]>" to "[email protected]"
email=$(
cat <<'EOF_EMAIL' | \
jq -r ".email.text" | \
sed -E 's/^<([^<>]+)>$/\1/'
${{ steps.parse.outputs.data }}
EOF_EMAIL
)
echo "email [$email]"
echo "email=$email" >> $GITHUB_OUTPUT

# Also strip "<" and ">" to convert from "<[email protected]>" to "[email protected]"
confirm_email=$(
cat <<'EOF_CONFIRM_EMAIL' | \
jq -r '."confirm-email".text // empty' | \
sed -E 's/^<([^<>]+)>$/\1/'
${{ steps.parse.outputs.data }}
EOF_CONFIRM_EMAIL
)

# If the "Confirm Email" field is missing (e.g., in older issues),
# set confirm_email to match email to ensure compatibility.
if [[ -z "$confirm_email" ]]; then
confirm_email="$email"
fi

echo "confirm_email [$confirm_email]"
echo "confirm_email=$confirm_email" >> $GITHUB_OUTPUT
175 changes: 175 additions & 0 deletions .github/actions/update-issue/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
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/[email protected]
with:
issue-number: ${{ inputs.issue_number }}
body: |
`${{ inputs.command_name }}` command successfully applied to this issue ✅
- name: command results comment (failure)
if: ${{ failure() }}
uses: peter-evans/[email protected]
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 }}

0 comments on commit 73ee209

Please sign in to comment.