Skip to content

Conversation

@AleksandrParamonoff
Copy link
Contributor

No description provided.

@coderabbitai
Copy link

coderabbitai bot commented Dec 4, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Summary by CodeRabbit

  • Documentation

    • Reorganized installation section for clarity between local and remote setup options
    • Updated formatting and heading consistency throughout guide
  • New Features

    • Added MCP server service to deployment stack
  • Chores

    • Improved build process with multi-stage Docker compilation
    • Optimized Docker image build workflow

✏️ Tip: You can customize this high-level summary in your review settings.

Walkthrough

Removed goreleaser's inline Docker build configuration and replaced it with a note that Docker Buildx handles multi-arch images; converted the release Dockerfile to a multi-stage build; added an mcp-server service to docker-compose.yaml; reorganized README installation headings; and allowed test_items_ids to accept string items with a new unit test.

Changes

Cohort / File(s) Summary
Release & CI build config
.\goreleaser.yaml, release.dockerfile
Removed the dockers block from .goreleaser.yaml (comment added to indicate Docker Buildx workflow). Rewrote release.dockerfile as a multi-stage build: golang:1.24.4 builder stage and gcr.io/distroless/base-debian12 final stage; builds binary with ldflags and copies it from builder.
Local dev compose
docker-compose.yaml
Added mcp-server service using reportportal/mcp-server:latest, container name reportportal-mcp-server, restart policy, env vars (MCP_MODE, RP_HOST), and port mapping 8085:8080.
Documentation
README.md
Reorganized installation section into local (Docker/pre-built binaries) vs remote; promoted several tool subsections from #### to ###; added a "Save and restart Claude Desktop" step and small phrasing/formatting adjustments.
Tool schema & tests
internal/reportportal/items.go, internal/reportportal/items_test.go
Added mcp.WithStringItems() to test_items_ids parameter handling in toolUpdateDefectTypeForTestItems. Added TestUpdateDefectTypeForTestItemsTool to assert test_items_ids is an array with items.type == "string" and updated imports/test setup accordingly.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Check release.dockerfile build ARGs, ldflags, and binary path in final image for correctness.
  • Validate that removing goreleaser dockers block does not omit required image metadata (labels/tags) from the Buildx workflow.
  • Confirm docker-compose.yaml env defaults and port mapping are intentional.
  • Review new test for robustness and that mcp.WithStringItems() integrates with existing schema builders.

Possibly related PRs

Suggested reviewers

  • hlebkanonik
  • avarabyeu

Poem

🐳 Multistage builds stack, clean and bright,
Compose brings a server to port eight-oh-five,
Goreleaser's dockers step aside, out of sight,
Schemas now accept strings to thrive—
Tests tick the boxes; builds resume their drive.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 2 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive The title 'Release 1.1.1' is generic and vague, lacking specific details about the changes being introduced in this release. Consider using a descriptive title following conventional commit format, such as 'chore: release 1.1.1 - Docker Buildx migration and setup updates' to better convey the main changes.
Description check ❓ Inconclusive No pull request description was provided by the author, making it impossible to assess whether it relates to the changeset. Add a pull request description that outlines the key changes, such as Docker build migration to Buildx, README reorganization, docker-compose updates, and Dockerfile multi-stage build improvements.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch develop

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This release PR (1.1.1) introduces multi-architecture Docker support, comprehensive Helm chart deployment capabilities, and fixes a critical VS Code/GitHub Copilot compatibility issue with array parameters in the MCP tool definitions.

Key changes include:

  • Multi-stage Dockerfile with version metadata support and multi-arch builds (amd64 + arm64)
  • Bug fix for test_items_ids array parameter to properly support VS Code/GitHub Copilot (issue #66)
  • Complete Helm chart for Kubernetes deployment with customizable values, health probes, and ingress configuration

Reviewed changes

Copilot reviewed 22 out of 23 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
release.dockerfile Refactored to multi-stage build with build arguments for version tracking
internal/reportportal/items.go Added WithStringItems() to fix array parameter schema for VS Code compatibility
internal/reportportal/items_test.go Added test to verify array parameter schema includes required "items" property
helm-charts/reportportal-mcp-server/Chart.yaml New Helm chart definition (v0.1.0)
helm-charts/reportportal-mcp-server/values.yaml Comprehensive configuration values with environment variables, probes, and resource limits
helm-charts/reportportal-mcp-server/templates/*.yaml Kubernetes resource templates for deployment, service, ingress, HPA, and service account
helm-charts/reportportal-mcp-server/templates/_helpers.tpl Helm template helper functions for labels and naming
helm-charts/reportportal-mcp-server/templates/NOTES.txt Post-installation instructions for users
helm-charts/reportportal-mcp-server/README.md Helm chart documentation with installation and configuration examples
helm-charts/reportportal-mcp-server/.helmignore Patterns to exclude from Helm package
docker-compose.yaml New Docker Compose configuration for easy local deployment
README.md Restructured installation sections with clearer local vs remote setup distinctions
.goreleaser.yaml Removed Docker build section (now handled separately by GitHub Actions)
.gitignore Added exclusions for Helm artifacts and examples directory
.github/workflows/release.yml Added Docker Buildx multi-arch build step with metadata and labels
.github/workflows/helm-lint.yaml New workflow for Helm chart validation
.github/workflows/build-rc-image.yaml Added arm64 platform support
.github/workflows/build-feature-image.yaml Added arm64 platform support and output
.github/workflows/build-dev-image.yml Added arm64 platform support and output

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
README.md (1)

79-99: Clarify /mcp vs /mcp/ in remote URL examples

The remote configuration examples use URLs ending with /mcp/, while the HTTP API section documents the endpoints as /mcp and /api/mcp (no trailing slash):

  • Examples: "url": "http://your-mcp-server-host:port/mcp/"
  • API section: POST /mcp, POST /api/mcp

Depending on the router, /mcp and /mcp/ may not be equivalent. To avoid confusion for users (and subtle 404s), it would be good to either:

  • Standardize all examples and text on one form (e.g., /mcp), or
  • Explicitly state that both /mcp and /mcp/ are accepted by the server.

If you share which HTTP router you’re using in the server, I can suggest precise wording that reflects its behavior with trailing slashes.

Also applies to: 434-441

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 57c7620 and 0033076.

⛔ Files ignored due to path filters (17)
  • .github/workflows/build-dev-image.yml is excluded by none and included by none
  • .github/workflows/build-feature-image.yaml is excluded by none and included by none
  • .github/workflows/build-rc-image.yaml is excluded by none and included by none
  • .github/workflows/helm-lint.yaml is excluded by none and included by none
  • .github/workflows/release.yml is excluded by none and included by none
  • .gitignore is excluded by none and included by none
  • helm-charts/reportportal-mcp-server/.helmignore is excluded by none and included by none
  • helm-charts/reportportal-mcp-server/Chart.yaml is excluded by none and included by none
  • helm-charts/reportportal-mcp-server/README.md is excluded by none and included by none
  • helm-charts/reportportal-mcp-server/templates/NOTES.txt is excluded by none and included by none
  • helm-charts/reportportal-mcp-server/templates/_helpers.tpl is excluded by none and included by none
  • helm-charts/reportportal-mcp-server/templates/deployment.yaml is excluded by none and included by none
  • helm-charts/reportportal-mcp-server/templates/hpa.yaml is excluded by none and included by none
  • helm-charts/reportportal-mcp-server/templates/ingress.yaml is excluded by none and included by none
  • helm-charts/reportportal-mcp-server/templates/service.yaml is excluded by none and included by none
  • helm-charts/reportportal-mcp-server/templates/serviceaccount.yaml is excluded by none and included by none
  • helm-charts/reportportal-mcp-server/values.yaml is excluded by none and included by none
📒 Files selected for processing (6)
  • .goreleaser.yaml (1 hunks)
  • README.md (7 hunks)
  • docker-compose.yaml (1 hunks)
  • internal/reportportal/items.go (1 hunks)
  • internal/reportportal/items_test.go (2 hunks)
  • release.dockerfile (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.go

📄 CodeRabbit inference engine (README.md)

**/*.go: Build and compile the ReportPortal MCP Server Go application using go build -o reportportal-mcp-server ./cmd/reportportal-mcp-server
Set environment variables RP_HOST, RP_PROJECT, and RP_API_TOKEN for stdio mode operation, or set MCP_MODE=http with MCP_SERVER_PORT and MCP_SERVER_HOST for HTTP mode
Require Go 1.24.1 or later for building the ReportPortal MCP Server
Add new tools by creating methods in resource files and registering them in the NewServer function using s.AddTool()
Ensure all MCP requests follow JSON-RPC 2.0 specification with required fields: jsonrpc, method, id, and params
Use /mcp or /api/mcp endpoints for POST requests (MCP protocol); use /, /health, /info, /api/status, or /metrics for GET requests only

Files:

  • internal/reportportal/items.go
  • internal/reportportal/items_test.go

⚙️ CodeRabbit configuration file

Focus on Go best practices, error handling, concurrency safety, performance, and security. Check for proper resource cleanup and context handling.

Files:

  • internal/reportportal/items.go
  • internal/reportportal/items_test.go
internal/reportportal/**

⚙️ CodeRabbit configuration file

Pay special attention to API integration patterns, error handling, data validation, and MCP protocol compliance.

Files:

  • internal/reportportal/items.go
  • internal/reportportal/items_test.go
**/*_test.go

⚙️ CodeRabbit configuration file

Ensure comprehensive test coverage, proper test isolation, meaningful assertions, and good test naming conventions.

Files:

  • internal/reportportal/items_test.go
🧠 Learnings (3)
📚 Learning: 2025-12-01T14:55:41.065Z
Learnt from: CR
Repo: reportportal/reportportal-mcp-server PR: 0
File: README.md:0-0
Timestamp: 2025-12-01T14:55:41.065Z
Learning: Applies to **/*.go : Build and compile the ReportPortal MCP Server Go application using `go build -o reportportal-mcp-server ./cmd/reportportal-mcp-server`

Applied to files:

  • .goreleaser.yaml
  • release.dockerfile
  • docker-compose.yaml
📚 Learning: 2025-12-01T14:55:41.065Z
Learnt from: CR
Repo: reportportal/reportportal-mcp-server PR: 0
File: README.md:0-0
Timestamp: 2025-12-01T14:55:41.065Z
Learning: Applies to **/*.go : Require Go 1.24.1 or later for building the ReportPortal MCP Server

Applied to files:

  • release.dockerfile
📚 Learning: 2025-12-01T14:55:41.065Z
Learnt from: CR
Repo: reportportal/reportportal-mcp-server PR: 0
File: README.md:0-0
Timestamp: 2025-12-01T14:55:41.065Z
Learning: The ReportPortal MCP Server should be compatible with MCP-compatible AI tools such as Claude Desktop, GitHub Copilot, Cursor, and other coding agents

Applied to files:

  • README.md
🧬 Code graph analysis (1)
internal/reportportal/items_test.go (1)
internal/reportportal/items.go (1)
  • NewTestItemResources (26-39)
🪛 Checkov (3.2.334)
release.dockerfile

[low] 22-22: Ensure the base image uses a non latest version tag

(CKV_DOCKER_7)


[low] 1-30: Ensure that HEALTHCHECK instructions have been added to container images

(CKV_DOCKER_2)


[low] 1-30: Ensure that a user for the container has been created

(CKV_DOCKER_3)

🪛 Hadolint (2.14.0)
release.dockerfile

[warning] 22-22: Always tag the version of an image explicitly

(DL3006)

🪛 markdownlint-cli2 (0.18.1)
README.md

233-233: Ordered list item prefix
Expected: 1; Actual: 3; Style: 1/1/1

(MD029, ol-prefix)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Agent
🔇 Additional comments (5)
.goreleaser.yaml (1)

29-30: Clarifying Docker image build responsibility

Comment accurately reflects that Docker images are no longer built by GoReleaser and instead by a separate Buildx workflow. This keeps the release config focused on binaries only; just ensure the CI workflow using release.dockerfile is the single source of truth for image tags and multi‑arch manifests.

Please double‑check the release workflow to confirm that:

  • It uses release.dockerfile for image builds.
  • It pushes a multi‑arch manifest for the reportportal/mcp-server tags you intend to distribute.
release.dockerfile (1)

1-30: Multi‑stage image build aligns with Go and release guidelines

This Dockerfile looks solid:

  • Builder stage uses golang:1.24.4 and go build -o reportportal-mcp-server ./cmd/reportportal-mcp-server, which matches the documented build command and Go version requirement.
  • CGO_ENABLED=0 and -s -w ldflags keep the binary portable and small while still injecting version/commit/date via -X main.*, consistent with the GoReleaser ldflags.
  • Final stage uses a pinned distroless base image for a minimal, non‑root runtime.

Given the external healthcheck handled via docker-compose.yaml (once reconciled with the distroless image), you don’t strictly need an in‑image HEALTHCHECK here; if you add one later, prefer a direct invocation of the Go binary rather than adding extra tools.

If you want to be extra sure about the final image posture, it’s worth confirming at runtime that:

  • The process runs as non‑root (id -u inside a debug shell or via Kubernetes security context).
  • The binary exposes /health on port 8080 when MCP_MODE=http, matching your compose healthcheck and README.
README.md (2)

22-24: Installation split into local vs remote reads clearly

The new phrasing that distinguishes:

  1. Local (Docker or pre‑built binaries), and
  2. Connecting to a remote MCP server

does a good job aligning user mental models with the two runtime modes (stdio vs HTTP) described later in the README. The examples below match the documented env vars and endpoints.


103-261: Per‑tool configuration sections are consistent and align with MCP usage

The reorganized sections for Cursor, GitHub Copilot (VS Code + JetBrains), Claude Desktop, Claude Code CLI, and “Other Coding Agents” are consistent:

  • Local examples correctly use stdio/Docker invocation with RP_HOST, RP_PROJECT, and RP_API_TOKEN.
  • Remote examples consistently use url pointing at /mcp plus headers for Authorization and X-Project, which matches the HTTP mode description.
  • The added “Save and restart Claude Desktop” step makes that flow clearer.

This structure should make it much easier for users of different tools to copy/paste the right snippet without cross‑referencing other sections.

internal/reportportal/items.go (1)

707-712: Schema change for test_items_ids now correctly reflects string items

Adding mcp.WithStringItems() to the test_items_ids array is a good fix:

  • It aligns the input schema with the handler, which already calls RequireStringSlice("test_items_ids") and then parses each ID with strconv.ParseInt.
  • It ensures MCP clients like VS Code and GitHub Copilot see type: "array" with items.type: "string", addressing the schema‑compatibility issue referenced in the tests.

The only thing to watch is that any existing clients should already be sending IDs as strings; if any were relying on raw numeric array items, they may need to be updated to match the clarified schema.

If you have known production clients, it’s worth spot‑checking one or two request payloads (or logs) to confirm test_items_ids are indeed sent as string IDs today.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0033076 and 1f15a01.

📒 Files selected for processing (1)
  • docker-compose.yaml (1 hunks)
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-12-01T14:55:41.065Z
Learnt from: CR
Repo: reportportal/reportportal-mcp-server PR: 0
File: README.md:0-0
Timestamp: 2025-12-01T14:55:41.065Z
Learning: Applies to **/*.go : Build and compile the ReportPortal MCP Server Go application using `go build -o reportportal-mcp-server ./cmd/reportportal-mcp-server`

Applied to files:

  • docker-compose.yaml
📚 Learning: 2025-12-01T14:55:41.065Z
Learnt from: CR
Repo: reportportal/reportportal-mcp-server PR: 0
File: README.md:0-0
Timestamp: 2025-12-01T14:55:41.065Z
Learning: The ReportPortal MCP Server should be compatible with MCP-compatible AI tools such as Claude Desktop, GitHub Copilot, Cursor, and other coding agents

Applied to files:

  • docker-compose.yaml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Prepare
  • GitHub Check: Call develop Docker build / Build and export to AWS ECR
🔇 Additional comments (3)
docker-compose.yaml (3)

2-5: Verify healthcheck strategy or add explicit health probe.

The previous review flagged an incompatibility between the curl-based healthcheck and the distroless base image. This version removes the healthcheck, which resolves the immediate issue. However, confirm whether this is intentional or if a healthcheck should be added in a follow-up commit (e.g., via a built-in Go health endpoint or a TCP probe).

For production readiness, consider adding:

  • A TCP socket check (distroless-compatible), or
  • A dedicated health subcommand in the Go binary (if implemented), or
  • Removing the healthcheck and relying on orchestration-level probes (Kubernetes, etc.)

8-8: Verify RP_HOST default aligns with actual deployment setup.

The default placeholder https://your-reportportal-instance.com is clear for documentation but may prevent the service from starting correctly in local development or CI environments if not explicitly overridden. Confirm whether a more realistic default (e.g., http://localhost:8080 for local setups or a real hostname for production) should be used, or document the requirement clearly.


10-10: Verify port 8085 is appropriate and document if host port mapping differs from container port.

The mapping 8085:8080 routes host port 8085 to container port 8080. Confirm:

  • Port 8080 is the correct internal MCP server port.
  • Port 8085 is free and intentional on the host (not conflicting with other services).
  • If this is for local development, consider using an available port or documenting the rationale.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 22 out of 23 changed files in this pull request and generated no new comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@AleksandrParamonoff AleksandrParamonoff merged commit e46ad30 into main Dec 4, 2025
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants