Skip to content

Commit 22875ee

Browse files
authored
Merge branch 'main' into fix/mcpserver-env-deterministic-ordering
2 parents ecdb75f + 8c90184 commit 22875ee

290 files changed

Lines changed: 36481 additions & 5396 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/skills/toolhive-release/references/WORKFLOW-REFERENCE.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,13 @@ Detailed documentation of the ToolHive release workflow chain.
6868
- Version in commit message matches VERSION file
6969
3. Check if tag already exists (skip if so)
7070
4. Create annotated git tag `vX.Y.Z`
71-
5. Push tag using `RELEASE_TOKEN` (PAT required to trigger downstream workflows)
71+
5. Push tag using a GitHub App installation token (required to trigger downstream workflows; `GITHUB_TOKEN`-authored events do not)
7272
6. Create GitHub Release with auto-generated notes
7373

7474
**Requirements**:
75-
- `RELEASE_TOKEN` secret (PAT with repo access)
75+
- GitHub App installed on the repo with `contents: write` permission
76+
- `RELEASE_APP_CLIENT_ID` repository **variable** (the app's Client ID)
77+
- `RELEASE_APP_PRIVATE_KEY` repository **secret** (the app's private key in PEM)
7678

7779
## Workflow 3: releaser.yml
7880

@@ -162,7 +164,8 @@ If a previous Create Release PR run failed after creating the branch but before
162164
### Tag creation fails
163165

164166
- Tag may already exist: `git tag | grep vX.Y.Z`
165-
- RELEASE_TOKEN may be expired or lack permissions
167+
- Release GitHub App may be uninstalled, or the `RELEASE_APP_CLIENT_ID` variable / `RELEASE_APP_PRIVATE_KEY` secret may be missing or stale
168+
- App may lack `contents: write` permission on the repo
166169

167170
### Releaser workflow fails
168171

.codespellrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
[codespell]
2-
ignore-words-list = NotIn,notin,AfterAll,ND,aks,deriver,te,clientA,AtMost,atmost
2+
ignore-words-list = NotIn,notin,AfterAll,ND,aks,deriver,te,clientA,AtMost,atmost,convertIn
33
skip = *.svg,*.mod,*.sum

.github/workflows/create-release-pr.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ jobs:
3030
name: Create Release PR
3131
runs-on: ubuntu-latest
3232
steps:
33+
- name: Generate release app token
34+
id: app-token
35+
uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
36+
with:
37+
client-id: ${{ vars.RELEASE_APP_CLIENT_ID }}
38+
private-key: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
39+
3340
- name: Checkout
3441
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
3542

@@ -73,7 +80,7 @@ jobs:
7380
with:
7481
releaseo_version: v0.0.4
7582
bump_type: ${{ inputs.bump_type }}
76-
token: ${{ secrets.RELEASE_TOKEN }}
83+
token: ${{ steps.app-token.outputs.token }}
7784
version_files: |
7885
- file: deploy/charts/operator-crds/Chart.yaml
7986
path: version

.github/workflows/create-release-tag.yml

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ jobs:
2020
create-tag:
2121
runs-on: ubuntu-latest
2222
steps:
23+
- name: Generate release app token
24+
id: app-token
25+
uses: actions/create-github-app-token@1b10c78c7865c340bc4f6099eb2f838309f1e8c3 # v3.1.1
26+
with:
27+
client-id: ${{ vars.RELEASE_APP_CLIENT_ID }}
28+
private-key: ${{ secrets.RELEASE_APP_PRIVATE_KEY }}
29+
2330
- name: Checkout
2431
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
2532
with:
@@ -134,7 +141,7 @@ jobs:
134141
git push https://x-access-token:${GH_TOKEN}@github.com/${{ github.repository }}.git "$TAG"
135142
echo "Created and pushed tag: $TAG"
136143
env:
137-
GH_TOKEN: ${{ secrets.RELEASE_TOKEN }}
144+
GH_TOKEN: ${{ steps.app-token.outputs.token }}
138145

139146
- name: Check if GitHub Release exists
140147
id: check-release
@@ -148,7 +155,7 @@ jobs:
148155
echo "exists=false" >> $GITHUB_OUTPUT
149156
fi
150157
env:
151-
GH_TOKEN: ${{ secrets.RELEASE_TOKEN }}
158+
GH_TOKEN: ${{ steps.app-token.outputs.token }}
152159

153160
- name: Create GitHub Release
154161
if: steps.check-release.outputs.exists == 'false'
@@ -157,7 +164,8 @@ jobs:
157164
TRIGGERED_BY="${{ steps.actor.outputs.triggered_by }}"
158165
159166
# Create GitHub Release (triggers releaser.yml via release event)
160-
# Note: Must use PAT (GH_TOKEN) because GITHUB_TOKEN cannot trigger other workflows
167+
# Note: Uses a GitHub App installation token rather than GITHUB_TOKEN,
168+
# because events from GITHUB_TOKEN cannot trigger downstream workflows.
161169
# Include actor metadata as HTML comment if available (parsed by releaser.yml)
162170
if [ -n "$TRIGGERED_BY" ]; then
163171
gh release create "$TAG" \
@@ -171,7 +179,7 @@ jobs:
171179
fi
172180
echo "Created GitHub Release: $TAG"
173181
env:
174-
GH_TOKEN: ${{ secrets.RELEASE_TOKEN }}
182+
GH_TOKEN: ${{ steps.app-token.outputs.token }}
175183

176184
- name: Summary
177185
run: |

.github/workflows/e2e-tests.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ jobs:
7777
- title: vmcp
7878
label_filter: vmcp
7979
artifact: e2e-test-results-vmcp
80+
- title: llm
81+
label_filter: llm
82+
artifact: e2e-test-results-llm
8083
steps:
8184
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
8285

.golangci.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ linters:
6262
forbid-spec-pollution: false
6363
# Force using Succeed() for functions and HaveOccurred() for errors
6464
force-succeed: false
65+
goconst:
66+
ignore-tests: true
67+
min-occurrences: 25
6568
gocyclo:
6669
min-complexity: 15
6770
gosec:
@@ -78,6 +81,7 @@ linters:
7881
- G704 # SSRF via taint analysis
7982
- G705 # XSS via taint analysis
8083
- G706 # Log injection via taint analysis
84+
- G710 # Open redirect via taint analysis
8185
lll:
8286
line-length: 130
8387
revive:
@@ -115,7 +119,14 @@ linters:
115119
- errcheck
116120
- dupl
117121
- gosec
122+
- goconst
118123
path: (.+)_test\.go
124+
- linters:
125+
- goconst
126+
path: ^test/
127+
- linters:
128+
- goconst
129+
path: ^deploy/
119130
- linters:
120131
- lll
121132
path: .golangci.yml

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.24.1
1+
0.26.1

cmd/thv-operator/README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,6 @@ spec:
282282
configYAML: |
283283
sources:
284284
- name: my-source
285-
format: toolhive
286285
file:
287286
path: /config/registry/my-source/registry.json
288287
syncPolicy:

0 commit comments

Comments
 (0)