Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
1dd1cf3
chore: add dev container version source and profile catalogue (spec 0…
claude Oct 22, 2026
4d146fe
chore: list each component's system dependencies (spec 026 T011)
claude Oct 22, 2026
94f501e
feat: generate dev container profiles from per-component deps (spec 0…
claude Oct 22, 2026
feb5c98
test: fixture tests for the dev container generator (spec 026 T008)
claude Oct 22, 2026
6ab6455
chore: replace post-create.sh with the shared step-based setup.sh (sp…
claude Oct 22, 2026
fda6c9c
chore: generate the full, component and part dev container profiles (…
claude Oct 22, 2026
c6ffc93
ci: add dev container drift check and full profile build (spec 026 T014)
claude Oct 22, 2026
0270770
docs(specs): spec 026 inventory brief and task progress
claude Oct 22, 2026
a9525f8
feat: name the dev container profile when a make target lacks a tool …
claude Oct 25, 2026
ae5725a
ci: build every affected dev container profile on amd64 and arm64 (sp…
claude Oct 25, 2026
5d95e7a
docs(specs): mark spec 026 T016, T017, T021, T022 done
claude Oct 25, 2026
eb31497
fix: install python3 in every dev container profile and skip AI CLIs …
claude Oct 25, 2026
45a9384
Merge branch 'claude/project-thread-nv63wo' into claude/project-threa…
claude Oct 25, 2026
f95af0f
feat: give the website and module repo copies their own checks (spec …
claude Oct 25, 2026
8f98390
chore: bump website and modules to their spec 026 dependency lists an…
claude Oct 27, 2026
25fcf09
Merge branch 'spec-026/foundation' into spec-026/need-guard-and-ci-ma…
claude Oct 27, 2026
0a2911d
fix: read setup.sh only when a submodule copy is rendered (spec 026)
claude Oct 27, 2026
fccfe95
Merge branch 'spec-026/foundation' into spec-026/need-guard-and-ci-ma…
claude Oct 27, 2026
acabec2
fix: validate one module in the modules profile check (spec 026)
claude Oct 27, 2026
bf70139
Merge branch 'spec-026/foundation' into spec-026/need-guard-and-ci-ma…
claude Oct 27, 2026
c93cc40
fix: address review on dev container generator and workflow (spec 026)
claude Oct 27, 2026
2e4ff33
Merge branch 'spec-026/foundation' into spec-026/need-guard-and-ci-ma…
claude Oct 27, 2026
5bed066
Merge remote-tracking branch 'origin/master' into spec-026/foundation
claude Oct 27, 2026
5425142
Merge branch 'spec-026/foundation' into spec-026/need-guard-and-ci-ma…
claude Oct 27, 2026
a2e9f65
Merge pull request #810 from GameplanePanel/spec-026/need-guard-and-c…
ValgulNecron Oct 28, 2026
24d3342
Merge remote-tracking branch 'origin/master' into spec-026/foundation
claude Oct 28, 2026
c84cfc2
chore: bump modules to Go 1.27.3 dev container copy (spec 026)
claude Oct 28, 2026
7522233
ci: cap dev container builds at 30 minutes (spec 026)
claude Oct 28, 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/agent/devcontainer-lock.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"integrity": "sha256:cb0c4d3c276f157eed17935747e364178d75fee17f55c4e129966f64633deb3a",
"resolved": "ghcr.io/devcontainers/features/common-utils@sha256:cb0c4d3c276f157eed17935747e364178d75fee17f55c4e129966f64633deb3a",
"version": "2.5.9"
},
"ghcr.io/devcontainers/features/github-cli:1": {
"integrity": "sha256:d22f50b70ed75339b4eed1ba9ecde3a1791f90e88d37936517e3bace0bbad671",
"resolved": "ghcr.io/devcontainers/features/github-cli@sha256:d22f50b70ed75339b4eed1ba9ecde3a1791f90e88d37936517e3bace0bbad671",
"version": "1.1.0"
},
"ghcr.io/devcontainers/features/go:1": {
"integrity": "sha256:d85e921f91b41340055bb12b325d9d551170ed04b3b832e33530bf42f167c032",
"resolved": "ghcr.io/devcontainers/features/go@sha256:d85e921f91b41340055bb12b325d9d551170ed04b3b832e33530bf42f167c032",
"version": "1.3.4"
}
}
}
53 changes: 53 additions & 0 deletions .devcontainer/agent/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"containerEnv": {
"CI": "1",
"GOTOOLCHAIN": "local"
},
"customizations": {
"vscode": {
"extensions": [
"anthropic.claude-code",
"golang.go",
"ms-vscode.makefile-tools",
"redhat.vscode-yaml",
"tamasfe.even-better-toml"
],
"settings": {
"[go]": {
"editor.defaultFormatter": "golang.go"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.formatOnSave": true,
"go.toolsManagement.checkForUpdates": "off",
"go.useLanguageServer": true,
"vs-kubernetes": {
"vs-kubernetes.crd-code-completion": "enabled"
},
"workbench.browser.openLocalhostLinks": false
}
}
},
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"configureZshAsDefaultShell": "false",
"installZsh": "true",
"username": "vscode"
},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers/features/go:1": {
"version": "1.27.3"
}
},
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-24.04",
"name": "Gameplane \u00b7 Agent",
"postCreateCommand": "bash .devcontainer/setup.sh .devcontainer/agent/setup.env",
"remoteUser": "vscode",
"runArgs": [
"--init"
]
}
14 changes: 14 additions & 0 deletions .devcontainer/agent/ready.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[devcontainer] ready: Gameplane · Agent

Works here:
cd agent && go build ./...
cd gameaction && go build ./...
cd netguard && go build ./...
make build-go

Ports: none
Tests and lint run in CI (CLAUDE.md rule 8).
Need something else? docker, helm, kind, kubectl → profile "dashboard-api"
Need something else? envtest → profile "api"
Need something else? node → profile "web"
Need something else? oras, pyyaml → profile "modules"
10 changes: 10 additions & 0 deletions .devcontainer/agent/setup.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
GOLANGCI_LINT_VERSION="v2.14.0"
GO_MODULES="agent gameaction netguard"
MODULES_DIR="modules"
OPTIONAL_STEPS="ai_clis"
PROFILE="agent"
READY=".devcontainer/agent/ready.txt"
SPECIFY_VERSION="v1.0.3"
STEPS="python3 golangci_lint go_mod_download uv specify ai_clis"
SUBMODULES=""
WEBSITE_DIR="website"
19 changes: 19 additions & 0 deletions .devcontainer/api/devcontainer-lock.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"integrity": "sha256:cb0c4d3c276f157eed17935747e364178d75fee17f55c4e129966f64633deb3a",
"resolved": "ghcr.io/devcontainers/features/common-utils@sha256:cb0c4d3c276f157eed17935747e364178d75fee17f55c4e129966f64633deb3a",
"version": "2.5.9"
},
"ghcr.io/devcontainers/features/github-cli:1": {
"integrity": "sha256:d22f50b70ed75339b4eed1ba9ecde3a1791f90e88d37936517e3bace0bbad671",
"resolved": "ghcr.io/devcontainers/features/github-cli@sha256:d22f50b70ed75339b4eed1ba9ecde3a1791f90e88d37936517e3bace0bbad671",
"version": "1.1.0"
},
"ghcr.io/devcontainers/features/go:1": {
"integrity": "sha256:d85e921f91b41340055bb12b325d9d551170ed04b3b832e33530bf42f167c032",
"resolved": "ghcr.io/devcontainers/features/go@sha256:d85e921f91b41340055bb12b325d9d551170ed04b3b832e33530bf42f167c032",
"version": "1.3.4"
}
}
}
53 changes: 53 additions & 0 deletions .devcontainer/api/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"containerEnv": {
"CI": "1",
"GOTOOLCHAIN": "local"
},
"customizations": {
"vscode": {
"extensions": [
"anthropic.claude-code",
"golang.go",
"ms-vscode.makefile-tools",
"redhat.vscode-yaml",
"tamasfe.even-better-toml"
],
"settings": {
"[go]": {
"editor.defaultFormatter": "golang.go"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.formatOnSave": true,
"go.toolsManagement.checkForUpdates": "off",
"go.useLanguageServer": true,
"vs-kubernetes": {
"vs-kubernetes.crd-code-completion": "enabled"
},
"workbench.browser.openLocalhostLinks": false
}
}
},
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"configureZshAsDefaultShell": "false",
"installZsh": "true",
"username": "vscode"
},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers/features/go:1": {
"version": "1.27.3"
}
},
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-24.04",
"name": "Gameplane \u00b7 API",
"postCreateCommand": "bash .devcontainer/setup.sh .devcontainer/api/setup.env",
"remoteUser": "vscode",
"runArgs": [
"--init"
]
}
17 changes: 17 additions & 0 deletions .devcontainer/api/ready.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[devcontainer] ready: Gameplane · API

Works here:
cd api && go build ./...
cd gameaction && go build ./...
cd gp-module && go build ./...
cd i18n && go build ./...
cd netguard && go build ./...
cd svcutil && go build ./...
cd telemetryschema && go build ./...
make build-go

Ports: none
Tests and lint run in CI (CLAUDE.md rule 8).
Need something else? docker, helm, kind, kubectl → profile "dashboard-api"
Need something else? node → profile "web"
Need something else? oras, pyyaml → profile "modules"
12 changes: 12 additions & 0 deletions .devcontainer/api/setup.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
ENVTEST_K8S_VERSION="1.36.2"
GOLANGCI_LINT_VERSION="v2.14.0"
GO_MODULES="api gameaction gp-module i18n netguard svcutil telemetryschema"
MODULES_DIR="modules"
OPTIONAL_STEPS="ai_clis"
PROFILE="api"
READY=".devcontainer/api/ready.txt"
SETUP_ENVTEST_VERSION="release-0.24"
SPECIFY_VERSION="v1.0.3"
STEPS="python3 golangci_lint envtest go_mod_download uv specify ai_clis"
SUBMODULES=""
WEBSITE_DIR="website"
29 changes: 29 additions & 0 deletions .devcontainer/control-plane/devcontainer-lock.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"integrity": "sha256:cb0c4d3c276f157eed17935747e364178d75fee17f55c4e129966f64633deb3a",
"resolved": "ghcr.io/devcontainers/features/common-utils@sha256:cb0c4d3c276f157eed17935747e364178d75fee17f55c4e129966f64633deb3a",
"version": "2.5.9"
},
"ghcr.io/devcontainers/features/docker-in-docker:2": {
"integrity": "sha256:25b9f05705ffba7dbe503230ac76081419306f8c8bc88e0ce78c4ecd99a0c78c",
"resolved": "ghcr.io/devcontainers/features/docker-in-docker@sha256:25b9f05705ffba7dbe503230ac76081419306f8c8bc88e0ce78c4ecd99a0c78c",
"version": "2.17.0"
},
"ghcr.io/devcontainers/features/github-cli:1": {
"integrity": "sha256:d22f50b70ed75339b4eed1ba9ecde3a1791f90e88d37936517e3bace0bbad671",
"resolved": "ghcr.io/devcontainers/features/github-cli@sha256:d22f50b70ed75339b4eed1ba9ecde3a1791f90e88d37936517e3bace0bbad671",
"version": "1.1.0"
},
"ghcr.io/devcontainers/features/go:1": {
"integrity": "sha256:d85e921f91b41340055bb12b325d9d551170ed04b3b832e33530bf42f167c032",
"resolved": "ghcr.io/devcontainers/features/go@sha256:d85e921f91b41340055bb12b325d9d551170ed04b3b832e33530bf42f167c032",
"version": "1.3.4"
},
"ghcr.io/devcontainers/features/kubectl-helm-minikube:1": {
"integrity": "sha256:bbe8adf6b37fff8c67412ab0a4579f4c2f30bbaba1d9a5cebd9e38bade54025b",
"resolved": "ghcr.io/devcontainers/features/kubectl-helm-minikube@sha256:bbe8adf6b37fff8c67412ab0a4579f4c2f30bbaba1d9a5cebd9e38bade54025b",
"version": "1.3.1"
}
}
}
89 changes: 89 additions & 0 deletions .devcontainer/control-plane/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
{
"containerEnv": {
"CI": "1",
"GAMEPLANE_REG_HOST_PORT": "5001",
"GOTOOLCHAIN": "local"
},
"customizations": {
"vscode": {
"extensions": [
"anthropic.claude-code",
"golang.go",
"ms-kubernetes-tools.vscode-kubernetes-tools",
"ms-vscode.makefile-tools",
"redhat.vscode-yaml",
"tamasfe.even-better-toml"
],
"settings": {
"[go]": {
"editor.defaultFormatter": "golang.go"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.formatOnSave": true,
"go.toolsManagement.checkForUpdates": "off",
"go.useLanguageServer": true,
"vs-kubernetes": {
"vs-kubernetes.crd-code-completion": "enabled"
},
"workbench.browser.openLocalhostLinks": false
}
}
},
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"configureZshAsDefaultShell": "false",
"installZsh": "true",
"username": "vscode"
},
"ghcr.io/devcontainers/features/docker-in-docker:2": {
"dockerDashComposeVersion": "v2",
"moby": true,
"version": "latest"
},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers/features/go:1": {
"version": "1.27.3"
},
"ghcr.io/devcontainers/features/kubectl-helm-minikube:1": {
"helm": "4.3.1",
"minikube": "none",
"version": "1.36"
}
},
"forwardPorts": [
8080,
8443,
5001,
30565
],
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-24.04",
"name": "Gameplane \u00b7 Control plane",
"portsAttributes": {
"30565": {
"label": "Sample Minecraft NodePort",
"onAutoForward": "silent"
},
"5001": {
"label": "Local OCI registry",
"onAutoForward": "silent"
},
"8080": {
"label": "Gameplane ingress (HTTP)",
"onAutoForward": "silent"
},
"8443": {
"label": "Gameplane ingress (HTTPS)",
"onAutoForward": "silent"
}
},
"postCreateCommand": "bash .devcontainer/setup.sh .devcontainer/control-plane/setup.env",
"remoteUser": "vscode",
"runArgs": [
"--init"
]
}
25 changes: 25 additions & 0 deletions .devcontainer/control-plane/ready.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
[devcontainer] ready: Gameplane · Control plane

Works here:
cd api && go build ./...
cd gameaction && go build ./...
cd gp-module && go build ./...
cd i18n && go build ./...
cd netguard && go build ./...
cd svcutil && go build ./...
cd telemetryschema && go build ./...
cd operator && go build ./...
cd agent && go build ./...
cd test/e2e && go vet -tags e2e ./...
make build-go
make generate
make manifests
make module-validate
make modules-push
make dev-load
make e2e-up
make dev-up

Ports: 8080 Gameplane ingress (HTTP), 8443 Gameplane ingress (HTTPS), 5001 Local OCI registry, 30565 Sample Minecraft NodePort
Tests and lint run in CI (CLAUDE.md rule 8).
Need something else? node → profile "web"
14 changes: 14 additions & 0 deletions .devcontainer/control-plane/setup.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
ENVTEST_K8S_VERSION="1.36.2"
GOLANGCI_LINT_VERSION="v2.14.0"
GO_MODULES="agent api gameaction gameproto gp-module i18n netguard operator svcutil telemetryschema test/e2e"
KIND_VERSION="v0.32.0"
MODULES_DIR="modules"
OPTIONAL_STEPS="ai_clis"
ORAS_VERSION="1.2.0"
PROFILE="control-plane"
READY=".devcontainer/control-plane/ready.txt"
SETUP_ENVTEST_VERSION="release-0.24"
SPECIFY_VERSION="v1.0.3"
STEPS="submodules python3 pyyaml kind oras golangci_lint envtest go_mod_download uv specify ai_clis"
SUBMODULES="modules"
WEBSITE_DIR="website"
Loading
Loading