Automating GitHub Collaborators List Retrieval and Email Notifications with Shell Scripting

Automating GitHub Collaborators List Retrieval and Email Notifications with Shell Scripting

1. Introduction: This documentation outlines the process of automating the retrieval of GitHub repository collaborators' details and sending email notifications using a shell script. The script utilizes the GitHub API for fetching collaborators' information and AWS Simple Email Service (SES) for sending email notifications.

2. Requirements: Ensure the following requirements are met:

  • GitHub API access with appropriate permissions.

  • AWS CLI configured with necessary permissions for SES.

  • jq JSON processor installed on the system.

3. Installation ofjq:

# Update package index
sudo apt-get update

# Install jq
sudo apt-get install jq

For other Linux distributions or macOS, you can use their respective package managers to install jq.

4. Script Overview and Configuration:

The provided shell script consists of functions to interact with the GitHub API and retrieve collaborators' details. Below is an overview of the script's functionality:

  • github_api_get: Function to make a GET request to the GitHub API.

  • list_users_with_read_access: Function to list users with read access to the specified GitHub repository.

  • Main script: Calls the list_users_with_read_access function, formats the output, and sends an email notification.

5. Script Implementation:

#!/bin/bash

# Function to make a GET request to the GitHub API
function github_api_get {
    local endpoint="$1"
    local url="${API_URL}/${endpoint}"

    # Send a GET request to the GitHub API with authentication
    curl -s -u "${USERNAME}:${TOKEN}" "$url"
}

# Function to list users with read access to the repository
function list_users_with_read_access {
    local endpoint="${REPO_OWNER}/${REPO_NAME}/collaborators"

    # Fetch the list of collaborators on the repository
    collaborators="$(github_api_get "$endpoint")"
    echo "$collaborators"

    logins="$(echo "$collaborators" | jq -r '.[] | .login')"
    echo "$logins"

    OUTPUT="Github Collaborators List for the $REPO_NAME Repo $logins"
}

# Main script

echo "Listing users with read access to ${REPO_OWNER}/${REPO_NAME}..."

list_users_with_read_access


echo -e "$OUTPUT"

# Send email using AWS SES
aws ses send-email \
  --from "youremail@gmail.com" \
  --to "youremail@gmail.com" \
  --subject "GitHub Collaborators List for the Specific Repo" \
  --text "$OUTPUT"

6. Exporting Personal Access Token (PAT) and Username: Before executing the script, ensure you export the PAT and username as environment variables:

export TOKEN="your_personal_access_token"
export USERNAME="your_github_username"

7. Execution:

8. Configuringcrontab: To schedule the script to run automatically every day at 5 PM, follow these steps:

  • Open your terminal and type:

      crontab -e
    

    Add the following line to the crontab file:

      0 17 * * * /path/to/github_collaborators.sh
    

    This cron job runs the script /path/to/github_collaborators.sh every day at 5 PM. Adjust the path to your script accordingly.

  • 9. OutPut: Output when i run script manually

    10. Email: Email

  • 11. Conclusion: By following this documentation, you have successfully automated the process of retrieving GitHub repository collaborators' details and sending email notifications using a shell script. This script helps you stay updated on who has access to your GitHub repositories and facilitates better collaboration within your team.