action-template
runs the Jinja2 templating engine against any given files during a GitHub workflow, and makes the GitHub context available to it.
action-template can be used as a GitHub Action;
name: Sample Workflow
on:
push:
branches:
- master
permissions:
contents: write
jobs:
templating:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: master
- uses: release-engineers/action-template@v2
with:
source: 'README.md.template'
target: 'README.md'
- shell: bash
run: |
git config --global --add safe.directory '*'
git config --local user.name 'github-actions[bot]'
git config --local user.email 'github-actions[bot]@users.noreply.github.com'
git add README.md
if git commit --no-verify -m "docs: Regenerate README.md"; then
# rebase and push in a retry loop
for i in {1..5}; do
git pull --rebase && git push && break || sleep 1
done
fi
The GitHub context available to workflows is also available to templates like so;
{{ github.repository }}
When evaluated becomes:
release-engineers/action-template
The example workflow under the Usage paragraph was loaded using;
{{ load('.github/workflows/example.yml') }}
Parse and handle JSON data from files in the working directory like so;
{{ load_json('tests/data/data.json').info.from_json }}
When evaluated becomes:
This text is a JSON value in a file.
Parse and handle YAML data from files in the working directory like so;
{{ load_yaml('tests/data/data.yml').info.from_yaml }}
When evaluated becomes:
This text is a YAML value in a file
Parse and obtain a Markdown table of contents from files in the working directory like so;
{{ load_markdown_toc('tests/data/data.md') }}
When evaluated becomes:
<div class="toc">
<ul>
<li><a href="#header-one">Header One</a><ul>
<li><a href="#header-two">Header Two</a><ul>
<li><a href="#header-three">Header Three</a></li>
<li><a href="#header-three-two">Header Three, Two</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
Parse and handle Markdown table of contents data from files in the working directory like so;
{{ load_markdown_toc_tokens('tests/data/data.md') }}
When evaluated becomes:
[{'level': 1, 'id': 'header-one', 'name': 'Header One', 'children': [{'level': 2, 'id': 'header-two', 'name': 'Header Two', 'children': [{'level': 3, 'id': 'header-three', 'name': 'Header Three', 'children': []}, {'level': 3, 'id': 'header-three-two', 'name': 'Header Three, Two', 'children': []}]}]}]
This is a Python Poetry project using Fire. See Poetry for more information.
Development requires:
This project was created using template-poetry.