diff --git a/.github/workflows/schema-feature-coverage.lock.yml b/.github/workflows/schema-feature-coverage.lock.yml index ac837471441..97f602cb8b0 100644 --- a/.github/workflows/schema-feature-coverage.lock.yml +++ b/.github/workflows/schema-feature-coverage.lock.yml @@ -1192,18 +1192,18 @@ jobs: DOCKER_SOCK_GID=$(stat -c '%g' /var/run/docker.sock 2>/dev/null || echo '0') export MCP_GATEWAY_DOCKER_COMMAND='docker run -i --rm --network host --add-host host.docker.internal:127.0.0.1 --user '"${MCP_GATEWAY_UID}"':'"${MCP_GATEWAY_GID}"' --group-add '"${DOCKER_SOCK_GID}"' -v /var/run/docker.sock:/var/run/docker.sock -e MCP_GATEWAY_PORT -e MCP_GATEWAY_DOMAIN -e MCP_GATEWAY_API_KEY -e MCP_GATEWAY_PAYLOAD_DIR -e MCP_GATEWAY_PAYLOAD_SIZE_THRESHOLD -e DEBUG -e MCP_GATEWAY_LOG_DIR -e GH_AW_MCP_LOG_DIR -e GH_AW_SAFE_OUTPUTS -e GH_AW_SAFE_OUTPUTS_CONFIG_PATH -e GH_AW_SAFE_OUTPUTS_TOOLS_PATH -e GH_AW_ASSETS_BRANCH -e GH_AW_ASSETS_MAX_SIZE_KB -e GH_AW_ASSETS_ALLOWED_EXTS -e DEFAULT_BRANCH -e GITHUB_MCP_SERVER_TOKEN -e GITHUB_MCP_GUARD_MIN_INTEGRITY -e GITHUB_MCP_GUARD_REPOS -e GITHUB_REPOSITORY -e GITHUB_SERVER_URL -e GITHUB_SHA -e GITHUB_WORKSPACE -e GITHUB_TOKEN -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RUN_ATTEMPT -e GITHUB_JOB -e GITHUB_ACTION -e GITHUB_EVENT_NAME -e GITHUB_EVENT_PATH -e GITHUB_ACTOR -e GITHUB_ACTOR_ID -e GITHUB_TRIGGERING_ACTOR -e GITHUB_WORKFLOW -e GITHUB_WORKFLOW_REF -e GITHUB_WORKFLOW_SHA -e GITHUB_REF -e GITHUB_REF_NAME -e GITHUB_REF_TYPE -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e CODEX_HOME -v /tmp/gh-aw/mcp-payloads:/tmp/gh-aw/mcp-payloads:rw -v /opt:/opt:ro -v /tmp:/tmp:rw -v '"${GITHUB_WORKSPACE}"':'"${GITHUB_WORKSPACE}"':rw ghcr.io/github/gh-aw-mcpg:v0.3.0' - cat > "${RUNNER_TEMP}/gh-aw/mcp-config/config.toml" << GH_AW_MCP_CONFIG_50f78f18aae45a31_EOF + cat > "${RUNNER_TEMP}/gh-aw/mcp-config/config.toml" << GH_AW_MCP_CONFIG_6305129384ffd13a_EOF [history] persistence = "none" [shell_environment_policy] inherit = "core" include_only = ["CODEX_API_KEY", "HOME", "OPENAI_API_KEY", "PATH"] - GH_AW_MCP_CONFIG_50f78f18aae45a31_EOF + GH_AW_MCP_CONFIG_6305129384ffd13a_EOF # Generate JSON config for MCP gateway GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node) - cat << GH_AW_MCP_CONFIG_305795526a0243f2_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs" + cat << GH_AW_MCP_CONFIG_247ec6aa9d31a51b_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs" { "mcpServers": { }, @@ -1214,11 +1214,11 @@ jobs: "payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}" } } - GH_AW_MCP_CONFIG_305795526a0243f2_EOF + GH_AW_MCP_CONFIG_247ec6aa9d31a51b_EOF # Sync converter output to writable CODEX_HOME for Codex mkdir -p /tmp/gh-aw/mcp-config - cat > "/tmp/gh-aw/mcp-config/config.toml" << GH_AW_CODEX_SHELL_POLICY_18ba5f5f3073e08c_EOF + cat > "/tmp/gh-aw/mcp-config/config.toml" << GH_AW_CODEX_SHELL_POLICY_266519de9bcf6da5_EOF model_provider = "openai-proxy" [model_providers.openai-proxy] name = "OpenAI AWF proxy" @@ -1228,7 +1228,7 @@ jobs: [shell_environment_policy] inherit = "core" include_only = ["CODEX_API_KEY", "HOME", "OPENAI_API_KEY", "PATH"] - GH_AW_CODEX_SHELL_POLICY_18ba5f5f3073e08c_EOF + GH_AW_CODEX_SHELL_POLICY_266519de9bcf6da5_EOF awk ' BEGIN { skip_openai_proxy = 0 } /^[[:space:]]*model_provider[[:space:]]*=/ { next } diff --git a/.github/workflows/schema-feature-coverage.md b/.github/workflows/schema-feature-coverage.md index 073a1af59fc..539c16c5c52 100644 --- a/.github/workflows/schema-feature-coverage.md +++ b/.github/workflows/schema-feature-coverage.md @@ -36,7 +36,7 @@ features: # Schema Feature Coverage Checker -You are responsible for ensuring **100% coverage** of schema features across the existing agentic workflows in this repository. Every top-level property defined in the main JSON schema should appear in at least one workflow file under `.github/workflows/` (including `shared/` subdirectories). +You are responsible for ensuring **100% coverage** of schema features across the existing agentic workflows in this repository. Every top-level property defined in the main JSON schema should appear in at least one workflow file under `.github/workflows/` (including `shared/` subdirectories) or in the `schema-demos/` directory. ## Step 1: Extract All Schema Fields (Deterministic) @@ -50,11 +50,11 @@ Save the output as your canonical field list. ## Step 2: Check Coverage Across All Workflows -For each field in the list, check whether it appears as a top-level YAML key in any `.md` workflow file: +For each field in the list, check whether it appears as a top-level YAML key in any `.md` workflow file under `.github/workflows/` or `schema-demos/`: ```bash for field in $(jq -r '.properties | keys[]' pkg/parser/schemas/main_workflow_schema.json | sort); do - count=$(grep -rl "^${field}:" .github/workflows/ --include="*.md" 2>/dev/null | wc -l | tr -d ' ') + count=$(grep -rl "^${field}:" .github/workflows/ schema-demos/ --include="*.md" 2>/dev/null | wc -l | tr -d ' ') if [ "$count" = "0" ]; then echo "UNCOVERED: $field" else @@ -70,7 +70,7 @@ Collect the full list of **UNCOVERED** fields. **If all fields are covered**: Call `noop` immediately with a brief summary and exit. ```json -{"noop": {"message": "All schema fields are covered across .github/workflows/**/*.md — no action needed."}} +{"noop": {"message": "All schema fields are covered across .github/workflows/**/*.md and schema-demos/**/*.md — no action needed."}} ``` **If there are uncovered fields**: Proceed to Step 4. @@ -79,7 +79,7 @@ Collect the full list of **UNCOVERED** fields. For each uncovered field (process up to 10 per run; subsequent weekly runs will handle any remaining ones): -1. **Create a new minimal demo workflow file** at `.github/workflows/schema-demo-.md` +1. **Create a new minimal demo workflow file** at `schema-demos/schema-demo-.md` (use the field name with any special characters replaced by hyphens, e.g., `disable-model-invocation` → `schema-demo-disable-model-invocation.md`) 2. **Include only the required minimum frontmatter** needed to compile (`description`, `on`, `permissions`, `engine`, `timeout-minutes`), plus the target field with a valid value 3. **Extract the field's description from the schema** using: @@ -158,7 +158,7 @@ After creating (or editing) the demo file for a field, call: { "create_pull_request": { "title": "feat: Add schema coverage demo for `` field", - "body": "## Schema Coverage Demo\n\nThis PR adds a minimal demo workflow that demonstrates usage of the `` field in the gh-aw frontmatter schema.\n\n**Why**: The schema feature coverage checker found that `` was not used in any existing workflow.\n\n**What**: Adds `.github/workflows/schema-demo-.md` with a valid, minimal demonstration of this field.\n\n### Field Description\n\n" + "body": "## Schema Coverage Demo\n\nThis PR adds a minimal demo workflow that demonstrates usage of the `` field in the gh-aw frontmatter schema.\n\n**Why**: The schema feature coverage checker found that `` was not used in any existing workflow.\n\n**What**: Adds `schema-demos/schema-demo-.md` with a valid, minimal demonstration of this field.\n\n### Field Description\n\n" } } ``` @@ -167,7 +167,7 @@ After creating (or editing) the demo file for a field, call: - **One PR per uncovered field** — make each PR distinct and focused - **Keep demo workflows minimal and valid** — only include the required `on`, `permissions`, `engine`, `timeout-minutes` fields plus the target field -- **Do not modify existing workflow files** — only create new `schema-demo-*.md` files +- **Do not modify existing workflow files** — only create new `schema-demos/schema-demo-*.md` files - **Validate field values** against the schema description before creating the file - **If a field requires complex external setup** (e.g., `github-app`, `environment` with a specific name), note this clearly in the PR body and use a placeholder value - **Up to 10 PRs per run** — if more than 10 fields are uncovered, handle the first 10 alphabetically; subsequent weekly runs will pick up the rest @@ -176,7 +176,7 @@ After creating (or editing) the demo file for a field, call: A successful run will: - ✅ Extract all schema fields using `jq` deterministically -- ✅ Check all `.github/workflows/**/*.md` files for field usage using `grep` +- ✅ Check all `.github/workflows/**/*.md` and `schema-demos/**/*.md` files for field usage using `grep` - ✅ Either confirm full coverage (call `noop`) OR create PRs for uncovered fields - ✅ Each PR adds exactly one new demo workflow demonstrating one uncovered field - ✅ All created demo workflows have valid frontmatter