@openhands/extensions 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/custom-codereview-guide.md +25 -0
- package/.github/pull_request_template.md +38 -0
- package/.github/release.yml +14 -0
- package/.github/workflows/check-extensions.yml +72 -0
- package/.github/workflows/npm-publish.yml +89 -0
- package/.github/workflows/pr.yml +30 -0
- package/.github/workflows/release.yml +24 -0
- package/.github/workflows/tests.yml +25 -0
- package/.github/workflows/vulnerability-scan.yml +87 -0
- package/.release-please-manifest.json +3 -0
- package/AGENTS.md +132 -0
- package/README.md +10 -0
- package/analysis_results.md +162 -0
- package/marketplaces/large-codebase.json +66 -0
- package/marketplaces/openhands-extensions.json +682 -0
- package/package.json +4 -10
- package/plugins/README.md +30 -0
- package/plugins/city-weather/.plugin/plugin.json +13 -0
- package/plugins/city-weather/README.md +145 -0
- package/plugins/city-weather/commands/now.md +56 -0
- package/plugins/cobol-modernization/.plugin/plugin.json +19 -0
- package/plugins/cobol-modernization/README.md +201 -0
- package/plugins/cobol-modernization/references/troubleshooting.md +18 -0
- package/plugins/cobol-modernization/skills/build-setup/SKILL.md +78 -0
- package/plugins/cobol-modernization/skills/build-setup/scripts/install-gnucobol.sh +32 -0
- package/plugins/cobol-modernization/skills/cobol-modernization-overview/SKILL.md +113 -0
- package/plugins/cobol-modernization/skills/mainfraime-removal/SKILL.md +62 -0
- package/plugins/cobol-modernization/skills/mainfraime-removal/references/cics-transformation-examples.md +45 -0
- package/plugins/cobol-modernization/skills/mainframe-planning/SKILL.md +78 -0
- package/plugins/cobol-modernization/skills/to-java-migration/SKILL.md +59 -0
- package/plugins/cobol-modernization/skills/to-java-migration/references/cobol-to-java-example.md +58 -0
- package/plugins/cobol-modernization/skills/to-java-migration/references/datatype-mappings.md +19 -0
- package/plugins/issue-duplicate-checker/.plugin/plugin.json +13 -0
- package/plugins/issue-duplicate-checker/README.md +51 -0
- package/plugins/issue-duplicate-checker/action.yml +349 -0
- package/plugins/issue-duplicate-checker/scripts/auto_close_duplicate_issues.py +569 -0
- package/plugins/issue-duplicate-checker/scripts/issue_duplicate_check_openhands.py +681 -0
- package/plugins/issue-duplicate-checker/scripts/post_duplicate_notice.js +220 -0
- package/plugins/issue-duplicate-checker/scripts/remove_duplicate_candidate_label.js +27 -0
- package/plugins/magic-test/.plugin/plugin.json +13 -0
- package/plugins/magic-test/skills/magic-word/SKILL.md +33 -0
- package/plugins/migration-scoring/.plugin/plugin.json +19 -0
- package/plugins/migration-scoring/README.md +244 -0
- package/plugins/migration-scoring/skills/migration-mapping/SKILL.md +72 -0
- package/plugins/migration-scoring/skills/migration-report/SKILL.md +118 -0
- package/plugins/migration-scoring/skills/migration-scoring-overview/SKILL.md +126 -0
- package/plugins/migration-scoring/skills/score-quality/SKILL.md +54 -0
- package/plugins/migration-scoring/skills/score-quality/references/scoring-criteria.md +30 -0
- package/plugins/migration-scoring/skills/score-style/SKILL.md +106 -0
- package/plugins/onboarding/.plugin/plugin.json +20 -0
- package/plugins/onboarding/README.md +30 -0
- package/plugins/onboarding/references/criteria.md +144 -0
- package/plugins/onboarding/skills/agent-readiness-report/README.md +23 -0
- package/plugins/onboarding/skills/agent-readiness-report/SKILL.md +122 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_agent_instructions.sh +88 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_build_env.sh +114 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_feedback_loops.sh +133 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_policy.sh +113 -0
- package/plugins/onboarding/skills/agent-readiness-report/scripts/scan_workflows.sh +127 -0
- package/plugins/onboarding/skills/improve-agent-readiness/README.md +19 -0
- package/plugins/onboarding/skills/improve-agent-readiness/SKILL.md +167 -0
- package/plugins/onboarding/skills/setup-agents-md/README.md +15 -0
- package/plugins/onboarding/skills/setup-agents-md/SKILL.md +150 -0
- package/plugins/onboarding/skills/setup-openhands/README.md +20 -0
- package/plugins/onboarding/skills/setup-openhands/SKILL.md +56 -0
- package/plugins/onboarding/skills/setup-pr-review/README.md +23 -0
- package/plugins/onboarding/skills/setup-pr-review/SKILL.md +72 -0
- package/plugins/openhands/.plugin/plugin.json +13 -0
- package/plugins/openhands/README.md +52 -0
- package/plugins/openhands/SKILL.md +61 -0
- package/plugins/openhands/commands/create.md +55 -0
- package/plugins/openhands/commands/openhands-cloud.md +8 -0
- package/plugins/openhands/scripts/run.sh +69 -0
- package/plugins/pr-review/.plugin/plugin.json +13 -0
- package/plugins/pr-review/README.md +393 -0
- package/plugins/pr-review/action.yml +298 -0
- package/plugins/pr-review/scripts/agent_script.py +1282 -0
- package/plugins/pr-review/scripts/evaluate_review.py +655 -0
- package/plugins/pr-review/scripts/prompt.py +260 -0
- package/plugins/pr-review/workflows/pr-review-by-openhands.yml +51 -0
- package/plugins/pr-review/workflows/pr-review-evaluation.yml +85 -0
- package/plugins/qa-changes/.plugin/plugin.json +11 -0
- package/plugins/qa-changes/README.md +185 -0
- package/plugins/qa-changes/action.yml +181 -0
- package/plugins/qa-changes/scripts/agent_script.py +406 -0
- package/plugins/qa-changes/scripts/evaluate_qa_changes.py +385 -0
- package/plugins/qa-changes/scripts/prompt.py +174 -0
- package/plugins/qa-changes/workflows/qa-changes-by-openhands.yml +50 -0
- package/plugins/qa-changes/workflows/qa-changes-evaluation.yml +85 -0
- package/plugins/release-notes/.plugin/plugin.json +19 -0
- package/plugins/release-notes/README.md +283 -0
- package/plugins/release-notes/SKILL.md +83 -0
- package/plugins/release-notes/action.yml +117 -0
- package/plugins/release-notes/commands/release-notes.md +8 -0
- package/plugins/release-notes/scripts/agent_script.py +292 -0
- package/plugins/release-notes/scripts/generate_release_notes.py +733 -0
- package/plugins/release-notes/scripts/prompt.py +90 -0
- package/plugins/release-notes/scripts/validate_release_notes.py +328 -0
- package/plugins/release-notes/workflows/release-notes.yml +76 -0
- package/plugins/vulnerability-remediation/.plugin/plugin.json +19 -0
- package/plugins/vulnerability-remediation/README.md +217 -0
- package/plugins/vulnerability-remediation/action.yml +187 -0
- package/plugins/vulnerability-remediation/scripts/scan_and_remediate.py +561 -0
- package/plugins/vulnerability-remediation/workflows/vulnerability-scan.yml +87 -0
- package/pyproject.toml +12 -0
- package/release-please-config.json +16 -0
- package/scripts/sync_extensions.py +494 -0
- package/scripts/sync_openhands_sdk_skill.py +264 -0
- package/skills/README.md +159 -0
- package/skills/add-javadoc/.plugin/plugin.json +18 -0
- package/skills/add-javadoc/README.md +40 -0
- package/skills/add-javadoc/SKILL.md +35 -0
- package/skills/add-javadoc/references/example.md +32 -0
- package/skills/add-skill/.plugin/plugin.json +18 -0
- package/skills/add-skill/README.md +67 -0
- package/skills/add-skill/SKILL.md +47 -0
- package/skills/add-skill/scripts/fetch_skill.py +259 -0
- package/skills/agent-creator/.plugin/plugin.json +20 -0
- package/skills/agent-creator/README.md +104 -0
- package/skills/agent-creator/SKILL.md +190 -0
- package/skills/agent-creator/commands/agent-creator.md +8 -0
- package/skills/agent-creator/references/fallback.md +117 -0
- package/skills/agent-memory/.plugin/plugin.json +18 -0
- package/skills/agent-memory/README.md +35 -0
- package/skills/agent-memory/SKILL.md +30 -0
- package/skills/agent-memory/commands/remember.md +8 -0
- package/skills/agent-sdk-builder/.plugin/plugin.json +18 -0
- package/skills/agent-sdk-builder/README.md +40 -0
- package/skills/agent-sdk-builder/SKILL.md +37 -0
- package/skills/agent-sdk-builder/commands/agent-builder.md +8 -0
- package/skills/azure-devops/.plugin/plugin.json +18 -0
- package/skills/azure-devops/README.md +55 -0
- package/skills/azure-devops/SKILL.md +50 -0
- package/skills/bitbucket/.plugin/plugin.json +17 -0
- package/skills/bitbucket/README.md +50 -0
- package/skills/bitbucket/SKILL.md +45 -0
- package/skills/code-review/.plugin/plugin.json +19 -0
- package/skills/code-review/README.md +18 -0
- package/skills/code-review/SKILL.md +208 -0
- package/skills/code-review/commands/codereview-roasted.md +8 -0
- package/skills/code-review/commands/codereview.md +8 -0
- package/skills/code-review/references/risk-evaluation.md +41 -0
- package/skills/code-review/references/supply-chain-security.md +31 -0
- package/skills/code-simplifier/.plugin/plugin.json +21 -0
- package/skills/code-simplifier/README.md +30 -0
- package/skills/code-simplifier/SKILL.md +91 -0
- package/skills/code-simplifier/commands/simplify.md +8 -0
- package/skills/code-simplifier/references/code-quality-review.md +86 -0
- package/skills/code-simplifier/references/code-reuse-review.md +63 -0
- package/skills/code-simplifier/references/efficiency-review.md +81 -0
- package/skills/datadog/.plugin/plugin.json +19 -0
- package/skills/datadog/README.md +100 -0
- package/skills/datadog/SKILL.md +95 -0
- package/skills/deno/.plugin/plugin.json +18 -0
- package/skills/deno/README.md +5 -0
- package/skills/deno/SKILL.md +99 -0
- package/skills/deno/references/README.md +6 -0
- package/skills/discord/.plugin/plugin.json +18 -0
- package/skills/discord/README.md +31 -0
- package/skills/discord/SKILL.md +109 -0
- package/skills/discord/__init__.py +0 -0
- package/skills/discord/references/REFERENCE.md +78 -0
- package/skills/discord/scripts/__init__.py +0 -0
- package/skills/discord/scripts/_http.py +127 -0
- package/skills/discord/scripts/post_webhook.py +106 -0
- package/skills/discord/scripts/send_message.py +102 -0
- package/skills/docker/.plugin/plugin.json +17 -0
- package/skills/docker/README.md +34 -0
- package/skills/docker/SKILL.md +29 -0
- package/skills/evidence-based-citations/.plugin/plugin.json +20 -0
- package/skills/evidence-based-citations/README.md +31 -0
- package/skills/evidence-based-citations/SKILL.md +59 -0
- package/skills/flarglebargle/.plugin/plugin.json +16 -0
- package/skills/flarglebargle/README.md +14 -0
- package/skills/flarglebargle/SKILL.md +9 -0
- package/skills/frontend-design/.plugin/plugin.json +21 -0
- package/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/frontend-design/README.md +42 -0
- package/skills/frontend-design/SKILL.md +42 -0
- package/skills/github/.plugin/plugin.json +19 -0
- package/skills/github/README.md +42 -0
- package/skills/github/SKILL.md +106 -0
- package/skills/github-pr-review/.plugin/plugin.json +18 -0
- package/skills/github-pr-review/README.md +145 -0
- package/skills/github-pr-review/SKILL.md +148 -0
- package/skills/github-pr-review/commands/github-pr-review.md +8 -0
- package/skills/github-pr-reviewer/.plugin/plugin.json +20 -0
- package/skills/github-pr-reviewer/README.md +34 -0
- package/skills/github-pr-reviewer/SKILL.md +89 -0
- package/skills/github-pr-reviewer/commands/pr-reviewer:setup.md +8 -0
- package/skills/github-repo-monitor/.plugin/plugin.json +22 -0
- package/skills/github-repo-monitor/README.md +70 -0
- package/skills/github-repo-monitor/SKILL.md +316 -0
- package/skills/github-repo-monitor/commands/github-monitor:poll.md +8 -0
- package/skills/github-repo-monitor/references/github-api.md +241 -0
- package/skills/github-repo-monitor/references/state-schema.md +160 -0
- package/skills/github-repo-monitor/scripts/main.py +915 -0
- package/skills/github-repo-monitor/tests/test_main.py +400 -0
- package/skills/gitlab/.plugin/plugin.json +17 -0
- package/skills/gitlab/README.md +37 -0
- package/skills/gitlab/SKILL.md +32 -0
- package/skills/incident-retrospective/.plugin/plugin.json +21 -0
- package/skills/incident-retrospective/README.md +34 -0
- package/skills/incident-retrospective/SKILL.md +98 -0
- package/skills/incident-retrospective/commands/incident-retro:setup.md +8 -0
- package/skills/iterate/.plugin/plugin.json +13 -0
- package/skills/iterate/README.md +25 -0
- package/skills/iterate/SKILL.md +399 -0
- package/skills/iterate/commands/babysit.md +8 -0
- package/skills/iterate/commands/iterate.md +8 -0
- package/skills/iterate/commands/verify.md +8 -0
- package/skills/iterate/references/heuristics.md +58 -0
- package/skills/iterate/references/verification.md +96 -0
- package/skills/jupyter/.plugin/plugin.json +18 -0
- package/skills/jupyter/README.md +55 -0
- package/skills/jupyter/SKILL.md +50 -0
- package/skills/kubernetes/.plugin/plugin.json +18 -0
- package/skills/kubernetes/README.md +53 -0
- package/skills/kubernetes/SKILL.md +48 -0
- package/skills/learn-from-code-review/.plugin/plugin.json +19 -0
- package/skills/learn-from-code-review/README.md +64 -0
- package/skills/learn-from-code-review/SKILL.md +186 -0
- package/skills/learn-from-code-review/commands/learn-from-reviews.md +8 -0
- package/skills/linear/.plugin/plugin.json +19 -0
- package/skills/linear/README.md +58 -0
- package/skills/linear/SKILL.md +213 -0
- package/skills/linear-triage/.plugin/plugin.json +21 -0
- package/skills/linear-triage/README.md +34 -0
- package/skills/linear-triage/SKILL.md +91 -0
- package/skills/linear-triage/commands/linear-triage:setup.md +8 -0
- package/skills/notion/.plugin/plugin.json +17 -0
- package/skills/notion/README.md +114 -0
- package/skills/notion/SKILL.md +109 -0
- package/skills/npm/.plugin/plugin.json +17 -0
- package/skills/npm/README.md +14 -0
- package/skills/npm/SKILL.md +9 -0
- package/skills/openhands-api/.plugin/plugin.json +22 -0
- package/skills/openhands-api/README.md +48 -0
- package/skills/openhands-api/SKILL.md +399 -0
- package/skills/openhands-api/references/README.md +33 -0
- package/skills/openhands-api/references/TROUBLESHOOTING.md +81 -0
- package/skills/openhands-api/references/example_prompt.md +12 -0
- package/skills/openhands-api/scripts/openhands_api.py +606 -0
- package/skills/openhands-api/scripts/openhands_api.ts +252 -0
- package/skills/openhands-automation/.plugin/plugin.json +19 -0
- package/skills/openhands-automation/README.md +89 -0
- package/skills/openhands-automation/SKILL.md +875 -0
- package/skills/openhands-automation/commands/automation:create.md +8 -0
- package/skills/openhands-automation/references/ab-testing.md +185 -0
- package/skills/openhands-automation/references/custom-automation.md +644 -0
- package/skills/openhands-sdk/.plugin/plugin.json +20 -0
- package/skills/openhands-sdk/README.md +22 -0
- package/skills/openhands-sdk/SKILL.md +229 -0
- package/skills/openhands-sdk/commands/sdk.md +8 -0
- package/skills/pdflatex/.plugin/plugin.json +18 -0
- package/skills/pdflatex/README.md +39 -0
- package/skills/pdflatex/SKILL.md +34 -0
- package/skills/prd/.plugin/plugin.json +19 -0
- package/skills/prd/README.md +28 -0
- package/skills/prd/SKILL.md +237 -0
- package/skills/prd/commands/prd.md +8 -0
- package/skills/qa-changes/README.md +18 -0
- package/skills/qa-changes/SKILL.md +229 -0
- package/skills/qa-changes/commands/qa-changes.md +8 -0
- package/skills/release-notes/README.md +24 -0
- package/skills/release-notes/SKILL.md +19 -0
- package/skills/release-notes/commands/release-notes.md +8 -0
- package/skills/research-brief/.plugin/plugin.json +20 -0
- package/skills/research-brief/README.md +34 -0
- package/skills/research-brief/SKILL.md +99 -0
- package/skills/research-brief/commands/research-brief:setup.md +8 -0
- package/skills/security/.plugin/plugin.json +18 -0
- package/skills/security/README.md +38 -0
- package/skills/security/SKILL.md +33 -0
- package/skills/skill-creator/.plugin/plugin.json +17 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/README.md +182 -0
- package/skills/skill-creator/SKILL.md +545 -0
- package/skills/skill-creator/references/output-patterns.md +82 -0
- package/skills/skill-creator/references/workflows.md +28 -0
- package/skills/skill-creator/scripts/init_skill.py +303 -0
- package/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/skills/slack-channel-monitor/.plugin/plugin.json +21 -0
- package/skills/slack-channel-monitor/README.md +91 -0
- package/skills/slack-channel-monitor/SKILL.md +276 -0
- package/skills/slack-channel-monitor/commands/slack-monitor:poll.md +8 -0
- package/skills/slack-channel-monitor/references/slack-api.md +207 -0
- package/skills/slack-channel-monitor/references/state-schema.md +180 -0
- package/skills/slack-channel-monitor/scripts/main.py +962 -0
- package/skills/slack-standup-digest/.plugin/plugin.json +21 -0
- package/skills/slack-standup-digest/README.md +34 -0
- package/skills/slack-standup-digest/SKILL.md +92 -0
- package/skills/slack-standup-digest/commands/standup-digest:setup.md +8 -0
- package/skills/spark-version-upgrade/.plugin/plugin.json +20 -0
- package/skills/spark-version-upgrade/README.md +54 -0
- package/skills/spark-version-upgrade/SKILL.md +233 -0
- package/skills/ssh/.plugin/plugin.json +18 -0
- package/skills/ssh/README.md +140 -0
- package/skills/ssh/SKILL.md +135 -0
- package/skills/swift-linux/.plugin/plugin.json +17 -0
- package/skills/swift-linux/README.md +86 -0
- package/skills/swift-linux/SKILL.md +81 -0
- package/skills/theme-factory/.plugin/plugin.json +19 -0
- package/skills/theme-factory/LICENSE.txt +202 -0
- package/skills/theme-factory/README.md +58 -0
- package/skills/theme-factory/SKILL.md +59 -0
- package/skills/theme-factory/theme-showcase.pdf +0 -0
- package/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/theme-factory/themes/desert-rose.md +19 -0
- package/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/theme-factory/themes/golden-hour.md +19 -0
- package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/uv/.plugin/plugin.json +18 -0
- package/skills/uv/README.md +5 -0
- package/skills/uv/SKILL.md +95 -0
- package/skills/uv/references/README.md +5 -0
- package/skills/vercel/.plugin/plugin.json +18 -0
- package/skills/vercel/README.md +108 -0
- package/skills/vercel/SKILL.md +103 -0
- package/tests/test_add_skill_installs_to_agents_dir.py +42 -0
- package/tests/test_catalogs.py +109 -0
- package/tests/test_code_review_risk_evaluation.py +94 -0
- package/tests/test_issue_duplicate_checker.py +240 -0
- package/tests/test_openhands_api_python.py +152 -0
- package/tests/test_plugin_manifest.py +83 -0
- package/tests/test_pr_review_diff_payload.py +202 -0
- package/tests/test_pr_review_feedback.py +263 -0
- package/tests/test_pr_review_prompt.py +152 -0
- package/tests/test_pr_review_review_context.py +253 -0
- package/tests/test_qa_changes.py +232 -0
- package/tests/test_qa_changes_evaluation.py +259 -0
- package/tests/test_release_notes_generator.py +990 -0
- package/tests/test_sdk_loading.py +150 -0
- package/tests/test_skill_plugin_loading.py +149 -0
- package/tests/test_skills_have_readme.py +66 -0
- package/tests/test_sync_extensions.py +292 -0
- package/tests/test_workflow_sync.py +46 -0
- package/utils/analysis/README.md +7 -0
- package/utils/analysis/laminar_signals/README.md +211 -0
- package/utils/analysis/laminar_signals/analyze.py +780 -0
- package/utils/analysis/laminar_signals/templates/default.j2 +49 -0
- package/utils/analysis/laminar_signals/templates/pr_review.j2 +61 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "release-notes",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Generate consistent, well-structured release notes from git history with categorized changelog, contributor attribution, and semver tag support.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "OpenHands",
|
|
7
|
+
"email": "contact@all-hands.dev"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/OpenHands/extensions",
|
|
10
|
+
"repository": "https://github.com/OpenHands/extensions",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"release-notes",
|
|
14
|
+
"changelog",
|
|
15
|
+
"git",
|
|
16
|
+
"semver",
|
|
17
|
+
"versioning"
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
# Release Notes Generator Plugin
|
|
2
|
+
|
|
3
|
+
Automated release notes generation using OpenHands agents. This plugin provides GitHub workflows that generate consistent, well-structured release notes when release tags are pushed.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
Copy the workflow file to your repository:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
mkdir -p .github/workflows
|
|
11
|
+
curl -o .github/workflows/release-notes.yml \
|
|
12
|
+
https://raw.githubusercontent.com/OpenHands/extensions/main/plugins/release-notes/workflows/release-notes.yml
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Then configure the required secrets (see [Installation](#installation) below).
|
|
16
|
+
|
|
17
|
+
## Features
|
|
18
|
+
|
|
19
|
+
- **Automatic Tag Detection**: Automatically finds the previous release tag to determine the commit range
|
|
20
|
+
- **Agent-Based Summaries**: Uses an OpenHands agent to judge significance, merge related PRs, and decide what is worth mentioning
|
|
21
|
+
- **Structured GitHub Context**: Feeds the agent merged PR titles, labels, bodies, authors, and contributor information for the release range
|
|
22
|
+
- **Conventional Commits Support**: Uses commit prefixes (`feat:`, `fix:`, `docs:`, etc.) as categorization hints for the agent
|
|
23
|
+
- **PR Label Support**: Uses GitHub PR labels as additional hints for the agent
|
|
24
|
+
- **Contributor Attribution**: Includes PR numbers and author usernames for each change the agent keeps
|
|
25
|
+
- **Attribution Validation**: Fails the workflow if any release-range PR/commit or corresponding author is omitted from the final notes
|
|
26
|
+
- **Deterministic Coverage Appendix**: When the agent omits lower-signal PRs, the action appends a compact `### 🔎 Small Fixes/Internal Changes` appendix grouped by author so every PR and author in the release range is still listed somewhere in the output
|
|
27
|
+
- **New Contributor Highlighting**: Identifies first-time human contributors from merged PR history and excludes bot accounts
|
|
28
|
+
- **Flexible Output**: Updates GitHub release notes directly or outputs for CHANGELOG.md
|
|
29
|
+
|
|
30
|
+
## Plugin Contents
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
plugins/release-notes/
|
|
34
|
+
├── README.md # This file
|
|
35
|
+
├── SKILL.md # Plugin definition
|
|
36
|
+
├── action.yml # Composite GitHub Action
|
|
37
|
+
├── scripts/ # Python scripts
|
|
38
|
+
│ ├── agent_script.py # OpenHands agent orchestration
|
|
39
|
+
│ ├── generate_release_notes.py
|
|
40
|
+
│ ├── prompt.py
|
|
41
|
+
│ └── validate_release_notes.py
|
|
42
|
+
└── workflows/ # Example GitHub workflow files
|
|
43
|
+
└── release-notes.yml
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Installation
|
|
47
|
+
|
|
48
|
+
### 1. Copy the Workflow File
|
|
49
|
+
|
|
50
|
+
Copy the workflow file to your repository's `.github/workflows/` directory:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
mkdir -p .github/workflows
|
|
54
|
+
curl -o .github/workflows/release-notes.yml \
|
|
55
|
+
https://raw.githubusercontent.com/OpenHands/extensions/main/plugins/release-notes/workflows/release-notes.yml
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 2. Configure Secrets
|
|
59
|
+
|
|
60
|
+
Add the following secrets in your repository settings (**Settings → Secrets and variables → Actions**):
|
|
61
|
+
|
|
62
|
+
| Secret | Required | Description |
|
|
63
|
+
|--------|----------|-------------|
|
|
64
|
+
| `LLM_API_KEY` | Yes | API key for the LLM used by the OpenHands agent |
|
|
65
|
+
| `GITHUB_TOKEN` | Auto | Provided automatically by GitHub Actions |
|
|
66
|
+
|
|
67
|
+
**Note**: The default `GITHUB_TOKEN` is sufficient for most use cases. For repositories that need elevated permissions, use a personal access token.
|
|
68
|
+
|
|
69
|
+
### 3. Customize the Workflow (Optional)
|
|
70
|
+
|
|
71
|
+
Edit the workflow file to customize:
|
|
72
|
+
|
|
73
|
+
```yaml
|
|
74
|
+
- name: Generate Release Notes
|
|
75
|
+
uses: OpenHands/extensions/plugins/release-notes@main
|
|
76
|
+
with:
|
|
77
|
+
# The release tag to generate notes for
|
|
78
|
+
tag: ${{ github.ref_name }}
|
|
79
|
+
|
|
80
|
+
# Optional: Override previous tag detection
|
|
81
|
+
# previous-tag: v1.0.0
|
|
82
|
+
|
|
83
|
+
# Include internal/infrastructure changes (default: false)
|
|
84
|
+
include-internal: false
|
|
85
|
+
|
|
86
|
+
# Output format: 'release' (GitHub release) or 'changelog' (CHANGELOG.md)
|
|
87
|
+
output-format: release
|
|
88
|
+
|
|
89
|
+
# Optional model override
|
|
90
|
+
# llm-model: anthropic/claude-sonnet-4-5-20250929
|
|
91
|
+
|
|
92
|
+
# Secrets
|
|
93
|
+
llm-api-key: ${{ secrets.LLM_API_KEY }}
|
|
94
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Usage
|
|
98
|
+
|
|
99
|
+
### Automatic Triggers
|
|
100
|
+
|
|
101
|
+
Release notes are automatically generated when:
|
|
102
|
+
|
|
103
|
+
1. A tag matching `v[0-9]+.[0-9]+.[0-9]+*` is pushed (e.g., `v1.2.0`, `v2.0.0-beta.1`)
|
|
104
|
+
|
|
105
|
+
### Manual Triggering
|
|
106
|
+
|
|
107
|
+
You can also manually trigger release notes generation:
|
|
108
|
+
|
|
109
|
+
1. Go to **Actions** in your repository
|
|
110
|
+
2. Select the "Generate Release Notes" workflow
|
|
111
|
+
3. Click **Run workflow**
|
|
112
|
+
4. Enter the tag to generate notes for
|
|
113
|
+
|
|
114
|
+
## Action Inputs
|
|
115
|
+
|
|
116
|
+
| Input | Required | Default | Description |
|
|
117
|
+
|-------|----------|---------|-------------|
|
|
118
|
+
| `tag` | Yes | - | The release tag to generate notes for |
|
|
119
|
+
| `previous-tag` | No | Auto-detect | Override automatic detection of previous release |
|
|
120
|
+
| `include-internal` | No | `false` | Include internal/infrastructure changes |
|
|
121
|
+
| `output-format` | No | `release` | Output format: `release` or `changelog` |
|
|
122
|
+
| `llm-model` | No | `anthropic/claude-sonnet-4-5-20250929` | LLM used by the OpenHands agent |
|
|
123
|
+
| `llm-base-url` | No | - | Optional custom LLM endpoint |
|
|
124
|
+
| `llm-api-key` | Yes | - | API key for the OpenHands agent's LLM |
|
|
125
|
+
| `github-token` | Yes | - | GitHub token for API access |
|
|
126
|
+
|
|
127
|
+
## Action Outputs
|
|
128
|
+
|
|
129
|
+
| Output | Description |
|
|
130
|
+
|--------|-------------|
|
|
131
|
+
| `release-notes` | The generated release notes in markdown format |
|
|
132
|
+
| `previous-tag` | The detected or provided previous release tag |
|
|
133
|
+
| `commit-count` | Number of commits included in the release |
|
|
134
|
+
| `contributor-count` | Number of unique contributors |
|
|
135
|
+
| `new-contributor-count` | Number of first-time contributors |
|
|
136
|
+
|
|
137
|
+
## Release Notes Structure
|
|
138
|
+
|
|
139
|
+
Generated release notes follow this format:
|
|
140
|
+
|
|
141
|
+
```markdown
|
|
142
|
+
## [v1.2.0] - 2026-03-06
|
|
143
|
+
|
|
144
|
+
### ⚠️ Breaking Changes
|
|
145
|
+
- Remove deprecated `--legacy` CLI flag (#456) @maintainer
|
|
146
|
+
|
|
147
|
+
### ✨ New Features
|
|
148
|
+
- Add support for Claude Sonnet 4.6 model (#445) @contributor1
|
|
149
|
+
- Implement parallel tool execution (#438) @contributor2
|
|
150
|
+
|
|
151
|
+
### 🐛 Bug Fixes
|
|
152
|
+
- Fix WebSocket reconnection on network interruption (#451) @contributor3
|
|
153
|
+
- Resolve memory leak in long-running sessions (#447) @maintainer
|
|
154
|
+
|
|
155
|
+
### 📚 Documentation
|
|
156
|
+
- Update installation guide for v1.2 (#442) @contributor2
|
|
157
|
+
|
|
158
|
+
### 🏗️ Internal/Infrastructure
|
|
159
|
+
- Upgrade CI to use Node 20 (#440) @maintainer
|
|
160
|
+
|
|
161
|
+
### 👥 New Contributors
|
|
162
|
+
- @contributor3 made their first contribution in #451
|
|
163
|
+
|
|
164
|
+
**Full Changelog**: https://github.com/org/repo/compare/v1.1.0...v1.2.0
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Change Categorization
|
|
168
|
+
|
|
169
|
+
The agent receives deterministic categorization hints, but it makes the final decision about significance, grouping, and which entries to keep.
|
|
170
|
+
|
|
171
|
+
### 1. Conventional Commit Prefixes
|
|
172
|
+
|
|
173
|
+
| Prefix | Category |
|
|
174
|
+
|--------|----------|
|
|
175
|
+
| `BREAKING:` or `!:` suffix | ⚠️ Breaking Changes |
|
|
176
|
+
| `feat:`, `feature:` | ✨ New Features |
|
|
177
|
+
| `fix:`, `bugfix:` | 🐛 Bug Fixes |
|
|
178
|
+
| `docs:` | 📚 Documentation |
|
|
179
|
+
| `chore:`, `ci:`, `refactor:`, `test:`, `build:` | 🏗️ Internal/Infrastructure |
|
|
180
|
+
|
|
181
|
+
### 2. PR Labels
|
|
182
|
+
|
|
183
|
+
| Labels | Category |
|
|
184
|
+
|--------|----------|
|
|
185
|
+
| `breaking-change`, `breaking` | ⚠️ Breaking Changes |
|
|
186
|
+
| `enhancement`, `feature` | ✨ New Features |
|
|
187
|
+
| `bug`, `bugfix` | 🐛 Bug Fixes |
|
|
188
|
+
| `documentation`, `docs` | 📚 Documentation |
|
|
189
|
+
| `internal`, `chore`, `ci`, `dependencies` | 🏗️ Internal/Infrastructure |
|
|
190
|
+
|
|
191
|
+
## Content Guidelines
|
|
192
|
+
|
|
193
|
+
The generator follows these principles:
|
|
194
|
+
|
|
195
|
+
- **Conversational overview**: Starts with a short plain-language summary of the release before the detailed sections
|
|
196
|
+
- **Concise but informative**: The agent decides which changes matter and can merge related PRs into a single higher-signal bullet
|
|
197
|
+
- **User-focused**: The agent prioritizes end-user and client-developer impact over low-level implementation detail
|
|
198
|
+
- **Internal changes stay secondary**: CI churn, prompt tweaks, workflow plumbing, contributor ergonomics, and similar toolkit-maintainer details belong in `### 🔎 Small Fixes/Internal Changes` unless they are unusually significant
|
|
199
|
+
- **Scannable**: Easy to quickly find relevant changes
|
|
200
|
+
- **Imperative mood**: Uses "Add feature" not "Added feature"
|
|
201
|
+
- **Attribution**: Includes PR number and author for traceability
|
|
202
|
+
|
|
203
|
+
## Validation Guardrail
|
|
204
|
+
|
|
205
|
+
After the agent writes `release_notes.md`, the action runs `scripts/validate_release_notes.py`.
|
|
206
|
+
That validator rebuilds the deterministic PR/author context for the same tag range and checks that the final notes:
|
|
207
|
+
|
|
208
|
+
- include at least one explicit PR or commit reference in every user-facing change bullet
|
|
209
|
+
- include the author handle for every referenced PR or commit
|
|
210
|
+
- do not reference unknown PRs or commits
|
|
211
|
+
- cover every PR/commit in the release range somewhere in the markdown
|
|
212
|
+
|
|
213
|
+
If the agent keeps the main sections concise and omits lower-signal PRs, `agent_script.py` inserts a compact `### 🔎 Small Fixes/Internal Changes` appendix before the full changelog link. That appendix is grouped by author so the output remains readable while still being exhaustive.
|
|
214
|
+
|
|
215
|
+
## Customizing Output
|
|
216
|
+
|
|
217
|
+
### Excluding Internal Changes
|
|
218
|
+
|
|
219
|
+
By default, internal/infrastructure changes are excluded. To include them:
|
|
220
|
+
|
|
221
|
+
```yaml
|
|
222
|
+
- uses: OpenHands/extensions/plugins/release-notes@main
|
|
223
|
+
with:
|
|
224
|
+
include-internal: true
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Generating CHANGELOG.md Entries
|
|
228
|
+
|
|
229
|
+
To generate output suitable for a CHANGELOG.md file:
|
|
230
|
+
|
|
231
|
+
```yaml
|
|
232
|
+
- uses: OpenHands/extensions/plugins/release-notes@main
|
|
233
|
+
with:
|
|
234
|
+
output-format: changelog
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Then use the output in a subsequent step:
|
|
238
|
+
|
|
239
|
+
```yaml
|
|
240
|
+
- name: Update CHANGELOG
|
|
241
|
+
run: |
|
|
242
|
+
echo "${{ steps.release-notes.outputs.release-notes }}" >> CHANGELOG.md
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Troubleshooting
|
|
246
|
+
|
|
247
|
+
### Missing LLM Credentials
|
|
248
|
+
|
|
249
|
+
Make sure `LLM_API_KEY` is configured in repository secrets and passed to the action.
|
|
250
|
+
|
|
251
|
+
### Release Notes Not Generated
|
|
252
|
+
|
|
253
|
+
1. Check that the tag matches the semver pattern: `v[0-9]+.[0-9]+.[0-9]+*`
|
|
254
|
+
2. Verify the workflow file is in `.github/workflows/`
|
|
255
|
+
3. Check the Actions tab for error messages
|
|
256
|
+
|
|
257
|
+
### Wrong Previous Tag Detected
|
|
258
|
+
|
|
259
|
+
Use the `previous-tag` input to override automatic detection:
|
|
260
|
+
|
|
261
|
+
```yaml
|
|
262
|
+
previous-tag: v1.0.0
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Missing Contributors
|
|
266
|
+
|
|
267
|
+
The generator uses the GitHub API to fetch PR authors. Ensure:
|
|
268
|
+
1. Commits are associated with merged PRs
|
|
269
|
+
2. The `GITHUB_TOKEN` has read access to pull requests
|
|
270
|
+
|
|
271
|
+
## Security
|
|
272
|
+
|
|
273
|
+
- Uses the default `GITHUB_TOKEN` for API access
|
|
274
|
+
- No secrets are persisted or logged
|
|
275
|
+
- Read-only access to repository history and PRs
|
|
276
|
+
|
|
277
|
+
## Contributing
|
|
278
|
+
|
|
279
|
+
See the main [extensions repository](https://github.com/OpenHands/extensions) for contribution guidelines.
|
|
280
|
+
|
|
281
|
+
## License
|
|
282
|
+
|
|
283
|
+
This plugin is part of the OpenHands extensions repository. See [LICENSE](../../LICENSE) for details.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: release-notes
|
|
3
|
+
description: Generate consistent, well-structured release notes from git history. Triggered on release tags following semver patterns (v*.*.*) to produce categorized changelog with breaking changes, features, fixes, and contributor attribution.
|
|
4
|
+
triggers:
|
|
5
|
+
- /release-notes
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Release Notes Generator Plugin
|
|
9
|
+
|
|
10
|
+
Automates the generation of standardized release notes for OpenHands repositories using an OpenHands agent. The agent reviews the release range, judges significance, groups related PRs, and produces concise markdown for GitHub releases or changelogs.
|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
- **Automatic tag detection**: Finds the previous release tag to determine the commit range
|
|
15
|
+
- **Agent-based editing**: Lets the agent decide which changes matter, open with a short conversational summary, and group related PRs into higher-signal summaries while keeping toolkit-maintainer-only details out of the main sections unless they are unusually significant
|
|
16
|
+
- **Structured GitHub context**: Supplies PR titles, labels, descriptions, and contributor metadata to guide the agent
|
|
17
|
+
- **Contributor attribution**: Includes PR numbers and author usernames for each change
|
|
18
|
+
- **Attribution validation**: Verifies every change bullet contains explicit PR/commit references and the matching author handles
|
|
19
|
+
- **Full coverage appendix**: Appends a compact `### 🔎 Small Fixes/Internal Changes` section grouped by author when needed so every PR and author in the release range is still listed somewhere in the final markdown
|
|
20
|
+
- **New contributor highlighting**: Identifies first-time human contributors from merged PR history and excludes bot accounts
|
|
21
|
+
- **Flexible output**: Can update GitHub release notes or generate CHANGELOG.md entries
|
|
22
|
+
|
|
23
|
+
## Quick Start
|
|
24
|
+
|
|
25
|
+
### As a GitHub Action
|
|
26
|
+
|
|
27
|
+
Copy the workflow file to your repository:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
mkdir -p .github/workflows
|
|
31
|
+
curl -o .github/workflows/release-notes.yml \
|
|
32
|
+
https://raw.githubusercontent.com/OpenHands/extensions/main/plugins/release-notes/workflows/release-notes.yml
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Configure required secrets (see the README for details).
|
|
36
|
+
|
|
37
|
+
### Manual Invocation
|
|
38
|
+
|
|
39
|
+
Use the `/release-notes` trigger in an OpenHands conversation to generate release notes for the current repository.
|
|
40
|
+
|
|
41
|
+
## Release Notes Format
|
|
42
|
+
|
|
43
|
+
Generated release notes follow this structure:
|
|
44
|
+
|
|
45
|
+
```markdown
|
|
46
|
+
## [v1.2.0] - 2026-03-06
|
|
47
|
+
|
|
48
|
+
### ⚠️ Breaking Changes
|
|
49
|
+
- Remove deprecated `--legacy` CLI flag (#456) @maintainer
|
|
50
|
+
|
|
51
|
+
### ✨ New Features
|
|
52
|
+
- Add support for Claude Sonnet 4.6 model (#445) @contributor1
|
|
53
|
+
|
|
54
|
+
### 🐛 Bug Fixes
|
|
55
|
+
- Fix WebSocket reconnection on network interruption (#451) @contributor3
|
|
56
|
+
|
|
57
|
+
### 📚 Documentation
|
|
58
|
+
- Update installation guide (#442) @contributor2
|
|
59
|
+
|
|
60
|
+
### 👥 New Contributors
|
|
61
|
+
- @contributor3 made their first contribution in #451
|
|
62
|
+
|
|
63
|
+
**Full Changelog**: https://github.com/org/repo/compare/v1.1.0...v1.2.0
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Change Categorization
|
|
67
|
+
|
|
68
|
+
Changes are categorized based on:
|
|
69
|
+
|
|
70
|
+
1. **Conventional commit prefixes**: `feat:`, `fix:`, `docs:`, `chore:`, `BREAKING:`
|
|
71
|
+
2. **PR labels**: `breaking-change`, `bug`, `enhancement`, `documentation`
|
|
72
|
+
|
|
73
|
+
| Category | Commit Prefixes | PR Labels |
|
|
74
|
+
|----------|-----------------|-----------|
|
|
75
|
+
| Breaking Changes | `BREAKING:`, `!:` suffix | `breaking-change`, `breaking` |
|
|
76
|
+
| Features | `feat:`, `feature:` | `enhancement`, `feature` |
|
|
77
|
+
| Bug Fixes | `fix:`, `bugfix:` | `bug`, `bugfix` |
|
|
78
|
+
| Documentation | `docs:` | `documentation`, `docs` |
|
|
79
|
+
| Internal | `chore:`, `ci:`, `refactor:`, `test:` | `internal`, `chore`, `ci` |
|
|
80
|
+
|
|
81
|
+
## Configuration
|
|
82
|
+
|
|
83
|
+
See the [README](./README.md) for full configuration options and workflow setup instructions.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: OpenHands Release Notes Generator
|
|
3
|
+
description: Generate agent-authored release notes from git history and PR context
|
|
4
|
+
author: OpenHands
|
|
5
|
+
|
|
6
|
+
branding:
|
|
7
|
+
icon: file-text
|
|
8
|
+
color: green
|
|
9
|
+
|
|
10
|
+
inputs:
|
|
11
|
+
tag:
|
|
12
|
+
description: The release tag to generate notes for
|
|
13
|
+
required: true
|
|
14
|
+
previous-tag:
|
|
15
|
+
description: Override automatic detection of previous release tag
|
|
16
|
+
required: false
|
|
17
|
+
default: ''
|
|
18
|
+
include-internal:
|
|
19
|
+
description: Include internal/infrastructure changes in the release notes
|
|
20
|
+
required: false
|
|
21
|
+
default: 'false'
|
|
22
|
+
output-format:
|
|
23
|
+
description: "Output format: 'release' (GitHub release) or 'changelog' (CHANGELOG.md)"
|
|
24
|
+
required: false
|
|
25
|
+
default: release
|
|
26
|
+
llm-model:
|
|
27
|
+
description: LLM model to use for agent-based release note generation
|
|
28
|
+
required: false
|
|
29
|
+
default: anthropic/claude-sonnet-4-5-20250929
|
|
30
|
+
llm-base-url:
|
|
31
|
+
description: LLM base URL (optional, for custom LLM endpoints)
|
|
32
|
+
required: false
|
|
33
|
+
default: ''
|
|
34
|
+
llm-api-key:
|
|
35
|
+
description: LLM API key (required)
|
|
36
|
+
required: true
|
|
37
|
+
github-token:
|
|
38
|
+
description: GitHub token for API access (required)
|
|
39
|
+
required: true
|
|
40
|
+
|
|
41
|
+
outputs:
|
|
42
|
+
release-notes:
|
|
43
|
+
description: The generated release notes in markdown format
|
|
44
|
+
value: ${{ steps.generate.outputs.release_notes }}
|
|
45
|
+
previous-tag:
|
|
46
|
+
description: The detected or provided previous release tag
|
|
47
|
+
value: ${{ steps.generate.outputs.previous_tag }}
|
|
48
|
+
commit-count:
|
|
49
|
+
description: Number of commits included in the release
|
|
50
|
+
value: ${{ steps.generate.outputs.commit_count }}
|
|
51
|
+
contributor-count:
|
|
52
|
+
description: Number of unique contributors
|
|
53
|
+
value: ${{ steps.generate.outputs.contributor_count }}
|
|
54
|
+
new-contributor-count:
|
|
55
|
+
description: Number of first-time contributors
|
|
56
|
+
value: ${{ steps.generate.outputs.new_contributor_count }}
|
|
57
|
+
|
|
58
|
+
runs:
|
|
59
|
+
using: composite
|
|
60
|
+
steps:
|
|
61
|
+
- name: Checkout extensions repository
|
|
62
|
+
uses: actions/checkout@v4
|
|
63
|
+
with:
|
|
64
|
+
repository: OpenHands/extensions
|
|
65
|
+
ref: main
|
|
66
|
+
path: extensions
|
|
67
|
+
sparse-checkout: plugins/release-notes
|
|
68
|
+
|
|
69
|
+
- name: Set up Python
|
|
70
|
+
uses: actions/setup-python@v5
|
|
71
|
+
with:
|
|
72
|
+
python-version: '3.12'
|
|
73
|
+
|
|
74
|
+
- name: Install uv
|
|
75
|
+
uses: astral-sh/setup-uv@v6
|
|
76
|
+
with:
|
|
77
|
+
enable-cache: true
|
|
78
|
+
|
|
79
|
+
- name: Generate release notes
|
|
80
|
+
id: generate
|
|
81
|
+
shell: bash
|
|
82
|
+
env:
|
|
83
|
+
LLM_MODEL: ${{ inputs.llm-model }}
|
|
84
|
+
LLM_BASE_URL: ${{ inputs.llm-base-url }}
|
|
85
|
+
LLM_API_KEY: ${{ inputs.llm-api-key }}
|
|
86
|
+
GITHUB_TOKEN: ${{ inputs.github-token }}
|
|
87
|
+
TAG: ${{ inputs.tag }}
|
|
88
|
+
PREVIOUS_TAG: ${{ inputs.previous-tag }}
|
|
89
|
+
INCLUDE_INTERNAL: ${{ inputs.include-internal }}
|
|
90
|
+
OUTPUT_FORMAT: ${{ inputs.output-format }}
|
|
91
|
+
REPO_NAME: ${{ github.repository }}
|
|
92
|
+
run: |
|
|
93
|
+
uv run --with openhands-sdk --with openhands-tools \
|
|
94
|
+
python extensions/plugins/release-notes/scripts/agent_script.py
|
|
95
|
+
|
|
96
|
+
- name: Validate PR and author attribution
|
|
97
|
+
shell: bash
|
|
98
|
+
env:
|
|
99
|
+
GITHUB_TOKEN: ${{ inputs.github-token }}
|
|
100
|
+
TAG: ${{ inputs.tag }}
|
|
101
|
+
PREVIOUS_TAG: ${{ inputs.previous-tag }}
|
|
102
|
+
INCLUDE_INTERNAL: ${{ inputs.include-internal }}
|
|
103
|
+
REPO_NAME: ${{ github.repository }}
|
|
104
|
+
run: |
|
|
105
|
+
python extensions/plugins/release-notes/scripts/validate_release_notes.py
|
|
106
|
+
|
|
107
|
+
- name: Update GitHub release (if release format)
|
|
108
|
+
if: inputs.output-format == 'release'
|
|
109
|
+
shell: bash
|
|
110
|
+
env:
|
|
111
|
+
GITHUB_TOKEN: ${{ inputs.github-token }}
|
|
112
|
+
run: |
|
|
113
|
+
if [ -f release_notes.md ]; then
|
|
114
|
+
echo "Updating release notes for tag ${{ inputs.tag }}"
|
|
115
|
+
gh release edit "${{ inputs.tag }}" --notes-file release_notes.md || \
|
|
116
|
+
echo "Note: Could not update release. Release may not exist yet."
|
|
117
|
+
fi
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
# auto-generated by sync_extensions.py
|
|
3
|
+
description: Generate consistent, well-structured release notes from git history. Triggered on release tags following semver patterns (v*.*.*) to produce categorized changelog with breaking changes, features, fixes, and contributor attribution.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Read and follow the complete instructions in the SKILL.md file located in this skill's directory.
|
|
7
|
+
|
|
8
|
+
$ARGUMENTS
|