Generated: 2026-02-03
Analysis Date: 2026-02-03
Impact: Poetry commands will fail despite documentation claiming support
Problem:
- Dockerfile line 79: Claims
poetryin package managers label - Dockerfile line 41:
ARG POETRY_VERSION=1.8.4defined but never used - Dockerfile lines 326-364: pip3 installs pipenv, pdm, hatch but NO poetry
- Entrypoint lines 162-164, 463-464: Tries to use
poetry install
Fix:
# Add after line 364 in Dockerfile
RUN pip3 install --no-cache-dir --break-system-packages poetry==${POETRY_VERSION}Files to modify:
Dockerfile(add poetry installation)- Verify
docker/entrypoint.shpoetry commands work after fix
Impact: Violates DRY principle, maintenance nightmare with duplicate version definitions
Problem:
versions.envexists with 130 lines of version definitions- Dockerfile never sources or uses these variables
- Versions are hardcoded in both files
Fix: Two options:
- Remove
versions.envif not needed - Source it in Dockerfile:
ARG BUN_VERSIONshould read from versions.env
Recommended: Use versions.env with build-time variable substitution
Files to modify:
Dockerfile(source and use versions.env)Makefile(pass env vars to docker build)- Consider adding
scripts/load-versions.sh
Impact: Security best practice violation, container runs with elevated privileges
Problem:
- No
USER,useradd, oraddusercommands in Dockerfile - Everything runs as root user
- Modern container best practice is to use non-root user
Fix:
# Add before WORKDIR /workspace
RUN addgroup -g 1000 devenv && \
adduser -D -u 1000 -G devenv devenv && \
chown -R devenv:devenv /workspace /opt /usr/local/bundle
USER devenvConsiderations:
- Some package managers expect specific permissions
- May need to adjust GEM_HOME, COMPOSER_HOME paths
- Test all runtimes after switching to non-root
Files to modify:
Dockerfile.devcontainer/devcontainer.json(update remoteUser to "devenv")
Impact: Supply chain security risk, no integrity verification for downloaded binaries
Problem:
- Binary downloads (Bun, Deno, Hugo, Julia, Zola, Groovy) have no checksum validation
- versions.env has placeholder
SHA256=placeholdervalues
Fix:
# Example for Bun
RUN set -ex && \
if [ "$(uname -m)" = "x86_64" ]; then \
wget -q "https://github.com/oven-sh/bun/releases/download/bun-v${BUN_VERSION}/bun-linux-x64.zip" && \
echo "${BUN_SHA256} bun-linux-x64.zip" | sha256sum -c - && \
unzip -q bun-linux-x64.zip && \
...Files to modify:
versions.env(replace all placeholder SHA256 values with real checksums)Dockerfile(add sha256sum verification for all binary downloads)- Consider adding
scripts/update-checksums.shautomation
Impact: Cannot monitor container health, orchestrators can't detect failures
Fix:
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD node --version && python3 --version || exit 1Files to modify:
Dockerfile
Impact: Dead code, wasted image space (~100MB)
Problem:
- Groovy 4.0 installed (lines 271-278 in Dockerfile)
- No project detection in entrypoint.sh (no check for build.gradle, settings.gradle)
- No install/dev/build automation for Groovy projects
Options:
- Complete the integration (add Groovy detection to entrypoint)
- Remove Groovy if not needed
Fix (Option 1 - Complete integration):
Add to docker/entrypoint.sh around line 357:
# =========================================================================
# Groovy (Gradle projects)
# =========================================================================
if [ -z "$detected" ]; then
if [ -f "$dir/build.gradle" ] || [ -f "$dir/build.gradle.kts" ] || [ -f "$dir/settings.gradle" ]; then
detected="groovy"
runtime="groovy"
package_manager="gradle"
framework="Groovy/Gradle"
print_success "Detected: Groovy/Gradle project"
fi
fiAdd install/build commands around lines 505, 689
Files to modify:
docker/entrypoint.sh(add Groovy/Gradle detection and commands)
Impact: Users can't use auto-detect features for Zola projects
Problem:
- Zola binary installed (lines 255-269 in Dockerfile)
- Not integrated into entrypoint.sh auto-detection
- No --install, --dev, --build support
Fix:
Add to docker/entrypoint.sh around line 367:
# =========================================================================
# Zola (static site generator)
# =========================================================================
if [ -z "$detected" ] && [ -f "$dir/config.toml" ] && grep -q '\[extra\]' "$dir/config.toml" 2>/dev/null; then
detected="zola"
runtime="zola"
package_manager="zola"
framework="Zola"
print_success "Detected: Zola static site"
fiAdd dev/build commands around lines 611, 695
Files to modify:
docker/entrypoint.sh
Impact: Confusing, triggers CI unnecessarily
Problem:
scripts/directory exists but is completely empty- Referenced in CI/CD workflow (line 13 of
.github/workflows/build.yml) - Unclear purpose
Options:
- Remove directory and CI reference
- Add utility scripts (update-versions.sh, test-project.sh, etc.)
Recommended: Add utility scripts
Suggested scripts:
scripts/update-checksums.sh- Fetch and update SHA256 checksumsscripts/test-all-runtimes.sh- Local testing scriptscripts/scaffold-project.sh- Create test projects for each framework
Files to modify:
- Add scripts to
scripts/directory - Or remove references in
.github/workflows/build.yml
Impact: CI only tests version commands, not actual project builds
Recommendation:
Create tests/ directory with sample projects:
tests/nextjs/- Minimal Next.js projecttests/django/- Minimal Django projecttests/jekyll/- Minimal Jekyll sitetests/hugo/- Minimal Hugo site- etc.
Update CI to build these projects as integration tests.
Needed:
CHANGELOG.md- Track version changesSECURITY.md- Security policy and vulnerability reportingCONTRIBUTING.md- Contribution guidelinesCODE_OF_CONDUCT.md- Community guidelines
Recommendation:
Add to .github/workflows/build.yml:
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
format: 'sarif'
output: 'trivy-results.sarif'
- name: Upload Trivy results to GitHub Security
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: 'trivy-results.sarif'Recommendation:
- Add image size reporting to CI summary
- Track size over time
- Set up alerts if image grows significantly
Recommendation:
Add --test flag to entrypoint.sh that validates:
- All runtimes are working
- All package managers are functional
- Network connectivity
- Write permissions
Recommendation:
Add examples/ directory with:
examples/docker-compose.nextjs.ymlexamples/docker-compose.django.ymlexamples/docker-compose.jekyll.yml
- Entrypoint line 409 shows Poetry version but Poetry isn't installed
- Will show empty output
- Only detects if Ghost is present
- Should detect hexo independently
- Installed globally but detection relies on package.json grep
- Could be more robust
- ✅ Install Poetry
- ✅ Fix or remove versions.env
- ✅ Add non-root user
- ✅ Complete Groovy integration OR remove it
- ✅ Complete Zola integration
- ✅ Add SHA256 verification
- ✅ Add HEALTHCHECK
- ✅ Add test projects
- ✅ Add security scanning
- ✅ Clean up scripts/ directory
- ✅ Add documentation files
- ✅ Add --test command
- ✅ Add docker-compose examples
- ✅ Image size tracking
- All line numbers reference current file versions as of 2026-02-03
- Test thoroughly after each fix
- Consider multi-stage builds to reduce final image size
- Consider adding language version managers (nvm, pyenv, rbenv) for flexibility