In a previous post, I discussed a GitHub Action automation that I set up. In that post, I showcased how they could automate the concatenation of blog posts. But, as it turns out, ya boi is a little dumb. I made a mistake, and it didn’t work correctly, as the continuous integration I had set up was a little less continuous than I had planned—apologies about misleading y’all, mea culpa, mea maxima culpa.

This post is all about righting that terrible wrong.

The Issue with the Original Automation

Initially, the GitHub Action was designed to trigger upon each commit. It seemed seamless, but I recently realized it wasn’t functioning as I anticipated. The trigger was not triggering correctly, causing the concatenation action not to happen and defeating the original post’s whole purpose.

Rewriting the Automation

The solution? A minor overhaul. I shifted the automation trigger from commit-based to a more reliable, time-based approach. Now, the GitHub Action kicks off every hour, ensuring a consistent and timely update to the blog, irrespective of when I commit.

Updated GitHub Workflow YAML

The critical update is in the first couple of lines of the workflow YAML. Here’s a glimpse into the modification:

# Excerpt from concatenate_posts.yml
on:
  schedule:
    - cron: '0 * * * *'

This snippet illustrates the shift to a cron schedule, triggering the Action hourly. It’s a simple yet effective change, enhancing the reliability of the automation process.

This process now runs every hour and creates an updated concatenated posts file.

The whole YAML file is as follows:

name: Hourly Check and Concatenate MD Files with Metadata

on:
  schedule:
    - cron: '0 * * * *'
    
jobs:
  check-main-branch:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2

    - name: Concatenate .md files with metadata
      run: |
        mkdir -p workflows_output
        > workflows_output/concatenated_posts.md
        cd _posts
        for file in *.md; do
            echo "File: $file" >> ../workflows_output/concatenated_posts.md
            echo "Creation Date: $(git log --format=\"%aD\" -n 1 -- $file)" >> ../workflows_output/concatenated_posts.md
            cat "$file" >> ../workflows_output/concatenated_posts.md
            echo "------------------------" >> ../workflows_output/concatenated_posts.md
        done

    - name: Commit and push if there are changes
      run: |
        git config --local user.email "action@github.com"
        git config --local user.name "GitHub Action"
        git add -A
        git diff --quiet && git diff --staged --quiet || git commit -m "Concatenated .md files with metadata"
        git push

Cheers,
Erkin
Go ÖN Home