Skip to content

Commit 78734c3

Browse files
committed
feat: Major improvements to search and release workflow
- Use issuesGetter/count endpoint for efficient issue counting - Split search into simple (ID+summary) and detailed (full info) versions - Add custom_fields_filter to search_issues_detailed - Add GitHub Packages (ghcr.io) Docker registry support - Include package artifacts in GitHub Releases (.whl and .tar.gz) - Update documentation with all available functions
1 parent 6a20e11 commit 78734c3

5 files changed

Lines changed: 328 additions & 46 deletions

File tree

.github/workflows/release.yml

Lines changed: 73 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ jobs:
3434
uses: pypa/gh-action-pypi-publish@release/v1
3535
# Uses OIDC Trusted Publisher, no password needed!
3636

37-
# Deploy to Docker Hub
37+
# Deploy to Docker Hub and GitHub Container Registry
3838
docker:
39-
name: Deploy to Docker Hub
39+
name: Deploy Docker Images
4040
runs-on: ubuntu-latest
4141
permissions:
4242
contents: read
@@ -59,11 +59,20 @@ jobs:
5959
username: ${{ secrets.DOCKERHUB_USERNAME }}
6060
password: ${{ secrets.DOCKERHUB_TOKEN }}
6161

62+
- name: Log in to GitHub Container Registry
63+
uses: docker/login-action@v3
64+
with:
65+
registry: ghcr.io
66+
username: ${{ github.actor }}
67+
password: ${{ secrets.GITHUB_TOKEN }}
68+
6269
- name: Extract metadata
6370
id: meta
6471
uses: docker/metadata-action@v5
6572
with:
66-
images: docker.io/ivolnistov/youtrack-rocket-mcp
73+
images: |
74+
docker.io/ivolnistov/youtrack-rocket-mcp
75+
ghcr.io/${{ github.repository }}
6776
tags: |
6877
type=semver,pattern={{version}}
6978
type=semver,pattern={{major}}.{{minor}}
@@ -81,17 +90,62 @@ jobs:
8190
cache-from: type=gha
8291
cache-to: type=gha,mode=max
8392

93+
# Build release packages
94+
build-packages:
95+
name: Build Release Packages
96+
runs-on: ubuntu-latest
97+
98+
steps:
99+
- uses: actions/checkout@v4
100+
101+
- name: Set up Python
102+
uses: actions/setup-python@v5
103+
with:
104+
python-version: '3.12'
105+
106+
- name: Install build tools
107+
run: |
108+
python -m pip install --upgrade pip
109+
python -m pip install build
110+
111+
- name: Build packages
112+
run: python -m build
113+
114+
- name: Upload wheel
115+
uses: actions/upload-artifact@v4
116+
with:
117+
name: wheel
118+
path: dist/*.whl
119+
120+
- name: Upload sdist
121+
uses: actions/upload-artifact@v4
122+
with:
123+
name: sdist
124+
path: dist/*.tar.gz
125+
84126
# Create GitHub Release
85127
release:
86128
name: Create GitHub Release
87-
needs: [pypi, docker] # Wait for both deployments
129+
needs: [pypi, docker, build-packages] # Wait for all deployments and builds
88130
runs-on: ubuntu-latest
89131
permissions:
90132
contents: write
91133

92134
steps:
93135
- uses: actions/checkout@v4
94136

137+
- name: Download wheel artifact
138+
uses: actions/download-artifact@v4
139+
with:
140+
name: wheel
141+
path: dist/
142+
143+
- name: Download sdist artifact
144+
uses: actions/download-artifact@v4
145+
with:
146+
name: sdist
147+
path: dist/
148+
95149
- name: Extract version from tag
96150
id: version
97151
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
@@ -103,18 +157,27 @@ jobs:
103157
draft: false
104158
prerelease: false
105159
generate_release_notes: true
160+
files: |
161+
dist/*.whl
162+
dist/*.tar.gz
106163
body: |
107164
## 🚀 Release v${{ steps.version.outputs.VERSION }}
108165
109166
### Installation Options:
110167
168+
#### Direct Download
169+
Download the packages attached to this release.
170+
111171
#### PyPI
112172
```bash
113173
# Using uvx (no installation required)
114174
uvx youtrack-rocket-mcp
115175
116176
# Or install with uv tool
117177
uv tool install youtrack-rocket-mcp
178+
179+
# Or with pip
180+
pip install youtrack-rocket-mcp
118181
```
119182
120183
#### Docker Hub
@@ -123,5 +186,11 @@ jobs:
123186
docker pull ivolnistov/youtrack-rocket-mcp:latest
124187
```
125188
189+
#### GitHub Container Registry
190+
```bash
191+
docker pull ghcr.io/i-volnistov/youtrack-rocket-mcp:${{ steps.version.outputs.VERSION }}
192+
docker pull ghcr.io/i-volnistov/youtrack-rocket-mcp:latest
193+
```
194+
126195
### What's Changed
127196
See the full changelog below.

CHANGES.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,42 @@
11
# YouTrack MCP Server - Changes
22

3+
## Date: 2025-01-06
4+
5+
### New Features:
6+
7+
1. **GitHub Release packages and Container Registry support**
8+
- Added GitHub Packages (ghcr.io) deployment alongside Docker Hub
9+
- Docker images now available at both:
10+
- `docker.io/ivolnistov/youtrack-rocket-mcp`
11+
- `ghcr.io/i-volnistov/youtrack-rocket-mcp`
12+
- GitHub Releases now include built packages (.whl and .tar.gz files) as attachments
13+
- Added separate build-packages job to create release artifacts
14+
- File: `.github/workflows/release.yml`
15+
16+
2. **Efficient issue counting with `issuesGetter/count` endpoint**
17+
- Replaced inefficient fetching of 1000 issues with dedicated count API endpoint
18+
- Added retry logic for when YouTrack returns -1 (still calculating)
19+
- Significantly improves performance for large result sets
20+
- Both `search_issues` and `search_issues_detailed` now use the count endpoint
21+
- Files: `src/youtrack_rocket_mcp/tools/issues.py`
22+
23+
3. **Split search functionality into simple and detailed versions**
24+
- `search_issues`: Returns only ID and summary (default limit: 100)
25+
- `search_issues_detailed`: Returns full information with custom fields (default limit: 30)
26+
- Added `custom_fields_filter` parameter to selectively include fields
27+
- Files: `src/youtrack_rocket_mcp/tools/issues.py`
28+
29+
### Improvements:
30+
31+
1. **Search results metadata**
32+
- All search functions now return total count, shown count, and limit
33+
- Display informative message when not all results are shown
34+
- Removed redundant project field from search results
35+
36+
2. **Fixed async close() method**
37+
- Changed `def close()` to `async def close()` to fix RuntimeWarning
38+
- File: `src/youtrack_rocket_mcp/tools/issues.py`
39+
340
## Date: 2025-01-05
441

542
### Fixes and Improvements:

README.md

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,36 @@ Model Context Protocol (MCP) is an open standard that enables AI models to inter
99
## Features
1010

1111
- **Issue Management**
12-
- Get issue details
13-
- Search for issues using YouTrack query language
14-
- Create new issues
15-
- Add comments to issues
12+
- `get_issue` - Get complete issue details
13+
- `get_issue_raw` - Get raw API response for an issue
14+
- `search_issues` - Quick search (returns only ID and summary, limit 100)
15+
- `search_issues_detailed` - Full search with custom fields filtering (limit 30)
16+
- `create_issue` - Create new bug reports, features, or tasks
17+
- `add_comment` - Add comments to issues with markdown support
18+
- `execute_command` - Batch update issues (assign, change state, priority, etc.)
1619

1720
- **Project Management**
18-
- Get project list and details
19-
- Create and update projects
20-
- Access project issues
21-
- Manage custom fields
21+
- `get_projects` - List all available projects
22+
- `get_project` - Get project configuration and custom fields
23+
- `get_project_by_name` - Find project by display name
24+
- `get_project_issues` - List issues in a project
25+
- `get_field_values` - Get valid values for a field (states, priorities, etc.)
26+
- `get_custom_fields` - List project's custom fields
2227

2328
- **User Management**
24-
- Get current user information
25-
- Search for users
26-
- Access user details and groups
27-
28-
- **Search Functionality**
29-
- Advanced search with custom fields
30-
- Structured filtering
31-
- Sorting options
29+
- `get_current_user` - Get current API user
30+
- `get_user` - Fetch user details by ID
31+
- `get_user_by_login` - Find user by login name
32+
- `search_users` - Search users by name or login
33+
34+
- **Advanced Search**
35+
- `advanced_search` - Search with sorting capabilities
36+
- `filter_issues` - Structured filtering by multiple criteria
37+
- `search_with_custom_fields` - Search by custom field values
38+
39+
- **Search Help**
40+
- `get_search_syntax_guide` - Complete YouTrack query syntax reference
41+
- `get_common_queries` - Common query examples and templates
3242

3343
## Documentation
3444

0 commit comments

Comments
 (0)