CircleCI's pipelines can be triggered by push by default.
There are some cases that push trigger suits, but you might sometimes want to trigger pipelines by creating or updating pull requests.
If you want to trigger pipelines only by pull requests, then you can do it by enabling Only build pull requests option.
It is notable that with this option, only pull requests to default branch, push to default branch and tags are the targets. It might be insufficient for your workflow.
In this case, you can create pipelines using CircleCI API from GitHub Actions that is triggered by pull requests.
As of January 2021, version 2.1 is the latest version of CircleCI config.
In this version, it is explained that jobs cannot be triggered from API.
https://circleci.com/docs/2.0/api-job-trigger/
However, it just means that job cannot be triggered and pipeline can be triggered.
https://support.circleci.com/hc/en-us/articles/360041503393-A-workaround-to-trigger-a-single-job-with-2-1-config
pipeline indicates the entire configuration and we can't specify the part of it from the API, but we can configure to give parameters to the pipelines and select jobs using parameters.
First, you have to prepare a boolean type parameter named pull_request in .circleci/config.yml.
Then, configure conditions to execute each jobs with when or unless keywords using this pull_request parameter.
when and unless are described in the following document.
https://circleci.com/docs/2.0/configuration-reference/#using-when-in-workflows
For example, you can write like following to execute push job (push trigger can't have parameters), and execute pull_request job from pull request by sending pull_request: true in parameters field.
version: 2.1
parameters:
  pull_request:
    type: boolean
    default: false
orbs:
  welcome: circleci/welcome-orb@0.4.1
  hello: circleci/hello-build@0.0.5
workflows:
  push:
    unless: << pipeline.parameters.pull_request >>
    jobs:
      - welcome/run
  pull_request:
    when: << pipeline.parameters.pull_request >>
    jobs:
      - hello/hello-build
Configurations for GitHub Actions are just as same as the following answer.
https://stackoverflow.com/questions/44672893/is-there-a-way-to-trigger-a-circleci-build-on-a-pull-request?rq=1
on:
  pull_request:
    types: [opened, synchronize]
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - name: Trigger CircleCI
        env:
          CIRCLE_BRANCH: ${{ github.head_ref }}
        run: |
          curl -X POST \
          -H 'Circle-Token: ${{secrets.CIRCLE_TOKEN}}' \
          -H 'Content-Type: application/json' \
          -H 'Accept: application/json' \
          -d "{\"branch\":\"${CIRCLE_BRANCH}\",\"parameters\":{\"pull_request\":true}}" \
          https://circleci.com/api/v2/project/gh/ORG_NAME/REPO_NAME/pipeline
ORG_NAME and REPO_NAME should be replaced to your repository's owner and name.
The value of Circle-Token header (written as CIRCLE_TOKEN in the paragraph above) must be a Personal Access Token which can be published from your user configuration page on CircleCI, and must be registered as a Secret in the GitHub repository configuration.
CircleCI also provides project level tokens, but those tokens cannot be used for triggering pipelines as of now, and we should use Personal Access Tokens for this case.
This is a small list of situations that this solutions are effective.
If you can achieve your requirements only by GitHub Actions then you don't have to do this.
If you would like restrict builds to pull requests rather than use both types of build, then you should do so.