From b90f07f9459c0eecd45d6ecf712ea14f74609576 Mon Sep 17 00:00:00 2001 From: sonwr Date: Sun, 8 Mar 2026 02:40:59 +0000 Subject: [PATCH] fix(parser): allow empty trigger glob arrays --- crates/parser/src/github-workflow.json | 28 +++++++++++------- crates/parser/src/workflow.rs | 39 ++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 10 deletions(-) diff --git a/crates/parser/src/github-workflow.json b/crates/parser/src/github-workflow.json index 0c2099d..696b426 100644 --- a/crates/parser/src/github-workflow.json +++ b/crates/parser/src/github-workflow.json @@ -318,7 +318,7 @@ "type": "string", "minLength": 1 }, - "minItems": 1 + "minItems": 0 }, "machine": { "type": "string", @@ -1591,20 +1591,28 @@ "workflow_dispatch": { "$comment": "https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/", "description": "You can now create workflows that are manually triggered with the new workflow_dispatch event. You will then see a 'Run workflow' button on the Actions tab, enabling you to easily trigger a run.", - "properties": { - "inputs": { - "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputs", - "description": "Input parameters allow you to specify data that the action expects to use during runtime. GitHub stores input parameters as environment variables. Input ids with uppercase letters are converted to lowercase during runtime. We recommended using lowercase input ids.", + "oneOf": [ + { + "type": "null" + }, + { "type": "object", - "patternProperties": { - "^[_a-zA-Z][a-zA-Z0-9_-]*$": { - "$ref": "#/definitions/workflowDispatchInput" + "properties": { + "inputs": { + "$comment": "https://help.github.com/en/github/automating-your-workflow-with-github-actions/metadata-syntax-for-github-actions#inputs", + "description": "Input parameters allow you to specify data that the action expects to use during runtime. GitHub stores input parameters as environment variables. Input ids with uppercase letters are converted to lowercase during runtime. We recommended using lowercase input ids.", + "type": "object", + "patternProperties": { + "^[_a-zA-Z][a-zA-Z0-9_-]*$": { + "$ref": "#/definitions/workflowDispatchInput" + } + }, + "additionalProperties": false } }, "additionalProperties": false } - }, - "additionalProperties": false + ] }, "workflow_run": { "$comment": "https://docs.github.com/en/actions/reference/events-that-trigger-workflows#workflow_run", diff --git a/crates/parser/src/workflow.rs b/crates/parser/src/workflow.rs index 58a29cb..ebfcf94 100644 --- a/crates/parser/src/workflow.rs +++ b/crates/parser/src/workflow.rs @@ -190,3 +190,42 @@ fn normalize_triggers(on_value: &serde_yaml::Value) -> Result, Strin Ok(triggers) } + +#[cfg(test)] +mod tests { + use super::parse_workflow; + use std::fs; + use tempfile::tempdir; + + #[test] + fn parse_workflow_allows_null_workflow_dispatch_with_other_triggers() { + let temp_dir = tempdir().unwrap(); + let workflow_path = temp_dir.path().join("workflow.yml"); + + let content = r#" +name: trigger-test +on: + push: + branches: [] + tags-ignore: [] + release: + types: [prereleased, published] + workflow_dispatch: + +jobs: + test: + runs-on: ubuntu-latest + steps: + - run: echo hi +"#; + + fs::write(&workflow_path, content).unwrap(); + + let parsed = parse_workflow(&workflow_path); + assert!( + parsed.is_ok(), + "Expected workflow to parse successfully, got: {:?}", + parsed.err() + ); + } +}