gitgithub-actionspandocgit-checkout

Git actions/checkout "ambiguous argument 'HEAD^'"


This is my first time using git actions. I want to create different filetypes of the same text using pandoc. Since I'm using free runtime for this (and there may be more actions to come) I want to keep the runtime as minimal as possible. Here is my git action:

name: conditional_convert_via_pandoc
on:
  push:
    branches:
      - 'main' # Do the work exclusively for the deploying branch

jobs:
  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: 1
        # change to (thx to @mb21): 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 to/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

but this fails on $diff = git diff --name-only --diff-filter=AM HEAD^ HEAD (code was based on Gérald Barré's example) with ambiguous argument 'HEAD^'. I don't get why this is a problem, since the action only works on a push in a quite worked on repo, so there should be enough history

I tried putting HEAD^ in double quotation marks (according to this post) but it failes nonetheless.

Since I can't get past this error I don't know if the rest works, so any comments on that are gladly welcomed


Solution

  • Thanks to @mb21 the issue was detected: Simply use fetch-depth: 2