Project: Automating GitHub REST API calls using shell script
๐ Introduction:
If you're a developer or a DevOps engineer, you must be familiar with GitHub's REST API. GitHub's REST API enables you to automate various tasks such as creating a new repository, fetching information about a repository, creating issues, and more.
In this blog, we will learn how to use a shell script to automate GitHub REST API calls. We will use cURL to make API calls and process the output using the shell script.
๐น Overview:
The shell script takes two arguments: GitHub auth token and REST API endpoint. The script first checks if the API result is on a single page or multiple pages using the Link header provided by GitHub. Based on the result, the script either makes a single cURL call or multiple cURL calls to retrieve all the pages of the API result.
The output of the API call is saved to a temporary file, which is then printed to the console. You can modify the script to process the output as per your requirements.
๐น Here's the shell script:
#!/bin/bash
################################
# Author: Prasad Suman Mohan
# Version: 1.0
# Usage: To run this script, we need to provide GitHub auth token and Rest API promt
################################
if [ ${#@} -lt 2 ]; then
echo "usage: $0 [your github token] [REST expression]"
exit 1;
fi
GITHUB_TOKEN=$1
GITHUB_API_REST=$2
GITHUB_API_HEADER_ACCEPT="Accept: application/vnd.github.v3+json"
temp=`basename $0`
TMPFILE=`mktemp /tmp/${temp}.XXXXXX` || exit 1
function rest_call {
curl -s $1 -H "${GITHUB_API_HEADER_ACCEPT}" -H "Authorization: token $GITHUB_TOKEN" >> $TMPFILE
}
# single page result-s (no pagination), have no Link: section, the grep result is empty
last_page=`curl -s -I "https://api.github.com${GITHUB_API_REST}" -H "${GITHUB_API_HEADER_ACCEPT}" -H "Authorization: token $GITHUB_TOKEN" | grep '^Link:' | sed -e 's/^Link:.*page=//g' -e 's/>.*$//g'`
# does this result use pagination?
if [ -z "$last_page" ]; then
# no - this result has only one page
rest_call "https://api.github.com${GITHUB_API_REST}"
else
# yes - this result is on multiple pages
for p in `seq 1 $last_page`; do
rest_call "https://api.github.com${GITHUB_API_REST}?page=$p"
done
fi
cat $TMPFILE
I hope this blog helps you automate your GitHub REST API calls using shell scripts. Let me know in the comments if you have any questions or feedback!
๐ Conclusion:
In conclusion, this script provides a simple and efficient way to make REST API calls to the GitHub API using cURL and a personal access token. With just a few modifications, this script can be used to make any REST API calls to the GitHub API, making it an extremely useful tool for developers who need to automate repetitive tasks or work with large data sets.