diff --git a/actions-languageservice/src/context-providers/events/repository_dispatch.json b/actions-languageservice/src/context-providers/events/repository_dispatch.json index fd32d52..0f3c2b4 100644 --- a/actions-languageservice/src/context-providers/events/repository_dispatch.json +++ b/actions-languageservice/src/context-providers/events/repository_dispatch.json @@ -1,10 +1,7 @@ { "action": "on-demand-test", "branch": "master", - "client_payload": { - "unit": false, - "integration": true - }, + "client_payload": {}, "repository": { "id": 17273051, "node_id": "MDEwOlJlcG9zaXRvcnkxNzI3MzA1MQ==", diff --git a/actions-languageservice/src/context-providers/github.ts b/actions-languageservice/src/context-providers/github.ts index 14a9e69..af43d20 100644 --- a/actions-languageservice/src/context-providers/github.ts +++ b/actions-languageservice/src/context-providers/github.ts @@ -99,6 +99,13 @@ function getEventContext(workflowContext: WorkflowContext): ExpressionData { function merge(d: data.Dictionary, toAdd: Object): data.Dictionary { for (const [key, value] of Object.entries(toAdd)) { if (value && typeof value === "object" && !d.get(key)) { + + if (!Array.isArray(value) && Object.entries(value).length === 0) { + // Allow an empty object to be any value + d.add(key, new data.Null()); + continue; + } + d.add(key, merge(new data.Dictionary(), value)); } else { d.add(key, new data.Null()); diff --git a/actions-languageservice/src/validate.expressions.test.ts b/actions-languageservice/src/validate.expressions.test.ts index 85e0a4f..9d05070 100644 --- a/actions-languageservice/src/validate.expressions.test.ts +++ b/actions-languageservice/src/validate.expressions.test.ts @@ -1236,5 +1236,23 @@ jobs: } ]); }); + + it("allows any property in client_payload", async () => { + const input = ` +on: + repository_dispatch: + types: [test] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - run: echo \${{ github.event.client_payload.anything }} + - run: echo \${{ github.event.client_payload.branch }}` + + const result = await validate(createDocument("wf.yaml", input)); + + expect(result).toEqual([]); + }); }); });