Initial release of CHORUS Development Images
Some checks failed
Build and Push Development Images / build-base (push) Has been cancelled
Build and Push Development Images / build-rust (push) Has been cancelled
Build and Push Development Images / build-go (push) Has been cancelled
Build and Push Development Images / build-python (push) Has been cancelled
Build and Push Development Images / build-node (push) Has been cancelled
Build and Push Development Images / build-java (push) Has been cancelled
Build and Push Development Images / build-cpp (push) Has been cancelled
Build and Push Development Images / test-images (base) (push) Has been cancelled
Build and Push Development Images / test-images (cpp-dev) (push) Has been cancelled
Build and Push Development Images / test-images (go-dev) (push) Has been cancelled
Build and Push Development Images / test-images (java-dev) (push) Has been cancelled
Build and Push Development Images / test-images (node-dev) (push) Has been cancelled
Build and Push Development Images / test-images (python-dev) (push) Has been cancelled
Build and Push Development Images / test-images (rust-dev) (push) Has been cancelled

This commit establishes the foundation for language-specific development
container images used by CHORUS autonomous agents.

Features:
- Multi-stage Dockerfile with 7 layered images
- Base Debian Bookworm image with common tools
- Language-specific images: Rust, Go, Python, Node.js, Java, C/C++
- Standardized /workspace/{input,data,output} structure
- Automated CI/CD pipeline for weekly security updates
- Comprehensive test suite for all images
- Full documentation (README, USAGE, MAINTENANCE)

Images available:
- chorus/base:1.0.0 (~200MB)
- chorus/rust-dev:1.0.0 (~1.2GB)
- chorus/go-dev:1.0.0 (~600MB)
- chorus/python-dev:1.0.0 (~800MB)
- chorus/node-dev:1.0.0 (~700MB)
- chorus/java-dev:1.0.0 (~1.5GB)
- chorus/cpp-dev:1.0.0 (~900MB)

🤖 Generated with Claude Code (https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
anthonyrawlins
2025-09-30 11:09:36 +10:00
commit 90249aad89
15 changed files with 1803 additions and 0 deletions

35
tests/test-base.sh Normal file
View File

@@ -0,0 +1,35 @@
#!/bin/bash
# Test script for base image
set -e
IMAGE="${REGISTRY:-registry.home.deepblack.cloud/chorus}/base:latest"
echo "🧪 Testing base image: $IMAGE"
# Test workspace structure
echo " ✓ Checking workspace directories..."
docker run --rm "$IMAGE" test -d /workspace/input || exit 1
docker run --rm "$IMAGE" test -d /workspace/data || exit 1
docker run --rm "$IMAGE" test -d /workspace/output || exit 1
# Test core utilities
echo " ✓ Checking core utilities..."
docker run --rm "$IMAGE" git --version > /dev/null || exit 1
docker run --rm "$IMAGE" curl --version > /dev/null || exit 1
docker run --rm "$IMAGE" which vim > /dev/null || exit 1
docker run --rm "$IMAGE" which jq > /dev/null || exit 1
# Test user permissions
echo " ✓ Checking user permissions..."
docker run --rm "$IMAGE" whoami | grep -q chorus || exit 1
docker run --rm "$IMAGE" sh -c 'echo "test" > /workspace/data/test.txt && rm /workspace/data/test.txt' || exit 1
# Test environment variables
echo " ✓ Checking environment variables..."
docker run --rm "$IMAGE" sh -c 'test -n "$WORKSPACE_ROOT"' || exit 1
docker run --rm "$IMAGE" sh -c 'test -n "$WORKSPACE_INPUT"' || exit 1
docker run --rm "$IMAGE" sh -c 'test -n "$WORKSPACE_DATA"' || exit 1
docker run --rm "$IMAGE" sh -c 'test -n "$WORKSPACE_OUTPUT"' || exit 1
echo "✅ Base image tests passed"

30
tests/test-cpp-dev.sh Normal file
View File

@@ -0,0 +1,30 @@
#!/bin/bash
# Test script for C/C++ development image
set -e
IMAGE="${REGISTRY:-registry.home.deepblack.cloud/chorus}/cpp-dev:latest"
echo "🧪 Testing C/C++ image: $IMAGE"
# Test C/C++ toolchain
echo " ✓ Checking C/C++ toolchain..."
docker run --rm "$IMAGE" gcc --version > /dev/null || exit 1
docker run --rm "$IMAGE" g++ --version > /dev/null || exit 1
docker run --rm "$IMAGE" clang --version > /dev/null || exit 1
# Test build systems
echo " ✓ Checking build tools..."
docker run --rm "$IMAGE" cmake --version > /dev/null || exit 1
docker run --rm "$IMAGE" ninja --version > /dev/null || exit 1
# Test compilation capability
echo " ✓ Testing C++ compilation..."
docker run --rm "$IMAGE" bash -c '
cd /tmp && \
echo "#include <iostream>\nint main() { std::cout << \"hello\" << std::endl; return 0; }" > test.cpp && \
g++ -o test test.cpp && \
./test
' || exit 1
echo "✅ C/C++ image tests passed"

31
tests/test-go-dev.sh Normal file
View File

@@ -0,0 +1,31 @@
#!/bin/bash
# Test script for Go development image
set -e
IMAGE="${REGISTRY:-registry.home.deepblack.cloud/chorus}/go-dev:latest"
echo "🧪 Testing Go image: $IMAGE"
# Test Go toolchain
echo " ✓ Checking Go toolchain..."
docker run --rm "$IMAGE" go version > /dev/null || exit 1
# Test development tools
echo " ✓ Checking Go tools..."
docker run --rm "$IMAGE" which gopls > /dev/null || exit 1
docker run --rm "$IMAGE" which dlv > /dev/null || exit 1
docker run --rm "$IMAGE" which staticcheck > /dev/null || exit 1
# Test build capability
echo " ✓ Testing Go build..."
docker run --rm "$IMAGE" bash -c '
cd /tmp && \
mkdir test-project && cd test-project && \
echo "package main\nimport \"fmt\"\nfunc main() { fmt.Println(\"hello\") }" > main.go && \
go mod init test && \
go build && \
./test
' || exit 1
echo "✅ Go image tests passed"

26
tests/test-java-dev.sh Normal file
View File

@@ -0,0 +1,26 @@
#!/bin/bash
# Test script for Java development image
set -e
IMAGE="${REGISTRY:-registry.home.deepblack.cloud/chorus}/java-dev:latest"
echo "🧪 Testing Java image: $IMAGE"
# Test Java toolchain
echo " ✓ Checking Java toolchain..."
docker run --rm "$IMAGE" java -version 2>&1 | grep -q "openjdk" || exit 1
docker run --rm "$IMAGE" javac -version > /dev/null 2>&1 || exit 1
docker run --rm "$IMAGE" mvn --version > /dev/null || exit 1
docker run --rm "$IMAGE" gradle --version > /dev/null || exit 1
# Test build capability
echo " ✓ Testing Java compilation..."
docker run --rm "$IMAGE" bash -c '
cd /tmp && \
echo "public class HelloWorld { public static void main(String[] args) { System.out.println(\"hello\"); }}" > HelloWorld.java && \
javac HelloWorld.java && \
java HelloWorld
' || exit 1
echo "✅ Java image tests passed"

36
tests/test-node-dev.sh Normal file
View File

@@ -0,0 +1,36 @@
#!/bin/bash
# Test script for Node.js development image
set -e
IMAGE="${REGISTRY:-registry.home.deepblack.cloud/chorus}/node-dev:latest"
echo "🧪 Testing Node.js image: $IMAGE"
# Test Node.js toolchain
echo " ✓ Checking Node.js toolchain..."
docker run --rm "$IMAGE" node --version > /dev/null || exit 1
docker run --rm "$IMAGE" npm --version > /dev/null || exit 1
# Test development tools
echo " ✓ Checking Node.js tools..."
docker run --rm "$IMAGE" which pnpm > /dev/null || exit 1
docker run --rm "$IMAGE" which yarn > /dev/null || exit 1
docker run --rm "$IMAGE" which tsc > /dev/null || exit 1
docker run --rm "$IMAGE" which eslint > /dev/null || exit 1
docker run --rm "$IMAGE" which prettier > /dev/null || exit 1
# Test execution capability
echo " ✓ Testing Node.js execution..."
docker run --rm "$IMAGE" node -e "console.log('hello')" || exit 1
# Test package installation
echo " ✓ Testing npm install..."
docker run --rm "$IMAGE" bash -c '
cd /tmp && \
npm init -y --quiet && \
npm install lodash --silent && \
node -e "const _ = require(\"lodash\"); console.log(_.VERSION)"
' || exit 1
echo "✅ Node.js image tests passed"

36
tests/test-python-dev.sh Normal file
View File

@@ -0,0 +1,36 @@
#!/bin/bash
# Test script for Python development image
set -e
IMAGE="${REGISTRY:-registry.home.deepblack.cloud/chorus}/python-dev:latest"
echo "🧪 Testing Python image: $IMAGE"
# Test Python toolchain
echo " ✓ Checking Python toolchain..."
docker run --rm "$IMAGE" python3 --version > /dev/null || exit 1
docker run --rm "$IMAGE" pip3 --version > /dev/null || exit 1
# Test development tools
echo " ✓ Checking Python tools..."
docker run --rm "$IMAGE" which uv > /dev/null || exit 1
docker run --rm "$IMAGE" which ruff > /dev/null || exit 1
docker run --rm "$IMAGE" which black > /dev/null || exit 1
docker run --rm "$IMAGE" which pytest > /dev/null || exit 1
docker run --rm "$IMAGE" which mypy > /dev/null || exit 1
# Test execution capability
echo " ✓ Testing Python execution..."
docker run --rm "$IMAGE" python3 -c "print('hello')" || exit 1
# Test package installation
echo " ✓ Testing pip install..."
docker run --rm "$IMAGE" bash -c '
cd /tmp && \
echo "requests" > requirements.txt && \
pip3 install --user -r requirements.txt --quiet && \
python3 -c "import requests; print(requests.__version__)"
' || exit 1
echo "✅ Python image tests passed"

32
tests/test-rust-dev.sh Normal file
View File

@@ -0,0 +1,32 @@
#!/bin/bash
# Test script for Rust development image
set -e
IMAGE="${REGISTRY:-registry.home.deepblack.cloud/chorus}/rust-dev:latest"
echo "🧪 Testing Rust image: $IMAGE"
# Test Rust toolchain
echo " ✓ Checking Rust toolchain..."
docker run --rm "$IMAGE" rustc --version > /dev/null || exit 1
docker run --rm "$IMAGE" cargo --version > /dev/null || exit 1
docker run --rm "$IMAGE" rustfmt --version > /dev/null || exit 1
docker run --rm "$IMAGE" cargo clippy --version > /dev/null || exit 1
# Test development tools
echo " ✓ Checking Rust tools..."
docker run --rm "$IMAGE" which ripgrep > /dev/null || exit 1
docker run --rm "$IMAGE" which fd > /dev/null || exit 1
# Test build capability
echo " ✓ Testing Rust build..."
docker run --rm "$IMAGE" bash -c '
cd /tmp && \
cargo init --name test-project --quiet && \
cd test-project && \
cargo build --release --quiet && \
./target/release/test-project
' || exit 1
echo "✅ Rust image tests passed"