diff --git a/docs/src/content/docs/agent-factory-status.mdx b/docs/src/content/docs/agent-factory-status.mdx index 398f7ce702..9cea25fa7d 100644 --- a/docs/src/content/docs/agent-factory-status.mdx +++ b/docs/src/content/docs/agent-factory-status.mdx @@ -102,7 +102,7 @@ These are experimental agentic workflows used by the GitHub Next team to learn, | [Issue Summary to Notion](https://github.com/github/gh-aw/blob/main/.github/workflows/notion-issue-summary.md) | copilot | [![Issue Summary to Notion](https://github.com/github/gh-aw/actions/workflows/notion-issue-summary.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/notion-issue-summary.lock.yml) | - | - | | [Issue Triage Agent](https://github.com/github/gh-aw/blob/main/.github/workflows/issue-triage-agent.md) | copilot | [![Issue Triage Agent](https://github.com/github/gh-aw/actions/workflows/issue-triage-agent.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/issue-triage-agent.lock.yml) | - | - | | [jsweep - JavaScript Unbloater](https://github.com/github/gh-aw/blob/main/.github/workflows/jsweep.md) | copilot | [![jsweep - JavaScript Unbloater](https://github.com/github/gh-aw/actions/workflows/jsweep.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/jsweep.lock.yml) | - | - | -| [Layout Specification Maintainer](https://github.com/github/gh-aw/blob/main/.github/workflows/layout-spec-maintainer.md) | copilot | [![Layout Specification Maintainer](https://github.com/github/gh-aw/actions/workflows/layout-spec-maintainer.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/layout-spec-maintainer.lock.yml) | `0 7 * * 1-5` | - | +| [Layout Specification Maintainer](https://github.com/github/gh-aw/blob/main/.github/workflows/layout-spec-maintainer.md) | copilot | [![Layout Specification Maintainer](https://github.com/github/gh-aw/actions/workflows/layout-spec-maintainer.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/layout-spec-maintainer.lock.yml) | `0 7 * * 1` | - | | [Lockfile Statistics Analysis Agent](https://github.com/github/gh-aw/blob/main/.github/workflows/lockfile-stats.md) | claude | [![Lockfile Statistics Analysis Agent](https://github.com/github/gh-aw/actions/workflows/lockfile-stats.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/lockfile-stats.lock.yml) | - | - | | [MCP Inspector Agent](https://github.com/github/gh-aw/blob/main/.github/workflows/mcp-inspector.md) | copilot | [![MCP Inspector Agent](https://github.com/github/gh-aw/actions/workflows/mcp-inspector.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/mcp-inspector.lock.yml) | - | - | | [Mergefest](https://github.com/github/gh-aw/blob/main/.github/workflows/mergefest.md) | copilot | [![Mergefest](https://github.com/github/gh-aw/actions/workflows/mergefest.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/mergefest.lock.yml) | - | `/mergefest` | diff --git a/docs/src/content/docs/reference/frontmatter-full.md b/docs/src/content/docs/reference/frontmatter-full.md index 896e0ec95c..b0be7dc601 100644 --- a/docs/src/content/docs/reference/frontmatter-full.md +++ b/docs/src/content/docs/reference/frontmatter-full.md @@ -3528,9 +3528,10 @@ rate-limit: events: [] # Array of strings - # Optional list of roles that are exempt from rate limiting. Users with any of - # these roles will not be subject to rate limiting checks. Common roles: 'admin', - # 'maintain', 'write', 'triage', 'read'. + # Optional list of roles that are exempt from rate limiting. Defaults to ['admin', + # 'maintain', 'write'] if not specified. Users with any of these roles will not be + # subject to rate limiting checks. To apply rate limiting to all users, set to an + # empty array: [] # (optional) ignored-roles: [] # Array of strings diff --git a/pkg/parser/schema_test.go b/pkg/parser/schema_test.go index 45e981980e..5bdc9eab3b 100644 --- a/pkg/parser/schema_test.go +++ b/pkg/parser/schema_test.go @@ -1144,6 +1144,146 @@ func TestValidateMainWorkflowFrontmatterWithSchema(t *testing.T) { wantErr: true, errContains: "maxProperties", }, + { + name: "valid: workflow_dispatch with all valid input types", + frontmatter: map[string]any{ + "on": map[string]any{ + "workflow_dispatch": map[string]any{ + "inputs": map[string]any{ + "string_input": map[string]any{ + "description": "String input", + "type": "string", + "default": "default value", + }, + "choice_input": map[string]any{ + "description": "Choice input", + "type": "choice", + "options": []string{"option1", "option2", "option3"}, + "default": "option1", + }, + "boolean_input": map[string]any{ + "description": "Boolean input", + "type": "boolean", + "default": true, + }, + "number_input": map[string]any{ + "description": "Number input", + "type": "number", + "default": 42, + }, + "environment_input": map[string]any{ + "description": "Environment input", + "type": "environment", + "default": "production", + }, + }, + }, + }, + }, + wantErr: false, + }, + { + name: "invalid: workflow_dispatch with invalid input type 'text'", + frontmatter: map[string]any{ + "on": map[string]any{ + "workflow_dispatch": map[string]any{ + "inputs": map[string]any{ + "test_input": map[string]any{ + "description": "Test input", + "type": "text", + }, + }, + }, + }, + }, + wantErr: true, + errContains: "value must be one of 'string', 'choice', 'boolean', 'number', 'environment'", + }, + { + name: "invalid: workflow_dispatch with invalid input type 'int'", + frontmatter: map[string]any{ + "on": map[string]any{ + "workflow_dispatch": map[string]any{ + "inputs": map[string]any{ + "test_input": map[string]any{ + "description": "Test input", + "type": "int", + }, + }, + }, + }, + }, + wantErr: true, + errContains: "value must be one of 'string', 'choice', 'boolean', 'number', 'environment'", + }, + { + name: "invalid: workflow_dispatch with invalid input type 'bool'", + frontmatter: map[string]any{ + "on": map[string]any{ + "workflow_dispatch": map[string]any{ + "inputs": map[string]any{ + "test_input": map[string]any{ + "description": "Test input", + "type": "bool", + }, + }, + }, + }, + }, + wantErr: true, + errContains: "value must be one of 'string', 'choice', 'boolean', 'number', 'environment'", + }, + { + name: "invalid: workflow_dispatch with invalid input type 'select'", + frontmatter: map[string]any{ + "on": map[string]any{ + "workflow_dispatch": map[string]any{ + "inputs": map[string]any{ + "test_input": map[string]any{ + "description": "Test input", + "type": "select", + }, + }, + }, + }, + }, + wantErr: true, + errContains: "value must be one of 'string', 'choice', 'boolean', 'number', 'environment'", + }, + { + name: "invalid: workflow_dispatch with invalid input type 'dropdown'", + frontmatter: map[string]any{ + "on": map[string]any{ + "workflow_dispatch": map[string]any{ + "inputs": map[string]any{ + "test_input": map[string]any{ + "description": "Test input", + "type": "dropdown", + }, + }, + }, + }, + }, + wantErr: true, + errContains: "value must be one of 'string', 'choice', 'boolean', 'number', 'environment'", + }, + { + name: "invalid: workflow_dispatch with invalid input type 'checkbox'", + frontmatter: map[string]any{ + "on": map[string]any{ + "workflow_dispatch": map[string]any{ + "inputs": map[string]any{ + "test_input": map[string]any{ + "description": "Test input", + "type": "checkbox", + }, + }, + }, + }, + }, + wantErr: true, + errContains: "value must be one of 'string', 'choice', 'boolean', 'number', 'environment'", + }, { name: "valid metadata with various key-value pairs", frontmatter: map[string]any{