[GitHub Actions] Set Assignees automatically

2024-02-20 hit count image

Let's see how to set automatically the creator of Pull request to Assignees in the GitHub pull request by using GitHub Actions.

Outline

When creating a Pull request in GitHub, I was manually setting the creator of the Pull request to Assignees as follows.

GitHub Actions - Set assignees

Since the Assignees of Pull request is ultimately the person who created the Pull request, I think it would be good to automatically set the person who created the Pull request to Assignees every time a Pull request is created.

In this blog post, I will introduce how to use GitHub Actions to automatically set the person who created the Pull request to Assignees of the Pull request.

Create GitHub Actions

Then let’s create a GitHub Actions that automatically sets the person who created the Pull request to Assignees of the Pull request. Create the .github/workflows/set_assignees.yml file and modify it as follows.

name: Set assigness

on:
  pull_request:
    types:
      - opened

jobs:
  set-assignees:
    name: Set assignees
    runs-on: ubuntu-latest
    timeout-minutes: 1
    steps:
      - name: Set assignees
        run: |
          OWNER="$"
          REPOSITORY="$"
          TOKEN="$"
          PULL_REQUEST_NUMBER="$"

          ASSIGNEES=$(curl -s \
            "https://api.github.com/repos/$OWNER/$REPOSITORY/issues/$PULL_REQUEST_NUMBER" | \
            jq --raw-output '.assignees // [] | .[].login')

          if [ -z "$ASSIGNEES" ]; then
            ASSIGNEE=$

            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: token $TOKEN" \
              -d "{ \"assignees\": \"${ASSIGNEE}\" }" \
              https://api.github.com/repos/$REPOSITORY/issues/$PULL_REQUEST_NUMBER/assignees
          fi

I made it to use the API provided by GitHub to set the Pull request creator (github.actor) to the Assignees of the Pull request.

Dependabot-specific GitHub Actions

I use Dependabot in my personal project. I wanted to set the project Owner to Assignees for the Pull request created by Dependabot.

For this, I modified the GitHub Actions as follows.

name: Set assigness

on:
  pull_request:
    types:
      - opened

jobs:
  set-assignees:
    name: Set assignees
    runs-on: ubuntu-latest
    timeout-minutes: 1
    steps:
      - name: Set assignees
        run: |
          OWNER="$"
          REPOSITORY="$"
          TOKEN="$"
          PULL_REQUEST_NUMBER="$"

          ASSIGNEES=$(curl -s \
            "https://api.github.com/repos/$OWNER/$REPOSITORY/issues/$PULL_REQUEST_NUMBER" | \
            jq --raw-output '.assignees // [] | .[].login')

          if [ -z "$ASSIGNEES" ]; then
            ASSIGNEE=$
            BRANCH_NAME=$

            if [[ "${BRANCH_NAME}" == "dependabot/"* ]]; then
              ASSIGNEE=$OWNER
            fi

            curl -X POST \
              -H "Content-Type: application/json" \
              -H "Authorization: token $TOKEN" \
              -d "{ \"assignees\": \"${ASSIGNEE}\" }" \
              https://api.github.com/repos/$REPOSITORY/issues/$PULL_REQUEST_NUMBER/assignees
          fi

I added dependabot/ to the branch name and set Assignees to github.repository_owner as follows.

BRANCH_NAME=$

if [[ "${BRANCH_NAME}" == "dependabot/"* ]]; then
  ASSIGNEE=$OWNER
fi

However this GitHub Actions did not work properly in Pull request from Dependabot. For security reasons, Dependabot’s Pull request cannot use any secrets and can only perform Readonly operations, so an error occurred.

To fix this, you need to use pull_request_target instead of pull_request in on.

name: Set assigness

on:
  pull_request_target:
    types:
      - opened

actions/github-script

GitHub provides actions/github-script that allows you to write more readable code.

By using actions/github-script, you can modify it as follows.

name: Set assignees

on:
  pull_request_target:
    types:
      - opened

jobs:
  set-assignees:
    name: Set assignees
    runs-on: ubuntu-latest
    timeout-minutes: 1
    steps:
      - uses: actions/checkout@v4
      - name: Set assignees
        uses: actions/github-script@v6
        with:
          github-token: $
          script: |
            const { owner, repo } = context.repo;
            const prNumber = context.payload.pull_request.number;

            const response = await github.rest.issues.get({
              owner,
              repo,
              issue_number: prNumber,
            })
            const { assignees } = response.data;

            if (assignees.length === 0) {
              let assignee = context.actor;
              const branchName = context.payload.pull_request.head.ref;

              if (branchName.startsWith('dependabot/')) {
                assignee = owner;
              }

              await github.rest.issues.addAssignees({
                owner: owner,
                repo: repo,
                issue_number: prNumber,
                assignees: [assignee]
              });
            }

Completed

Done! We’ve seen how to use GitHub Actions to automatically set the person who created the Pull request to Assignees of the Pull request. If you are manually setting the person who created the Pull request to Assignees every time you create a Pull request, try using this GitHub Actions to automate it.

Was my blog helpful? Please leave a comment at the bottom. it will be a great help to me!

App promotion

You can use the applications that are created by this blog writer Deku.
Deku created the applications with Flutter.

If you have interested, please try to download them for free.

Posts