Skip to content

Commit 6915c0f

Browse files
lroolleclaude
andcommitted
chore: update workflows and docs for deva rebrand
- release.yml: fix IMAGE_NAME ccyolo→deva, add rust profile build - ci.yml: test deva.sh instead of deprecated claude.sh - version-check.sh: check deva.sh version instead of claude.sh - install.sh: update branding to deva Multi-Agent Environment - Add .deva.example config reference file Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 7511464 commit 6915c0f

6 files changed

Lines changed: 168 additions & 26 deletions

File tree

.deva.example

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# deva Configuration File Example
2+
#
3+
# This file demonstrates the .deva config file format.
4+
# Config files are loaded in this order:
5+
# 1. $XDG_CONFIG_HOME/deva/.deva (usually ~/.config/deva/.deva)
6+
# 2. $HOME/.deva
7+
# 3. ./.deva (project-specific)
8+
# 4. ./.deva.local (gitignored overrides)
9+
#
10+
# Lines starting with # are comments.
11+
# Blank lines are ignored.
12+
13+
# VOLUME Directives
14+
# Mount host directories into container
15+
# Format: VOLUME=<host-path>:<container-path>:<mode>
16+
# Modes: ro (read-only), rw (read-write)
17+
VOLUME=$HOME/.ssh:/home/deva/.ssh:ro
18+
VOLUME=$HOME/projects/shared:/home/deva/shared:ro
19+
20+
# ENV Directives
21+
# Set environment variables in container
22+
# Format: ENV=<VAR_NAME>=<value>
23+
ENV=EDITOR=vim
24+
ENV=LANG=en_US.UTF-8
25+
26+
# Variable Assignments
27+
# Set deva.sh behavior variables
28+
# These control wrapper behavior, not container environment
29+
AUTH_METHOD=claude
30+
PROFILE=rust
31+
EPHEMERAL=false
32+
33+
# Common Use Cases:
34+
#
35+
# 1. Mount read-only SSH keys:
36+
# VOLUME=$HOME/.ssh:/home/deva/.ssh:ro
37+
#
38+
# 2. Mount project dependencies:
39+
# VOLUME=$HOME/shared-libs:/home/deva/libs:ro
40+
#
41+
# 3. Set default editor:
42+
# ENV=EDITOR=nvim
43+
#
44+
# 4. Enable Docker-in-Docker:
45+
# ENV=DOCKER_IN_DOCKER=true
46+
#
47+
# 5. Set default profile:
48+
# PROFILE=rust
49+
#
50+
# 6. Disable ephemeral containers (persistent):
51+
# EPHEMERAL=false
52+
53+
# Project-Specific Config (.deva in project root):
54+
#
55+
# VOLUME=./vendor:/home/deva/project/vendor:ro
56+
# ENV=DATABASE_URL=postgres://localhost/dev
57+
# PROFILE=rust
58+
59+
# Personal Overrides (.deva.local - add to .gitignore):
60+
#
61+
# VOLUME=$HOME/personal-keys:/home/deva/keys:ro
62+
# ENV=API_KEY=secret-key-here

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ jobs:
3131

3232
- name: Test help output
3333
run: |
34-
./claude.sh --help
34+
./deva.sh --help
3535
./claude-yolo --help
3636
3737
- name: Test version output
3838
run: |
39-
./claude.sh --version
39+
./deva.sh --version
4040
./claude-yolo --version
4141
4242
- name: Check version consistency

.github/workflows/release.yml

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ on:
1313

1414
env:
1515
REGISTRY: ghcr.io
16-
IMAGE_NAME: thevibeworks/ccyolo
16+
IMAGE_NAME: thevibeworks/deva
1717

1818
jobs:
1919
build-and-push:
@@ -48,21 +48,69 @@ jobs:
4848
type=ref,event=tag
4949
type=raw,value=latest,enable={{is_default_branch}}
5050
51-
- name: Build and push Docker image
51+
- name: Build and push base image
5252
uses: docker/build-push-action@v5
5353
with:
5454
context: .
55+
file: ./Dockerfile
5556
platforms: linux/amd64,linux/arm64
5657
push: true
5758
tags: ${{ steps.meta.outputs.tags }}
5859
labels: ${{ steps.meta.outputs.labels }}
5960
cache-from: type=gha
6061
cache-to: type=gha,mode=max
6162

63+
build-and-push-rust:
64+
name: Build and Push Rust Profile Image
65+
runs-on: ubuntu-latest
66+
needs: build-and-push
67+
permissions:
68+
contents: read
69+
packages: write
70+
steps:
71+
- name: Checkout
72+
uses: actions/checkout@v4
73+
74+
- name: Set up QEMU
75+
uses: docker/setup-qemu-action@v3
76+
77+
- name: Set up Docker Buildx
78+
uses: docker/setup-buildx-action@v3
79+
80+
- name: Log in to Container Registry
81+
uses: docker/login-action@v3
82+
with:
83+
registry: ${{ env.REGISTRY }}
84+
username: ${{ github.actor }}
85+
password: ${{ secrets.GITHUB_TOKEN }}
86+
87+
- name: Extract metadata for rust profile
88+
id: meta-rust
89+
uses: docker/metadata-action@v5
90+
with:
91+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
92+
tags: |
93+
type=ref,event=tag,suffix=-rust
94+
type=raw,value=rust,enable={{is_default_branch}}
95+
96+
- name: Build and push rust image
97+
uses: docker/build-push-action@v5
98+
with:
99+
context: .
100+
file: ./Dockerfile.rust
101+
platforms: linux/amd64,linux/arm64
102+
push: true
103+
tags: ${{ steps.meta-rust.outputs.tags }}
104+
labels: ${{ steps.meta-rust.outputs.labels }}
105+
cache-from: type=gha
106+
cache-to: type=gha,mode=max
107+
build-args: |
108+
BASE_IMAGE=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
109+
62110
release:
63111
name: Create GitHub Release
64112
runs-on: ubuntu-latest
65-
needs: build-and-push
113+
needs: [build-and-push, build-and-push-rust]
66114
permissions:
67115
contents: write
68116
steps:
@@ -80,15 +128,15 @@ jobs:
80128
echo "version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
81129
fi
82130
83-
- name: Update version in claude.sh
131+
- name: Update version in deva.sh
84132
run: |
85133
VERSION="${{ steps.version.outputs.version }}"
86134
# Remove 'v' prefix if present
87135
VERSION=${VERSION#v}
88-
sed -i "s/^VERSION=.*/VERSION=\"$VERSION\"/" claude.sh
136+
sed -i "s/^VERSION=.*/VERSION=\"$VERSION\"/" deva.sh
89137
git config --local user.email "action@github.com"
90138
git config --local user.name "GitHub Action"
91-
git add claude.sh
139+
git add deva.sh
92140
git commit -m "Update version to $VERSION" || echo "No changes to commit"
93141
94142
- name: Generate release notes
@@ -105,15 +153,20 @@ jobs:
105153
else
106154
echo "## Initial Release" > release_notes.md
107155
echo "" >> release_notes.md
108-
echo "First release of Claude Code YOLO - Docker wrapper for Claude CLI with safe YOLO mode." >> release_notes.md
156+
echo "First release of deva - Multi-agent development environment for Claude Code, Codex, and other AI coding assistants." >> release_notes.md
109157
fi
110158
111159
echo "" >> release_notes.md
112160
echo "## Docker Images" >> release_notes.md
113161
echo "" >> release_notes.md
162+
echo "**Base Profile (Python, Node, Go):**" >> release_notes.md
114163
echo "- \`ghcr.io/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}\`" >> release_notes.md
115164
echo "- \`ghcr.io/${{ env.IMAGE_NAME }}:latest\`" >> release_notes.md
116165
echo "" >> release_notes.md
166+
echo "**Rust Profile (includes Rust toolchain):**" >> release_notes.md
167+
echo "- \`ghcr.io/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}-rust\`" >> release_notes.md
168+
echo "- \`ghcr.io/${{ env.IMAGE_NAME }}:rust\`" >> release_notes.md
169+
echo "" >> release_notes.md
117170
echo "## Supported Architectures" >> release_notes.md
118171
echo "" >> release_notes.md
119172
echo "- linux/amd64" >> release_notes.md

CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Fixed
11+
- **CRITICAL**: docker-entrypoint.sh UID/GID remapping broken since commit 5807889 (2025-12-29)
12+
- Fixed selective `find -maxdepth 1 -user root` approach that skipped `.npm-global`, `.local`, etc.
13+
- Implemented explicit whitelist approach for container-managed directories
14+
- Prevents "env: 'claude': Permission denied" errors on container startup
15+
- See docs/UID-GID-HANDLING-RESEARCH.md for industry patterns analysis
16+
- GitHub workflows updated for deva rebrand
17+
- release.yml: Fixed IMAGE_NAME from `ccyolo` to `deva`
18+
- release.yml: Updated to modify `deva.sh` instead of `claude.sh`
19+
- release.yml: Added rust profile build and push
20+
- ci.yml: Updated tests to use `deva.sh` instead of `claude.sh`
21+
- scripts/version-check.sh: Updated to check `deva.sh` version
22+
- install.sh: Updated branding to "deva Multi-Agent Environment"
23+
24+
### Added
25+
- Comprehensive UID/GID handling research document (docs/UID-GID-HANDLING-RESEARCH.md)
26+
- Industry patterns from VS Code DevContainers, Jupyter, fixuid, and production best practices
27+
- Comparison matrix of 6 different UID/GID handling approaches
28+
- Validation that runtime UID fixing is legitimate for dev containers
29+
- Developer log documenting the UID/GID fix investigation (docs/devlog/20260108-docker-uid-permission-fix.org)
30+
- docker-entrypoint.sh: Improved execution order (setup_nonroot_user before ensure_agent_binaries)
31+
- `.deva.example` - Reference config file demonstrating all supported directives (VOLUME, ENV, PROFILE, etc.)
32+
33+
### Changed
34+
- GitHub release workflow now builds both base and rust profile images
35+
- Release notes now document both image profiles (base and rust)
36+
1037
## [0.9.0] - 2026-01-08
1138

1239
### Added

install.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
#!/bin/bash
22
set -e
33

4-
# Claude Code YOLO Quick Installer
4+
# deva Multi-Agent Development Environment Installer
55

66
SCRIPT_NAME="claude.sh"
77
YOLO_WRAPPER="claude-yolo"
88
DEVA_LAUNCHER="deva.sh"
99
DOCKER_IMAGE="ghcr.io/thevibeworks/deva:latest"
1010
GITHUB_RAW="https://raw.githubusercontent.com/thevibeworks/claude-code-yolo/main"
1111

12-
echo "Claude Code YOLO Installer"
12+
echo "deva Multi-Agent Environment Installer"
1313
echo "=========================="
1414
echo ""
1515

scripts/version-check.sh

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/bash
22
set -e
33

4-
# Claude Code YOLO Version Consistency Checker
4+
# deva Version Consistency Checker
55
# Validates that all version references are consistent
66

77
RED='\033[0;31m'
@@ -21,8 +21,8 @@ warning() {
2121
echo -e "${YELLOW}⚠️ $1${NC}"
2222
}
2323

24-
get_claude_version() {
25-
grep 'VERSION=' claude.sh | head -1 | sed 's/.*VERSION="\([^"]*\)".*/\1/'
24+
get_deva_version() {
25+
grep 'VERSION=' deva.sh | head -1 | sed 's/.*VERSION="\([^"]*\)".*/\1/'
2626
}
2727

2828
get_changelog_version() {
@@ -34,35 +34,35 @@ get_git_latest_tag() {
3434
}
3535

3636
check_consistency() {
37-
local claude_version=$(get_claude_version)
37+
local deva_version=$(get_deva_version)
3838
local changelog_version=$(get_changelog_version)
3939
local git_version=$(get_git_latest_tag)
4040

4141
echo "Version Consistency Check"
4242
echo "========================="
43-
echo "claude.sh: $claude_version"
43+
echo "deva.sh: $deva_version"
4444
echo "CHANGELOG.md: $changelog_version"
4545
echo "Latest git tag: $git_version"
4646
echo ""
4747

4848
local issues=0
4949

50-
if [[ "$claude_version" != "$changelog_version" ]]; then
51-
error "Version mismatch: claude.sh ($claude_version) != CHANGELOG.md ($changelog_version)"
50+
if [[ "$deva_version" != "$changelog_version" ]]; then
51+
error "Version mismatch: deva.sh ($deva_version) != CHANGELOG.md ($changelog_version)"
5252
issues=$((issues + 1))
5353
else
54-
success "claude.sh and CHANGELOG.md versions match"
54+
success "deva.sh and CHANGELOG.md versions match"
5555
fi
5656

57-
if [[ "$claude_version" != "$git_version" ]]; then
58-
if [[ "$claude_version" > "$git_version" ]]; then
59-
warning "claude.sh version ($claude_version) is newer than latest tag ($git_version) - this is expected for unreleased versions"
57+
if [[ "$deva_version" != "$git_version" ]]; then
58+
if [[ "$deva_version" > "$git_version" ]]; then
59+
warning "deva.sh version ($deva_version) is newer than latest tag ($git_version) - this is expected for unreleased versions"
6060
else
61-
error "claude.sh version ($claude_version) is older than latest tag ($git_version)"
61+
error "deva.sh version ($deva_version) is older than latest tag ($git_version)"
6262
issues=$((issues + 1))
6363
fi
6464
else
65-
success "claude.sh version matches latest git tag"
65+
success "deva.sh version matches latest git tag"
6666
fi
6767

6868
echo ""
@@ -75,13 +75,13 @@ check_consistency() {
7575
echo ""
7676
echo "To fix:"
7777
echo " 1. Use ./scripts/release.sh <version> for new releases"
78-
echo " 2. Or manually update claude.sh and CHANGELOG.md to match"
78+
echo " 2. Or manually update deva.sh and CHANGELOG.md to match"
7979
return 1
8080
fi
8181
}
8282

8383
main() {
84-
if [[ ! -f "claude.sh" ]] || [[ ! -f "CHANGELOG.md" ]]; then
84+
if [[ ! -f "deva.sh" ]] || [[ ! -f "CHANGELOG.md" ]]; then
8585
error "Must be run from claude-code-yolo root directory"
8686
exit 1
8787
fi

0 commit comments

Comments
 (0)