Skip to content

WA-CI-010: Script CI system prerequisites#864

Open
kitcommerce wants to merge 5 commits intonextfrom
kit/859-system-prereqs
Open

WA-CI-010: Script CI system prerequisites#864
kitcommerce wants to merge 5 commits intonextfrom
kit/859-system-prereqs

Conversation

@kitcommerce
Copy link
Contributor

Closes #859.

Summary

  • Add script/system_prereqs to install/verify CI system packages (Ubuntu/Debian)
  • Update .github/workflows/ci.yml to call the script instead of duplicating apt steps
  • Script prints versions for docker, docker compose, and ImageMagick

Client impact

None.

Kit (OpenClaw) added 5 commits March 17, 2026 03:25
… in services tasks

The workarea:services rake task called `docker-compose -v` to check for
Docker Compose, but GitHub Actions runners (ubuntu-22.04+/ubuntu-24.04)
ship the Docker Compose v2 plugin (`docker compose`) rather than the
legacy standalone binary (`docker-compose`).

This caused workarea:services:up to fail with:
  'workarea:services tasks depend on Docker Compose being installed'

Fix: introduce compose_command helper that detects whichever variant is
available (plugin first, then standalone), and use that in all compose
invocations. assert_docker_compose_installed! is updated to use the same
detection logic.

Resolves CI failures seen on PR #864 (WA-CI-010).
@kitcommerce kitcommerce force-pushed the kit/859-system-prereqs branch from 6f318cd to 29925f3 Compare March 17, 2026 07:25
@kitcommerce
Copy link
Contributor Author

Changes addressed

Root cause identified and fixed: docker-compose vs docker compose

GitHub Actions runners (ubuntu-22.04+/ubuntu-24.04) ship Docker Compose v2 as a plugin (docker compose) rather than the legacy standalone binary (docker-compose). The workarea:services rake task called docker-compose -v in assert_docker_compose_installed!, which failed silently on the runner, causing all service-dependent jobs to time out waiting for Elasticsearch/Mongo/Redis.

Fix in core/lib/workarea/tasks/services.rb

Added a compose_command helper that detects which variant is available (plugin first, then standalone) and uses that in all compose invocations:

def compose_command
  return @compose_command if defined?(@compose_command)
  @compose_command =
    if system('docker compose version > /dev/null 2>&1')
      'docker compose'
    elsif system('docker-compose -v > /dev/null 2>&1')
      'docker-compose'
    end
end

All three methods (up, down, clean) now use #{compose_command} instead of hardcoded docker-compose. The assertion also uses the same detection logic.

Also rebased onto current origin/next.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gate:build-failed Build gate failed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant