This post is not an introduction to Github Actions.
Github Actions is a tool to automate your workflow.
Introduction
So I came across this situation when working on an issue where you had to make a
github action that will make PR to another repository with files present inside /data
directory.
Having searched the Github Marketplace Actions and not getting any satisfactory result I set out to make my own workflow which will make a PR to another repository.
Workflow
Here's the full workflow file that should be present inside .github/workflows
directory inside your repo.
name: Run workflow
on:
push:
jobs:
Make-PR:
name: Copy files and make PR
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.API_TOKEN_GITHUB }}
steps:
- name: Checkout Current repository
uses: actions/checkout@v2
with:
path: current
- name: Checkout Another repository
uses: actions/checkout@v2
with:
repository: aayushmau5/another
path: another
token: ${{ env.GITHUB_TOKEN }} # Optional(In case you get permission errors)
- name: Make branch in Another repository & Copy files from Current Repo to Another
working-directory: ./another
run: |
cd ./another
git checkout -b new-push
cp ../current/data/* ./another/data
git add .
git commit -m "Generated"
git push https://${{ env.GITHUB_TOKEN }}@github.com/aayushmau5/another
- name: Create PR
working-directory: ./another
run: |
cd ./another
gh pr create --title "Automated PR" --body "PR Generated by Github Actions" --head "new-push"
Explanation
Here's the breakdown of what the action is doing.
name: Run workflow
on:
push:
We setup the name as well the event for which the action will be triggered.
This action will be triggered when we push(commit & push) in any branch of the repository.
jobs:
Make-PR:
name: Copy files and make PR
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.API_TOKEN_GITHUB }}
We now setup a job that will run which the action is triggered. In this case, we have a single job named Make-PR.
The name of the job is "Copy files and make PR" and it will run on the latest release of ubuntu OS.
We also setup the Environment variable with GITHUB_TOKEN which we get from the secrets. More info about secrets here.
This GITHUB_TOKEN
environment variable will be used for Authentication(+ Authorization) when pushing changes or making a PR.
steps:
- name: Checkout Current repository
uses: actions/checkout@v2
with:
path: current
- name: Checkout Another repository
uses: actions/checkout@v2
with:
repository: aayushmau5/another
path: another
token: ${{ env.GITHUB_TOKEN }}
Every job consists of one or more steps that run sequentially.
We have 4 steps in our Make-PR job. Let's see what the first two steps do.
As the name suggests, we Checkout the current as well as Another repository using actions/checkout@v2
which is a community made Action which will checkout the provided repository.
Here we are fetching the current repository under the path current
, so it will be accessible through ./current
and we are also fetching a repo named another
which will be stored inside another
(./another
) path. We have also provided token
because of permission issues(as GH doesn't allows gh-action-bot to push commits, etc).
- name: Make branch in Another repository & Copy files from Current Repo to Another
working-directory: ./another
run: |
git checkout -b new-push
cp ../current/data/* ./another/data
git add .
git commit -m "Generated"
git push https://${{ env.GITHUB_TOKEN }}@github.com/aayushmau5/another
- name: Create PR
working-directory: ./another
run: |
gh pr create --title "Automated PR" --body "PR Generated by Github Actions" --head "new-push"
One thing you should know that the remote system on which Action runs(Ubuntu, in this case) comes with git
and github cli
already installed.
So, you can use github cli
to create PR.
Here are the last three steps.
The 3rd step(1st & 2nd covered above) does as the name suggests
-
Creates a branch named
new-push
inanother
repo. -
Copies files from
current/data
toanother/data
and commits it. -
Pushes the commit to
another
repo.
And at last, we have the 4th step which creates a PR in our another
repository using the github cli
's gh pr create
command.
So, this is it for creating a PR using Github Actions. You can create pretty neat workflows with actions. It's a great tool for developers.