Skip to content

Clean up workBenches base and devBench tooling#1

Open
brettheap wants to merge 51 commits into
mainfrom
workbenches-cleanup
Open

Clean up workBenches base and devBench tooling#1
brettheap wants to merge 51 commits into
mainfrom
workbenches-cleanup

Conversation

@brettheap

@brettheap brettheap commented May 23, 2026

Copy link
Copy Markdown
Contributor

Summary

  • update the shared AI CLI base layer, including Antigravity CLI and current OpenCode/auth plugin handling
  • move OpenSpec/spec-kit workflow tooling into the devBench base layer with reusable worktree helpers
  • add reusable SonarQube MCP startup, stale devcontainer reconciliation, and coverage helpers for dev benches
  • refresh bench inventory from pythonBench to pyBench and add phpBench detection/config defaults

Validation

  • bash syntax checks for changed shell scripts
  • zsh syntax checks for changed zsh startup/helper files
  • Python compile check for setup-openspeckit
  • JSON validation for bench/opencode config files
  • functional smoke test for speckit-worktree-enable using local templates

Summary by Sourcery

Align shared base and devBench tooling for AI/spec CLIs, SonarQube integrations, and spec-kit workflows while adding PHP bench support and improving workspace detection and tests.

New Features:

  • Add Google Antigravity CLI installation and integrate it into the shared AI CLI toolchain.
  • Introduce reusable SonarScanner and SonarQube CLI tooling with SonarCloud coverage helpers for Java, Go, and C++ dev benches.
  • Add spec-driven development support (OpenSpec and spec-kit) and Speckit worktree bootstrap/helpers shared across developer benches.
  • Add PHP workspace detection and phpBench support across project analyzers, metadata helpers, and docs.
  • Provide a reusable SonarQube MCP startup script and a devcontainer reconciliation helper for stale containers.

Bug Fixes:

  • Prevent reuse of stale spec-driven CLI installs by explicitly uninstalling inherited OpenSpec/specify-cli tooling in base layers.
  • Harden layer3 user image reuse checks by inspecting /etc/passwd and /etc/group directly instead of relying on runtime commands.
  • Ensure AI provider priority configs and adapters ignore deprecated Grok CLI entries and only persist supported providers.
  • Fix legacy timestamp branch validation and JSON parsing edge cases in Speckit git helpers.

Enhancements:

  • Refine the shared yolo/ct AI helper workflows to run Claude in tmux sessions with safer quoting and better error handling across shells and benches.
  • Standardize OpenCode installation on the upstream repository and adjust auth plugin install strategy for greater resilience.
  • Tighten devBench test coverage to validate spec-kit/Speckit helpers, Sonar tooling, and PATH layouts, and make tests more robust to failures.
  • Improve docs for mounts, container architecture, AI provider setup, spec-driven development, and bench inventories to reflect new tools and bench names (including pyBench/phpBench).

Build:

  • Bump base and dev-bench-base image versions and refresh several testing tool versions (Playwright, Hurl, k6, Hadolint, actionlint, yq, websocat, Pact) for modern platforms.

Documentation:

  • Document SonarCloud coverage flows for Java, Go, and C++ benches, including JaCoCo/gcovr setup and aliases.
  • Clarify AI/spec CLI mount behavior, base image responsibilities, and updated bench naming (pyBench, phpBench) in README and mounts docs.
  • Extend spec-driven development documentation to cover devBench-only tooling and new Speckit workflows.

Tests:

  • Extend devBench base tests to cover spec-driven tools, Speckit worktree bootstrap/helpers, SonarScanner/SonarQube CLIs, and ct helper behavior.
  • Tighten system bench and root devcontainer tests around the yolo function behavior.

Chores:

  • Remove pythonBench devcontainer artifacts in favor of pyBench and update default bench lists in interactive setup tooling.
  • Align docker-compose mount templates and new-bench documentation with current AI/spec CLI inventories and shared agent workflows.

Copilot AI review requested due to automatic review settings May 23, 2026 05:29
@sourcery-ai

sourcery-ai Bot commented May 23, 2026

Copy link
Copy Markdown

Reviewer's Guide

Refactors base and devBench AI/spec tooling by moving spec-kit/OpenSpec into the dev-bench base layer with reusable Speckit worktree helpers, adds SonarQube/SonarScanner tooling and SonarCloud coverage helpers, introduces robust yolo/ct shell functions, and extends project detection and docs for pyBench/phpBench while tightening docker/devcontainer reconciliation and AI provider configuration.

Sequence diagram for Speckit worktree and AI helper workflow

sequenceDiagram
    actor Dev
    participant speckit_worktree_enable
    participant git_feature as create-new-feature.sh
    participant git_worktree as git_worktree
    participant feature_json as feature.json
    participant ct as ct_functions
    participant select_wt as select-worktree.sh
    participant claude_cli as claude

    Dev->>speckit_worktree_enable: run speckit-worktree-enable
    speckit_worktree_enable->>feature_json: install git extension config
    speckit_worktree_enable->>ct: install ct, cta, ctc, ctg, cts

    Dev->>speckit_worktree_enable: run /speckit.specify
    speckit_worktree_enable->>git_feature: invoke speckit-git-feature hook
    git_feature->>git_worktree: git worktree add -b <branch>
    git_feature-->>speckit_worktree_enable: BRANCH_NAME, WORKTREE_PATH
    speckit_worktree_enable->>feature_json: write feature_directory for spec

    Dev->>ct: cta
    ct->>select_wt: select-worktree.sh --path
    select_wt-->>ct: WORKTREE_PATH
    ct->>claude_cli: start claude in tmux at WORKTREE_PATH
    claude_cli-->>Dev: interactive AI session in feature worktree
Loading

File-Level Changes

Change Details Files
Harden shared AI CLI base image and yolo helper while removing OpenSpec/spec-kit responsibility from Layer 0
  • Bump workbench-base layer version and clear any cached spec-kit/OpenSpec installations so Layer 0 does not own spec-driven tools
  • Replace simple yolo alias with a shell function that safely quotes arguments, validates claude/tmux presence, and runs Claude in a dedicated tmux session (with mouse support) both in system-wide shell startup and the repo zshrc
  • Update Layer 0 AI CLI installer to remove OpenSpec installation, add Google Antigravity CLI, build OpenCode from the upstream anomalyco/opencode repo, and install OpenCode auth plugins via bun without dist-tag pinning, while centralizing uv tool installs into a shared system directory
base-image/Dockerfile
base-image/install-ai-clis.sh
config/shell/zshrc
sysBenches/devcontainer.test/test.sh
devcontainer.test/test.sh
scripts/MOUNTS-README.md
docker-compose.mounts.yml
docs/CONTAINER-ARCHITECTURE.md
Move spec-kit/OpenSpec and Speckit workflows into the devBench base layer with reusable worktree helpers and tests
  • Extend dev-bench-base image to own spec-driven CLIs: uninstall inherited copies, install specify-cli via uv and @fission-ai/openspec via npm, and add the setup-openspeckit bootstrapper
  • Add a reusable Speckit worktree enable script, git extension bundle (git-config, initialize/feature/commit/remote helpers), shell helpers (ct/ctp/ctlist/cta/ctc/ctg/cts), and Claude/Codex skill templates for Speckit commands
  • Wire ct helpers into global bash/zsh startup so they’re available even when host dotfiles override skel, and add devcontainer tests that validate Speckit bootstrap, ct helper behavior, and CLI defaults in a temporary repo
devBenches/base-image/Dockerfile
devBenches/base-image/install-ai-clis.sh
devBenches/base-image/files/ct/ct-functions.zsh
devBenches/base-image/files/openspeckit/setup-openspeckit
devBenches/base-image/files/speckit-worktree/speckit-worktree-enable
devBenches/base-image/files/speckit-worktree/templates/**
devBenches/devcontainer.test/test.sh
devBenches/devcontainer.test/README.md
docs/spec-driven-development.md
Introduce SonarQube/SonarScanner tooling and SonarCloud coverage helpers for dev benches and MCP
  • Extend dev-bench testing-tools install script to install SonarScanner CLI and SonarQube CLI, along with updated versions of Hurl, k6, Hadolint, actionlint, yq, websocat, and Pact, plus unzip dependency and summary logging
  • Add SonarCloud coverage helpers and documentation for Java (Maven/Gradle with JaCoCo), Go (go test + sonar-scanner), and C++ (gcovr-based coverage and generic Sonar XML) benches
  • Add a reusable SonarQube MCP startup script that runs a long-lived SonarQube MCP container plus an nginx proxy with token injection on the shared devbench network, controlled via SONARQUBE_* environment and optional stop/recreate flags
devBenches/base-image/install-testing-tools.sh
devBenches/javaBench/README.md
devBenches/goBench/README.md
devBenches/cppBench/README.md
devBenches/goBench/files/sonarcloud-go-coverage
devBenches/scripts/ensure-sonarqube-mcp.sh
devBenches/README.md
devBenches/devcontainer.test/test.sh
Improve docker layer/user-image validation and devcontainer reconciliation safety
  • Replace inline docker run checks in ensure-layer3.sh with helper functions that copy /etc/passwd and /etc/group out of images and verify user existence and socket group membership without starting full containers
  • Add a reconcile-devcontainer-container.sh helper that removes a stale devcontainer service container when its backing image is gone or no longer matches the expected image ID, using docker inspect to compare IDs
scripts/ensure-layer3.sh
scripts/reconcile-devcontainer-container.sh
Refresh AI provider priority config and docs after dropping Grok and adding shared .agents mount
  • Remove Grok from default AI provider lists, provider metadata, shell adapter, and standard credential mounts while filtering unsupported providers out of existing priority configs
  • Document that AI/spec CLIs are installed in the appropriate base images, add a shared ~/.agents mount and summary entry, and update instructions for adding new AI/spec CLIs across base images and devcontainers
devBenches/scripts/ai-cli-adapter.sh
scripts/configure-ai-priority.sh
scripts/AI-PROVIDER-SETUP.md
docs/MOUNTS-README.md
docker-compose.mounts.yml
docs/newBench.md
Add phpBench support and rename pythonBench references to pyBench across tooling and docs
  • Extend workspace detection and bench update scripts to recognize PHP indicators (composer.json, phpunit configs, PHP sources) and prefer phpBench when confidence is highest
  • Update project metadata, interactive setup, and setup UI defaults to use pyBench instead of pythonBench, and document phpBench/pyBench in the top-level README and bench docs
devBenches/scripts/workspace-type-detector.sh
devBenches/scripts/update-devBench-project.sh
scripts/metadata-helper.sh
scripts/update-project.sh
scripts/interactive-setup.sh
scripts/setup-ui/src/utils/config.ts
devBenches/goBench/README.md
devBenches/cppBench/README.md
README.md
devBenches/README.md

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@brettheap

Copy link
Copy Markdown
Contributor Author

@codex review

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Hey - I've found 2 issues, and left some high level feedback:

  • The Speckit git/worktree templates include project- and user-specific values (e.g., worktree_root: ../ledgerlinc-model-ocr-pipeline-worktrees in git-config.yml and the hardcoded /home/brett/... path in ct.zsh); consider replacing these with generic defaults or relative paths so generated projects are not tied to a specific environment.
  • There is a fair amount of duplicated logic between the project-local worktree helpers (e.g., .specify/shell/worktrees.sh) and the global ct-functions.zsh; it may be worth centralizing common behavior into a single shared script to reduce drift and simplify future changes.
  • In reconcile-devcontainer-container.sh, failing hard when the expected image is missing (exit 1) might be surprising in multi-bench workflows; consider treating this as a non-fatal condition (log and exit 0) so callers can decide whether a missing image should stop their pipeline.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- The Speckit git/worktree templates include project- and user-specific values (e.g., `worktree_root: ../ledgerlinc-model-ocr-pipeline-worktrees` in `git-config.yml` and the hardcoded `/home/brett/...` path in `ct.zsh`); consider replacing these with generic defaults or relative paths so generated projects are not tied to a specific environment.
- There is a fair amount of duplicated logic between the project-local worktree helpers (e.g., `.specify/shell/worktrees.sh`) and the global `ct-functions.zsh`; it may be worth centralizing common behavior into a single shared script to reduce drift and simplify future changes.
- In `reconcile-devcontainer-container.sh`, failing hard when the expected image is missing (`exit 1`) might be surprising in multi-bench workflows; consider treating this as a non-fatal condition (log and exit 0) so callers can decide whether a missing image should stop their pipeline.

## Individual Comments

### Comment 1
<location path="devBenches/base-image/files/speckit-worktree/templates/specify/shell/worktrees.sh" line_range="10-13" />
<code_context>
+
+# Auto-detect repo root from this script's own location so the file is
+# relocatable and does not embed a host-specific absolute path.
+LEDGERLINC_SPECKIT_REPO_ROOT="$(CDPATH="" cd "${${(%):-%x}:A:h}/../.." 2>/dev/null && pwd)"
+if [ -z "$LEDGERLINC_SPECKIT_REPO_ROOT" ]; then
+  # bash fallback when the zsh prompt expansion above is unavailable
+  LEDGERLINC_SPECKIT_REPO_ROOT="$(CDPATH="" cd "$(dirname "${BASH_SOURCE[0]:-$0}")/../.." 2>/dev/null && pwd)"
+fi
+LEDGERLINC_SPECKIT_LAST_WORKTREE_SCRIPT="$LEDGERLINC_SPECKIT_REPO_ROOT/.specify/extensions/git/scripts/bash/get-last-worktree.sh"
</code_context>
<issue_to_address>
**issue (bug_risk):** Sourcing this script in bash will fail due to unguarded zsh-specific parameter expansion.

Because the script is advertised as source-able from both bash and zsh, the unguarded `${${(%):-%x}:A:h}` causes `bad substitution` in bash before the fallback can run. Please gate the zsh-only expansion on `$ZSH_VERSION`, for example:

```bash
if [ -n "${ZSH_VERSION:-}" ]; then
  LEDGERLINC_SPECKIT_REPO_ROOT="$(CDPATH="" cd "${${(%):-%x}:A:h}/../.." 2>/dev/null && pwd)"
else
  LEDGERLINC_SPECKIT_REPO_ROOT="$(CDPATH="" cd "$(dirname "${BASH_SOURCE[0]:-$0}")/../.." 2>/dev/null && pwd)"
fi
```
</issue_to_address>

### Comment 2
<location path="devBenches/goBench/README.md" line_range="140-141" />
<code_context>
 # Go shortcuts
 # (alias examples - these would be configured in shell)
 go run, go build, go test, go mod, etc.
+go-sonar-coverage              # go test coverage.out + sonar-scanner

 # Docker & Kubernetes  
</code_context>
<issue_to_address>
**issue (typo):** The documented SonarCloud coverage helper uses two different command names (`go-sonar-coverage` vs `sonarcloud-go-coverage`).

Alias examples use `go-sonar-coverage`, while the dedicated section uses `sonarcloud-go-coverage`. Please either standardize on one name or clarify if they are different tools to avoid user confusion.

```suggestion
go run, go build, go test, go mod, etc.
sonarcloud-go-coverage         # go test coverage.out + sonar-scanner
```
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment thread devBenches/base-image/files/speckit-worktree/templates/specify/shell/worktrees.sh Outdated
Comment thread devBenches/goBench/README.md Outdated

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the shared workBench/devBench base tooling, moves spec-driven tooling into the devBench base layer, adds SonarQube/SonarCloud helpers, removes Grok from supported AI tooling, and refreshes bench inventory from pythonBench to pyBench with added phpBench support.

Changes:

  • Reworks base/devBench AI and spec CLI installation, yolo/ct helpers, and OpenCode plugin handling.
  • Adds Speckit worktree tooling, SonarQube MCP startup, and Java/Go/C++ SonarCloud coverage helpers.
  • Updates bench detection/config/docs/tests for pyBench, phpBench, Grok removal, and new devBench tooling.

Reviewed changes

Copilot reviewed 87 out of 88 changed files in this pull request and generated 11 comments.

Show a summary per file
File Description
.gitignore Updates ignored bench directories and Python artifacts.
README.md Refreshes image layer and bench inventory documentation.
base-image/Dockerfile Updates Layer 0 version, removes spec CLI ownership, and adds yolo function.
base-image/files/opencode/opencode.json Removes pinned OpenCode auth plugin versions.
base-image/install-ai-clis.sh Updates AI CLI install flow, adds Antigravity, removes Grok/OpenSpec.
bench-config.json.backup Renames Python bench backup entry to pyBench.
config/bench-config.json Renames Python bench config and adds phpBench config.
config/shell/zshrc Converts yolo alias into a tmux-backed function.
devBenches/.devcontainer/devcontainer.json Starts SonarQube MCP for the devBenches workspace.
devBenches/README.md Documents phpBench/pyBench and shared Sonar tools.
devBenches/base-image/Dockerfile Adds spec-driven tools, ct helpers, and worktree bootstrap into Layer 1a.
devBenches/base-image/files/ct/ct-functions.zsh Adds global Speckit worktree launcher functions.
devBenches/base-image/files/opencode/opencode.json Removes pinned OpenCode auth plugin versions.
devBenches/base-image/files/openspeckit/setup-openspeckit Adds repo bootstrapper for shared OpenSpec/Speckit agent context.
devBenches/base-image/files/speckit-worktree/speckit-worktree-enable Adds Speckit worktree workflow bootstrap command.
devBenches/base-image/files/speckit-worktree/templates/agents/skills/speckit-git-feature/SKILL.md Adds shared agent skill for Speckit git feature creation.
devBenches/base-image/files/speckit-worktree/templates/claude/skills/speckit-git-feature/SKILL.md Adds Claude skill for Speckit git feature workflow.
devBenches/base-image/files/speckit-worktree/templates/claude/skills/speckit-specify/SKILL.md Adds Claude skill for Speckit specify workflow.
devBenches/base-image/files/speckit-worktree/templates/codex/skills/speckit-git-feature/SKILL.md Adds Codex wrapper skill for Speckit git feature workflow.
devBenches/base-image/files/speckit-worktree/templates/codex/skills/speckit-git-feature/agents/openai.yaml Adds Codex agent metadata for git feature skill.
devBenches/base-image/files/speckit-worktree/templates/codex/skills/speckit-specify/SKILL.md Adds Codex wrapper skill for Speckit specify workflow.
devBenches/base-image/files/speckit-worktree/templates/codex/skills/speckit-specify/agents/openai.yaml Adds Codex agent metadata for specify skill.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/README.md Documents the bundled Speckit git extension.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/commands/speckit.git.commit.md Adds Speckit auto-commit command prompt.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/commands/speckit.git.feature.md Adds Speckit feature checkout command prompt.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/commands/speckit.git.initialize.md Adds Speckit git initialize command prompt.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/commands/speckit.git.remote.md Adds Speckit remote detection command prompt.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/commands/speckit.git.validate.md Adds Speckit branch validation command prompt.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/config-template.yml Adds generic git extension config template.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/extension.yml Defines bundled Speckit git extension hooks and commands.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/git-config.yml Adds default git extension config.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/bash/auto-commit.sh Adds Bash auto-commit helper.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/bash/get-last-worktree.sh Adds Bash last-worktree lookup helper.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/bash/git-common.sh Adds Bash git utility functions.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/bash/initialize-repo.sh Adds Bash git initialization helper.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/powershell/auto-commit.ps1 Adds PowerShell auto-commit helper.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/powershell/git-common.ps1 Adds PowerShell git utility functions.
devBenches/base-image/files/speckit-worktree/templates/specify/extensions/git/scripts/powershell/initialize-repo.ps1 Adds PowerShell git initialization helper.
devBenches/base-image/files/speckit-worktree/templates/specify/shell/ct.zsh Adds per-repo ct wrapper template.
devBenches/base-image/files/speckit-worktree/templates/specify/shell/select-worktree.sh Adds worktree selector helper.
devBenches/base-image/files/speckit-worktree/templates/specify/shell/worktrees.sh Adds per-repo fallback worktree helpers.
devBenches/base-image/install-ai-clis.sh Aligns devBench AI CLI install docs/logic with Grok removal and OpenCode upstream.
devBenches/base-image/install-testing-tools.sh Adds Sonar tools and bumps testing utility versions.
devBenches/cppBench/.devcontainer/devcontainer.json Chains Sonar MCP, Layer 3 ensure, and stale-container reconciliation.
devBenches/cppBench/Dockerfile.layer2 Adds C++ coverage tooling and Sonar helper alias.
devBenches/cppBench/README.md Documents C++ SonarCloud coverage workflow.
devBenches/devcontainer.test/README.md Documents expanded devBench base test coverage.
devBenches/devcontainer.test/test-ct-launchers.sh Adds ct launcher behavior tests.
devBenches/devcontainer.test/test.sh Expands Layer 1a tests for spec, ct, Sonar, and PATH tooling.
devBenches/goBench/.devcontainer/devcontainer.json Chains Sonar MCP, Layer 3 ensure, and stale-container reconciliation.
devBenches/goBench/Dockerfile.layer2 Adds Go SonarCloud coverage helper and alias.
devBenches/goBench/README.md Documents Go SonarCloud coverage workflow and pyBench naming.
devBenches/goBench/files/sonarcloud-go-coverage Adds Go coverage and Sonar scanner wrapper.
devBenches/javaBench/.devcontainer/devcontainer.json Chains Sonar MCP, Layer 3 ensure, and stale-container reconciliation.
devBenches/javaBench/Dockerfile.layer2 Adds JaCoCo/SonarCloud helpers and aliases.
devBenches/javaBench/README.md Documents Java SonarCloud coverage workflows.
devBenches/pythonBench/.devcontainer/devcontainer.json Removes legacy pythonBench devcontainer.
devBenches/pythonBench/.devcontainer/docker-compose.yml Removes legacy pythonBench compose file.
devBenches/pythonBench/.env Removes legacy pythonBench environment file.
devBenches/pythonBench/Dockerfile.layer2 Removes legacy pythonBench Layer 2 image.
devBenches/pythonBench/scripts/build-layer.sh Removes legacy pythonBench build wrapper.
devBenches/pythonBench/setup.sh Removes legacy pythonBench setup script.
devBenches/scripts/ai-cli-adapter.sh Removes Grok support and filters unsupported configured providers.
devBenches/scripts/ensure-sonarqube-mcp.sh Adds reusable SonarQube MCP/proxy startup script.
devBenches/scripts/launchDevBench Adds PHP bench description/detection/help text.
devBenches/scripts/update-devBench-project.sh Adds PHP project detection and pyBench naming.
devBenches/scripts/workspace-type-detector.sh Adds PHP workspace indicators and TUI option.
devcontainer.test/test.sh Updates yolo test for function implementation.
docker-compose.mounts.yml Removes Grok mount and updates AI/spec CLI mount reference.
docs/CONTAINER-ARCHITECTURE.md Updates Layer 0/1a tool ownership documentation.
docs/MOUNTS-README.md Updates standard mounts, Grok removal, and spec CLI ownership docs.
docs/newBench.md Updates new bench mount template with .agents and no Grok.
docs/spec-driven-development.md Clarifies spec-driven tools are for developer benches.
scripts/AI-PROVIDER-SETUP.md Removes Grok from provider documentation.
scripts/configure-ai-priority.sh Removes Grok and filters unsupported providers from saved priority config.
scripts/ensure-layer3.sh Reworks Layer 3 user/group validation without running containers.
scripts/interactive-setup.sh Updates default bench list to pyBench.
scripts/launchBench Adds PHP bench description.
scripts/metadata-helper.sh Adds PHP sibling detection and pyBench naming.
scripts/new-project.sh Updates AI prompt examples to pyBench.
scripts/reconcile-devcontainer-container.sh Adds stale devcontainer reconciliation helper.
scripts/setup-ui/src/utils/config.ts Updates UI default benches to pyBench.
scripts/update-bench-config.sh Updates bench descriptions for pyBench and phpBench.
scripts/update-project.sh Adds PHP indicators and updates prompt examples to pyBench.
sysBenches/devcontainer.test/test.sh Updates yolo test for function implementation.

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

Comment thread devBenches/javaBench/.devcontainer/devcontainer.json Outdated
Comment thread devBenches/goBench/.devcontainer/devcontainer.json Outdated
Comment thread devBenches/cppBench/.devcontainer/devcontainer.json Outdated
Comment thread devBenches/base-image/files/speckit-worktree/templates/specify/shell/ct.zsh Outdated
Comment thread devBenches/devcontainer.test/test-ct-launchers.sh
Comment thread devBenches/scripts/update-devBench-project.sh
@brettheap

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 21cdc35cae

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread devBenches/scripts/workspace-type-detector.sh
Comment thread devBenches/scripts/update-devBench-project.sh Outdated
Comment thread devBenches/scripts/update-devBench-project.sh Outdated
Comment thread devBenches/javaBench/.devcontainer/devcontainer.json Outdated
Copilot AI review requested due to automatic review settings May 23, 2026 05:54
@brettheap

Copy link
Copy Markdown
Contributor Author

@codex review

Copilot AI left a comment

Copy link
Copy Markdown

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 87 out of 88 changed files in this pull request and generated 4 comments.

Comments suppressed due to low confidence (1)

devBenches/cppBench/.devcontainer/devcontainer.json:90

  • Grok has been removed from the supported provider list and the standard mount documentation in this PR, but this bench still keeps the Grok credential mount. Remove this stale mount and comment so the devcontainer matches the supported AI CLI inventory and doesn't require an unused host path.

Comment thread devBenches/base-image/files/speckit-worktree/speckit-worktree-enable Outdated
Comment thread devBenches/scripts/update-devBench-project.sh Outdated
Comment thread devBenches/javaBench/.devcontainer/devcontainer.json Outdated
Comment thread devBenches/goBench/.devcontainer/devcontainer.json Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 373a7e8f58

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread devBenches/javaBench/Dockerfile.layer2 Outdated
Comment thread devBenches/cppBench/Dockerfile.layer2 Outdated
Comment thread scripts/ensure-layer3.sh Outdated
@brettheap

Copy link
Copy Markdown
Contributor Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 437a5b1831

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread devBenches/scripts/update-devBench-project.sh Outdated
Comment thread devBenches/base-image/files/speckit-worktree/speckit-worktree-enable Outdated
Comment thread scripts/ensure-layer3.sh Outdated
Comment thread devBenches/goBench/.devcontainer/devcontainer.json Outdated
Copilot AI review requested due to automatic review settings May 24, 2026 07:32
@brettheap

Copy link
Copy Markdown
Contributor Author

@codex review

Copilot AI left a comment

Copy link
Copy Markdown

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 90 out of 91 changed files in this pull request and generated 4 comments.

Comments suppressed due to low confidence (1)

devBenches/cppBench/.devcontainer/devcontainer.json:90

  • Grok has been removed from the installer, provider priority, adapter, and canonical mount docs, but this devcontainer still retains the Grok credential mount/comment. Remove the stale Grok mount here so the bench matches the supported AI provider set and does not keep depending on a deprecated credential path.

Comment thread devBenches/javaBench/Dockerfile.layer2 Outdated
Comment thread devBenches/cppBench/Dockerfile.layer2 Outdated
Comment thread devBenches/goBench/.devcontainer/devcontainer.json Outdated
Comment thread devBenches/javaBench/.devcontainer/devcontainer.json Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d7c8457178

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread devBenches/scripts/update-devBench-project.sh Outdated
Comment thread scripts/reconcile-devcontainer-container.sh
Comment thread devBenches/scripts/launchDevBench Outdated
Comment thread scripts/ensure-layer3.sh Outdated
Comment thread base-image/install-ai-clis.sh Outdated
@brettheap

Copy link
Copy Markdown
Contributor Author

@codex review

brettheap added 13 commits July 12, 2026 17:03
# Conflicts:
#	.gitignore
#	README.md
#	base-image/install-ai-clis.sh
#	bench-config.json.backup
#	config/bench-config.json
#	devBenches/README.md
#	devBenches/base-image/Dockerfile
#	devBenches/base-image/install-ai-clis.sh
#	devBenches/cppBench/.devcontainer/devcontainer.json
#	devBenches/cppBench/.devcontainer/docker-compose.yml
#	devBenches/cppBench/Dockerfile.layer2
#	devBenches/cppBench/README.md
#	devBenches/cppBench~origin_main
#	devBenches/goBench/.devcontainer/devcontainer.json
#	devBenches/goBench/.devcontainer/docker-compose.yml
#	devBenches/goBench/Dockerfile.layer2
#	devBenches/goBench/README.md
#	devBenches/goBench/scripts/build-layer2.sh
#	devBenches/goBench~origin_main
#	devBenches/javaBench/.devcontainer/devcontainer.json
#	devBenches/javaBench/.devcontainer/docker-compose.yml
#	devBenches/javaBench/Dockerfile.layer2
#	devBenches/javaBench/README.md
#	devBenches/javaBench~origin_main
#	devBenches/scripts/launchDevBench
#	devBenches/scripts/update-devBench-project.sh
#	docker-compose.mounts.yml
#	setup.sh
#	sysBenches/cloudBench/build-layer2.sh
#	sysBenches/cloudBench/devcontainer.example/.devcontainer/devcontainer.json
#	sysBenches/cloudBench/devcontainer.example/docker-compose.yml
#	sysBenches/cloudBench~origin_main
Copilot AI review requested due to automatic review settings July 13, 2026 00:38
@brettheap

Copy link
Copy Markdown
Contributor Author

@codex review

Copilot AI left a comment

Copy link
Copy Markdown

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 121 out of 123 changed files in this pull request and generated 8 comments.

Comment on lines +213 to +219
if [ "$NO_CACHE" = true ]; then
DOCKER_BUILD_NO_CACHE=1 "$build_script" --user "$USERNAME" 2>/dev/null || \
DOCKER_BUILD_NO_CACHE=1 "$build_script" "$USERNAME" 2>/dev/null || \
DOCKER_BUILD_NO_CACHE=1 "$build_script"
else
"$build_script" --user "$USERNAME" 2>/dev/null || "$build_script" "$USERNAME" 2>/dev/null || "$build_script"
fi
Comment on lines +413 to +417
local no_cache_args=""
if [ "$NO_CACHE" = true ]; then
no_cache_args="--no-cache"
fi
"$user_layer_dir/build.sh" --base "$LAYER3_BASE" --user "$USERNAME" $chown_args $no_cache_args
Comment on lines +55 to +63
if ! docker image inspect "$EXPECTED_IMAGE" >/dev/null 2>&1; then
echo "Expected image '$EXPECTED_IMAGE' is not available." >&2
exit 1
fi

CURRENT_IMAGE_ID="$(docker inspect --format '{{.Image}}' "$CONTAINER_NAME" 2>/dev/null)" || exit 0
CURRENT_CONFIG_IMAGE="$(docker inspect --format '{{.Config.Image}}' "$CONTAINER_NAME" 2>/dev/null)" || exit 0
EXPECTED_IMAGE_ID="$(docker image inspect --format '{{.Id}}' "$EXPECTED_IMAGE")"

Comment on lines +93 to +97
if ! docker image inspect "$CURRENT_IMAGE_ID" >/dev/null 2>&1; then
REMOVE_REASON="backing image '$CURRENT_IMAGE_ID' no longer exists locally"
elif [[ "$CURRENT_IMAGE_ID" != "$EXPECTED_IMAGE_ID" ]]; then
REMOVE_REASON="container image '$CURRENT_IMAGE_ID' does not match expected '$EXPECTED_IMAGE_ID'"
fi
Comment on lines +53 to +60
while IFS='=' read -r key value || [[ -n "$key" ]]; do
case "$key" in
''|\#*) continue ;;
SONARQUBE_TOKEN|SONARQUBE_ORG|SONAR_TOKEN|SONAR_ORGANIZATION|SONAR_HOST_URL|SONARQUBE_URL|SONARQUBE_CLOUD_URL)
export "$key=$value"
;;
esac
done < "$SECRET_FILE"
Comment on lines +21 to +28
while IFS='=' read -r _sonar_key _sonar_value || [ -n "$_sonar_key" ]; do
case "$_sonar_key" in
''|\#*) continue ;;
SONARQUBE_TOKEN|SONARQUBE_ORG|SONAR_TOKEN|SONAR_ORGANIZATION|SONAR_HOST_URL|SONARQUBE_URL)
export "$_sonar_key=$_sonar_value"
;;
esac
done < "$SONARQUBE_ENV_FILE"
Comment on lines 50 to 54
RUN command -v claude >/dev/null \
&& command -v codex >/dev/null \
&& command -v agy >/dev/null \
&& command -v gemini >/dev/null \
&& command -v opencode >/dev/null \
|| (echo "Missing inherited AI CLIs from workbench-base:latest. Rebuild Layer 0, then rebuild sys-bench-base." >&2 && exit 1)
Comment thread config/shell/zshrc
@@ -578,7 +578,7 @@ fi
export KUBECONFIG=/home/brett/projects/adminbench/brett-heap.kubeconfig

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6bb7323484

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

RELEASE_DOWNLOAD_TIMEOUT="${RELEASE_DOWNLOAD_TIMEOUT:-3600}" # 60 minutes for slow GitHub release assets
BUN_OPERATIONS_TIMEOUT="${BUN_OPERATIONS_TIMEOUT:-900}" # 15 minutes for bun ops
UV_TOOL_INSTALL_TIMEOUT="${UV_TOOL_INSTALL_TIMEOUT:-3600}" # 60 minutes for Python tool installs
INSTALL_ANTIGRAVITY_CLI="${INSTALL_ANTIGRAVITY_CLI:-0}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Install agy by default or stop requiring it

With this default, base-image/Dockerfile runs install-ai-clis.sh without setting INSTALL_ANTIGRAVITY_CLI or a checksum, so Layer 0 will always skip installing agy; downstream sys/dev container tests still assert command -v agy, and the setup/auth flows continue to advertise the Antigravity CLI. A default rebuild therefore produces images that are missing an expected CLI and fail the published tests unless the install is enabled by default or those checks/docs are made optional.

Useful? React with 👍 / 👎.

Comment on lines +198 to +200
if suffix:
lines[index] = indent + "installed:"
lines.insert(index + 1, indent + "- git")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve inline extension entries when adding git

When an existing .specify/extensions.yml uses an inline installed list such as installed: [foo, bar], this branch replaces the whole list with a block containing only - git, silently dropping every previously installed extension. Repos that already registered other extensions inline will lose them just by running speckit-worktree-enable; preserve the existing entries and append git instead.

Useful? React with 👍 / 👎.

Comment thread devBenches/README.md
- **`dotNetBench/`** - .NET development environment with DevContainer
- **`flutterBench/`** - Flutter/Dart development environment with DevContainer
- **`javaBench/`** - Java development environment with DevContainer
- **`phpBench/`** - PHP development environment with DevContainer

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P3 Badge Register phpBench before advertising it

This adds phpBench to the advertised dev bench inventory, but the repo still has no devBenches/phpBench submodule and config/bench-config.json has no phpBench entry; setup and the interactive selector enumerate installable benches from that config, so users cannot select or clone the PHP bench despite the docs saying it exists. Add the bench to the config/submodules or remove it from the inventory until it is installable.

Useful? React with 👍 / 👎.

Comment on lines +899 to +902
"branch_numbering": "sequential",
"checkout_mode": "worktree",
"base_branch": resolved_base_branch,
"worktree_root": resolved_worktree_root,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve existing Speckit git-config values

When setup-openspeckit is rerun on a repo that already customized .specify/extensions/git/git-config.yml, these hard-coded values overwrite branch_numbering, checkout_mode, base_branch, and worktree_root even when the user did not pass overrides. For example, an existing checkout_mode: branch or base_branch: develop is silently changed to worktrees off main, so subsequent Speckit features are created in the wrong workflow/base branch; keep existing values unless the corresponding CLI option is provided.

Useful? React with 👍 / 👎.

- ${home_dir}/.pi:/home/${container_user}/.pi:cached
- ${home_dir}/.config/sonarqube:/home/${container_user}/.config/sonarqube:ro
- ${home_dir}/.gemini:/home/${container_user}/.gemini:cached
- ${home_dir}/.grok:/home/${container_user}/.grok:ro

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Mount the new AI profile homes in Wave containers

When this Wave fallback compose override is used, it still mounts only legacy ~/.grok and omits the profile directories the new account manager writes (~/.chatgpt-profiles, ~/.grok-profiles, and ~/.abacusai). Users launching benches from Wave therefore lose the configured ChatGPT/Codex, Grok, and Abacus account state even though the standard mount template exposes those directories; add these mounts, and create their host sources, so Wave-launched containers match the canonical mount set.

Useful? React with 👍 / 👎.

@brettheap

Copy link
Copy Markdown
Contributor Author

@codex review

Copilot AI review requested due to automatic review settings July 13, 2026 18:50

Copilot AI left a comment

Copy link
Copy Markdown

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 124 out of 126 changed files in this pull request and generated 3 comments.

Comment on lines 409 to +417
local chown_args=""
if [ -n "$LAYER3_CHOWN" ]; then
chown_args="--chown $LAYER3_CHOWN"
fi
"$user_layer_dir/build.sh" --base "$LAYER3_BASE" --user "$USERNAME" $chown_args
local no_cache_args=""
if [ "$NO_CACHE" = true ]; then
no_cache_args="--no-cache"
fi
"$user_layer_dir/build.sh" --base "$LAYER3_BASE" --user "$USERNAME" $chown_args $no_cache_args
Comment thread setup.sh
Comment on lines +145 to +149
mkdir -p "$(dirname "$installer_dir")"
if ! git clone --depth 1 "$installer_repo" "$installer_dir"; then
echo "Wave Terminal widget setup skipped: failed to clone $installer_repo."
return 0
fi
Comment on lines +8 to +10
configure_profile_runtime() {
local config_dir="$1" statusline_source statusline_link settings settings_tmp statusline_command

@brettheap

Copy link
Copy Markdown
Contributor Author

@codex review

Copilot AI review requested due to automatic review settings July 13, 2026 19:01

Copilot AI left a comment

Copy link
Copy Markdown

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 124 out of 126 changed files in this pull request and generated 7 comments.

Comment on lines +214 to +216
DOCKER_BUILD_NO_CACHE=1 "$build_script" --user "$USERNAME" 2>/dev/null || \
DOCKER_BUILD_NO_CACHE=1 "$build_script" "$USERNAME" 2>/dev/null || \
DOCKER_BUILD_NO_CACHE=1 "$build_script"
Comment on lines 344 to +348
if (item.action === 'install') {
const result = await installTool(item.id);
if (result.success) {
successCount++;
if (result.needsCredentials) {
&& conda config --system --prepend channels bioconda \
&& conda config --system --set channel_priority strict
&& conda config --system --set channel_priority strict \
&& CONDA_VERSION="$(curl -fsSL https://api.github.com/repos/conda/conda/releases/latest | jq -r '.tag_name')" \
check "Claude profile launcher" "command -v claude-profile"
check "pclaude alias" "command -v pclaude"
check "Codex" "command -v codex"
check "Antigravity" "command -v agy"
test_tool "claude-profile" "command -v claude-profile"
test_tool "pclaude" "command -v pclaude"
test_tool "codex" "command -v codex"
test_tool "agy" "command -v agy"
Comment thread config/shell/zshrc

unalias yolo 2>/dev/null || true
yolo() {
local session_name command_string prompt_file
Comment thread setup.sh
Comment on lines +145 to +156
mkdir -p "$(dirname "$installer_dir")"
if ! git clone --depth 1 "$installer_repo" "$installer_dir"; then
echo "Wave Terminal widget setup skipped: failed to clone $installer_repo."
return 0
fi
elif [ -d "$installer_dir/.git" ] && command -v git >/dev/null 2>&1; then
git -C "$installer_dir" pull --ff-only --quiet || \
echo "Wave Terminal installer update skipped; using existing checkout at $installer_dir."
fi

"$installer_script" \
--workbenches-root "$SCRIPT_DIR" \

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 868a1b2dc4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

done

workbenches_root="${workbenches_root%/}"
resolve_bench_defaults

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve explicit compose-file overrides

When callers pass --compose-file for a standard bench such as the default py-bench, this post-parse default resolution recomputes compose_file and overwrites the explicit path parsed above. The fallback creation path then starts Docker Compose from the bench's default compose file instead of the custom/Wave compose file the option promises; track whether --compose-file was supplied or resolve defaults before applying CLI overrides.

Useful? React with 👍 / 👎.

COMMAND_TIMEOUT="${COMMAND_TIMEOUT:-300}" # 5 minutes per command; large CLI/browser downloads are network-sensitive
PYTHON_TOOLS_TIMEOUT="${PYTHON_TOOLS_TIMEOUT:-1800}" # Semgrep is large and pip resolution can be slow on constrained networks
PLAYWRIGHT_VERSION="${PLAYWRIGHT_VERSION:-1.61.1}"
SONAR_SCANNER_VERSION="${SONAR_SCANNER_VERSION:-8.1.0.6389}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Pin SonarScanner to a published release

The official SonarScanner CLI downloads page currently lists 8.0.1 as the latest published scanner, but this default builds sonar-scanner-cli-8.1.0.6389-...zip; when rebuilding dev-bench-base, the curl at the installer download step fails and this script only logs the error and continues, so the image silently lacks sonar-scanner. Pin this to a published scanner build or resolve the current download URL dynamically.

Useful? React with 👍 / 👎.

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.

2 participants