PR Not Created Because The Action Resets Source To Target
Understanding the Issue
In this article, we will explore a common issue that occurs when trying to create a pull request (PR) using GitHub Actions. The problem arises when the action resets the source branch to the target branch, resulting in no differences between the two branches. This prevents the PR from being created.
Workflow Overview
Our workflow is triggered on pushes to the insights-update
branch. The action should create a PR to merge the insights-update
branch into the main
branch. However, the PR is never created because the action seems to think that there are no changes between the two branches.
Step-by-Step Analysis
Let's analyze the steps involved in the workflow:
- Initial State: The HEAD is at
insights-update
. - Create a new working branch: A new working branch is created at HEAD (
insights-update
). - Switch back to insights-update: The working branch is switched back to
insights-update
, and the branch is reset to theorigin/insights-update
commit. - Fetch main: The
main
branch is fetched. - Switch to main: The HEAD is switched to
main
. - Check commits from insights-update to working branch: No differences are found since the working branch is identical to
insights-update
. - Reset working branch to HEAD (main): The working branch is reset to
main
. - Fetch main again: The
main
branch is fetched again. - Check commits from main to working branch: No differences are found since the working branch is currently identical to
main
. - Fetch insights-update and switch to it: The
insights-update
branch is fetched and switched to. - Check commits between main & insights-update: 4 commits are found on
insights-update
. - Reset insights-update to working branch (main): The
insights-update
branch is reset to the working branch (main
), making the source and target branches identical. - Check right side commits between origin/insights-update and the new insights-update: No commits are found.
- Check left side commits between origin/insights-update and the new insights-update: 4 commits are found.
- Cleanup: The temporary branch is deleted, and the
insights-update
branch is checked out. - Check if we should create the pull request: The branch no longer differs from the base branch (
main
).
The Problem
The problem arises at step 12, where the insights-update
branch is reset to the working branch (main
). This makes the source and target branches identical, resulting in no differences between the two branches. As a result, the PR is never created.
Solution
To solve this issue, we need to modify the workflow to avoid resetting the source branch to the target branch. One possible solution is to create a temporary branch that is not reset to the target branch. Here's an updated workflow:
name: Create Pull Request on Push to insights-update
on:
push:
branches:
- insights-update # Trigger on pushes to the insights-update branch
permissions:
contents: write
pull-requests: write
jobs:
create_pull_request:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
# https://github.com/marketplace/actions/create-pull-request
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
title: '[automated] New insights data'
body: 'Automated insights data update from push to insights-update.'
branch: insights-update
base: main
sign-commits: true
- name: Create temporary branch
run: |
git checkout -b temp-branch
- name: Fetch insights-update
run: |
git fetch origin insights-update
- name: Switch to insights-update
run: |
git checkout insights-update
- name: Check commits between main & insights-update
run: |
git rev-list --right-only --count main...insights-update
- name: Create PR
uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
title: '[automated] New insights data'
body: 'Automated insights data update from push to insights-update.'
branch: insights-update
base: main
sign-commits: true
Q: What is the issue with creating a pull request (PR) using GitHub Actions?
A: The issue arises when the action resets the source branch to the target branch, resulting in no differences between the two branches. This prevents the PR from being created.
Q: What is the workflow involved in creating a PR using GitHub Actions?
A: The workflow involves the following steps:
- Initial State: The HEAD is at
insights-update
. - Create a new working branch: A new working branch is created at HEAD (
insights-update
). - Switch back to insights-update: The working branch is switched back to
insights-update
, and the branch is reset to theorigin/insights-update
commit. - Fetch main: The
main
branch is fetched. - Switch to main: The HEAD is switched to
main
. - Check commits from insights-update to working branch: No differences are found since the working branch is identical to
insights-update
. - Reset working branch to HEAD (main): The working branch is reset to
main
. - Fetch main again: The
main
branch is fetched again. - Check commits from main to working branch: No differences are found since the working branch is currently identical to
main
. - Fetch insights-update and switch to it: The
insights-update
branch is fetched and switched to. - Check commits between main & insights-update: 4 commits are found on
insights-update
. - Reset insights-update to working branch (main): The
insights-update
branch is reset to the working branch (main
), making the source and target branches identical. - Check right side commits between origin/insights-update and the new insights-update: No commits are found.
- Check left side commits between origin/insights-update and the new insights-update: 4 commits are found.
- Cleanup: The temporary branch is deleted, and the
insights-update
branch is checked out. - Check if we should create the pull request: The branch no longer differs from the base branch (
main
).
Q: What is the problem with resetting the source branch to the target branch?
A: The problem arises when the source branch is reset to the target branch, making the two branches identical. As a result, there are no differences between the two branches, and the PR is never created.
Q: How can we solve this issue?
A: To solve this issue, we need to modify the workflow to avoid resetting the source branch to the target branch. One possible solution is to create a temporary branch that is not reset to the target branch.
Q: What is the updated workflow to create a PR using GitHub Actions?
A: The updated workflow involves the following steps:
- Create temporary branch: A temporary branch is created.
- Fetch insights-update: The
insights-update
branch is fetched. - Switch to insights-update: The
insights-update
branch is switched to. - Check commits between main insights-update: The commits between
main
andinsights-update
are checked. - Create PR: The PR is created.
Q: What are the benefits of using the updated workflow?
A: The benefits of using the updated workflow include:
- The source branch is not reset to the target branch, ensuring that there are differences between the two branches.
- The PR is created successfully, allowing for the merge of the
insights-update
branch into themain
branch.
Q: Can we use the updated workflow for other branches as well?
A: Yes, the updated workflow can be used for other branches as well. Simply replace the insights-update
branch with the desired branch name in the workflow.