Fix if expressions in GitHub actions #219
Workflow file for this run
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
on: | |
push: | |
branches: | |
- master | |
pull_request: | |
workflow_dispatch: | |
repository_dispatch: | |
env: | |
CUSTOM_OUTPUT_RELATIVE_PATH: lychee/custom_output.md | |
CUSTOM_OUTPUT_ABSOLUTE_PATH: /tmp/report.md | |
CUSTOM_OUTPUT_DUMP_PATH: /tmp/dump.md | |
jobs: | |
lychee-action: | |
runs-on: ubuntu-latest | |
name: Test the lychee link checker action | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: test defaults | |
uses: ./ | |
- name: test explicit lychee version | |
uses: ./ | |
with: | |
lycheeVersion: v0.15.1 | |
- name: test nightly lychee version | |
uses: ./ | |
with: | |
lycheeVersion: nightly | |
- name: test latest lychee version | |
uses: ./ | |
with: | |
lycheeVersion: latest | |
- name: test globs | |
uses: ./ | |
with: | |
args: >- | |
--exclude-mail | |
--verbose | |
--no-progress | |
'./**/*.md' | |
'./**/*.html' | |
'./**/*.rst' | |
- name: test --base argument | |
uses: ./ | |
with: | |
args: >- | |
--base . | |
--verbose | |
--no-progress | |
'./**/*.md' | |
'./**/*.html' | |
'./**/*.rst' | |
- name: test custom output relative path - creation | |
uses: ./ | |
with: | |
output: "${{ env.CUSTOM_OUTPUT_RELATIVE_PATH }}" | |
debug: true | |
- name: test custom output relative path - validation | |
run: | | |
echo "Checking custom output file at ${{ env.CUSTOM_OUTPUT_RELATIVE_PATH }}" | |
if [ ! -f "${{ env.CUSTOM_OUTPUT_RELATIVE_PATH }}" ]; then | |
echo "Not found" | |
exit 1 | |
else | |
echo "Found. Contents:" | |
cat "${{ env.CUSTOM_OUTPUT_RELATIVE_PATH }}" | |
fi | |
- name: test custom output absolute path - creation | |
uses: ./ | |
with: | |
output: "${{ env.CUSTOM_OUTPUT_ABSOLUTE_PATH }}" | |
debug: true | |
- name: test custom output absolute path - validation | |
run: | | |
echo "Checking custom output file at ${{ env.CUSTOM_OUTPUT_ABSOLUTE_PATH }}" | |
if [ ! -f "${{ env.CUSTOM_OUTPUT_ABSOLUTE_PATH }}" ]; then | |
echo "Not found" | |
exit 1 | |
else | |
echo "Found. Contents:" | |
cat "${{ env.CUSTOM_OUTPUT_ABSOLUTE_PATH }}" | |
fi | |
- name: test dump with custom output path - creation | |
uses: ./ | |
with: | |
args: --dump './**/*.md' './**/*.html' './**/*.rst' | |
output: "${{ env.CUSTOM_OUTPUT_DUMP_PATH }}" | |
debug: true | |
- name: test dump with custom output path - validation | |
run: | | |
echo "Checking dump output file at ${{ env.CUSTOM_OUTPUT_DUMP_PATH }}" | |
if [ ! -f "${{ env.CUSTOM_OUTPUT_DUMP_PATH }}" ]; then | |
echo "Not found" | |
exit 1 | |
else | |
echo "Found. Contents:" | |
cat "${{ env.CUSTOM_OUTPUT_DUMP_PATH }}" | |
fi | |
- name: test output set in args and action input | |
id: output_set_in_args_and_action_input | |
uses: ./ | |
with: | |
args: --output foo - | |
output: bar | |
continue-on-error: true | |
- name: test output set in args and action input should fail - validation | |
if: steps.output_set_in_args_and_action_input.outcome != 'failure' | |
run: | | |
echo "Output set in args and action input should have failed." | |
exit 1 | |
- name: test fail - a lychee error should fail the pipeline | |
id: fail_test | |
uses: ./ | |
with: | |
args: --verbose --no-progress foo.bar | |
debug: true | |
continue-on-error: true | |
# Explicitly check the exit code of the previous step | |
# as it's expected to fail | |
- name: Check fail | |
if: steps.fail_test.outcome != 'failure' | |
run: | | |
echo "Fail should have failed because the URL is invalid." | |
exit 1 | |
- name: test disable fail - it's okay if lychee throws an error | |
uses: ./ | |
with: | |
args: --no-progress foo.bar | |
fail: false | |
- name: test failIfEmpty - no links in input should fail the pipeline | |
id: fail_if_empty_test | |
uses: ./ | |
with: | |
args: --verbose --no-progress fixtures/empty.md | |
debug: true | |
continue-on-error: true | |
# Explicitly check the exit code of the previous step | |
# as it's expected to fail | |
- name: Check failIfEmpty | |
if: steps.fail_if_empty_test.outcome != 'failure' | |
run: | | |
echo "FailIfEmpty should have failed because no links were found." | |
exit 1 | |
- name: test disable failIfEmpty - it's okay if no links are found | |
uses: ./ | |
with: | |
args: --no-progress fixtures/empty.md | |
failIfEmpty: false | |
- name: test disable failIfEmpty - a lychee error should still fail the pipeline | |
id: fail_but_not_failIfEmpty_test | |
uses: ./ | |
with: | |
args: --verbose --no-progress foo.bar | |
failIfEmpty: false | |
debug: true | |
continue-on-error: true | |
# Explicitly check the exit code of the previous step | |
# as it's expected to fail | |
- name: Check fail when failIfEmpty is disabled | |
if: steps.fail_but_not_failIfEmpty_test.outcome != 'failure' | |
run: | | |
echo "Fail should have failed because the URL is invalid, even though failIfEmpty is disabled." | |
exit 1 | |
- name: test disable fail - no links in input should still fail the pipeline | |
id: failIfEmpty_but_not_fail_test | |
uses: ./ | |
with: | |
args: --verbose --no-progress fixtures/empty.md | |
fail: false | |
debug: true | |
continue-on-error: true | |
# Explicitly check the exit code of the previous step | |
# as it's expected to fail | |
- name: Check failIfEmpty when fail is disabled | |
if: steps.failIfEmpty_but_not_fail_test.outcome != 'failure' | |
run: | | |
echo "FailIfEmpty should have failed because no links were found, even though fail is disabled." | |
exit 1 | |
- name: Install jq | |
run: sudo apt-get install jq | |
- name: test workflow inputs - Markdown | |
uses: ./ | |
with: | |
args: -v fixtures/TEST.md | |
format: json | |
output: ${{ github.workspace }}/foo_md.json | |
- name: Validate JSON - Markdown | |
run: | | |
if ! jq empty ${{ github.workspace }}/foo_md.json; then | |
echo "Output file does not exist or is not valid JSON" | |
exit 1 | |
fi | |
- name: test workflow inputs - rST | |
uses: ./ | |
with: | |
args: -v fixtures/TEST.rst | |
format: json | |
output: ${{ github.workspace }}/foo_rst.json | |
- name: Validate JSON - rST | |
run: | | |
if ! jq empty ${{ github.workspace }}/foo_rst.json; then | |
echo "Output file does not exist or is not valid JSON" | |
exit 1 | |
fi | |
- name: directory | |
uses: ./ | |
with: | |
args: --exclude-mail . | |
- name: test format override | |
uses: ./ | |
with: | |
args: --format markdown -v fixtures/TEST.md | |
format: doesnotexist # gets ignored if format set in args | |
output: ${{ github.workspace }}/foo.txt | |
- name: test debug | |
uses: ./ | |
with: | |
debug: true | |
- name: test custom GitHub token | |
uses: ./ | |
with: | |
token: ${{ secrets.CUSTOM_TOKEN }} | |
- name: Test exit code set in steps-output | |
id: lychee_exit_code_test | |
uses: ./ | |
with: | |
args: -- inputdoesnotexist | |
continue-on-error: true | |
- name: Check exit code in steps.outputs | |
run: | | |
echo "Lychee exit code: ${{ steps.lychee_exit_code_test.outputs.exit_code }}" | |
if [[ "${{ steps.lychee_exit_code_test.outputs.exit_code }}" == "1" ]]; then | |
echo "Lychee correctly failed with exit code 1" | |
else | |
echo "Unexpected exit code: ${{ steps.lychee_exit_code_test.outputs.exit_code }}" | |
echo "Expected exit code 1" | |
exit 1 | |
fi |