Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "ivygrep",
"interface": {
"displayName": "ivygrep"
},
"plugins": [
{
"name": "ivygrep",
"source": {
"source": "local",
"path": "./plugins/ivygrep"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Development"
}
]
}
18 changes: 18 additions & 0 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "ivygrep",
"owner": {
"name": "Bruno Volpato"
},
"metadata": {
"description": "Local code search and task context for coding agents"
},
"plugins": [
{
"name": "ivygrep",
"source": "./plugins/ivygrep",
"description": "Build bounded local context packs before coding agents explore a repository",
"category": "Development",
"tags": ["code-search", "context", "mcp", "local-first"]
}
]
}
70 changes: 70 additions & 0 deletions .github/workflows/publish-crates.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Publish crates.io packages

on:
workflow_dispatch:
inputs:
bootstrap:
description: Use CRATES_IO_TOKEN for first publication
required: true
type: boolean
default: false

permissions:
contents: read
id-token: write

jobs:
publish:
name: Publish dependency forks and ivygrep
runs-on: ubuntu-latest
environment: release
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@29eef336d9b2848b548edc03f92a220660cdb8 # stable

- name: Authenticate to crates.io
if: ${{ !inputs.bootstrap }}
id: auth
uses: rust-lang/crates-io-auth-action@c6f97d42243bad5fab37ca0427f495c86d5b1a18 # v1

- name: Require first-publication token
if: ${{ inputs.bootstrap }}
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }}
run: test -n "$CARGO_REGISTRY_TOKEN"

- name: Publish packages in dependency order
env:
CARGO_REGISTRY_TOKEN: ${{ inputs.bootstrap && secrets.CRATES_IO_TOKEN || steps.auth.outputs.token }}
run: |
publish() {
local manifest=$1
local package=$2
local version=$3
if curl -fsS -A "ivygrep-release/${GITHUB_RUN_ID}" \
"https://crates.io/api/v1/crates/${package}/${version}" >/dev/null 2>&1; then
echo "${package} ${version} already published"
return
fi
cargo publish --locked --manifest-path "$manifest"
Comment thread
bvolpato marked this conversation as resolved.
for _ in $(seq 1 30); do
if curl -fsS -A "ivygrep-release/${GITHUB_RUN_ID}" \
"https://crates.io/api/v1/crates/${package}/${version}" >/dev/null 2>&1; then
return
fi
sleep 10
done
echo "${package} ${version} did not become visible" >&2
exit 1
}

publish vendor/hf-hub/Cargo.toml ivygrep-hf-hub 0.3.2-ivygrep.1
publish vendor/candle_embed/Cargo.toml ivygrep-candle-embed 0.1.4-ivygrep.1
publish vendor/usearch/Cargo.toml ivygrep-usearch 2.24.0-ivygrep.1
publish vendor/tree-sitter-haskell/Cargo.toml ivygrep-tree-sitter-haskell 0.23.1-ivygrep.1
VERSION=$(sed -n 's/^version = "\([^"]*\)"/\1/p' Cargo.toml | head -1)
publish Cargo.toml ivygrep "$VERSION"
40 changes: 40 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -525,6 +525,21 @@ jobs:
path: artifacts
merge-multiple: false

- name: Install uv for MCP bundle packaging
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
with:
enable-cache: false

- name: Build MCP bundle and Registry metadata
run: |
VERSION="${GITHUB_REF#refs/tags/v}"
mkdir -p release-assets
uv run scripts/package_mcpb.py \
--artifacts artifacts \
--version "$VERSION" \
--output "release-assets/ivygrep-mcp-v${VERSION}.mcpb" \
--server-json release-assets/server.json

- name: Collect release assets
run: |
mkdir -p release-assets
Expand Down Expand Up @@ -553,6 +568,31 @@ jobs:
files: release-assets/*
fail_on_unmatched_files: true

mcp-registry:
name: Publish MCP Registry metadata
needs: release
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- name: Download Registry metadata from release
env:
GH_TOKEN: ${{ github.token }}
run: gh release download "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" --pattern server.json

- name: Install pinned MCP Registry publisher
run: |
curl -fsSLo mcp-publisher.tar.gz \
https://github.com/modelcontextprotocol/registry/releases/download/v1.8.0/mcp-publisher_linux_amd64.tar.gz
echo "1370446bbe74d562608e8005a6ccce02d146a661fbd78674e11cc70b9618d6cf mcp-publisher.tar.gz" | sha256sum --check
tar xzf mcp-publisher.tar.gz mcp-publisher

- name: Publish to MCP Registry
run: |
./mcp-publisher login github-oidc
./mcp-publisher publish

homebrew:
name: Update Homebrew Tap
needs: release
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,20 @@ All notable changes to ivygrep are documented in this file.

## [Unreleased]

## [1.2.6] - 2026-07-19

### Added
- Codex and Claude Code marketplaces now install one ivygrep plugin containing MCP configuration and a focused task-context skill.
- Release archives now include a cross-platform MCPB package and MCP Registry metadata. GitHub OIDC publishes each tagged release to registry.
- Dedicated integration guides cover Codex, Claude Code, Cursor, Gemini CLI, OpenCode, and generic MCP clients.

### Distribution
- ivygrep and four behavior-critical dependency forks have publishable crates.io manifests without consumer-side `[patch.crates-io]` configuration.
- Windows users gain a portable WinGet package backed by release archive checksum and nested executable validation.

### Testing
- Distribution contracts cover marketplace versions, plugin MCP configuration, crate dependency aliases, cross-platform MCPB contents and digest, WinGet metadata, agent pages, and publication workflows.

## [1.2.5] - 2026-07-18

### Performance
Expand Down
106 changes: 53 additions & 53 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading