Using GitHub Actions to push changes
We can use GitHub Actions to push a new commit each time there is a new change detected.
I've recently had to do this to automate updating README.md
with a listing of the repository files each time a new push has been detected. The GitHub workflow is found here.
Here are the learnings that may come useful to others:
Using bash to clear file content
cat /dev/null > README.md
/dev/null
is a pseudo file in Linux that has no output so we can override a file with this empty content.
Using bash to echo a string with new line
echo -e '# Today I Learned\n' > README.md
-e
is required to escape backslashes. This allows us to print new line (\n
) when outputting to a file.
Using bash to read the first line of a file
head -n 1 $filename
Using bash to remove characters from a string
echo '# Title' | sed 's/# //'
sed
is short for Stream EDitor
and one of its common uses is pattern replacement. The above will remove #
from the string (by replacing it with an empty string).
Using bash to append string to file
echo 'My string' >> README.md
The >>
operator is used to append to a file (or create the file if it does not exist).
Using GitHub Actions to push changes to a repository
actions/checkout is an offical GitHub Action that can checkout a repository. We can also use this to push changes back.
on: push
jobs:
update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: |
# Clear README.md
cat /dev/null > README.md
# Add Title
echo -e '# Today I Learned\n' > README.md
# Loop through all TILs and add to README.md
dir=./learnings
for filename in "$dir"/*
do
title=$(head -n 1 $filename | sed 's/# //')
echo "- [$title](https://github.com/petermekhaeil/til/blob/master/$filename)" >> README.md
done
# Push changes
git config user.name github-actions
git config user.email github-actions@github.com
git add README.md
git commit -m "Update README.md"
git push