Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
1ba8108
feat: add design spec and implementation plan for Claude Code DevCont…
PKramek Mar 31, 2026
3e283ed
chore: add LICENSE, editorconfig, shellcheckrc, gitignore
PKramek Apr 1, 2026
1bd51a9
feat: add devcontainer-feature.json manifest
PKramek Apr 1, 2026
110e09c
feat: add install.sh skeleton with bootstrap, logging, validation
PKramek Apr 1, 2026
b7629f5
feat: add OS detection and dependency installation
PKramek Apr 1, 2026
c656b62
feat: add Node.js detection and installation
PKramek Apr 1, 2026
7dfa47f
feat: add PATH configuration and Claude Code installation
PKramek Apr 1, 2026
f1f911e
fix: capture claude version once to avoid redundant subprocess
PKramek Apr 1, 2026
21e34d1
feat: add completions, MCP config, mount docs, cache cleanup
PKramek Apr 1, 2026
d6b998d
feat: add test helpers and scenario definitions
PKramek Apr 1, 2026
9d01499
feat: add per-scenario test scripts
PKramek Apr 1, 2026
0ccb35b
chore: add pre-commit hooks configuration
PKramek Apr 1, 2026
88f5924
docs: add contributor devcontainer and README
PKramek Apr 1, 2026
c58eb4c
ci: add release workflow with version check and publish
PKramek Apr 1, 2026
3609f5f
ci: add test workflow with lint and exhaustive matrix
PKramek Apr 1, 2026
550fdd9
fix: resolve Node.js LTS via awk/index.tab, add ca-certs for arch/rhe…
PKramek Apr 1, 2026
85d0ee9
fix: correct idempotency path, add MCP permission checks, add shfmt t…
PKramek Apr 1, 2026
f262aef
fix: ensure xz-utils present before Node.js tarball extract, improve …
PKramek Apr 1, 2026
134b69a
docs: add repo rename and branch setup design spec
PKramek Apr 1, 2026
19dc0f6
chore: untrack repo rename planning doc, gitignore protect-*.json
PKramek Apr 1, 2026
d995821
ci: trigger CI on develop branch push
PKramek Apr 1, 2026
7dfd19c
chore: rename repo to claude-devcontainer
PKramek Apr 1, 2026
a8f3158
ci: add setup-uv step before yamllint to fix missing uvx on runner
PKramek Apr 1, 2026
bb770c6
style: apply Prettier formatting to all staged files
PKramek Apr 1, 2026
192e4e1
ci: add markdownlint config disabling MD013/MD031/MD040
PKramek Apr 1, 2026
f1542a0
style: apply shfmt formatting to install.sh and test.sh
PKramek Apr 1, 2026
545feff
docs: add install fix, formatting enforcement, and license change des…
PKramek Apr 1, 2026
aa45a1d
docs: update design spec with expert review corrections
PKramek Apr 1, 2026
58535a8
docs: incorporate expert review findings into design spec
PKramek Apr 1, 2026
fa775ed
docs: fix spec count, SHA pinning approach, add SPDX-FileCopyrightText
PKramek Apr 1, 2026
92f9d05
fix: redirect log_info and log_debug to stderr, add SPDX headers
PKramek Apr 1, 2026
5a8bcf1
ci: detect feature install failures in test output (workaround cli ex…
PKramek Apr 1, 2026
590261c
chore: change license from MIT to Apache 2.0
PKramek Apr 1, 2026
bca67c1
chore: pin pre-commit hooks to commit SHAs, add develop branch protec…
PKramek Apr 1, 2026
2fc68dc
style: apply shfmt and prettier formatting
PKramek Apr 1, 2026
ce1c5b1
docs: add implementation plans for CI fixes and repo setup
PKramek Apr 1, 2026
e81540c
style: fix Prettier formatting on plans markdown files
PKramek Apr 1, 2026
6702d8e
style: fix MD024 duplicate headings in install-fix spec
PKramek Apr 1, 2026
9ba32a0
fix: use /bin/sh shebang for Alpine bootstrap, sync pacman db, add ta…
PKramek Apr 1, 2026
7c96b68
fix: correct set -e arithmetic bug and catch CLI test failure marker
PKramek Apr 1, 2026
f8caefa
fix: enforce 755 on claude binary after npm install
PKramek Apr 2, 2026
0526dd1
fix: dereference symlinks in stat calls and catch FAIL assertions in CI
PKramek Apr 2, 2026
e9acaed
fix: add duplicate.sh for idempotency and switch arm64 to QEMU
PKramek Apr 2, 2026
f9af027
fix: guard self-copy in install.sh to prevent idempotency failure
PKramek Apr 2, 2026
d81e924
fix: remove devcontainer base images from arm64 test matrix
PKramek Apr 2, 2026
2911d2d
ci: annotate install warnings as non-blocking yellow markers
PKramek Apr 2, 2026
6282916
fix: skip zsh completions if zsh absent; make warning step exit yellow
PKramek Apr 2, 2026
572e233
fix: use log_warn consistently and clean up warning annotations
PKramek Apr 2, 2026
6cd77c1
fix: pin devcontainers/python to :3 tag (no latest manifest on MCR)
PKramek Apr 2, 2026
f7c391f
ci: write warnings to job step summary for visibility
PKramek Apr 2, 2026
b7b2650
fix: strip carriage returns before sort -u to fix warning deduplication
PKramek Apr 2, 2026
da17f78
fix: demote mountHostConfig notice from WARNING to INFO level
PKramek Apr 2, 2026
b473ab0
docs: rewrite README with enterprise framing and accurate technical c…
PKramek Apr 2, 2026
089c6f6
style: apply Prettier formatting to README; disable MD041 for badges-…
PKramek Apr 2, 2026
66b80ba
docs: document pre-commit hooks in Contributing section
PKramek Apr 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"name": "Claude Code Feature Development",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/devcontainers/features/node:1": {
"version": "22"
}
},
"postCreateCommand": "npm install -g @devcontainers/cli && pre-commit install || true",
"customizations": {
"vscode": {
"extensions": [
"timonwong.shellcheck",
"foxundermoon.shell-format",
"esbenp.prettier-vscode"
]
}
}
}
21 changes: 21 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
root = true

[*]
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
charset = utf-8

[*.sh]
indent_style = space
indent_size = 4

[*.{json,yml,yaml}]
indent_style = space
indent_size = 2

[*.md]
trim_trailing_whitespace = false

[Makefile]
indent_style = tab
101 changes: 101 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: "Release"

on:
push:
tags: ["v*"]

concurrency:
group: "release-${{ github.repository }}"
cancel-in-progress: false

permissions: {}

jobs:
validate:
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: ShellCheck
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # 2.0.0
with:
severity: warning

- name: Install devcontainer CLI
run: npm install -g @devcontainers/[email protected]

- name: Smoke test (3 representative images)
run: |
for img in \
"mcr.microsoft.com/devcontainers/base:ubuntu" \
"mcr.microsoft.com/devcontainers/base:alpine" \
"mcr.microsoft.com/devcontainers/universal:2"; do
echo "--- Smoke testing: ${img} ---"
devcontainer features test \
--features claude-code \
--skip-scenarios \
--base-image "${img}" \
--project-folder .
done

version-check:
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: read
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Verify version matches tag
run: |
TAG_VERSION="${GITHUB_REF_NAME#v}"
JSON_VERSION=$(python3 -c "
import json
with open('src/claude-code/devcontainer-feature.json') as f:
print(json.load(f)['version'])
")
if [[ "${TAG_VERSION}" != "${JSON_VERSION}" ]]; then
echo "ERROR: Tag version (${TAG_VERSION}) does not match feature version (${JSON_VERSION})"
exit 1
fi
echo "Version match: ${TAG_VERSION}"

publish:
needs: [validate, version-check]
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Publish feature
uses: devcontainers/action@1082abd5d2bf3a11abccba70eef98df068277772 # v1.4.3
with:
publish-features: "true"
base-path-to-features: "./src"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

post-publish:
needs: publish
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
packages: read
steps:
- name: Verify published feature
run: |
npm install -g @devcontainers/[email protected]
TAG_VERSION="${GITHUB_REF_NAME#v}"
FEATURE_REF="ghcr.io/${{ github.repository }}/claude-code:${TAG_VERSION}"
echo "Verifying: ${FEATURE_REF}"
devcontainer features info manifest "${FEATURE_REF}" || {
echo "ERROR: Published feature not accessible at ${FEATURE_REF}"
exit 1
}
echo "Published feature verified successfully."
Loading
Loading