Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
2 changes: 1 addition & 1 deletion .github/workflows/archie.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/cloclo.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/daily-compiler-quality.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/daily-file-diet.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/daily-testify-uber-super-expert.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/developer-docs-consolidator.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/duplicate-code-detector.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/glossary-maintainer.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/go-fan.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/jsweep.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/mcp-inspector.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/q.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/repository-quality-improver.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/sergo.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/smoke-claude.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/smoke-codex.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/smoke-copilot.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/terminal-stylist.lock.yml

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

2 changes: 1 addition & 1 deletion .github/workflows/typist.lock.yml

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

17 changes: 17 additions & 0 deletions pkg/workflow/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,23 @@ func collectDockerImages(tools map[string]any, workflowData *WorkflowData) []str
}
}

// Check for Serena tool (uses Docker image when not in local mode)
if serenaTool, hasSerena := tools["serena"]; hasSerena {
// Only add if NOT using local mode (local mode uses uvx, not Docker)
if workflowData != nil && !isSerenaInLocalMode(workflowData.ParsedTools) {
// Select the appropriate Serena container image based on configured languages
// selectSerenaContainer() returns the base image path (e.g., "ghcr.io/github/serena-mcp-server")
// which we then tag with ":latest" to match the MCP config renderer
containerImage := selectSerenaContainer(serenaTool)
image := containerImage + ":latest"
if !imageSet[image] {
images = append(images, image)
imageSet[image] = true
dockerLog.Printf("Added Serena MCP server container: %s", image)
}
}
}

// Check for safe-outputs MCP server (uses node:lts-alpine container)
if workflowData != nil && workflowData.SafeOutputs != nil && HasSafeOutputsEnabled(workflowData.SafeOutputs) {
image := constants.DefaultNodeAlpineLTSImage
Expand Down
57 changes: 57 additions & 0 deletions pkg/workflow/docker_predownload_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,63 @@ Test workflow - safe outputs MCP server without GitHub tool.`,
},
expectStep: true,
},
{
name: "Serena tool in docker mode generates image download step",
frontmatter: `---
on: issues
engine: claude
tools:
serena: ["go", "typescript"]
---

# Test
Test workflow with Serena tool.`,
expectedImages: []string{
"ghcr.io/github/gh-aw-mcpg:" + string(constants.DefaultMCPGatewayVersion),
constants.DefaultSerenaMCPServerContainer + ":latest",
},
expectStep: true,
},
{
name: "Serena tool in local mode does not generate docker image",
frontmatter: `---
on: issues
strict: false
engine: claude
tools:
serena:
mode: local
languages:
go:
typescript:
---

# Test
Test workflow with Serena tool in local mode.`,
expectedImages: []string{
"ghcr.io/github/gh-aw-mcpg:" + string(constants.DefaultMCPGatewayVersion),
},
expectStep: true,
},
{
name: "Serena tool with GitHub tool both generate images",
frontmatter: `---
on: issues
engine: claude
tools:
github:
serena: ["python"]
---

# Test
Test workflow with both GitHub and Serena tools.`,
expectedImages: []string{
"ghcr.io/github/gh-aw-mcpg:" + string(constants.DefaultMCPGatewayVersion),
"ghcr.io/github/github-mcp-server:v0.30.3",
constants.DefaultSerenaMCPServerContainer + ":latest",
},
expectStep: true,
},
}

for _, tt := range tests {
Expand Down
Loading