Skip to content

ci: run-syntax gate does not read composite actions (.github/actions) #854

Open

Description

@gHashTag

What is missing

tools/check_run_syntax.py reads .github/workflows/*.yml only. The gate's workflow is triggered by .github/workflows/** and the tool itself. So the run: steps of a composite action under .github/actions/*/action.yml are not parsed by anything, and a change to an action alone does not even start the gate.

This matters from #852 on. That PR adds the first composite action here, .github/actions/openxc7-chipdb. Its three run steps are what 53 FPGA workflows now execute.

Fix

  • Glob .github/actions/*/action.yml (and action.yaml) next to the workflows.
  • When runs.using is composite, walk runs.steps. Composite steps must name a shell:, so shell_of takes it from the step, with no job or workflow defaults.
  • Add .github/actions/** to both paths: lists in run-syntax-gate.yml.
  • Add a self-test case: an action whose run step has an unbalanced quote must fail.

Evidence so far

Not measured

  • Whether other gates (undefined-outputs, paths, tee-pipefail) read composite actions either. Each of them should be checked the same way.

Part of #851.

Activity

  1. gHashTag commented on Oct 5, 2026

    @gHashTag
    OwnerAuthor

    Fix is up as #894 (stacked on #893).

    result
    self-test (laptop bash 3.2) 98 of 98, 23 new cases
    mutants of the new code 17 of 18 killed; the survivor (has_actions = True) is equivalent
    #852's tree as is 1 of 1 actions read, 0 bad
    #852's tree, unclosed " planted in the action's last step gate in #894 rc 1; gate at 54020cd rc 0

    One item from the fix list moved: .github/actions/** in run-syntax-gate.yml's paths: is in #852 (0c5f415), not #894. On main no tracked file matches it yet, and the workflow-path gate rejects that entry (audit_workflow_paths.py rc 1 with it, rc 0 without).

    Found on the way, also fixed in #852 (0c5f415): 46 workflows call openxc7-chipdb, and none of their triggers covered .github/actions/ (46 of 46 push filters, no pull_request trigger at all). An action-only change ran nothing. ax7203-led-onehot.yml now runs on a PR or a main push that touches the action.

    Still open from "Not measured": tools/check_tee_pipefail.py reads workflows only. In an action, shell: bash already carries -o pipefail, so the gap is shell: sh or a custom bash {0} with | tee; no action here has one today.

    🤖 Generated with Claude Code

  2. added a commit that references this issue on Oct 10, 2026
    1dbbb3d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions