gitlab_list_releases_since_version
Filter GitLab project releases from a specific version onward to track changes and updates in your development workflow.
Instructions
Filters releases for a given GitLab project since a specific version.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| projectName | Yes | The name or partial name of the GitLab project. | |
| sinceVersion | Yes | The version to filter releases since (e.g., "1.0.0"). |
Implementation Reference
- src/index.ts:1402-1428 (handler)Main handler for gitlab_list_releases_since_version tool. Resolves projectPath by fuzzy matching projectName, then calls service to filter releases since given version using semver comparison.case 'gitlab_list_releases_since_version': { if (!gitlabService) { throw new Error('GitLab service is not initialized.'); } const { projectName, sinceVersion } = args as { projectName: string; sinceVersion: string; }; const projects = await gitlabService.filterProjectsByName(projectName); if (projects.length === 0) { throw new Error(`No project found with name: ${projectName}`); } const projectPath = projects[0].path_with_namespace; const result = await gitlabService.filterReleasesSinceVersion( projectPath, sinceVersion, ); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], }; }
- src/index.ts:253-270 (registration)Tool registration in the allTools array, defining name, description, and inputSchema for gitlab_list_releases_since_version.name: 'gitlab_list_releases_since_version', description: 'Filters releases for a given GitLab project since a specific version.', inputSchema: { type: 'object', properties: { projectName: { type: 'string', description: 'The name or partial name of the GitLab project.', }, sinceVersion: { type: 'string', description: 'The version to filter releases since (e.g., "1.0.0").', }, }, required: ['projectName', 'sinceVersion'], }, },
- src/gitlab.service.ts:453-470 (helper)Helper method in GitLabService that fetches all releases and filters those with tag_name >= sinceVersion using semver.gte.async filterReleasesSinceVersion( projectPath: string, sinceVersion: string, ): Promise<any[]> { const allReleases = await this.getReleases(projectPath); const semver = await import('semver'); return allReleases.filter((release) => { try { return semver.gte(release.tag_name, sinceVersion); } catch (error) { console.error( `Could not parse version ${release.tag_name} or ${sinceVersion}: ${error}`, ); return false; } }); }
- src/gitlab.service.ts:433-444 (helper)Helper method in GitLabService to fuzzy match projects by name and return matching GitLabProject objects; used to resolve projectPath from projectName in the handler.async filterProjectsByName(projectName: string): Promise<GitLabProject[]> { const allProjects = await this.listProjects(); const lowerCaseProjectName = projectName.toLowerCase(); return allProjects.filter( (project) => project.name.toLowerCase().includes(lowerCaseProjectName) || project.name_with_namespace .toLowerCase() .includes(lowerCaseProjectName), ); }
- src/gitlab.service.ts:447-450 (helper)Helper method in GitLabService to fetch all releases from GitLab API for a project; called by filterReleasesSinceVersion.async getReleases(projectPath: string): Promise<any[]> { const encodedProjectPath = encodeURIComponent(projectPath); return this.callGitLabApi<any[]>(`projects/${encodedProjectPath}/releases`); }