Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Invalid value. Matching delimiter not found

In updating GitHub actions to reflect the recent announcement deprecating set-output, I have run into the following error attempting to send multiline output to GITHUB_OUTPUT following the provided documentation

Error: Unable to process file command 'output' successfully.

Error: Invalid value. Matching delimiter not found 'e8e24219e2b73f81'

Below is the example action:

name: Action Test
description: test new action output
runs:
  using: "composite"
  steps:
    - name : write
      run : |
        delimiter="$(openssl rand -hex 8)"
        echo "OUT<<${delimiter}" >> $GITHUB_OUTPUT
        cat test.json >> $GITHUB_OUTPUT
        echo "${delimiter}" >> $GITHUB_OUTPUT
      shell : bash
      id: write
    - name: Print Output
      run: echo ${{ steps.write.outputs.OUT }}
      shell: bash

In theory this should generate a random delimiter, put it at the beginning and end of the output, and allow the action to then print the multiline file. In practice, I'm unsure what is happening to the second instance of the delimiter as there is no match.

I have tried various solutions such as those posted in this topic

like image 970
grwadley Avatar asked Sep 03 '25 06:09

grwadley


1 Answers

This turned out not to be the issue at hand for the asker, but would lead to the same error message, so leaving it here:

The JSON file is missing a newline at the end, so the actual contents written to the output file look something like

OUT<<eabbd4511f4f29ab
{"key":"value"}eabbd4511f4f29ab

and the closing delimiter can't be found because it's not at the beginning of a line.

To fix, we can apply this answer to add a newline if it's missing:

      run : |
        delimiter=$(openssl rand -hex 8)
        {
            echo "OUT<<$delimiter"
            sed -e '$a\' test.json
            echo "$delimiter"
        } >> "$GITHUB_OUTPUT"
      shell: bash
like image 138
Benjamin W. Avatar answered Sep 05 '25 00:09

Benjamin W.