From 139434385aa719ba121b6223274bb6aff2f56a76 Mon Sep 17 00:00:00 2001 From: David Rowland Date: Tue, 13 Oct 2026 17:05:38 +0100 Subject: [PATCH 1/2] GitHub Actions: show per-test results from the JUnit reports in the job summary and annotations --- .github/actions/README.md | 44 ++++++++++++++++++++++-- .github/actions/acceptance/acceptance.sh | 27 +++++++++++---- .github/actions/acceptance/action.yml | 4 +++ .github/actions/common/common.sh | 33 ++++++++++++++++++ .github/actions/common/junit.awk | 42 ++++++++++++++++++++++ .github/actions/validate/action.yml | 4 +++ .github/actions/validate/validate.sh | 24 ++++++++++--- CLAUDE.md | 5 ++- 8 files changed, 169 insertions(+), 14 deletions(-) create mode 100644 .github/actions/common/junit.awk diff --git a/.github/actions/README.md b/.github/actions/README.md index 45264a9..6f0969e 100644 --- a/.github/actions/README.md +++ b/.github/actions/README.md @@ -2,8 +2,13 @@ Two composite actions for using pluginval from another repository's workflows. Both run on Linux, macOS and Windows runners, download the matching pluginval -release (or use a binary you give them), run everything they are given, write a -results table to the job summary and fail the step if anything failed. +release (or use a binary you give them), run everything they are given and fail +the step if anything failed. + +Results are shown in two places: the job summary gets a table with a row per +plugin / config and its test count, followed by the name and message of every +failed test; and each failed plugin / config gets an error annotation naming its +failed tests, which also appears in the pull request's checks. On Linux the plugin is run under `xvfb-run` when there is no `DISPLAY` (install `xvfb` on runners that don't have it). @@ -27,6 +32,7 @@ Validates one or more plugins. | `plugins` | (required) | The plugins to validate, one per line. Each is a path, a glob or an AU id. A glob that matches nothing fails. | | `strictness-level` | `5` | The strictness level (1-10). | | `args` | | Extra options for `pluginval validate`, split on whitespace. | +| `report-dir` | | Directory to write the JUnit XML reports to (a temporary directory if empty). | | `pluginval-version` | `v2.0.0-beta1` | The pluginval release to download: a tag, or `latest`. | | `pluginval-path` | | An existing pluginval binary to use instead of downloading one. | @@ -53,6 +59,7 @@ plugin. | `plugin` | | Plugin path or AU id to test every config against, instead of the `plugin` in each config. | | `record-missing` | `false` | Record a missing reference and pass, instead of failing. | | `timeout-ms` | | Fail a test if it takes longer than this (pluginval's default if empty). | +| `report-dir` | | Directory to write the JUnit XML reports to (a temporary directory if empty). | | `pluginval-version` | `v2.0.0-beta1` | The pluginval release to download: a tag, or `latest`. | | `pluginval-path` | | An existing pluginval binary to use instead of downloading one. | @@ -90,3 +97,36 @@ To keep the reports and diffs from a failed run: name: pluginval-acceptance-${{ runner.os }} path: ${{ steps.acceptance.outputs.report-dir }} ``` + +### Per-test results as a pull request check + +The actions report failures through the job summary and annotations, which need +no extra permissions. If you would rather have every pluginval test listed as its +own check on the pull request, feed the JUnit reports to a reporter action such +as [mikepenz/action-junit-report](https://github.com/mikepenz/action-junit-report) +or [dorny/test-reporter](https://github.com/dorny/test-reporter): + +```yaml +jobs: + validate: + runs-on: macos-latest + permissions: + contents: read + checks: write + steps: + # ... build the plugin ... + + - uses: Tracktion/pluginval/.github/actions/validate@v2 + with: + plugins: build/MyPlugin_artefacts/Release/VST3/MyPlugin.vst3 + report-dir: pluginval-reports + + - uses: mikepenz/action-junit-report@v5 + if: always() + with: + report_paths: pluginval-reports/*.xml + check_name: pluginval +``` + +This needs the `checks: write` permission, which workflows triggered by pull +requests from forks don't get, so on those the reporter step can't publish. diff --git a/.github/actions/acceptance/acceptance.sh b/.github/actions/acceptance/acceptance.sh index 68dd63d..c3fd9ed 100644 --- a/.github/actions/acceptance/acceptance.sh +++ b/.github/actions/acceptance/acceptance.sh @@ -27,6 +27,7 @@ passed=0 failed=0 index=0 rows="" +details="" # Every *.json is a config, except the .wav.json manifests that # pluginval writes next to each reference. @@ -44,22 +45,29 @@ for config in ${configs[@]+"${configs[@]}"}; do # pluginval only runs the first entry of an array config, so reject them # rather than silently skipping tests. if [ "$(tr -d '[:space:]' < "$config" | head -c 1)" = "[" ]; then - echo "Array configs aren't supported: use one config per file." + failure="Array configs aren't supported: use one config per file." + echo "$failure" code=1 else run_pluginval test ${options[@]+"${options[@]}"} --junit-xml "$report" "$config" code=$? + failure="pluginval exited with code $code (see the log)" fi echo "::endgroup::" + # The per-test results come from the JUnit report; pass / fail from the exit code. + read_report "$report" + if [ $code -eq 0 ]; then passed=$((passed + 1)) - rows="$rows| \`$name\` | :white_check_mark: passed |"$'\n' + rows="$rows| \`$name\` | :white_check_mark: passed | $REPORT_TESTS |"$'\n' else failed=$((failed + 1)) - rows="$rows| \`$name\` | :x: failed |"$'\n' - echo "::error::pluginval acceptance test failed: $name" + rows="$rows| \`$name\` | :x: failed | $REPORT_TESTS |"$'\n' + [ -z "$REPORT_DETAILS" ] && REPORT_DETAILS=" - $failure"$'\n' + details="$details- \`$name\`"$'\n'"$REPORT_DETAILS" + annotate_error "pluginval acceptance test failed: $name" "${REPORT_NAMES:-$failure}" fi done @@ -78,9 +86,16 @@ done { echo "### pluginval acceptance tests" echo - echo "| Config | Result |" - echo "| --- | --- |" + echo "| Config | Result | Tests |" + echo "| --- | --- | --- |" printf '%s' "$rows" + + if [ -n "$details" ]; then + echo + echo "#### Failed tests" + echo + printf '%s' "$details" + fi } >> "$GITHUB_STEP_SUMMARY" { diff --git a/.github/actions/acceptance/action.yml b/.github/actions/acceptance/action.yml index 03f2cce..5dafc2a 100644 --- a/.github/actions/acceptance/action.yml +++ b/.github/actions/acceptance/action.yml @@ -18,6 +18,9 @@ inputs: timeout-ms: description: Fail a test if it takes longer than this (pluginval's default if empty). default: '' + report-dir: + description: Directory to write the JUnit XML reports to (a temporary directory if empty). + default: '' pluginval-version: description: The pluginval release to download - a tag (e.g. v2.0.0-beta1) or "latest". default: v2.0.0-beta1 @@ -46,6 +49,7 @@ runs: INPUT_PLUGIN: ${{ inputs.plugin }} INPUT_RECORD_MISSING: ${{ inputs.record-missing }} INPUT_TIMEOUT_MS: ${{ inputs.timeout-ms }} + INPUT_REPORT_DIR: ${{ inputs.report-dir }} INPUT_PLUGINVAL_VERSION: ${{ inputs.pluginval-version }} INPUT_PLUGINVAL_PATH: ${{ inputs.pluginval-path }} run: bash "$GITHUB_ACTION_PATH/acceptance.sh" diff --git a/.github/actions/common/common.sh b/.github/actions/common/common.sh index 0bdccce..7db6dd7 100644 --- a/.github/actions/common/common.sh +++ b/.github/actions/common/common.sh @@ -2,6 +2,8 @@ # Shared helpers for the pluginval composite actions (sourced, not run). # Kept compatible with bash 3.2, which is what macOS runners ship. +COMMON_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + # Defaults so the scripts can also be run outside of GitHub Actions. if [ -z "${RUNNER_OS:-}" ]; then if [ "$(uname -s)" = "Darwin" ]; then RUNNER_OS=macOS @@ -72,3 +74,34 @@ sanitise() { printf '%s' "$1" | tr -c 'A-Za-z0-9._-' '_' } + +# Reads a JUnit XML report written by pluginval and sets: +# REPORT_TESTS a summary-table cell, e.g. "17" or "2 of 17 failed" +# REPORT_NAMES "name: message" per failed test, "; " separated (for the annotation) +# REPORT_DETAILS a markdown list item per failed test (for the job summary) +# All three are empty if there is no report. +read_report() +{ + REPORT_TESTS="" + REPORT_NAMES="" + REPORT_DETAILS="" + + [ -f "$1" ] || return 0 + + local kind first second + while IFS=$'\t' read -r kind first second; do + if [ "$kind" = "T" ]; then + if [ "$second" -gt 0 ]; then REPORT_TESTS="$second of $first failed"; else REPORT_TESTS="$first"; fi + elif [ "$kind" = "F" ]; then + REPORT_NAMES="${REPORT_NAMES:+$REPORT_NAMES; }$first: $second" + REPORT_DETAILS="$REPORT_DETAILS - **${first//|/\\|}**: ${second//|/\\|}"$'\n' + fi + done < <(awk -f "$COMMON_DIR/junit.awk" "$1") +} + +# Prints an ::error annotation, escaping the message as workflow commands need. +annotate_error() +{ + local message="${2//%/%25}" + echo "::error title=$1::$message" +} diff --git a/.github/actions/common/junit.awk b/.github/actions/common/junit.awk new file mode 100644 index 0000000..b7a5a74 --- /dev/null +++ b/.github/actions/common/junit.awk @@ -0,0 +1,42 @@ +# Summarises a pluginval JUnit XML report (--junit-xml) as tab-separated lines: +# T the totals (failures + errors) +# F one per failed test +# Written for POSIX awk (macOS ships BSD awk), so no gawk extensions. + +function attr(s, key, start, rest) +{ + start = index(s, " " key "=\"") + if (start == 0) return "" + rest = substr(s, start + length(key) + 3) + return substr(rest, 1, index(rest, "\"") - 1) +} + +function unescape(s) +{ + gsub(/[03];/, " ", s) + gsub(/</, "<", s) + gsub(/>/, ">", s) + gsub(/"/, "\"", s) + gsub(/'/, "\047", s) + gsub(/&/, "\\&", s) + gsub(/[\t ]+/, " ", s) + return s +} + +{ sub(/\r$/, ""); xml = xml " " $0 } + +END { + count = split(xml, cases, " 300) message = substr(message, 1, 300) "..." + printf "F\t%s\t%s\n", unescape(attr(" " cases[i], "name")), message + } +} diff --git a/.github/actions/validate/action.yml b/.github/actions/validate/action.yml index 0eaceb6..15043f3 100644 --- a/.github/actions/validate/action.yml +++ b/.github/actions/validate/action.yml @@ -16,6 +16,9 @@ inputs: "--skip-gui-tests --timeout-ms 60000"). Any option can also be set as an environment variable on the step. default: '' + report-dir: + description: Directory to write the JUnit XML reports to (a temporary directory if empty). + default: '' pluginval-version: description: The pluginval release to download - a tag (e.g. v2.0.0-beta1) or "latest". default: v2.0.0-beta1 @@ -43,6 +46,7 @@ runs: INPUT_PLUGINS: ${{ inputs.plugins }} INPUT_STRICTNESS_LEVEL: ${{ inputs.strictness-level }} INPUT_ARGS: ${{ inputs.args }} + INPUT_REPORT_DIR: ${{ inputs.report-dir }} INPUT_PLUGINVAL_VERSION: ${{ inputs.pluginval-version }} INPUT_PLUGINVAL_PATH: ${{ inputs.pluginval-path }} run: bash "$GITHUB_ACTION_PATH/validate.sh" diff --git a/.github/actions/validate/validate.sh b/.github/actions/validate/validate.sh index 7ad2841..ef34dd5 100644 --- a/.github/actions/validate/validate.sh +++ b/.github/actions/validate/validate.sh @@ -14,6 +14,7 @@ passed=0 failed=0 index=0 rows="" +details="" # One plugin per line (not comma-separated: AU ids contain commas). Globs are # left to expand; anything that matches nothing is passed through and fails. @@ -33,14 +34,20 @@ for plugin in ${plugins[@]+"${plugins[@]}"}; do run_pluginval validate --strictness-level "${INPUT_STRICTNESS_LEVEL:-5}" --junit-xml "$report" ${INPUT_ARGS:-} "$plugin" code=$? echo "::endgroup::" + failure="pluginval exited with code $code (see the log)" + + # The per-test results come from the JUnit report; pass / fail from the exit code. + read_report "$report" if [ $code -eq 0 ]; then passed=$((passed + 1)) - rows="$rows| \`$plugin\` | :white_check_mark: passed |"$'\n' + rows="$rows| \`$plugin\` | :white_check_mark: passed | $REPORT_TESTS |"$'\n' else failed=$((failed + 1)) - rows="$rows| \`$plugin\` | :x: failed |"$'\n' - echo "::error::pluginval validation failed: $plugin" + rows="$rows| \`$plugin\` | :x: failed | $REPORT_TESTS |"$'\n' + [ -z "$REPORT_DETAILS" ] && REPORT_DETAILS=" - $failure"$'\n' + details="$details- \`$plugin\`"$'\n'"$REPORT_DETAILS" + annotate_error "pluginval validation failed: $plugin" "${REPORT_NAMES:-$failure}" fi done @@ -52,9 +59,16 @@ fi { echo "### pluginval validate" echo - echo "| Plugin | Result |" - echo "| --- | --- |" + echo "| Plugin | Result | Tests |" + echo "| --- | --- | --- |" printf '%s' "$rows" + + if [ -n "$details" ]; then + echo + echo "#### Failed tests" + echo + printf '%s' "$details" + fi } >> "$GITHUB_STEP_SUMMARY" { diff --git a/CLAUDE.md b/CLAUDE.md index 074a158..8fc509a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -544,7 +544,10 @@ runs its sibling bash script (`validate.sh` / `acceptance.sh`); shared helpers are in `common/common.sh`. The scripts must stay bash 3.2 compatible (macOS runners) and can be run locally by setting the `INPUT_*` variables. They run every item, write a job-summary table and `passed` / `failed` / `report-dir` -outputs, and exit non-zero if anything failed. `.github/workflows/acceptance.yml` +outputs, and exit non-zero if anything failed. Pass / fail comes from the exit +code; the per-test counts, failed-test names and messages in the summary and +error annotations are parsed from each item's `--junit-xml` report by +`common/junit.awk` (POSIX awk, no gawk extensions). `.github/workflows/acceptance.yml` dogfoods both against the in-repo build, including the expected-failure cases. Without the actions: From 066e9ff65c12c5475f59c3bfb69c183fd0ae1937 Mon Sep 17 00:00:00 2001 From: David Rowland Date: Tue, 13 Oct 2026 17:39:17 +0100 Subject: [PATCH 2/2] GitHub Actions: moved the action.yml files to validate/ and acceptance/ at the repo root for shorter references --- .github/actions/README.md | 10 ++++++---- .github/workflows/acceptance.yml | 14 +++++++------- CHANGELIST.md | 2 +- CLAUDE.md | 15 ++++++++++----- .../actions/acceptance => acceptance}/action.yml | 3 ++- docs/Acceptance testing.md | 2 +- docs/Adding pluginval to CI.md | 2 +- {.github/actions/validate => validate}/action.yml | 3 ++- 8 files changed, 30 insertions(+), 21 deletions(-) rename {.github/actions/acceptance => acceptance}/action.yml (91%) rename {.github/actions/validate => validate}/action.yml (91%) diff --git a/.github/actions/README.md b/.github/actions/README.md index 6f0969e..5c4d833 100644 --- a/.github/actions/README.md +++ b/.github/actions/README.md @@ -1,6 +1,8 @@ # pluginval GitHub Actions Two composite actions for using pluginval from another repository's workflows. +Their `action.yml` files are in `validate/` and `acceptance/` at the repository +root, which keeps the references short; the scripts they run are in this directory. Both run on Linux, macOS and Windows runners, download the matching pluginval release (or use a binary you give them), run everything they are given and fail the step if anything failed. @@ -18,7 +20,7 @@ On Linux the plugin is run under `xvfb-run` when there is no `DISPLAY` (install Validates one or more plugins. ```yaml -- uses: Tracktion/pluginval/.github/actions/validate@v2 +- uses: Tracktion/pluginval/validate@v2 with: plugins: | build/MyPlugin_artefacts/Release/VST3/MyPlugin.vst3 @@ -47,7 +49,7 @@ Runs the [acceptance tests](../../docs/Acceptance%20testing.md) for every config plugin. ```yaml -- uses: Tracktion/pluginval/.github/actions/acceptance@v2 +- uses: Tracktion/pluginval/acceptance@v2 with: config-dir: tests/acceptance plugin: build/MyPlugin_artefacts/Release/VST3/MyPlugin.vst3 @@ -85,7 +87,7 @@ Both actions set: To keep the reports and diffs from a failed run: ```yaml -- uses: Tracktion/pluginval/.github/actions/acceptance@v2 +- uses: Tracktion/pluginval/acceptance@v2 id: acceptance with: config-dir: tests/acceptance @@ -116,7 +118,7 @@ jobs: steps: # ... build the plugin ... - - uses: Tracktion/pluginval/.github/actions/validate@v2 + - uses: Tracktion/pluginval/validate@v2 with: plugins: build/MyPlugin_artefacts/Release/VST3/MyPlugin.vst3 report-dir: pluginval-reports diff --git a/.github/workflows/acceptance.yml b/.github/workflows/acceptance.yml index 8109cdf..c7d4b36 100644 --- a/.github/workflows/acceptance.yml +++ b/.github/workflows/acceptance.yml @@ -69,7 +69,7 @@ jobs: working-directory: build run: ctest -C Release --output-on-failure -R pluginval.acceptance - # The reusable actions in .github/actions, run against the build above + # The reusable actions (validate/ and acceptance/), run against the build above # (pluginval-path) rather than a downloaded release. - name: Prepare action fixtures id: fixtures @@ -100,7 +100,7 @@ jobs: - name: "Action: validate" id: validate - uses: ./.github/actions/validate + uses: ./validate with: pluginval-path: ${{ steps.fixtures.outputs.pluginval }} args: --skip-gui-tests @@ -109,7 +109,7 @@ jobs: - name: "Action: validate (missing plugin, expected to fail)" id: validate-missing continue-on-error: true - uses: ./.github/actions/validate + uses: ./validate with: pluginval-path: ${{ steps.fixtures.outputs.pluginval }} args: --skip-gui-tests @@ -119,7 +119,7 @@ jobs: - name: "Action: acceptance" id: acceptance - uses: ./.github/actions/acceptance + uses: ./acceptance with: pluginval-path: ${{ steps.fixtures.outputs.pluginval }} config-dir: build/action-fixtures/good @@ -128,7 +128,7 @@ jobs: - name: "Action: acceptance (bad configs, expected to fail)" id: acceptance-bad continue-on-error: true - uses: ./.github/actions/acceptance + uses: ./acceptance with: pluginval-path: ${{ steps.fixtures.outputs.pluginval }} config-dir: build/action-fixtures/bad @@ -137,7 +137,7 @@ jobs: - name: "Action: acceptance (missing reference, expected to fail)" id: acceptance-missing continue-on-error: true - uses: ./.github/actions/acceptance + uses: ./acceptance with: pluginval-path: ${{ steps.fixtures.outputs.pluginval }} config-dir: build/action-fixtures/missing @@ -145,7 +145,7 @@ jobs: - name: "Action: acceptance (record the missing reference)" id: acceptance-record - uses: ./.github/actions/acceptance + uses: ./acceptance with: pluginval-path: ${{ steps.fixtures.outputs.pluginval }} config-dir: build/action-fixtures/missing diff --git a/CHANGELIST.md b/CHANGELIST.md index 0ae417d..f816eab 100644 --- a/CHANGELIST.md +++ b/CHANGELIST.md @@ -6,7 +6,7 @@ - Added `--junit-xml ` and `--json-results ` to both `pluginval validate` and `pluginval test` to write machine-readable reports for CI (also settable as `JUNIT_XML` / `JSON_RESULTS`). A report that can't be written fails the run. See `docs/Adding pluginval to CI.md` - Added acceptance testing: `pluginval test ` renders a plugin with a known state, input (audio/MIDI) and optional playhead, then compares the output against a checked-in reference WAV, exiting `0` on a match and `1` on a mismatch (with a diff WAV). Use `--record-missing` to record new references. See `docs/Acceptance testing.md` - Added `--plugin ` to `pluginval test` to run a config against a given plugin instead of the one it names (the config's `plugin` can then be omitted) -- Added two GitHub Actions for use from other repositories: `Tracktion/pluginval/.github/actions/validate` (validate a list of plugins) and `.../acceptance` (run every acceptance config in a directory against a built plugin). See `.github/actions/README.md` +- Added two GitHub Actions for use from other repositories: `Tracktion/pluginval/validate` (validate a list of plugins) and `Tracktion/pluginval/acceptance` (run every acceptance config in a directory against a built plugin). See `.github/actions/README.md` - Restructured the command line into subcommands: `pluginval validate [options] ` (the default), `pluginval run-tests` and `pluginval strictness-help [level]`. The plugin path is now a positional argument of `validate` - **Deprecated:** the flat flags `--validate `, `--run-tests` and `--strictness-help [level]` still work as aliases (with a one-line notice) but will be removed in a future version. `pluginval ` remains a silent shorthand for `validate` - Replaced the hand-rolled command-line parser with CLI11 and a single JSON-based settings pipeline diff --git a/CLAUDE.md b/CLAUDE.md index 8fc509a..c3f2759 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -122,8 +122,10 @@ pluginval/ │ ├── mac_tests/ # macOS-specific tests │ └── windows_tests.bat # Windows test scripts ├── .github/ -│ ├── actions/ # Composite actions for other repos: validate/, acceptance/, common/ (see README.md there) +│ ├── actions/ # Scripts + README for the composite actions: validate/, acceptance/, common/ │ └── workflows/ # build.yaml (release build), acceptance.yml (acceptance self-tests + action dogfooding) +├── validate/action.yml # Composite action: Tracktion/pluginval/validate (runs .github/actions/validate/validate.sh) +├── acceptance/action.yml # Composite action: Tracktion/pluginval/acceptance (runs .github/actions/acceptance/acceptance.sh) ├── docs/ # Documentation │ ├── Adding pluginval to CI.md │ ├── Command line options.md @@ -530,8 +532,10 @@ add_pluginval_tests(MyPluginTarget ### GitHub Actions -Two composite actions for other repositories live in `.github/actions/` -(documented in `.github/actions/README.md`): +Two composite actions for other repositories, referenced as +`Tracktion/pluginval/validate@v2` and `Tracktion/pluginval/acceptance@v2`. Only +their `action.yml` files sit at the repo root (`validate/`, `acceptance/`), to +keep those references short; the scripts and `README.md` are in `.github/actions/`: - `validate/` - validates a newline-separated list of plugins / globs / AU ids. - `acceptance/` - runs `pluginval test` for every `*.json` (recursively, skipping @@ -539,7 +543,8 @@ Two composite actions for other repositories live in `.github/actions/` optionally passing one built plugin via `--plugin`. Each `action.yml` only maps its inputs to `INPUT_*` environment variables and -runs its sibling bash script (`validate.sh` / `acceptance.sh`); shared helpers +runs its bash script (`.github/actions/validate/validate.sh` / `acceptance/acceptance.sh`, +found relative to `$GITHUB_ACTION_PATH`); shared helpers (downloading the release or using `pluginval-path`, the Linux `xvfb-run` wrapper) are in `common/common.sh`. The scripts must stay bash 3.2 compatible (macOS runners) and can be run locally by setting the `INPUT_*` variables. They run @@ -601,7 +606,7 @@ Run internal tests via CLI: 4. Tag: `git tag -a vX.Y.Z -m "X.Y.Z release"` 5. Push: `git push --tags` 6. Once the release binaries are published, bump the `pluginval-version` default - in both `.github/actions/*/action.yml` (and the README tables) to the new tag + in `validate/action.yml` and `acceptance/action.yml` (and the README tables) to the new tag A tag with a hyphen (e.g. `v2.0.0-beta1`) is published as a pre-release, so it doesn't become the "latest" release that the download URLs in the docs point at. diff --git a/.github/actions/acceptance/action.yml b/acceptance/action.yml similarity index 91% rename from .github/actions/acceptance/action.yml rename to acceptance/action.yml index 5dafc2a..8e35075 100644 --- a/.github/actions/acceptance/action.yml +++ b/acceptance/action.yml @@ -52,4 +52,5 @@ runs: INPUT_REPORT_DIR: ${{ inputs.report-dir }} INPUT_PLUGINVAL_VERSION: ${{ inputs.pluginval-version }} INPUT_PLUGINVAL_PATH: ${{ inputs.pluginval-path }} - run: bash "$GITHUB_ACTION_PATH/acceptance.sh" + # The scripts live in .github/actions so only this file sits at the repo root. + run: bash "$GITHUB_ACTION_PATH/../.github/actions/acceptance/acceptance.sh" diff --git a/docs/Acceptance testing.md b/docs/Acceptance testing.md index cc3b10f..a3e2e45 100644 --- a/docs/Acceptance testing.md +++ b/docs/Acceptance testing.md @@ -104,7 +104,7 @@ On GitHub Actions, the `acceptance` action runs every config in a directory (recursively) against a built plugin: ```yaml -- uses: Tracktion/pluginval/.github/actions/acceptance@v2 +- uses: Tracktion/pluginval/acceptance@v2 with: config-dir: tests/acceptance plugin: build/MyPlugin_artefacts/Release/VST3/MyPlugin.vst3 diff --git a/docs/Adding pluginval to CI.md b/docs/Adding pluginval to CI.md index 22b1c85..4380bdf 100644 --- a/docs/Adding pluginval to CI.md +++ b/docs/Adding pluginval to CI.md @@ -13,7 +13,7 @@ There a couple of different ways this can be done but the simplest is as follows On GitHub Actions the simplest route is the `validate` action, which downloads pluginval, validates each plugin and fails the job if any fail: ```yaml -- uses: Tracktion/pluginval/.github/actions/validate@v2 +- uses: Tracktion/pluginval/validate@v2 with: plugins: | build/MyPlugin_artefacts/Release/VST3/MyPlugin.vst3 diff --git a/.github/actions/validate/action.yml b/validate/action.yml similarity index 91% rename from .github/actions/validate/action.yml rename to validate/action.yml index 15043f3..708c86e 100644 --- a/.github/actions/validate/action.yml +++ b/validate/action.yml @@ -49,4 +49,5 @@ runs: INPUT_REPORT_DIR: ${{ inputs.report-dir }} INPUT_PLUGINVAL_VERSION: ${{ inputs.pluginval-version }} INPUT_PLUGINVAL_PATH: ${{ inputs.pluginval-path }} - run: bash "$GITHUB_ACTION_PATH/validate.sh" + # The scripts live in .github/actions so only this file sits at the repo root. + run: bash "$GITHUB_ACTION_PATH/../.github/actions/validate/validate.sh"