Skip to content

Commit 1f1702b

Browse files
authored
Merge pull request #17 from Dropelikeit/fix/improve-codex-install-documentation
ci: auto-generate and commit release artifacts before tagging
2 parents 1159acf + 7a68753 commit 1f1702b

33 files changed

Lines changed: 2093 additions & 133 deletions

File tree

.agents/plugins/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"name": "pr-comments-resolver",
99
"source": {
1010
"source": "local",
11-
"path": "."
11+
"path": "./plugins/codex/pr-comments-resolver"
1212
},
1313
"policy": {
1414
"installation": "AVAILABLE",

.augment-plugin/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"name": "pr-comments-resolver",
88
"description": "Resolve unresolved PR/MR review comments across GitHub, GitLab, Bitbucket Cloud, and Azure DevOps",
99
"version": "1.1.3",
10-
"source": ".",
10+
"source": "./plugins/augment/pr-comments-resolver",
1111
"category": "code-review",
1212
"tags": [
1313
"pr",

.claude-plugin/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"plugins": [
88
{
99
"name": "pr-comments-resolver",
10-
"source": "./",
10+
"source": "./plugins/claude/pr-comments-resolver",
1111
"description": "Resolve unresolved PR/MR review comments across GitHub, GitLab, Bitbucket Cloud, and Azure DevOps",
1212
"version": "1.1.3",
1313
"category": "code-review",

.github/workflows/build-dist-on-pr-merge.yml

Lines changed: 0 additions & 86 deletions
This file was deleted.

.github/workflows/release.yml

Lines changed: 84 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,68 @@
11
name: Release
22

3+
# Single ordered pipeline that runs after a merge to main:
4+
# 1. determine the next SemVer version (dry-run, no tag pushed yet)
5+
# 2. sync that version into the plugin manifests
6+
# 3. regenerate all agent artifacts (skills/, dist/, plugins/) from core/ + adapters/
7+
# 4. validate + smoke-test the generated artifacts
8+
# 5. commit the regenerated artifacts back to main (only if something changed)
9+
# 6. create + push the version tag on that commit
10+
#
11+
# The tag therefore always points at the commit that contains the freshly
12+
# generated artifacts.
13+
#
14+
# Loop prevention:
15+
# - Commits pushed with the default GITHUB_TOKEN do NOT trigger new workflow
16+
# runs (GitHub's built-in recursion guard).
17+
# - The artifact commit additionally carries "[skip ci]" as belt-and-suspenders.
18+
# - Pushing a tag does not trigger this workflow (it only listens on branch pushes).
19+
#
20+
# Permissions / branch protection assumptions:
21+
# - github-actions[bot] (via GITHUB_TOKEN with contents: write) must be allowed
22+
# to push directly to main. If main is protected with "require pull request",
23+
# the bot must be on the bypass list. This is unchanged from the previous
24+
# release workflow, which already pushed to main.
25+
326
on:
427
push:
528
branches: [main]
629

730
jobs:
8-
tag:
9-
name: SemVer Tag
31+
release:
32+
name: Build, Commit Artifacts & Tag
1033
runs-on: ubuntu-latest
1134
permissions:
1235
contents: write
13-
outputs:
14-
new_tag: ${{ steps.tag.outputs.new_tag }}
15-
new_version: ${{ steps.tag.outputs.new_version }}
36+
1637
steps:
1738
- uses: actions/checkout@v6
1839
with:
40+
ref: main
1941
fetch-depth: 0
2042

21-
- name: Bump version and push tag
22-
id: tag
43+
- name: Set up Python
44+
uses: actions/setup-python@v6
45+
with:
46+
python-version: "3.11"
47+
48+
# 1. Resolve the next version WITHOUT creating the tag yet.
49+
- name: Determine next version (dry run)
50+
id: version
2351
uses: mathieudutour/github-tag-action@v6.2
2452
with:
2553
github_token: ${{ secrets.GITHUB_TOKEN }}
2654
default_bump: patch
2755
tag_prefix: v
2856
release_branches: main
57+
dry_run: true
2958

30-
sync-version:
31-
name: Sync Version To Manifests
32-
needs: tag
33-
if: needs.tag.outputs.new_tag != ''
34-
runs-on: ubuntu-latest
35-
permissions:
36-
contents: write
37-
38-
steps:
39-
- uses: actions/checkout@v6
40-
with:
41-
ref: main
42-
fetch-depth: 0
43-
44-
- name: Update manifests
59+
# 2. Sync the resolved version into the plugin manifests so the generated
60+
# plugins/ packages embed the correct version. Skipped when there is no
61+
# version bump (e.g. a docs-only commit).
62+
- name: Sync version into manifests
63+
if: steps.version.outputs.new_version != ''
4564
env:
46-
VERSION: ${{ needs.tag.outputs.new_version }}
65+
VERSION: ${{ steps.version.outputs.new_version }}
4766
run: |
4867
set -euo pipefail
4968
tmp="$(mktemp)"
@@ -65,28 +84,60 @@ jobs:
6584
}
6685
6786
# Claude
68-
bump_root .claude-plugin/plugin.json
87+
bump_root .claude-plugin/plugin.json
6988
bump_plugins_entry .claude-plugin/marketplace.json
7089
7190
# Augment (root version on both files + plugins[] entry)
72-
bump_root .augment-plugin/plugin.json
73-
bump_root .augment-plugin/marketplace.json
91+
bump_root .augment-plugin/plugin.json
92+
bump_root .augment-plugin/marketplace.json
7493
bump_plugins_entry .augment-plugin/marketplace.json
7594
7695
# Codex
77-
bump_root .codex-plugin/plugin.json
96+
bump_root .codex-plugin/plugin.json
97+
98+
# 3. Regenerate all agent artifacts from the sources.
99+
- name: Build all agents
100+
run: bash scripts/build.sh all
101+
102+
# 4. Validate + smoke-test the generated artifacts.
103+
- name: Validate generated files
104+
run: python3 scripts/validate.py
105+
106+
- name: Smoke test
107+
run: bash tests/build_test.sh
78108

79-
- name: Commit version bump
109+
# 5. Commit regenerated artifacts + manifests back to main, only if changed.
110+
- name: Commit regenerated artifacts
111+
id: commit
80112
env:
81-
TAG: ${{ needs.tag.outputs.new_tag }}
82-
VERSION: ${{ needs.tag.outputs.new_version }}
113+
TAG: ${{ steps.version.outputs.new_tag }}
83114
run: |
115+
set -euo pipefail
84116
git config user.name "github-actions[bot]"
85117
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
86-
git add .claude-plugin/ .augment-plugin/ .codex-plugin/
118+
git add skills/ dist/ plugins/ .claude-plugin/ .augment-plugin/ .codex-plugin/
87119
if git diff --cached --quiet; then
88-
echo "Manifests already at version ${VERSION}; nothing to commit."
120+
echo "No generated changes to commit."
121+
echo "committed=false" >> "$GITHUB_OUTPUT"
89122
exit 0
90123
fi
91-
git commit -m "chore: sync manifest version to ${TAG} [skip ci]"
124+
msg="chore: rebuild generated artifacts"
125+
if [ -n "${TAG:-}" ]; then
126+
msg="chore: rebuild generated artifacts and sync version to ${TAG}"
127+
fi
128+
git commit -m "${msg} [skip ci]"
92129
git push origin main
130+
echo "committed=true" >> "$GITHUB_OUTPUT"
131+
132+
# 6. Tag the local HEAD of main, which now contains the freshly generated
133+
# artifacts. We tag explicitly with git (rather than re-running the tag
134+
# action) because the action tags GITHUB_SHA — the original triggering
135+
# commit — which would miss the artifact commit pushed in step 5.
136+
- name: Create and push release tag
137+
if: steps.version.outputs.new_tag != ''
138+
env:
139+
TAG: ${{ steps.version.outputs.new_tag }}
140+
run: |
141+
set -euo pipefail
142+
git tag -a "$TAG" -m "$TAG"
143+
git push origin "$TAG"

.github/workflows/verify-build.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
name: Verify build
22

3+
# PR sanity check: the sources must build cleanly and pass validation + smoke
4+
# tests. Generated artifacts (skills/, dist/, plugins/) are produced and
5+
# committed automatically after merge by release.yml, so contributors are NOT
6+
# required to build and commit them locally — this workflow therefore does not
7+
# enforce drift against committed outputs.
8+
39
on:
410
pull_request:
5-
push:
6-
branches: [main]
711

812
jobs:
913
verify:
@@ -16,10 +20,6 @@ jobs:
1620
python-version: "3.11"
1721
- name: Build all agents
1822
run: bash scripts/build.sh all
19-
- name: Verify no drift in committed outputs
20-
run: |
21-
git diff --exit-code -- skills/ dist/ \
22-
|| { echo "Generated files are out of date — run 'bash scripts/build.sh all' and commit."; exit 1; }
2323
- name: Validate frontmatter and coverage
2424
run: python3 scripts/validate.py
2525
- name: Smoke test

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1616

1717
### Changed
1818
- `persistence-step.md` snippets gain the `Reply/Resolve permission` field (per-adapter naming). Memories without the field trigger the one-time prompt — fully back-compat.
19+
- Marketplace manifests for Claude, Augment, and Codex now point to generated agent-specific plugin bundles under `plugins/` instead of the repository root, so Git-based marketplace installs resolve an installable plugin directory after clone.
1920

2021
## [1.0.0] - 2026-05-12
2122

CONTRIBUTING.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ This repository ships generated outputs for multiple agents. The canonical logic
3535
.codex-plugin/ Codex plugin manifest
3636
.agents/plugins/ Codex repo-scoped marketplace manifest
3737
.augment-plugin/ Augment plugin manifests
38+
plugins/ Generated marketplace-ready plugin bundles
3839
core/ Canonical workflow and platform modules
3940
adapters/ Per-agent frontmatter, prelude, and snippets
4041
skills/resolve-comments/ Claude build output
@@ -79,6 +80,7 @@ bash tests/build_test.sh
7980
- `.codex-plugin/plugin.json` — Codex plugin identity and skill path
8081
- `.agents/plugins/marketplace.json` — Codex repo-scoped marketplace listing
8182
- `.augment-plugin/*.json` — Augment manifests
83+
- `plugins/<agent>/pr-comments-resolver/` — generated marketplace install bundles
8284

8385
## Commit Style
8486

@@ -101,11 +103,12 @@ Types: `feat`, `fix`, `docs`, `refactor`, `chore`
101103

102104
## Releasing
103105

104-
Releases and generated artifacts are handled by the GitHub Actions workflows in `.github/workflows/`. `verify-build.yml` enforces no drift in committed outputs, and merged PRs trigger `build-dist-on-pr-merge.yml` to rebuild and commit generated artifacts.
106+
Releases and generated artifacts are fully automated by the GitHub Actions workflows in `.github/workflows/`. You do **not** need to build or commit generated outputs (`skills/`, `dist/`, `plugins/`) — edit only the sources under `core/` and `adapters/`.
105107

106-
Version metadata is synchronized by `release.yml`.
108+
- On a pull request, `verify-build.yml` builds the sources and runs validation + smoke tests as a sanity check (it does not enforce drift against committed outputs).
109+
- After a merge to `main`, `release.yml` runs a single ordered pipeline: it resolves the next version, syncs it into the manifests, rebuilds all artifacts, validates and smoke-tests them, commits the regenerated artifacts back to `main` (only if anything changed), and finally tags that commit. The tag therefore always points at the commit containing the freshly generated artifacts.
107110

108-
If you need a manual local check before opening a PR:
111+
If you want to sanity-check the build locally before opening a PR:
109112

110113
```bash
111114
bash scripts/build.sh all

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ For platforms with two paths the skill prompts on first use. The choice is persi
3838

3939
### Augment
4040

41-
Augment reads the same `.claude-plugin/` manifests as Claude, plus its own `.augment-plugin/`. Install via Augment's plugin/marketplace UI by pointing it at this repository.
41+
Augment reads the same `.claude-plugin/` manifests as Claude, plus its own `.augment-plugin/`. The repository now ships an agent-specific plugin bundle under `plugins/augment/pr-comments-resolver`, so the marketplace entry points at an installable plugin directory instead of the repo root. Install via Augment's plugin/marketplace UI by pointing it at this repository.
4242

4343
### Codex
4444

45-
Codex auto-discovers `.codex-plugin/` and the repo-scoped marketplace at `.agents/plugins/marketplace.json`.
45+
Codex auto-discovers `.codex-plugin/` and the repo-scoped marketplace at `.agents/plugins/marketplace.json`. The marketplace entry points at `plugins/codex/pr-comments-resolver`, which contains a self-contained Codex plugin bundle.
4646

4747
If plugin installation from repo marketplaces is available in your Codex build, use the repository directly:
4848

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"name": "pr-comments-resolver",
3+
"version": "1.1.2",
4+
"description": "Resolve unresolved PR/MR review comments across GitHub, GitLab, Bitbucket Cloud, and Azure DevOps",
5+
"author": {
6+
"name": "Marcel Strahl @ Dropelikeit",
7+
"url": "https://github.com/Dropelikeit"
8+
},
9+
"keywords": [
10+
"pr",
11+
"code-review",
12+
"github",
13+
"gitlab",
14+
"bitbucket",
15+
"azure-devops",
16+
"merge-request",
17+
"review"
18+
],
19+
"skills": "./skills/"
20+
}

0 commit comments

Comments
 (0)