mirror of
https://github.com/github/awesome-copilot.git
synced 2026-06-13 19:34:54 +00:00
chore: publish from staged
This commit is contained in:
@@ -298,7 +298,7 @@ jobs:
|
|||||||
},
|
},
|
||||||
'rejected': {
|
'rejected': {
|
||||||
color: 'B60205',
|
color: 'B60205',
|
||||||
description: 'Submission was rejected or failed intake validation'
|
description: 'Submission was rejected by a maintainer'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -461,7 +461,7 @@ jobs:
|
|||||||
},
|
},
|
||||||
'rejected': {
|
'rejected': {
|
||||||
color: 'B60205',
|
color: 'B60205',
|
||||||
description: 'Submission was rejected or failed intake validation'
|
description: 'Submission was rejected by a maintainer'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -229,13 +229,13 @@ The public-submission policy builds on those rules and also requires `license` p
|
|||||||
##### Review workflow
|
##### Review workflow
|
||||||
|
|
||||||
1. **Open an issue** using the external plugin issue form. Automation applies the `external-plugin` and `awaiting-review` labels.
|
1. **Open an issue** using the external plugin issue form. Automation applies the `external-plugin` and `awaiting-review` labels.
|
||||||
2. **Automated intake validation** checks that the required fields are present and correctly formatted for a GitHub-hosted plugin. Invalid submissions are closed with a comment explaining what must be fixed before resubmitting.
|
2. **Automated intake validation** checks that the required fields are present and correctly formatted for a GitHub-hosted plugin. Invalid submissions are labeled `requires-submitter-fixes` with a comment explaining what must be fixed before maintainer review.
|
||||||
3. **Automated quality gates** run after metadata validation:
|
3. **Automated quality gates** run after metadata validation:
|
||||||
- `skill-validator check --plugin` against the submitted plugin path/ref/sha
|
- `skill-validator check --plugin` against the submitted plugin path/ref/sha
|
||||||
- install smoke test via Copilot CLI against an ephemeral marketplace entry generated from the submission
|
- install smoke test via Copilot CLI against an ephemeral marketplace entry generated from the submission
|
||||||
4. **Ready for maintainer review**: if metadata validation and quality gates pass, automation removes `awaiting-review` and adds `ready-for-review`.
|
4. **Ready for maintainer review**: if metadata validation and quality gates pass, automation removes `awaiting-review` and adds `ready-for-review`.
|
||||||
5. **Submitter-fix blocker**: if metadata is valid but quality gates fail, automation applies `requires-submitter-fixes` instead of advancing to human review.
|
5. **Submitter-fix blocker**: if metadata is valid but quality gates fail, automation applies `requires-submitter-fixes` instead of advancing to human review.
|
||||||
6. **Requesting another intake pass**: after updating the issue body or source plugin, the issue author or a maintainer can comment `/rerun-intake` to re-run automated intake and quality gates on demand. Open issues still re-trigger intake automatically on edit, but closed rejected issues need `/rerun-intake`. When the rerun is accepted, automation reacts to the command comment with 👀 so it is visible that processing started.
|
6. **Requesting another intake pass**: after updating the issue body or source plugin, the issue author or a maintainer can comment `/rerun-intake` to re-run automated intake and quality gates on demand. Open issues re-trigger intake automatically on edit; closed maintainer-rejected issues need `/rerun-intake`. When the rerun is accepted, automation reacts to the command comment with 👀 so it is visible that processing started.
|
||||||
7. **Maintainer override path**: a maintainer with write access can comment `/mark-ready-for-review [optional reason]` to explicitly move a `requires-submitter-fixes` issue to `ready-for-review`.
|
7. **Maintainer override path**: a maintainer with write access can comment `/mark-ready-for-review [optional reason]` to explicitly move a `requires-submitter-fixes` issue to `ready-for-review`.
|
||||||
8. **Maintainer decision**: once in `ready-for-review`, a maintainer with write access performs the manual review, then comments `/approve` or `/reject <reason>` on the issue. Commands from non-maintainers are ignored.
|
8. **Maintainer decision**: once in `ready-for-review`, a maintainer with write access performs the manual review, then comments `/approve` or `/reject <reason>` on the issue. Commands from non-maintainers are ignored.
|
||||||
9. **Approval path**: on `/approve`, automation removes `ready-for-review`, adds `approved`, closes the issue, and opens or updates a PR against `staged` that updates `plugins/external.json` and generated marketplace outputs.
|
9. **Approval path**: on `/approve`, automation removes `ready-for-review`, adds `approved`, closes the issue, and opens or updates a PR against `staged` that updates `plugins/external.json` and generated marketplace outputs.
|
||||||
@@ -256,7 +256,7 @@ Maintainers are responsible for confirming that the submission:
|
|||||||
- `external-plugin`: applied to every public external plugin submission and retained on approved issues so scheduled review automation can find them later
|
- `external-plugin`: applied to every public external plugin submission and retained on approved issues so scheduled review automation can find them later
|
||||||
- `awaiting-review`: initial intake state before automation finishes validating the issue
|
- `awaiting-review`: initial intake state before automation finishes validating the issue
|
||||||
- `ready-for-review`: the issue passed automated intake checks and is waiting on a maintainer decision
|
- `ready-for-review`: the issue passed automated intake checks and is waiting on a maintainer decision
|
||||||
- `requires-submitter-fixes`: metadata validation passed but automated quality gates failed; submitter updates are required before human review
|
- `requires-submitter-fixes`: automated intake found metadata or quality-gate issues; submitter updates are required before human review
|
||||||
- `approved`: the issue was approved, closed, and can be used as the source of truth for six-month re-review
|
- `approved`: the issue was approved, closed, and can be used as the source of truth for six-month re-review
|
||||||
- `rejected`: the issue was rejected and closed without being added to the marketplace
|
- `rejected`: the issue was rejected and closed without being added to the marketplace
|
||||||
- `re-review-due`: the approved issue reached the six-month review threshold and is waiting on a maintainer re-review decision
|
- `re-review-due`: the approved issue reached the six-month review threshold and is waiting on a maintainer re-review decision
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export const EXTERNAL_PLUGIN_INTAKE_LABELS = Object.freeze({
|
|||||||
},
|
},
|
||||||
rejected: {
|
rejected: {
|
||||||
color: "B60205",
|
color: "B60205",
|
||||||
description: "Submission was rejected or failed intake validation",
|
description: "Submission was rejected by a maintainer",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -143,7 +143,7 @@ export async function applyExternalPluginIntakeEvaluation({
|
|||||||
issueNumber,
|
issueNumber,
|
||||||
evaluation,
|
evaluation,
|
||||||
}) {
|
}) {
|
||||||
const state = evaluation.intakeState ?? (evaluation.valid ? "ready-for-review" : "rejected");
|
const state = evaluation.intakeState ?? (evaluation.valid ? "ready-for-review" : "requires-submitter-fixes");
|
||||||
const desiredLabelsByState = {
|
const desiredLabelsByState = {
|
||||||
"ready-for-review": new Set(["external-plugin", "ready-for-review"]),
|
"ready-for-review": new Set(["external-plugin", "ready-for-review"]),
|
||||||
"requires-submitter-fixes": new Set(["external-plugin", "requires-submitter-fixes"]),
|
"requires-submitter-fixes": new Set(["external-plugin", "requires-submitter-fixes"]),
|
||||||
|
|||||||
@@ -492,7 +492,7 @@ function buildQualityGatesCommentSection(qualityResult) {
|
|||||||
|
|
||||||
function getIntakeStateFromQualityResult(baseResult, qualityResult) {
|
function getIntakeStateFromQualityResult(baseResult, qualityResult) {
|
||||||
if (!baseResult.valid) {
|
if (!baseResult.valid) {
|
||||||
return "rejected";
|
return "requires-submitter-fixes";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qualityResult.failure_class === "submitter_fixes") {
|
if (qualityResult.failure_class === "submitter_fixes") {
|
||||||
@@ -647,10 +647,10 @@ export async function evaluateExternalPluginIssue({ issue, token, runId, owner,
|
|||||||
].join("\n")
|
].join("\n")
|
||||||
: [
|
: [
|
||||||
marker,
|
marker,
|
||||||
"## ❌ External plugin intake failed",
|
"## ⚠️ External plugin intake requires submitter fixes",
|
||||||
"",
|
"",
|
||||||
"This submission did not pass automated intake validation, so the issue has been closed.",
|
"This submission did not pass automated intake validation and cannot move to maintainer review yet.",
|
||||||
`Edit the issue form to address the fixes below, then have the issue author or a maintainer comment \`${RERUN_INTAKE_COMMAND}\` to re-run intake for this closed submission.`,
|
`Edit the issue form to address the fixes below. Intake reruns automatically when the issue is edited, or the issue author/maintainer can comment \`${RERUN_INTAKE_COMMAND}\` to re-run on demand.`,
|
||||||
"",
|
"",
|
||||||
"### Required fixes",
|
"### Required fixes",
|
||||||
"",
|
"",
|
||||||
@@ -663,7 +663,7 @@ export async function evaluateExternalPluginIssue({ issue, token, runId, owner,
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
valid,
|
valid,
|
||||||
intakeState: valid ? "ready-for-review" : "rejected",
|
intakeState: valid ? "ready-for-review" : "requires-submitter-fixes",
|
||||||
markerPresent: parsed.markerPresent,
|
markerPresent: parsed.markerPresent,
|
||||||
errors: dedupedErrors,
|
errors: dedupedErrors,
|
||||||
warnings: dedupedWarnings,
|
warnings: dedupedWarnings,
|
||||||
|
|||||||
Reference in New Issue
Block a user