Test Git Action #9
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: conditional_convert_via_pandoc | |
# | |
# A script to check for changed and added .md files in content/ and convert those with pandoc (except for _index.md) | |
# | |
# Thanks to Gérald Barré aka. meziantou for the basic template of the condition check | |
# Written by Marcel Kaiser | |
# | |
# published: 2024-10-29 | |
# last edit: 2024-10-29 | |
# | |
on: | |
push: | |
branches: | |
- 'main' # Do the work exclusively for the branch deploying the website | |
jobs: | |
# Seperate jobs to be able to possibly use condition_check_files for other tasks as well | |
condition_check_files: | |
runs-on: 'ubuntu-22.04' | |
# Declare outputs for next jobs | |
outputs: | |
bool_files_changed: ${{ steps.check_file_changed.outputs.bool_files_changed }} | |
list_changed_files: ${{ steps.check_file_changed.outputs.list_changed_files }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
- shell: pwsh | |
id: check_file_changed | |
run: | | |
# Look only for changed files (A - added, M - modified) and return their names (the specific changes are irrelevant) | |
$diff = git diff --name-only --diff-filter=AM "HEAD^" HEAD | |
# Filter the files under content/ with the .md extension excluding the Hugo associated _index.md files | |
$SourceDiff = $diff | Where-Object { $_ -match '^content/' -and $_ -match '.md$' -and -not ($_ -match '_index.md') } | |
$HasDiff = $SourceDiff.Length -gt 0 | |
# Set the output named "bool_files_changed" | |
echo "{bool_files_changed}={$HasDiff}" >> $GITHUB_OUTPUT | |
echo "{list_changed_files}={$SourceDiff}" >> $GITHUB_OUTPUT | |
# Run the job only with 'bool_files_changed' equals 'True' | |
conditional_pandoc: | |
runs-on: 'ubuntu-22.04' | |
needs: [ condition_check_files ] | |
if: needs.condition_check_files.outputs.bool_files_changed == 'True' | |
steps: | |
- uses: docker://pandoc/latex:3.5 | |
- shell: pwsh | |
run: | | |
# List types which will only use --standalone. You can easily add more extensions if you're fine with this setting | |
$ONLY_STANDALONE_OUTPUT_TYPES = "latex pdf html docx odt" | |
# Use as many cores as available to be as fast as possible | |
parallel --jobs 0 \ | |
# Pandoc creates an AST (Abstract Syntax Tree); reuse this by saving/reading from .ast | |
pandoc --from markdown {} --to native -o {.}.ast ';'\ | |
for i in $ONLY_STANDALONE_OUTPUT_TYPES';' do \ | |
pandoc --from native {.}.ast --standalone -o '{.}.$i' ';' \ | |
done';' \ | |
# You can easily add individual conversion rules by using pandoc after the 'done' part. Keep in mind to finish all non-comment lines with backslash | |
rm {.}.ast ::: needs.condition_changed_files.outputs.list_changed_files |