Skip to content

Fetch Commit History #16

Fetch Commit History

Fetch Commit History #16

Workflow file for this run

name: Fetch Commit History
on:
schedule:
- cron: '0 0 * * *' # Run every day at midnight UTC
workflow_dispatch:
jobs:
fetch-commit-history:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Get members of "gdsc" organization
id: get-members
run: |
members=$(curl -sSL -H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.GDSC_GH_TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/orgs/Google-DSC-Kookmin/members | jq -r '.[] | .login' | sed 's/ /_/g')
# Set members as an environment variable
echo "GDSC_MEMBERS<<EOF" >> $GITHUB_ENV
echo "$members">>$GITHUB_ENV
echo "EOF">>$GITHUB_ENV
shell: bash
- name: Fetch commit history for each member
id: fetch-commit-history
run: |
set -x
# Access the environment variable and split it into an array
members=($GDSC_MEMBERS)
all_commits=()
for member in "${members[@]}"; do
echo "Fetching commit history for $member..."
member_commits=$(curl -sSL -H "Authorization: Bearer ${{ secrets.GDSC_GH_TOKEN }}" "https://api.github.com/users/${member}/events")
if [[ $(echo "$member_commits" | jq length) -gt 0 ]]; then
# Extracting commit-related data (commit ID, name, time, message, link)
commits_data=$(echo "$member_commits" | jq -r 'map(select(.type == "PushEvent")) | .[] | {commitId: .payload.commits[0].sha, userName: .payload.commits[0].author.name, commitTime: .created_at, commitMessage: .payload.commits[0].message, commitLink: .payload.commits[0].url }')
# Append the commit data to the member's entry in all_commits
all_commits+=("$commits_data")
else
echo "No new commit data for $member."
fi
done
if [[ ${#all_commits[@]} -gt 0 ]]; then
# Save the commits data to data.json
sorted_commits=$(echo "${all_commits[@]}" | jq -s .)
mkdir -p data
echo "$sorted_commits" > data/data.json
else
echo "No new commit data for any member." > data/empty_commit_data.txt
fi
- name: Commit and push fetched data to repository
run: |
cd $GITHUB_WORKSPACE
git config user.email "[email protected]"
git config user.name "GitHub Actions"
if [[ -n $(git status --porcelain) ]]; then
git add data
git commit -m "Update commit data"
git push origin master
fi