mirror of
https://github.com/github/awesome-copilot.git
synced 2026-09-23 14:50:26 +00:00
chore: publish from main
This commit is contained in:
+1
-1
@@ -27,4 +27,4 @@
|
||||
*.zip binary
|
||||
*.pdf binary
|
||||
|
||||
.github/workflows/*.lock.yml linguist-generated=true merge=ours
|
||||
.github/workflows/*.lock.yml linguist-generated=true
|
||||
@@ -20,10 +20,15 @@
|
||||
"version": "v7.0.1",
|
||||
"sha": "043fb46d1a93c77aae656e7c1c64a875d1fc6a0a"
|
||||
},
|
||||
"github/gh-aw-actions/setup@v0.86.2": {
|
||||
"github/gh-aw-actions/setup-cli@v0.88.8": {
|
||||
"repo": "github/gh-aw-actions/setup-cli",
|
||||
"version": "v0.88.8",
|
||||
"sha": "5e508589e03a7757a7e05b26e834292f5445bfb6"
|
||||
},
|
||||
"github/gh-aw-actions/setup@v0.88.8": {
|
||||
"repo": "github/gh-aw-actions/setup",
|
||||
"version": "v0.86.2",
|
||||
"sha": "6aab9e5b5c91c615506061f09bedd81a23babe3c"
|
||||
"version": "v0.88.8",
|
||||
"sha": "5e508589e03a7757a7e05b26e834292f5445bfb6"
|
||||
}
|
||||
},
|
||||
"containers": {
|
||||
@@ -32,30 +37,45 @@
|
||||
"digest": "sha256:04e2d1987a565000a8f114b89d806ae7a3864dd4f944be65275b28c93d8690e6",
|
||||
"pinned_image": "ghcr.io/github/gh-aw-firewall/agent:0.27.43@sha256:04e2d1987a565000a8f114b89d806ae7a3864dd4f944be65275b28c93d8690e6"
|
||||
},
|
||||
"ghcr.io/github/gh-aw-firewall/agent:0.28.14": {
|
||||
"image": "ghcr.io/github/gh-aw-firewall/agent:0.28.14",
|
||||
"digest": "sha256:f7df036c86575527b61f3f7df91c4412349a12b2a74988d929eafa2999230c98",
|
||||
"pinned_image": "ghcr.io/github/gh-aw-firewall/agent:0.28.14@sha256:f7df036c86575527b61f3f7df91c4412349a12b2a74988d929eafa2999230c98"
|
||||
},
|
||||
"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.43": {
|
||||
"image": "ghcr.io/github/gh-aw-firewall/api-proxy:0.27.43",
|
||||
"digest": "sha256:d85f57975af5ea23af4996e41ed73fbc8f5b4a47402472bfe82e508f352cb0c1",
|
||||
"pinned_image": "ghcr.io/github/gh-aw-firewall/api-proxy:0.27.43@sha256:d85f57975af5ea23af4996e41ed73fbc8f5b4a47402472bfe82e508f352cb0c1"
|
||||
},
|
||||
"ghcr.io/github/gh-aw-firewall/api-proxy:0.28.14": {
|
||||
"image": "ghcr.io/github/gh-aw-firewall/api-proxy:0.28.14",
|
||||
"digest": "sha256:6f95e2234dd9bd6333a8ff28ccea7ecf0204acd4a09108723844dbd2bf6268c5",
|
||||
"pinned_image": "ghcr.io/github/gh-aw-firewall/api-proxy:0.28.14@sha256:6f95e2234dd9bd6333a8ff28ccea7ecf0204acd4a09108723844dbd2bf6268c5"
|
||||
},
|
||||
"ghcr.io/github/gh-aw-firewall/squid:0.27.43": {
|
||||
"image": "ghcr.io/github/gh-aw-firewall/squid:0.27.43",
|
||||
"digest": "sha256:26be5e0b8c8f4c41c8a59126b29bb5d80b07253597472ded2a16bdd75abcbf9d",
|
||||
"pinned_image": "ghcr.io/github/gh-aw-firewall/squid:0.27.43@sha256:26be5e0b8c8f4c41c8a59126b29bb5d80b07253597472ded2a16bdd75abcbf9d"
|
||||
},
|
||||
"ghcr.io/github/gh-aw-mcpg:v0.4.7": {
|
||||
"image": "ghcr.io/github/gh-aw-mcpg:v0.4.7",
|
||||
"digest": "sha256:7545220a9aca134b71e51193ee0eaf4c50756ebf8fbd25a63ae7556e62815c00",
|
||||
"pinned_image": "ghcr.io/github/gh-aw-mcpg:v0.4.7@sha256:7545220a9aca134b71e51193ee0eaf4c50756ebf8fbd25a63ae7556e62815c00"
|
||||
"ghcr.io/github/gh-aw-firewall/squid:0.28.14": {
|
||||
"image": "ghcr.io/github/gh-aw-firewall/squid:0.28.14",
|
||||
"digest": "sha256:2ce8df3abf3e9b76e9c0cf5863da41f1ab3f89b20ad14b988806ab89e7bf2cd5",
|
||||
"pinned_image": "ghcr.io/github/gh-aw-firewall/squid:0.28.14@sha256:2ce8df3abf3e9b76e9c0cf5863da41f1ab3f89b20ad14b988806ab89e7bf2cd5"
|
||||
},
|
||||
"ghcr.io/github/gh-aw-mcpg:v0.4.18": {
|
||||
"image": "ghcr.io/github/gh-aw-mcpg:v0.4.18",
|
||||
"digest": "sha256:85b940556a8faa4e1fdbef124bfd75f2c4ebd855a10b88a1c3b6f3e97f6f1a53",
|
||||
"pinned_image": "ghcr.io/github/gh-aw-mcpg:v0.4.18@sha256:85b940556a8faa4e1fdbef124bfd75f2c4ebd855a10b88a1c3b6f3e97f6f1a53"
|
||||
},
|
||||
"ghcr.io/github/gh-aw-node": {
|
||||
"image": "ghcr.io/github/gh-aw-node",
|
||||
"digest": "sha256:0d9f1fb5fd6610c0ac1f5194a38e45a8a1e81f8a390d5142d8e4e6f26a4b3196",
|
||||
"pinned_image": "ghcr.io/github/gh-aw-node@sha256:0d9f1fb5fd6610c0ac1f5194a38e45a8a1e81f8a390d5142d8e4e6f26a4b3196"
|
||||
},
|
||||
"ghcr.io/github/github-mcp-server:v1.8.0": {
|
||||
"image": "ghcr.io/github/github-mcp-server:v1.8.0",
|
||||
"digest": "sha256:d5a18c04b92714c309eb46a2305087e91a4dbd80420f6e462656699f95093520",
|
||||
"pinned_image": "ghcr.io/github/github-mcp-server:v1.8.0@sha256:d5a18c04b92714c309eb46a2305087e91a4dbd80420f6e462656699f95093520"
|
||||
"ghcr.io/github/github-mcp-server:v1.11.0": {
|
||||
"image": "ghcr.io/github/github-mcp-server:v1.11.0",
|
||||
"digest": "sha256:fbec75de11c255213fa08d80fb166abe73d851fff631c51c0079872967720699",
|
||||
"pinned_image": "ghcr.io/github/github-mcp-server:v1.11.0@sha256:fbec75de11c255213fa08d80fb166abe73d851fff631c51c0079872967720699"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
The following instructions are only to be applied when performing a code review.
|
||||
|
||||
Use `.github/skills/code-review/SKILL.md` for repository-fit, differentiation,
|
||||
provenance, validation, and editorial-quality review criteria. Apply the
|
||||
deterministic file-format checks below as well.
|
||||
|
||||
## README updates
|
||||
|
||||
- [ ] The new file should be added to the `docs/README.<type>.md`.
|
||||
|
||||
@@ -16,6 +16,7 @@ Repository overlay (optional):
|
||||
Read only the files you need:
|
||||
Load these files from `github/gh-aw` (they are not available locally).
|
||||
- `.github/aw/action-container-substitutions.md`
|
||||
- `.github/aw/agent-runtime-instructions.md`
|
||||
- `.github/aw/agentic-chat.md`
|
||||
- `.github/aw/agentic-workflows-mcp.md`
|
||||
- `.github/aw/asciicharts.md`
|
||||
@@ -23,6 +24,7 @@ Load these files from `github/gh-aw` (they are not available locally).
|
||||
- `.github/aw/charts-trending.md`
|
||||
- `.github/aw/charts.md`
|
||||
- `.github/aw/cli-commands.md`
|
||||
- `.github/aw/compat.md`
|
||||
- `.github/aw/configure-agentic-engine.md`
|
||||
- `.github/aw/context.md`
|
||||
- `.github/aw/create-agentic-workflow-trigger-details.md`
|
||||
@@ -31,13 +33,19 @@ Load these files from `github/gh-aw` (they are not available locally).
|
||||
- `.github/aw/debug-agentic-workflow.md`
|
||||
- `.github/aw/dependabot.md`
|
||||
- `.github/aw/deployment-status.md`
|
||||
- `.github/aw/designer-mappings.md`
|
||||
- `.github/aw/designer.md`
|
||||
- `.github/aw/drive-memory.md`
|
||||
- `.github/aw/enclaves.md`
|
||||
- `.github/aw/evals.md`
|
||||
- `.github/aw/experiments.md`
|
||||
- `.github/aw/github-agentic-workflows.md`
|
||||
- `.github/aw/github-mcp-server-pagination.md`
|
||||
- `.github/aw/github-mcp-server-tools.md`
|
||||
- `.github/aw/github-mcp-server.md`
|
||||
- `.github/aw/instructions.md`
|
||||
- `.github/aw/intent.md`
|
||||
- `.github/aw/jobs.md`
|
||||
- `.github/aw/linter-workflows.md`
|
||||
- `.github/aw/llms.md`
|
||||
- `.github/aw/loop.md`
|
||||
@@ -51,6 +59,7 @@ Load these files from `github/gh-aw` (they are not available locally).
|
||||
- `.github/aw/network.md`
|
||||
- `.github/aw/optimize-agentic-workflow.md`
|
||||
- `.github/aw/patterns.md`
|
||||
- `.github/aw/playwright.md`
|
||||
- `.github/aw/pr-reviewer.md`
|
||||
- `.github/aw/release-workflow.md`
|
||||
- `.github/aw/report.md`
|
||||
@@ -98,5 +107,6 @@ After loading the matching workflow prompt or skill, follow it directly:
|
||||
- Choose workflow architecture and patterns: `.github/aw/patterns.md`
|
||||
- Optimize token usage and cost: `.github/aw/token-optimization.md`
|
||||
- Design long-running multi-agent research workflows: `.github/aw/multi-agent-research.md`
|
||||
- Add skills or agent plugins requested by the user (`skills:` / `plugins:` frontmatter, never on-the-fly installs): `.github/aw/skills.md`
|
||||
|
||||
When the task involves OTEL, OTLP, traces, observability backends, or telemetry-driven analysis, also read and follow `skills/otel-queries/SKILL.md` after loading the matching workflow prompt or skill.
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
---
|
||||
name: code-review
|
||||
description: 'Review pull requests for repository fit, meaningful value, trustworthy provenance, differentiation, and maintainability in awesome-copilot.'
|
||||
---
|
||||
|
||||
# Awesome Copilot Code Review
|
||||
|
||||
Use this skill when reviewing pull requests in this repository. Apply the
|
||||
deterministic checklists in `.github/copilot-instructions.md` first, then use
|
||||
this skill for the editorial and repository-fit judgments that cannot be
|
||||
reduced to schema validation.
|
||||
|
||||
## Review priorities
|
||||
|
||||
Review in this order:
|
||||
|
||||
1. Correctness, security, and harmful behavior.
|
||||
2. Compliance with the repository's contribution requirements.
|
||||
3. Repository fit and meaningful value for GitHub Copilot users.
|
||||
4. Differentiation from existing resources and native model capabilities.
|
||||
5. Evidence that the contribution was tested or validated.
|
||||
6. Clarity, maintainability, and appropriate scope.
|
||||
|
||||
Do not use raw file count as a quality metric. Large generated website changes,
|
||||
mechanical README updates, and other build outputs can be legitimate and should
|
||||
be evaluated according to their source change.
|
||||
|
||||
## Repository fit
|
||||
|
||||
Confirm that a submission addresses a specific GitHub Copilot workflow,
|
||||
technology, domain constraint, or user problem. Flag contributions that:
|
||||
|
||||
- provide generic advice that current models already handle well without
|
||||
meaningful uplift
|
||||
- restate an existing resource without a clear differentiator
|
||||
- use broad claims such as doing everything for every project
|
||||
- lack concrete instructions, constraints, examples, or expected outcomes
|
||||
- are primarily a wrapper or advertisement for the author's product
|
||||
|
||||
Paid or commercial services are not automatically unsuitable. Evaluate whether
|
||||
the contribution provides standalone user value and follows the repository's
|
||||
guidance for paid-service submissions.
|
||||
|
||||
## AI-authored submissions
|
||||
|
||||
A PR title ending in `🤖🤖🤖` is an intentional AI-authorship disclosure from
|
||||
`CONTRIBUTING.md`. Do not report the marker itself as a defect.
|
||||
|
||||
For disclosed AI-authored submissions, verify that the PR still demonstrates:
|
||||
|
||||
- a concrete need and repository fit
|
||||
- human validation or testing of the result
|
||||
- useful constraints rather than generic generated prose
|
||||
- an explanation of how it differs from existing resources
|
||||
|
||||
Review the submitted result, not assumptions about the tool that produced it.
|
||||
|
||||
## Marketing and self-promotion
|
||||
|
||||
Flag marketing-heavy framing only when there is concrete evidence, such as:
|
||||
|
||||
- repeated brand or product promotion unrelated to usage instructions
|
||||
- unsupported superlatives or sales claims
|
||||
- links or calls to action that dominate the resource
|
||||
- a resource whose primary purpose is acquiring users rather than helping them
|
||||
use GitHub Copilot
|
||||
|
||||
Describe the specific evidence and suggest how to refocus the contribution on
|
||||
the user problem. Do not infer promotional intent solely because an author is
|
||||
associated with a referenced project.
|
||||
|
||||
## Duplication and differentiation
|
||||
|
||||
Search existing agents, instructions, skills, hooks, workflows, prompts, and
|
||||
plugins when the new resource appears similar to existing content. Compare
|
||||
purpose and behavior, not only names.
|
||||
|
||||
Only report duplication when the overlap is substantial. Related resources can
|
||||
coexist when they target different frameworks, audiences, constraints, or
|
||||
stages of a workflow.
|
||||
|
||||
When configured MCP context is relevant, use the GitHub MCP server to inspect
|
||||
linked issues, prior submissions, or repository history. Cite the specific
|
||||
resource or pull request that supports the finding.
|
||||
|
||||
## Evidence and validation
|
||||
|
||||
Check that the PR explains how the contribution was tested or validated. The
|
||||
appropriate evidence depends on the resource:
|
||||
|
||||
- agents, prompts, instructions, and skills should include a realistic usage
|
||||
scenario or describe how their output was evaluated
|
||||
- scripts and bundled assets should have focused tests or reproducible
|
||||
validation steps
|
||||
- workflows and hooks should demonstrate safe triggers, least-privilege
|
||||
permissions, constrained outputs, and expected event behavior
|
||||
- documentation updates should cite the authoritative feature or behavior they
|
||||
describe
|
||||
|
||||
Do not require executable tests for prose-only resources when a realistic
|
||||
manual evaluation is more appropriate.
|
||||
|
||||
## Trusted and automated paths
|
||||
|
||||
GitHub and Microsoft external-plugin updates are generally trusted-source
|
||||
submissions. Still report concrete correctness, security, or manifest problems,
|
||||
but do not manufacture editorial concerns merely because the change is
|
||||
automated or externally sourced.
|
||||
|
||||
For automated documentation PRs, distinguish bad content from stale automation
|
||||
churn. Overlapping daily updates may indicate that the workflow should update an
|
||||
existing PR rather than that the documentation itself is low quality.
|
||||
|
||||
## Review output
|
||||
|
||||
Leave comments only for specific, actionable findings introduced by the PR.
|
||||
Each finding should:
|
||||
|
||||
- identify the affected file and line when possible
|
||||
- explain the concrete impact on users or maintainers
|
||||
- cite the repository rule, existing resource, or evidence behind the finding
|
||||
- recommend the smallest useful correction
|
||||
|
||||
Avoid vague comments such as "this feels AI-generated," "low quality," or
|
||||
"marketing." Explain the observable problem.
|
||||
|
||||
Do not recommend approval solely because automated checks pass. Human
|
||||
maintainers retain final judgment over editorial value and repository fit.
|
||||
|
||||
## Review-policy changes
|
||||
|
||||
Copilot Code Review reads skills and instructions from the PR head branch.
|
||||
Therefore, treat changes to `.github/skills/code-review/`,
|
||||
`.github/copilot-instructions.md`, `AGENTS.md`, or other review-policy files as
|
||||
security-sensitive governance changes. Explicitly call out attempts to weaken,
|
||||
bypass, or remove review criteria, and require maintainer review of those
|
||||
changes.
|
||||
+499
-294
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
||||
# This file was automatically generated by pkg/workflow/maintenance_workflow.go (v0.84.3). DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md
|
||||
# This file was automatically generated by pkg/workflow/maintenance_workflow.go (v0.88.8). DO NOT EDIT. To debug this workflow, load the skill at https://github.com/github/gh-aw/blob/main/debug.md
|
||||
#
|
||||
# ___ _ _
|
||||
# / _ \ | | (_)
|
||||
@@ -44,9 +44,9 @@ on:
|
||||
description: 'Optional maintenance operation to run'
|
||||
required: false
|
||||
type: choice
|
||||
default: ''
|
||||
default: 'none'
|
||||
options:
|
||||
- ''
|
||||
- 'none'
|
||||
- 'disable'
|
||||
- 'enable'
|
||||
- 'update'
|
||||
@@ -88,13 +88,13 @@ permissions: {}
|
||||
|
||||
jobs:
|
||||
close-expired-discussions:
|
||||
if: ${{ (!(github.event.repository.fork)) && github.event_name != 'push' && (github.event_name != 'workflow_dispatch' && github.event_name != 'workflow_call' || inputs.operation == '') }}
|
||||
if: ${{ (!(github.event.repository.fork)) && github.event_name != 'push' && (github.event_name != 'workflow_dispatch' && github.event_name != 'workflow_call' || inputs.operation == '' || inputs.operation == 'none') }}
|
||||
runs-on: ubuntu-slim
|
||||
permissions:
|
||||
discussions: write
|
||||
steps:
|
||||
- name: Setup Scripts
|
||||
uses: github/gh-aw-actions/setup@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
destination: ${{ runner.temp }}/gh-aw/actions
|
||||
|
||||
@@ -102,18 +102,20 @@ jobs:
|
||||
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||||
with:
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/close_expired_discussions.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'close_expired_discussions.cjs'));
|
||||
await main();
|
||||
close-expired-issues:
|
||||
if: ${{ (!(github.event.repository.fork)) && github.event_name != 'push' && (github.event_name != 'workflow_dispatch' && github.event_name != 'workflow_call' || inputs.operation == '') }}
|
||||
if: ${{ (!(github.event.repository.fork)) && github.event_name != 'push' && (github.event_name != 'workflow_dispatch' && github.event_name != 'workflow_call' || inputs.operation == '' || inputs.operation == 'none') }}
|
||||
runs-on: ubuntu-slim
|
||||
permissions:
|
||||
issues: write
|
||||
steps:
|
||||
- name: Setup Scripts
|
||||
uses: github/gh-aw-actions/setup@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
destination: ${{ runner.temp }}/gh-aw/actions
|
||||
|
||||
@@ -121,18 +123,20 @@ jobs:
|
||||
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||||
with:
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/close_expired_issues.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'close_expired_issues.cjs'));
|
||||
await main();
|
||||
close-expired-pull-requests:
|
||||
if: ${{ (!(github.event.repository.fork)) && github.event_name != 'push' && (github.event_name != 'workflow_dispatch' && github.event_name != 'workflow_call' || inputs.operation == '') }}
|
||||
if: ${{ (!(github.event.repository.fork)) && github.event_name != 'push' && (github.event_name != 'workflow_dispatch' && github.event_name != 'workflow_call' || inputs.operation == '' || inputs.operation == 'none') }}
|
||||
runs-on: ubuntu-slim
|
||||
permissions:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Setup Scripts
|
||||
uses: github/gh-aw-actions/setup@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
destination: ${{ runner.temp }}/gh-aw/actions
|
||||
|
||||
@@ -140,19 +144,21 @@ jobs:
|
||||
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||||
with:
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/close_expired_pull_requests.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'close_expired_pull_requests.cjs'));
|
||||
await main();
|
||||
|
||||
cleanup-cache-memory:
|
||||
if: ${{ (!(github.event.repository.fork)) && github.event_name != 'push' && (github.event_name != 'workflow_dispatch' && github.event_name != 'workflow_call' || inputs.operation == '' || inputs.operation == 'clean_cache_memories') }}
|
||||
if: ${{ (!(github.event.repository.fork)) && github.event_name != 'push' && (github.event_name != 'workflow_dispatch' && github.event_name != 'workflow_call' || inputs.operation == '' || inputs.operation == 'none' || inputs.operation == 'clean_cache_memories') }}
|
||||
runs-on: ubuntu-slim
|
||||
permissions:
|
||||
actions: write
|
||||
steps:
|
||||
- name: Setup Scripts
|
||||
uses: github/gh-aw-actions/setup@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
destination: ${{ runner.temp }}/gh-aw/actions
|
||||
|
||||
@@ -160,13 +166,15 @@ jobs:
|
||||
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||||
with:
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/cleanup_cache_memory.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'cleanup_cache_memory.cjs'));
|
||||
await main();
|
||||
|
||||
run_operation:
|
||||
if: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.operation != '' && inputs.operation != 'safe_outputs' && inputs.operation != 'create_labels' && inputs.operation != 'activity_report' && inputs.operation != 'close_agentic_workflows_issues' && inputs.operation != 'clean_cache_memories' && inputs.operation != 'update_pull_request_branches' && inputs.operation != 'validate' && inputs.operation != 'forecast' && (!(github.event.repository.fork)) }}
|
||||
if: ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.operation != '' && inputs.operation != 'none' && inputs.operation != 'safe_outputs' && inputs.operation != 'create_labels' && inputs.operation != 'activity_report' && inputs.operation != 'close_agentic_workflows_issues' && inputs.operation != 'clean_cache_memories' && inputs.operation != 'update_pull_request_branches' && inputs.operation != 'validate' && inputs.operation != 'forecast' && (!(github.event.repository.fork)) }}
|
||||
runs-on: ubuntu-slim
|
||||
permissions:
|
||||
actions: write
|
||||
@@ -181,7 +189,7 @@ jobs:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup Scripts
|
||||
uses: github/gh-aw-actions/setup@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
destination: ${{ runner.temp }}/gh-aw/actions
|
||||
|
||||
@@ -190,15 +198,17 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/check_team_member.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'check_team_member.cjs'));
|
||||
await main();
|
||||
|
||||
- name: Install gh-aw
|
||||
uses: github/gh-aw-actions/setup-cli@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup-cli@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
version: v0.84.3
|
||||
version: v0.88.8
|
||||
|
||||
- name: Run operation
|
||||
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||||
@@ -209,9 +219,11 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/run_operation_update_upgrade.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'run_operation_update_upgrade.cjs'));
|
||||
await main();
|
||||
|
||||
- name: Record outputs
|
||||
@@ -228,7 +240,7 @@ jobs:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Setup Scripts
|
||||
uses: github/gh-aw-actions/setup@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
destination: ${{ runner.temp }}/gh-aw/actions
|
||||
|
||||
@@ -237,9 +249,11 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/check_team_member.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'check_team_member.cjs'));
|
||||
await main();
|
||||
|
||||
- name: Update pull request branches
|
||||
@@ -249,9 +263,11 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/update_pull_request_branches.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'update_pull_request_branches.cjs'));
|
||||
await main();
|
||||
|
||||
apply_safe_outputs:
|
||||
@@ -275,7 +291,7 @@ jobs:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup Scripts
|
||||
uses: github/gh-aw-actions/setup@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
destination: ${{ runner.temp }}/gh-aw/actions
|
||||
|
||||
@@ -284,9 +300,11 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/check_team_member.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'check_team_member.cjs'));
|
||||
await main();
|
||||
|
||||
- name: Apply Safe Outputs
|
||||
@@ -297,9 +315,11 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/apply_safe_outputs_replay.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'apply_safe_outputs_replay.cjs'));
|
||||
await main();
|
||||
|
||||
- name: Record outputs
|
||||
@@ -321,7 +341,7 @@ jobs:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup Scripts
|
||||
uses: github/gh-aw-actions/setup@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
destination: ${{ runner.temp }}/gh-aw/actions
|
||||
|
||||
@@ -330,15 +350,17 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/check_team_member.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'check_team_member.cjs'));
|
||||
await main();
|
||||
|
||||
- name: Install gh-aw
|
||||
uses: github/gh-aw-actions/setup-cli@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup-cli@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
version: v0.84.3
|
||||
version: v0.88.8
|
||||
|
||||
- name: Create missing labels
|
||||
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||||
@@ -347,9 +369,11 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/create_labels.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'create_labels.cjs'));
|
||||
await main();
|
||||
|
||||
activity_report:
|
||||
@@ -367,7 +391,7 @@ jobs:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup Scripts
|
||||
uses: github/gh-aw-actions/setup@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
destination: ${{ runner.temp }}/gh-aw/actions
|
||||
|
||||
@@ -376,15 +400,17 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/check_team_member.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'check_team_member.cjs'));
|
||||
await main();
|
||||
|
||||
- name: Install gh-aw
|
||||
uses: github/gh-aw-actions/setup-cli@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup-cli@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
version: v0.84.3
|
||||
version: v0.88.8
|
||||
|
||||
- name: Restore activity report logs cache
|
||||
id: activity_report_logs_cache
|
||||
@@ -472,7 +498,7 @@ jobs:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup Scripts
|
||||
uses: github/gh-aw-actions/setup@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
destination: ${{ runner.temp }}/gh-aw/actions
|
||||
|
||||
@@ -481,15 +507,17 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/check_team_member.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'check_team_member.cjs'));
|
||||
await main();
|
||||
|
||||
- name: Install gh-aw
|
||||
uses: github/gh-aw-actions/setup-cli@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup-cli@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
version: v0.84.3
|
||||
version: v0.88.8
|
||||
|
||||
- name: Restore forecast report logs cache
|
||||
id: forecast_report_logs_cache
|
||||
@@ -552,9 +580,11 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/create_forecast_issue.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'create_forecast_issue.cjs'));
|
||||
await main();
|
||||
|
||||
close_agentic_workflows_issues:
|
||||
@@ -564,7 +594,7 @@ jobs:
|
||||
issues: write
|
||||
steps:
|
||||
- name: Setup Scripts
|
||||
uses: github/gh-aw-actions/setup@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
destination: ${{ runner.temp }}/gh-aw/actions
|
||||
|
||||
@@ -573,9 +603,11 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/check_team_member.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'check_team_member.cjs'));
|
||||
await main();
|
||||
|
||||
- name: Close no-repro agentic-workflows issues
|
||||
@@ -583,9 +615,11 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/close_agentic_workflows_issues.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'close_agentic_workflows_issues.cjs'));
|
||||
await main();
|
||||
|
||||
validate_workflows:
|
||||
@@ -601,7 +635,7 @@ jobs:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup Scripts
|
||||
uses: github/gh-aw-actions/setup@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
destination: ${{ runner.temp }}/gh-aw/actions
|
||||
|
||||
@@ -610,15 +644,17 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/check_team_member.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'check_team_member.cjs'));
|
||||
await main();
|
||||
|
||||
- name: Install gh-aw
|
||||
uses: github/gh-aw-actions/setup-cli@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: github/gh-aw-actions/setup-cli@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
version: v0.84.3
|
||||
version: v0.88.8
|
||||
|
||||
- name: Validate workflows and file issue on findings
|
||||
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||||
@@ -627,7 +663,9 @@ jobs:
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
|
||||
const path = require('path');
|
||||
const actionsDir = path.join(process.env.RUNNER_TEMP, 'gh-aw', 'actions');
|
||||
const { setupGlobals } = require(path.join(actionsDir, 'setup_globals.cjs'));
|
||||
setupGlobals(core, github, context, exec, io, getOctokit);
|
||||
const { main } = require('${{ runner.temp }}/gh-aw/actions/run_validate_workflows.cjs');
|
||||
const { main } = require(path.join(actionsDir, 'run_validate_workflows.cjs'));
|
||||
await main();
|
||||
|
||||
+499
-294
File diff suppressed because one or more lines are too long
+528
-303
File diff suppressed because one or more lines are too long
@@ -19,8 +19,10 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- name: Install gh-aw extension
|
||||
uses: github/gh-aw-actions/setup-cli@c863074b673419603d146aab585e2986ef08deec # v0.84.3
|
||||
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
version: v0.84.3
|
||||
persist-credentials: false
|
||||
- name: Install gh-aw extension
|
||||
uses: github/gh-aw-actions/setup-cli@5e508589e03a7757a7e05b26e834292f5445bfb6 # v0.88.8
|
||||
with:
|
||||
version: v0.88.8
|
||||
|
||||
+499
-294
File diff suppressed because one or more lines are too long
+476
-285
File diff suppressed because one or more lines are too long
+471
-219
File diff suppressed because one or more lines are too long
@@ -7,11 +7,15 @@ on:
|
||||
permissions:
|
||||
contents: read
|
||||
copilot-requests: write
|
||||
pull-requests: read
|
||||
tools:
|
||||
edit:
|
||||
web-fetch:
|
||||
github:
|
||||
toolsets: [repos]
|
||||
toolsets: [repos, pull_requests]
|
||||
checkout:
|
||||
fetch: ["*"]
|
||||
fetch-depth: 0
|
||||
safe-outputs:
|
||||
allowed-domains:
|
||||
- github.com
|
||||
@@ -22,6 +26,19 @@ safe-outputs:
|
||||
labels: [automated-update, copilot-updates]
|
||||
title-prefix: "[bot] "
|
||||
base-branch: main
|
||||
allowed-files:
|
||||
- "website/learning-hub/**/*.md"
|
||||
push-to-pull-request-branch:
|
||||
target: "*"
|
||||
required-title-prefix: "[bot] "
|
||||
required-labels: [automated-update, copilot-updates]
|
||||
allowed-files:
|
||||
- "website/learning-hub/**/*.md"
|
||||
close-pull-request:
|
||||
target: "*"
|
||||
required-labels: [automated-update, copilot-updates]
|
||||
required-title-prefix: "[bot] "
|
||||
max: 5
|
||||
---
|
||||
|
||||
# Check for Awesome GitHub Copilot Updates
|
||||
@@ -92,9 +109,31 @@ To create a new page:
|
||||
|
||||
If the new information can be added to existing pages, edit those pages to include refinements, new sections, or updated information as needed, following the content model above. Make sure to update any relevant links in the "Further Reading" sections.
|
||||
|
||||
## Step 4 — Open a pull request
|
||||
## Step 4 — Reuse or update the existing bot pull request
|
||||
|
||||
Create a pull request with your changes, using the `main` branch as the base branch. The PR title should summarize what was updated (e.g., "Add/plan command and model marketplace documentation"). The PR body should list:
|
||||
Before opening a new pull request, use GitHub pull request tooling to find open
|
||||
PRs with the `automated-update` and `copilot-updates` labels and a `[bot] `
|
||||
title prefix. Identify whether any matching PR is already updating the same
|
||||
Learning Hub area.
|
||||
|
||||
If a matching PR already exists:
|
||||
|
||||
1. Use the `push_to_pull_request_branch` safe-output tool to push the changes
|
||||
onto that PR's branch instead of creating a new PR. This tool can only target
|
||||
PRs that carry both labels and the `[bot] ` title prefix.
|
||||
2. Keep the branch and title stable so the update remains a single, current
|
||||
review thread.
|
||||
3. If an older matching PR is stale or clearly superseded by the newer content,
|
||||
use the `close_pull_request` safe-output tool to close it with a short
|
||||
explanation such as "Superseded by newer automated update".
|
||||
4. Prefer a single active PR that reflects the latest information.
|
||||
|
||||
Only use the `create_pull_request` safe-output tool to open a fresh PR when no
|
||||
relevant open bot PR exists for the same content area.
|
||||
|
||||
When creating a new PR, use the `main` branch as the base branch. The PR title
|
||||
should summarize what was updated (for example, "Add/plan command and model
|
||||
marketplace documentation"). The PR body should list:
|
||||
|
||||
1. What new features or changes were found
|
||||
2. What sections of the guide were updated
|
||||
@@ -102,3 +141,16 @@ Create a pull request with your changes, using the `main` branch as the base bra
|
||||
4. **Content cleanup** — what older inline version notes were consolidated, rewritten as current behavior, or moved into a Compatibility and Migration Notes section, or a brief note that none needed changes this run
|
||||
|
||||
The PR should target the `main` branch and include the labels `automated-update` and `copilot-updates`.
|
||||
|
||||
## Step 5 — Avoid duplicate bot churn
|
||||
|
||||
Do not create a new PR when the same content is already being tracked in a
|
||||
current open bot PR — push to it instead (Step 4).
|
||||
|
||||
If the repo already has one or more older bot PRs for near-identical Learning Hub changes, prefer to:
|
||||
|
||||
- push the update to the newest relevant PR via `push_to_pull_request_branch`
|
||||
- close stale duplicates via `close_pull_request` with a short explanation such as "Superseded by newer automated update"
|
||||
- avoid leaving the maintainers to triage multiple almost-identical docs PRs
|
||||
|
||||
This keeps the automation loop tight and reduces review noise.
|
||||
+472
-285
File diff suppressed because one or more lines are too long
+1830
File diff suppressed because one or more lines are too long
@@ -0,0 +1,120 @@
|
||||
---
|
||||
name: PR Quality Signal Review
|
||||
description: 'Advisory review for PR quality signals: repo fit, AI disclosure, duplication risk, and marketing-heavy submissions'
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, reopened, synchronize, edited]
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
tools:
|
||||
github:
|
||||
toolsets: [repos, pull_requests]
|
||||
safe-outputs:
|
||||
add-comment:
|
||||
max: 1
|
||||
hide-older-comments: true
|
||||
noop:
|
||||
report-as-issue: false
|
||||
---
|
||||
|
||||
# PR Quality Signal Review
|
||||
|
||||
You are an AI reviewer helping maintain the signal quality of submissions to this repository.
|
||||
Your job is to look for high-probability review signals that suggest a pull request may be low-value, shallow, duplicate, or overly marketing-focused rather than clearly useful to the repository.
|
||||
|
||||
## Scope
|
||||
|
||||
Review pull requests that touch the repository's core resource directories and content, with special attention to:
|
||||
|
||||
- `agents/`
|
||||
- `instructions/`
|
||||
- `skills/`
|
||||
- `workflows/`
|
||||
- `hooks/`
|
||||
- `plugins/`
|
||||
- `website/`
|
||||
|
||||
This workflow is advisory only. It should flag likely quality issues and suggest a tighter review focus, but it should not block or approve a merge on its own.
|
||||
|
||||
## Step 1 — Gather PR context
|
||||
|
||||
Read the PR metadata for the current pull request, including:
|
||||
|
||||
- title
|
||||
- description/body
|
||||
- author login
|
||||
- labels
|
||||
- changed files
|
||||
|
||||
If the PR title ends with `🤖🤖🤖`, treat that as an explicit AI-disclosure signal. This is not automatically a bad submission, but it is a signal that the author should make the value and repository fit obvious and concrete.
|
||||
|
||||
## Step 2 — Evaluate high-signal quality checks
|
||||
|
||||
Assess the PR against these signals, in order of confidence:
|
||||
|
||||
### 1. Repository fit and usefulness
|
||||
|
||||
Look for evidence that the contribution solves a specific, real problem in the repository's scope.
|
||||
|
||||
Flag for review when the PR:
|
||||
|
||||
- has vague or generic framing with little concrete value
|
||||
- reads like self-promotion or product marketing rather than a useful contribution
|
||||
- proposes overlap with existing resources without a clear differentiator
|
||||
- adds a broad "AI can do everything" pattern with no domain-specific constraint or workflow
|
||||
- changes website or docs content without a clear factual update tied to a feature, migration, or user need
|
||||
|
||||
### 2. AI disclosure and provenance
|
||||
|
||||
If `🤖🤖🤖` is present, check whether the PR body explains:
|
||||
|
||||
- what was generated or iterated with AI
|
||||
- why the content is still useful and repo-relevant
|
||||
- whether the author tested or validated the result
|
||||
|
||||
A PR that uses AI but does not explain the value beyond "I prompted an agent" is a weaker signal.
|
||||
|
||||
### 3. Duplicate or low-differentiation risk
|
||||
|
||||
Compare the changed files to existing resources in the repository. If the PR appears to be a near-duplicate, a reworded version of an existing pattern, or a marketing wrapper around a generic capability, note it as a reviewer signal.
|
||||
|
||||
### 4. Missing evidence
|
||||
|
||||
Flag when there is no clear validation or rationale, such as:
|
||||
|
||||
- no examples or usage guidance
|
||||
- no tests, validation steps, or operational constraint
|
||||
- no explanation of why the value is not already covered by a stronger existing resource
|
||||
|
||||
## Step 3 — Produce a single review comment
|
||||
|
||||
If one or more high-confidence signals are present, leave a single PR comment in this format:
|
||||
|
||||
```markdown
|
||||
## ⚠️ PR Quality Signal Review
|
||||
|
||||
This PR shows one or more review signals that deserve a closer look before merge.
|
||||
|
||||
| Signal | Evidence | Recommendation |
|
||||
|---|---|---|
|
||||
| Repo fit | <short description> | <what to clarify or tighten> |
|
||||
| AI disclosure | <AI marker or explanation status> | <ask for concrete value and validation> |
|
||||
| Marketing-heavy framing | <why this looks promotional> | <refocus on concrete user need and repo fit> |
|
||||
| Duplicate / low differentiation | <why this overlaps existing content> | <explain unique value or merge into existing coverage> |
|
||||
| Missing evidence | <what is absent> | <add examples, tests, or rationale> |
|
||||
|
||||
This is an advisory signal review only. It does not replace human judgment.
|
||||
```
|
||||
|
||||
If the PR looks healthy and does not show high-confidence quality concerns, call `noop` with the message:
|
||||
|
||||
`No high-confidence quality signals detected in this PR. Repo fit and value look reasonable.`
|
||||
|
||||
## Guidelines
|
||||
|
||||
- Be conservative: only call out issues when the signal is strong and actionable.
|
||||
- Treat `🤖🤖🤖` as a signal of provenance, not a negative by itself.
|
||||
- Prefer repo-fit, clarity, evidence, and differentiation over raw file count or "vibe".
|
||||
- Keep the feedback brief and specific enough for a maintainer to act on quickly.
|
||||
- If a PR is clearly a trusted-source submission (for example, a GitHub/Microsoft plugin submission), do not flag it merely because it is automated or externally sourced. Use the signal map for low-signal and low-value items, not trusted paths.
|
||||
+476
-285
File diff suppressed because one or more lines are too long
@@ -9,6 +9,10 @@
|
||||
/workflows/ @brunoborges
|
||||
/.github/workflows/validate-agentic-workflows-pr.yml @brunoborges
|
||||
|
||||
# Copilot review policy
|
||||
/.github/skills/code-review/ @aaronpowell
|
||||
/.github/copilot-instructions.md @aaronpowell
|
||||
|
||||
# Added via #codeowner from PR #930
|
||||
/plugins/automate-this/ @dvelton
|
||||
/skills/automate-this/ @dvelton
|
||||
|
||||
Reference in New Issue
Block a user