@vyuhlabs/dxkit 2.4.8 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +235 -0
- package/README.md +360 -439
- package/dist/analyzers/security/aggregator.d.ts.map +1 -1
- package/dist/analyzers/security/aggregator.js +4 -46
- package/dist/analyzers/security/aggregator.js.map +1 -1
- package/dist/analyzers/tools/fingerprint.d.ts +91 -26
- package/dist/analyzers/tools/fingerprint.d.ts.map +1 -1
- package/dist/analyzers/tools/fingerprint.js +111 -22
- package/dist/analyzers/tools/fingerprint.js.map +1 -1
- package/dist/analyzers/tools/generic.d.ts.map +1 -1
- package/dist/analyzers/tools/generic.js +6 -1
- package/dist/analyzers/tools/generic.js.map +1 -1
- package/dist/analyzers/tools/gitleaks.d.ts +24 -1
- package/dist/analyzers/tools/gitleaks.d.ts.map +1 -1
- package/dist/analyzers/tools/gitleaks.js +20 -11
- package/dist/analyzers/tools/gitleaks.js.map +1 -1
- package/dist/analyzers/types.d.ts +6 -4
- package/dist/analyzers/types.d.ts.map +1 -1
- package/dist/baseline/baseline-file.d.ts +104 -0
- package/dist/baseline/baseline-file.d.ts.map +1 -0
- package/dist/baseline/baseline-file.js +110 -0
- package/dist/baseline/baseline-file.js.map +1 -0
- package/dist/baseline/check-renderers.d.ts +108 -0
- package/dist/baseline/check-renderers.d.ts.map +1 -0
- package/dist/baseline/check-renderers.js +379 -0
- package/dist/baseline/check-renderers.js.map +1 -0
- package/dist/baseline/check.d.ts +127 -0
- package/dist/baseline/check.d.ts.map +1 -0
- package/dist/baseline/check.js +462 -0
- package/dist/baseline/check.js.map +1 -0
- package/dist/baseline/content-hash.d.ts +83 -0
- package/dist/baseline/content-hash.d.ts.map +1 -0
- package/dist/baseline/content-hash.js +131 -0
- package/dist/baseline/content-hash.js.map +1 -0
- package/dist/baseline/create.d.ts +96 -0
- package/dist/baseline/create.d.ts.map +1 -0
- package/dist/baseline/create.js +339 -0
- package/dist/baseline/create.js.map +1 -0
- package/dist/baseline/entry-to-located.d.ts +35 -0
- package/dist/baseline/entry-to-located.d.ts.map +1 -0
- package/dist/baseline/entry-to-located.js +72 -0
- package/dist/baseline/entry-to-located.js.map +1 -0
- package/dist/baseline/finding-identity.d.ts +47 -0
- package/dist/baseline/finding-identity.d.ts.map +1 -0
- package/dist/baseline/finding-identity.js +292 -0
- package/dist/baseline/finding-identity.js.map +1 -0
- package/dist/baseline/git-aware-match.d.ts +146 -0
- package/dist/baseline/git-aware-match.d.ts.map +1 -0
- package/dist/baseline/git-aware-match.js +439 -0
- package/dist/baseline/git-aware-match.js.map +1 -0
- package/dist/baseline/policy.d.ts +171 -0
- package/dist/baseline/policy.d.ts.map +1 -0
- package/dist/baseline/policy.js +206 -0
- package/dist/baseline/policy.js.map +1 -0
- package/dist/baseline/producers/health.d.ts +30 -0
- package/dist/baseline/producers/health.d.ts.map +1 -0
- package/dist/baseline/producers/health.js +42 -0
- package/dist/baseline/producers/health.js.map +1 -0
- package/dist/baseline/producers/index.d.ts +164 -0
- package/dist/baseline/producers/index.d.ts.map +1 -0
- package/dist/baseline/producers/index.js +200 -0
- package/dist/baseline/producers/index.js.map +1 -0
- package/dist/baseline/producers/licenses.d.ts +23 -0
- package/dist/baseline/producers/licenses.d.ts.map +1 -0
- package/dist/baseline/producers/licenses.js +46 -0
- package/dist/baseline/producers/licenses.js.map +1 -0
- package/dist/baseline/producers/quality.d.ts +39 -0
- package/dist/baseline/producers/quality.d.ts.map +1 -0
- package/dist/baseline/producers/quality.js +84 -0
- package/dist/baseline/producers/quality.js.map +1 -0
- package/dist/baseline/producers/secret-hmac.d.ts +45 -0
- package/dist/baseline/producers/secret-hmac.d.ts.map +1 -0
- package/dist/baseline/producers/secret-hmac.js +70 -0
- package/dist/baseline/producers/secret-hmac.js.map +1 -0
- package/dist/baseline/producers/security.d.ts +59 -0
- package/dist/baseline/producers/security.d.ts.map +1 -0
- package/dist/baseline/producers/security.js +135 -0
- package/dist/baseline/producers/security.js.map +1 -0
- package/dist/baseline/producers/tests.d.ts +36 -0
- package/dist/baseline/producers/tests.d.ts.map +1 -0
- package/dist/baseline/producers/tests.js +69 -0
- package/dist/baseline/producers/tests.js.map +1 -0
- package/dist/baseline/salt.d.ts +45 -0
- package/dist/baseline/salt.d.ts.map +1 -0
- package/dist/baseline/salt.js +113 -0
- package/dist/baseline/salt.js.map +1 -0
- package/dist/baseline/show.d.ts +79 -0
- package/dist/baseline/show.d.ts.map +1 -0
- package/dist/baseline/show.js +233 -0
- package/dist/baseline/show.js.map +1 -0
- package/dist/baseline/types.d.ts +482 -0
- package/dist/baseline/types.d.ts.map +1 -0
- package/dist/baseline/types.js +53 -0
- package/dist/baseline/types.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +360 -81
- package/dist/cli.js.map +1 -1
- package/dist/codebase-scanner.d.ts.map +1 -1
- package/dist/codebase-scanner.js +0 -1
- package/dist/codebase-scanner.js.map +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -4
- package/dist/constants.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +22 -25
- package/dist/doctor.js.map +1 -1
- package/dist/fail-on.d.ts +84 -0
- package/dist/fail-on.d.ts.map +1 -0
- package/dist/fail-on.js +128 -0
- package/dist/fail-on.js.map +1 -0
- package/dist/generator.d.ts.map +1 -1
- package/dist/generator.js +2 -141
- package/dist/generator.js.map +1 -1
- package/dist/languages/csharp.d.ts.map +1 -1
- package/dist/languages/csharp.js +0 -9
- package/dist/languages/csharp.js.map +1 -1
- package/dist/languages/go.d.ts.map +1 -1
- package/dist/languages/go.js +0 -15
- package/dist/languages/go.js.map +1 -1
- package/dist/languages/index.d.ts +1 -1
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/java.d.ts.map +1 -1
- package/dist/languages/java.js +0 -6
- package/dist/languages/java.js.map +1 -1
- package/dist/languages/kotlin.d.ts.map +1 -1
- package/dist/languages/kotlin.js +0 -11
- package/dist/languages/kotlin.js.map +1 -1
- package/dist/languages/python.d.ts.map +1 -1
- package/dist/languages/python.js +0 -15
- package/dist/languages/python.js.map +1 -1
- package/dist/languages/ruby.d.ts.map +1 -1
- package/dist/languages/ruby.js +0 -6
- package/dist/languages/ruby.js.map +1 -1
- package/dist/languages/rust.d.ts.map +1 -1
- package/dist/languages/rust.js +0 -4
- package/dist/languages/rust.js.map +1 -1
- package/dist/languages/types.d.ts +2 -28
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript.d.ts.map +1 -1
- package/dist/languages/typescript.js +26 -4
- package/dist/languages/typescript.js.map +1 -1
- package/dist/lib.d.ts +2 -3
- package/dist/lib.d.ts.map +1 -1
- package/dist/lib.js +3 -6
- package/dist/lib.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +0 -10
- package/dist/prompts.js.map +1 -1
- package/dist/report-schema.d.ts +42 -0
- package/dist/report-schema.d.ts.map +1 -0
- package/dist/report-schema.js +54 -0
- package/dist/report-schema.js.map +1 -0
- package/dist/ship-installers.d.ts +106 -0
- package/dist/ship-installers.d.ts.map +1 -0
- package/dist/ship-installers.js +415 -0
- package/dist/ship-installers.js.map +1 -0
- package/dist/types.d.ts +0 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/update.d.ts.map +1 -1
- package/dist/update.js +0 -4
- package/dist/update.js.map +1 -1
- package/package.json +17 -11
- package/templates/.claude/agents/onboarding.md +5 -4
- package/templates/.claude/agents-available/codebase-explorer.md +1 -1
- package/templates/.claude/agents-available/debugger.md +2 -2
- package/templates/.claude/agents-available/health-auditor.md +2 -2
- package/templates/.claude/commands/doctor.md +20 -12
- package/templates/.claude/skills/build/SKILL.md.template +22 -30
- package/templates/.claude/skills/deploy/SKILL.md.template +5 -25
- package/templates/.claude/skills/doctor/SKILL.md +24 -47
- package/templates/.claude/skills/gcloud/SKILL.md +5 -5
- package/templates/.claude/skills/learned/SKILL.md +1 -1
- package/templates/.claude/skills/pulumi/SKILL.md +2 -2
- package/templates/.claude/skills/quality/SKILL.md.template +4 -23
- package/templates/.claude/skills/review/SKILL.md.template +4 -3
- package/templates/.claude/skills/scaffold/SKILL.md.template +5 -15
- package/templates/.claude/skills/secrets/SKILL.md +20 -21
- package/templates/.claude/skills/session/SKILL.md +20 -31
- package/templates/.claude/skills/test/SKILL.md.template +1 -7
- package/templates/.devcontainer/devcontainer.json +81 -0
- package/templates/.devcontainer/install-agent-clis.sh +42 -0
- package/templates/.devcontainer/post-create.sh +67 -0
- package/templates/.githooks/pre-commit +55 -0
- package/templates/.githooks/pre-push +63 -0
- package/templates/.github/workflows/dxkit-baseline-refresh.yml +78 -0
- package/templates/.github/workflows/dxkit-guardrails.yml +98 -0
- package/templates/CLAUDE.md.template +62 -196
- package/dist/project-yaml.d.ts +0 -13
- package/dist/project-yaml.d.ts.map +0 -1
- package/dist/project-yaml.js +0 -188
- package/dist/project-yaml.js.map +0 -1
- package/templates/.ai/README.md +0 -117
- package/templates/.ai/prompts/execution-prompt.md +0 -9
- package/templates/.ai/prompts/planning-prompt.md +0 -18
- package/templates/.ai/prompts/session-end-template.md +0 -182
- package/templates/.ai/prompts/session-end.md +0 -132
- package/templates/.ai/prompts/session-start.md +0 -109
- package/templates/.ai/prompts/step-by-step.md +0 -113
- package/templates/.ai/sessions/.gitkeep +0 -0
- package/templates/.claude/commands/setup-pr-review.md +0 -72
- package/templates/.devcontainer/Dockerfile.dev.template +0 -89
- package/templates/.devcontainer/devcontainer.json.template +0 -184
- package/templates/.devcontainer/docker-compose.yml.template +0 -105
- package/templates/.devcontainer/init-scripts/01-init.sql.template +0 -12
- package/templates/.devcontainer/post-create.sh.template +0 -298
- package/templates/.github/workflows/ci.yml.template +0 -399
- package/templates/.github/workflows/quality.yml.template +0 -376
- package/templates/.pre-commit-config.yaml.template +0 -106
- package/templates/.project/config/edit_config.py +0 -275
- package/templates/.project/config/project_config.py +0 -894
- package/templates/.project/scripts/codegen/generate-all.sh +0 -20
- package/templates/.project/scripts/codegen/validate-all.sh +0 -17
- package/templates/.project/scripts/docs/generate-all.sh +0 -30
- package/templates/.project/scripts/docs/serve.sh +0 -20
- package/templates/.project/scripts/quality/fix-all.sh +0 -138
- package/templates/.project/scripts/quality/lint-go.sh +0 -34
- package/templates/.project/scripts/quality/lint-python.sh +0 -54
- package/templates/.project/scripts/quality/run-all.sh +0 -497
- package/templates/.project/scripts/session/commit.sh +0 -70
- package/templates/.project/scripts/session/create-pr.sh +0 -165
- package/templates/.project/scripts/session/end.sh +0 -207
- package/templates/.project/scripts/session/start.sh +0 -233
- package/templates/.project/scripts/setup/doctor.sh +0 -404
- package/templates/.project/scripts/setup/interactive-setup.sh +0 -585
- package/templates/.project/scripts/sync/sync-template.sh +0 -328
- package/templates/.project/scripts/test/run-all.sh +0 -179
- package/templates/.project/scripts/test/run-quick.sh +0 -25
- package/templates/Makefile +0 -514
- package/templates/config/versions.yaml +0 -57
- package/templates/configs/go/.golangci.yml.template +0 -172
- package/templates/configs/go/go.mod.template +0 -15
- package/templates/configs/java/README.md +0 -6
- package/templates/configs/kotlin/README.md +0 -6
- package/templates/configs/node/package.json.template +0 -67
- package/templates/configs/node/tsconfig.json.template +0 -53
- package/templates/configs/python/pyproject.toml.template +0 -92
- package/templates/configs/python/pytest.ini.template +0 -64
- package/templates/configs/python/ruff.toml.template +0 -79
- package/templates/configs/ruby/README.md +0 -6
- package/templates/configs/rust/Cargo.toml.template +0 -51
- package/templates/configs/shared/.editorconfig +0 -67
- package/templates/scripts/validate-templates.sh +0 -449
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
# Generated from template - do not edit directly
|
|
2
|
-
# Regenerate with: ./scripts/bootstrap/bootstrap.sh
|
|
3
|
-
|
|
4
|
-
FROM mcr.microsoft.com/vscode/devcontainers/base:ubuntu-22.04
|
|
5
|
-
|
|
6
|
-
# Install system dependencies
|
|
7
|
-
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
|
8
|
-
&& apt-get -y install --no-install-recommends \
|
|
9
|
-
build-essential \
|
|
10
|
-
curl \
|
|
11
|
-
git \
|
|
12
|
-
wget \
|
|
13
|
-
unzip \
|
|
14
|
-
ca-certificates \
|
|
15
|
-
jq \
|
|
16
|
-
{{#IF_POSTGRES}}
|
|
17
|
-
postgresql-client \
|
|
18
|
-
{{/IF_POSTGRES}}
|
|
19
|
-
{{#IF_REDIS}}
|
|
20
|
-
redis-tools \
|
|
21
|
-
{{/IF_REDIS}}
|
|
22
|
-
&& apt-get autoremove -y && apt-get clean -y
|
|
23
|
-
|
|
24
|
-
{{#IF_GO}}
|
|
25
|
-
# ============================================================================
|
|
26
|
-
# Go {{GO_VERSION}}
|
|
27
|
-
# ============================================================================
|
|
28
|
-
RUN wget -q https://golang.org/dl/go{{GO_VERSION}}.linux-amd64.tar.gz \
|
|
29
|
-
&& tar -C /usr/local -xzf go{{GO_VERSION}}.linux-amd64.tar.gz \
|
|
30
|
-
&& rm go{{GO_VERSION}}.linux-amd64.tar.gz
|
|
31
|
-
|
|
32
|
-
ENV PATH="/usr/local/go/bin:${PATH}"
|
|
33
|
-
ENV GOPATH="/go"
|
|
34
|
-
ENV GOBIN="/go/bin"
|
|
35
|
-
ENV PATH="${PATH}:${GOBIN}"
|
|
36
|
-
|
|
37
|
-
# Create Go workspace
|
|
38
|
-
RUN mkdir -p /go/src /go/bin /go/pkg && chmod -R 777 /go
|
|
39
|
-
|
|
40
|
-
{{/IF_GO}}
|
|
41
|
-
{{#IF_PYTHON}}
|
|
42
|
-
# ============================================================================
|
|
43
|
-
# Python {{PYTHON_VERSION}}
|
|
44
|
-
# ============================================================================
|
|
45
|
-
# Note: We use ensurepip instead of apt's python3-pip because:
|
|
46
|
-
# 1. It installs pip for the specific Python version, not the system Python
|
|
47
|
-
# 2. Python 3.12+ removed distutils which breaks the system pip package
|
|
48
|
-
RUN apt-get update && apt-get install -y software-properties-common \
|
|
49
|
-
&& add-apt-repository ppa:deadsnakes/ppa -y \
|
|
50
|
-
&& apt-get update \
|
|
51
|
-
&& apt-get install -y \
|
|
52
|
-
python{{PYTHON_VERSION}} \
|
|
53
|
-
python{{PYTHON_VERSION}}-dev \
|
|
54
|
-
python{{PYTHON_VERSION}}-venv \
|
|
55
|
-
&& update-alternatives --install /usr/bin/python3 python3 /usr/bin/python{{PYTHON_VERSION}} 1 \
|
|
56
|
-
&& update-alternatives --install /usr/bin/python python /usr/bin/python{{PYTHON_VERSION}} 1 \
|
|
57
|
-
&& python{{PYTHON_VERSION}} -m ensurepip --upgrade \
|
|
58
|
-
&& python{{PYTHON_VERSION}} -m pip install --upgrade pip
|
|
59
|
-
|
|
60
|
-
{{/IF_PYTHON}}
|
|
61
|
-
{{#IF_NODE}}
|
|
62
|
-
# ============================================================================
|
|
63
|
-
# Node.js {{NODE_VERSION}}
|
|
64
|
-
# ============================================================================
|
|
65
|
-
RUN curl -fsSL https://deb.nodesource.com/setup_{{NODE_VERSION}}.x | bash - \
|
|
66
|
-
&& apt-get install -y nodejs
|
|
67
|
-
|
|
68
|
-
{{/IF_NODE}}
|
|
69
|
-
{{#IF_RUST}}
|
|
70
|
-
# ============================================================================
|
|
71
|
-
# Rust {{RUST_VERSION}}
|
|
72
|
-
# ============================================================================
|
|
73
|
-
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain {{RUST_VERSION}}
|
|
74
|
-
ENV PATH="/root/.cargo/bin:${PATH}"
|
|
75
|
-
|
|
76
|
-
{{/IF_RUST}}
|
|
77
|
-
# ============================================================================
|
|
78
|
-
# Utility Tools
|
|
79
|
-
# ============================================================================
|
|
80
|
-
|
|
81
|
-
# Install yq for YAML processing
|
|
82
|
-
RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 \
|
|
83
|
-
&& chmod +x /usr/local/bin/yq
|
|
84
|
-
|
|
85
|
-
# Set the default user
|
|
86
|
-
USER vscode
|
|
87
|
-
|
|
88
|
-
# Set working directory
|
|
89
|
-
WORKDIR /workspaces/{{PROJECT_NAME}}
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "{{PROJECT_NAME}} Development Environment",
|
|
3
|
-
"dockerComposeFile": "docker-compose.yml",
|
|
4
|
-
"service": "dev-environment",
|
|
5
|
-
"workspaceFolder": "/workspaces/{{PROJECT_NAME}}",
|
|
6
|
-
"shutdownAction": "stopCompose",
|
|
7
|
-
|
|
8
|
-
"features": {
|
|
9
|
-
"ghcr.io/devcontainers/features/sshd:1": {
|
|
10
|
-
"version": "latest"
|
|
11
|
-
},
|
|
12
|
-
"ghcr.io/devcontainers/features/git:1": {
|
|
13
|
-
"version": "latest",
|
|
14
|
-
"ppa": false
|
|
15
|
-
}{{#IF_DOCKER}},
|
|
16
|
-
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
|
17
|
-
"version": "latest",
|
|
18
|
-
"moby": true,
|
|
19
|
-
"dockerDashComposeVersion": "v2"
|
|
20
|
-
}{{/IF_DOCKER}}
|
|
21
|
-
},
|
|
22
|
-
|
|
23
|
-
"postCreateCommand": "bash .devcontainer/post-create.sh",
|
|
24
|
-
|
|
25
|
-
"customizations": {
|
|
26
|
-
"vscode": {
|
|
27
|
-
"extensions": [
|
|
28
|
-
"ms-azuretools.vscode-docker",
|
|
29
|
-
"ms-vscode.makefile-tools",
|
|
30
|
-
"EditorConfig.EditorConfig",
|
|
31
|
-
"eamodio.gitlens",
|
|
32
|
-
"usernamehw.errorlens",
|
|
33
|
-
"gruntfuggly.todo-tree",
|
|
34
|
-
{{#IF_CLAUDE_CODE}}
|
|
35
|
-
"anthropic.claude-code",
|
|
36
|
-
{{/IF_CLAUDE_CODE}}
|
|
37
|
-
{{#IF_PYTHON}}
|
|
38
|
-
"ms-python.python",
|
|
39
|
-
"ms-python.vscode-pylance",
|
|
40
|
-
"charliermarsh.ruff",
|
|
41
|
-
"ms-python.black-formatter",
|
|
42
|
-
{{/IF_PYTHON}}
|
|
43
|
-
{{#IF_GO}}
|
|
44
|
-
"golang.go",
|
|
45
|
-
{{/IF_GO}}
|
|
46
|
-
{{#IF_NODE}}
|
|
47
|
-
"dbaeumer.vscode-eslint",
|
|
48
|
-
"esbenp.prettier-vscode",
|
|
49
|
-
{{/IF_NODE}}
|
|
50
|
-
{{#IF_NEXTJS}}
|
|
51
|
-
"bradlc.vscode-tailwindcss",
|
|
52
|
-
"csstools.postcss",
|
|
53
|
-
{{/IF_NEXTJS}}
|
|
54
|
-
{{#IF_RUST}}
|
|
55
|
-
"rust-lang.rust-analyzer",
|
|
56
|
-
{{/IF_RUST}}
|
|
57
|
-
{{#IF_POSTGRES}}
|
|
58
|
-
"mtxr.sqltools",
|
|
59
|
-
"mtxr.sqltools-driver-pg",
|
|
60
|
-
{{/IF_POSTGRES}}
|
|
61
|
-
{{#IF_REDIS}}
|
|
62
|
-
"cweijan.vscode-redis-client",
|
|
63
|
-
{{/IF_REDIS}}
|
|
64
|
-
"redhat.vscode-yaml",
|
|
65
|
-
"yzhang.markdown-all-in-one"
|
|
66
|
-
],
|
|
67
|
-
"settings": {
|
|
68
|
-
"terminal.integrated.defaultProfile.linux": "bash",
|
|
69
|
-
"terminal.integrated.scrollback": 10000,
|
|
70
|
-
"editor.formatOnSave": true,
|
|
71
|
-
"editor.rulers": [88, 120],
|
|
72
|
-
"editor.tabSize": 4,
|
|
73
|
-
"editor.insertSpaces": true,
|
|
74
|
-
"files.trimTrailingWhitespace": true,
|
|
75
|
-
"files.insertFinalNewline": true,
|
|
76
|
-
{{#IF_PYTHON}}
|
|
77
|
-
"python.defaultInterpreterPath": "/usr/bin/python{{PYTHON_VERSION}}",
|
|
78
|
-
"python.formatting.provider": "none",
|
|
79
|
-
"[python]": {
|
|
80
|
-
"editor.defaultFormatter": "charliermarsh.ruff",
|
|
81
|
-
"editor.formatOnSave": true,
|
|
82
|
-
"editor.codeActionsOnSave": {
|
|
83
|
-
"source.fixAll.ruff": "explicit",
|
|
84
|
-
"source.organizeImports.ruff": "explicit"
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
{{/IF_PYTHON}}
|
|
88
|
-
{{#IF_GO}}
|
|
89
|
-
"go.gopath": "/go",
|
|
90
|
-
"go.goroot": "/usr/local/go",
|
|
91
|
-
"go.formatTool": "goimports",
|
|
92
|
-
"go.lintTool": "golangci-lint",
|
|
93
|
-
"go.lintOnSave": "package",
|
|
94
|
-
"[go]": {
|
|
95
|
-
"editor.formatOnSave": true,
|
|
96
|
-
"editor.codeActionsOnSave": {
|
|
97
|
-
"source.organizeImports": "explicit"
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
{{/IF_GO}}
|
|
101
|
-
{{#IF_NODE}}
|
|
102
|
-
"[javascript]": {
|
|
103
|
-
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
104
|
-
},
|
|
105
|
-
"[typescript]": {
|
|
106
|
-
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
107
|
-
},
|
|
108
|
-
"[json]": {
|
|
109
|
-
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
110
|
-
},
|
|
111
|
-
{{/IF_NODE}}
|
|
112
|
-
{{#IF_NEXTJS}}
|
|
113
|
-
"[typescriptreact]": {
|
|
114
|
-
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
115
|
-
},
|
|
116
|
-
"[css]": {
|
|
117
|
-
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
118
|
-
},
|
|
119
|
-
"tailwindCSS.includeLanguages": {
|
|
120
|
-
"typescript": "javascript",
|
|
121
|
-
"typescriptreact": "javascript"
|
|
122
|
-
},
|
|
123
|
-
{{/IF_NEXTJS}}
|
|
124
|
-
{{#IF_RUST}}
|
|
125
|
-
"[rust]": {
|
|
126
|
-
"editor.formatOnSave": true,
|
|
127
|
-
"editor.defaultFormatter": "rust-lang.rust-analyzer"
|
|
128
|
-
},
|
|
129
|
-
"rust-analyzer.checkOnSave.command": "clippy",
|
|
130
|
-
{{/IF_RUST}}
|
|
131
|
-
{{#IF_POSTGRES}}
|
|
132
|
-
"sqltools.connections": [
|
|
133
|
-
{
|
|
134
|
-
"name": "{{PROJECT_NAME}} Dev DB",
|
|
135
|
-
"driver": "PostgreSQL",
|
|
136
|
-
"server": "db",
|
|
137
|
-
"port": 5432,
|
|
138
|
-
"database": "{{DB_NAME}}",
|
|
139
|
-
"username": "{{DB_USER}}",
|
|
140
|
-
"password": "{{DB_PASSWORD}}"
|
|
141
|
-
}
|
|
142
|
-
],
|
|
143
|
-
{{/IF_POSTGRES}}
|
|
144
|
-
"files.associations": {
|
|
145
|
-
"*.env*": "dotenv",
|
|
146
|
-
"Makefile*": "makefile"
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
|
|
152
|
-
"forwardPorts": [
|
|
153
|
-
8080,
|
|
154
|
-
3000{{#IF_POSTGRES}},
|
|
155
|
-
5432{{/IF_POSTGRES}}{{#IF_REDIS}},
|
|
156
|
-
6379{{/IF_REDIS}}
|
|
157
|
-
],
|
|
158
|
-
|
|
159
|
-
"portsAttributes": {
|
|
160
|
-
"8080": {
|
|
161
|
-
"label": "API Server",
|
|
162
|
-
"onAutoForward": "notify"
|
|
163
|
-
},
|
|
164
|
-
"3000": {
|
|
165
|
-
"label": "Frontend Dev Server",
|
|
166
|
-
"onAutoForward": "notify"
|
|
167
|
-
}{{#IF_POSTGRES}},
|
|
168
|
-
"5432": {
|
|
169
|
-
"label": "PostgreSQL",
|
|
170
|
-
"onAutoForward": "silent"
|
|
171
|
-
}{{/IF_POSTGRES}}{{#IF_REDIS}},
|
|
172
|
-
"6379": {
|
|
173
|
-
"label": "Redis",
|
|
174
|
-
"onAutoForward": "silent"
|
|
175
|
-
}{{/IF_REDIS}}
|
|
176
|
-
},
|
|
177
|
-
|
|
178
|
-
"containerEnv": {
|
|
179
|
-
"PROJECT_NAME": "{{PROJECT_NAME}}",
|
|
180
|
-
"ENVIRONMENT": "development"
|
|
181
|
-
},
|
|
182
|
-
|
|
183
|
-
"remoteUser": "vscode"
|
|
184
|
-
}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
# Generated from template - do not edit directly
|
|
2
|
-
# Regenerate with: ./scripts/bootstrap/bootstrap.sh
|
|
3
|
-
|
|
4
|
-
version: '3.8'
|
|
5
|
-
|
|
6
|
-
services:
|
|
7
|
-
# ==========================================================================
|
|
8
|
-
# Development Container
|
|
9
|
-
# ==========================================================================
|
|
10
|
-
dev-environment:
|
|
11
|
-
build:
|
|
12
|
-
context: .
|
|
13
|
-
dockerfile: Dockerfile.dev
|
|
14
|
-
volumes:
|
|
15
|
-
- ../..:/workspaces:cached
|
|
16
|
-
working_dir: /workspaces/{{PROJECT_NAME}}
|
|
17
|
-
command: sleep infinity
|
|
18
|
-
{{#IF_HAS_SERVICES}}
|
|
19
|
-
depends_on:
|
|
20
|
-
{{#IF_POSTGRES}}
|
|
21
|
-
db:
|
|
22
|
-
condition: service_healthy
|
|
23
|
-
{{/IF_POSTGRES}}
|
|
24
|
-
{{#IF_REDIS}}
|
|
25
|
-
redis:
|
|
26
|
-
condition: service_healthy
|
|
27
|
-
{{/IF_REDIS}}
|
|
28
|
-
{{/IF_HAS_SERVICES}}
|
|
29
|
-
ports:
|
|
30
|
-
- "8080:8080"
|
|
31
|
-
- "3000:3000"
|
|
32
|
-
environment:
|
|
33
|
-
- TERM=xterm-256color
|
|
34
|
-
{{#IF_POSTGRES}}
|
|
35
|
-
- DATABASE_URL=postgresql://{{DB_USER}}:{{DB_PASSWORD}}@db:5432/{{DB_NAME}}
|
|
36
|
-
- DB_HOST=db
|
|
37
|
-
- DB_PORT=5432
|
|
38
|
-
- DB_NAME={{DB_NAME}}
|
|
39
|
-
- DB_USER={{DB_USER}}
|
|
40
|
-
- DB_PASSWORD={{DB_PASSWORD}}
|
|
41
|
-
{{/IF_POSTGRES}}
|
|
42
|
-
{{#IF_REDIS}}
|
|
43
|
-
- REDIS_URL=redis://redis:6379
|
|
44
|
-
- REDIS_HOST=redis
|
|
45
|
-
- REDIS_PORT=6379
|
|
46
|
-
{{/IF_REDIS}}
|
|
47
|
-
|
|
48
|
-
{{#IF_POSTGRES}}
|
|
49
|
-
# ==========================================================================
|
|
50
|
-
# PostgreSQL Database
|
|
51
|
-
# ==========================================================================
|
|
52
|
-
db:
|
|
53
|
-
image: postgres:{{POSTGRES_VERSION}}-alpine
|
|
54
|
-
restart: unless-stopped
|
|
55
|
-
volumes:
|
|
56
|
-
- postgres-data:/var/lib/postgresql/data
|
|
57
|
-
- ./init-scripts:/docker-entrypoint-initdb.d:ro
|
|
58
|
-
environment:
|
|
59
|
-
POSTGRES_USER: {{DB_USER}}
|
|
60
|
-
POSTGRES_PASSWORD: {{DB_PASSWORD}}
|
|
61
|
-
POSTGRES_DB: {{DB_NAME}}
|
|
62
|
-
ports:
|
|
63
|
-
- "5432:5432"
|
|
64
|
-
healthcheck:
|
|
65
|
-
test: ["CMD-SHELL", "pg_isready -U {{DB_USER}} -d {{DB_NAME}}"]
|
|
66
|
-
interval: 10s
|
|
67
|
-
timeout: 5s
|
|
68
|
-
retries: 5
|
|
69
|
-
start_period: 10s
|
|
70
|
-
|
|
71
|
-
{{/IF_POSTGRES}}
|
|
72
|
-
{{#IF_REDIS}}
|
|
73
|
-
# ==========================================================================
|
|
74
|
-
# Redis Cache
|
|
75
|
-
# ==========================================================================
|
|
76
|
-
redis:
|
|
77
|
-
image: redis:{{REDIS_VERSION}}-alpine
|
|
78
|
-
restart: unless-stopped
|
|
79
|
-
volumes:
|
|
80
|
-
- redis-data:/data
|
|
81
|
-
ports:
|
|
82
|
-
- "6379:6379"
|
|
83
|
-
command: redis-server --appendonly yes
|
|
84
|
-
healthcheck:
|
|
85
|
-
test: ["CMD", "redis-cli", "ping"]
|
|
86
|
-
interval: 10s
|
|
87
|
-
timeout: 5s
|
|
88
|
-
retries: 3
|
|
89
|
-
start_period: 5s
|
|
90
|
-
|
|
91
|
-
{{/IF_REDIS}}
|
|
92
|
-
{{#IF_HAS_SERVICES}}
|
|
93
|
-
# ============================================================================
|
|
94
|
-
# Volumes
|
|
95
|
-
# ============================================================================
|
|
96
|
-
volumes:
|
|
97
|
-
{{#IF_POSTGRES}}
|
|
98
|
-
postgres-data:
|
|
99
|
-
name: {{PROJECT_NAME_SNAKE}}_postgres_data
|
|
100
|
-
{{/IF_POSTGRES}}
|
|
101
|
-
{{#IF_REDIS}}
|
|
102
|
-
redis-data:
|
|
103
|
-
name: {{PROJECT_NAME_SNAKE}}_redis_data
|
|
104
|
-
{{/IF_REDIS}}
|
|
105
|
-
{{/IF_HAS_SERVICES}}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
-- PostgreSQL initialization script
|
|
2
|
-
-- This script runs when the database container is first created
|
|
3
|
-
|
|
4
|
-
-- Create extensions
|
|
5
|
-
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
|
6
|
-
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
|
|
7
|
-
|
|
8
|
-
-- Log completion
|
|
9
|
-
DO $$
|
|
10
|
-
BEGIN
|
|
11
|
-
RAISE NOTICE 'Database initialization complete for {{DB_NAME}}';
|
|
12
|
-
END $$;
|
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Generated from template - do not edit directly
|
|
3
|
-
# Regenerate with: ./scripts/bootstrap/bootstrap.sh
|
|
4
|
-
|
|
5
|
-
set -e
|
|
6
|
-
|
|
7
|
-
# Colors for output
|
|
8
|
-
CYAN='\033[36m'
|
|
9
|
-
GREEN='\033[32m'
|
|
10
|
-
YELLOW='\033[33m'
|
|
11
|
-
RED='\033[31m'
|
|
12
|
-
RESET='\033[0m'
|
|
13
|
-
|
|
14
|
-
echo ""
|
|
15
|
-
echo -e "${CYAN}╔════════════════════════════════════════════════════════════╗${RESET}"
|
|
16
|
-
echo -e "${CYAN}║ ║${RESET}"
|
|
17
|
-
echo -e "${CYAN}║ 🚀 Setting up {{PROJECT_NAME}} development environment${RESET}"
|
|
18
|
-
echo -e "${CYAN}║ ║${RESET}"
|
|
19
|
-
echo -e "${CYAN}╚════════════════════════════════════════════════════════════╝${RESET}"
|
|
20
|
-
echo ""
|
|
21
|
-
|
|
22
|
-
cd /workspaces/{{PROJECT_NAME}} || exit 1
|
|
23
|
-
|
|
24
|
-
# ============================================================================
|
|
25
|
-
# Wait for Services
|
|
26
|
-
# ============================================================================
|
|
27
|
-
|
|
28
|
-
{{#IF_POSTGRES}}
|
|
29
|
-
echo -e "${CYAN}⏳ Waiting for PostgreSQL...${RESET}"
|
|
30
|
-
for i in {1..30}; do
|
|
31
|
-
if pg_isready -h db -p 5432 -U {{DB_USER}} > /dev/null 2>&1; then
|
|
32
|
-
echo -e "${GREEN}✅ PostgreSQL is ready${RESET}"
|
|
33
|
-
break
|
|
34
|
-
fi
|
|
35
|
-
if [ $i -eq 30 ]; then
|
|
36
|
-
echo -e "${YELLOW}⚠️ PostgreSQL not ready after 30 seconds${RESET}"
|
|
37
|
-
fi
|
|
38
|
-
sleep 1
|
|
39
|
-
done
|
|
40
|
-
|
|
41
|
-
{{/IF_POSTGRES}}
|
|
42
|
-
{{#IF_REDIS}}
|
|
43
|
-
echo -e "${CYAN}⏳ Waiting for Redis...${RESET}"
|
|
44
|
-
for i in {1..30}; do
|
|
45
|
-
if redis-cli -h redis -p 6379 ping > /dev/null 2>&1; then
|
|
46
|
-
echo -e "${GREEN}✅ Redis is ready${RESET}"
|
|
47
|
-
break
|
|
48
|
-
fi
|
|
49
|
-
if [ $i -eq 30 ]; then
|
|
50
|
-
echo -e "${YELLOW}⚠️ Redis not ready after 30 seconds${RESET}"
|
|
51
|
-
fi
|
|
52
|
-
sleep 1
|
|
53
|
-
done
|
|
54
|
-
|
|
55
|
-
{{/IF_REDIS}}
|
|
56
|
-
# ============================================================================
|
|
57
|
-
# Language-Specific Setup
|
|
58
|
-
# ============================================================================
|
|
59
|
-
|
|
60
|
-
{{#IF_GO}}
|
|
61
|
-
echo -e "${CYAN}🔧 Installing Go development tools...${RESET}"
|
|
62
|
-
go install github.com/air-verse/air@latest 2>/dev/null || true
|
|
63
|
-
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest 2>/dev/null || true
|
|
64
|
-
go install golang.org/x/tools/cmd/goimports@latest 2>/dev/null || true
|
|
65
|
-
go install github.com/go-delve/delve/cmd/dlv@latest 2>/dev/null || true
|
|
66
|
-
echo -e "${GREEN}✅ Go tools installed${RESET}"
|
|
67
|
-
|
|
68
|
-
{{/IF_GO}}
|
|
69
|
-
{{#IF_PYTHON}}
|
|
70
|
-
echo -e "${CYAN}🐍 Setting up Python environment...${RESET}"
|
|
71
|
-
pip install --upgrade pip --quiet
|
|
72
|
-
|
|
73
|
-
# Install common dev tools (versions synced with .template/config/versions.yaml)
|
|
74
|
-
pip install --quiet \
|
|
75
|
-
"ruff>=0.8.0" \
|
|
76
|
-
"mypy>=1.8.0" \
|
|
77
|
-
"pytest>=8.0.0" \
|
|
78
|
-
pytest-cov \
|
|
79
|
-
pytest-asyncio \
|
|
80
|
-
httpx \
|
|
81
|
-
pyyaml
|
|
82
|
-
|
|
83
|
-
# Install project dependencies if pyproject.toml exists
|
|
84
|
-
if [ -f "pyproject.toml" ]; then
|
|
85
|
-
echo -e "${CYAN} Installing project dependencies...${RESET}"
|
|
86
|
-
pip install -e ".[dev]" --quiet 2>/dev/null || pip install -e . --quiet 2>/dev/null || true
|
|
87
|
-
fi
|
|
88
|
-
|
|
89
|
-
# Install requirements.txt if it exists
|
|
90
|
-
if [ -f "requirements.txt" ]; then
|
|
91
|
-
echo -e "${CYAN} Installing requirements.txt...${RESET}"
|
|
92
|
-
pip install -r requirements.txt --quiet
|
|
93
|
-
fi
|
|
94
|
-
|
|
95
|
-
if [ -f "requirements-dev.txt" ]; then
|
|
96
|
-
echo -e "${CYAN} Installing requirements-dev.txt...${RESET}"
|
|
97
|
-
pip install -r requirements-dev.txt --quiet
|
|
98
|
-
fi
|
|
99
|
-
|
|
100
|
-
echo -e "${GREEN}✅ Python environment ready${RESET}"
|
|
101
|
-
|
|
102
|
-
{{/IF_PYTHON}}
|
|
103
|
-
{{#IF_NODE}}
|
|
104
|
-
echo -e "${CYAN}📦 Setting up Node.js environment...${RESET}"
|
|
105
|
-
|
|
106
|
-
# Install global tools
|
|
107
|
-
npm install -g npm@latest --silent 2>/dev/null || true
|
|
108
|
-
|
|
109
|
-
# Install project dependencies if package.json exists
|
|
110
|
-
if [ -f "package.json" ]; then
|
|
111
|
-
echo -e "${CYAN} Installing npm dependencies...${RESET}"
|
|
112
|
-
npm install --silent 2>/dev/null || true
|
|
113
|
-
fi
|
|
114
|
-
|
|
115
|
-
echo -e "${GREEN}✅ Node.js environment ready${RESET}"
|
|
116
|
-
|
|
117
|
-
{{/IF_NODE}}
|
|
118
|
-
{{#IF_NEXTJS}}
|
|
119
|
-
echo -e "${CYAN}⚡ Setting up Next.js frontend...${RESET}"
|
|
120
|
-
|
|
121
|
-
# Check if frontend directory exists
|
|
122
|
-
if [ -d "frontend" ] && [ -f "frontend/package.json" ]; then
|
|
123
|
-
echo -e "${CYAN} Installing frontend dependencies...${RESET}"
|
|
124
|
-
(cd frontend && npm install --silent 2>/dev/null) || true
|
|
125
|
-
echo -e "${GREEN}✅ Next.js frontend ready${RESET}"
|
|
126
|
-
echo -e " ${CYAN}Run: cd frontend && npm run dev${RESET}"
|
|
127
|
-
else
|
|
128
|
-
# Scaffold Next.js app if not created during bootstrap (npx wasn't available)
|
|
129
|
-
echo -e "${CYAN} Scaffolding Next.js app...${RESET}"
|
|
130
|
-
if npx --yes create-next-app@latest frontend \
|
|
131
|
-
--yes \
|
|
132
|
-
--typescript \
|
|
133
|
-
--tailwind \
|
|
134
|
-
--eslint \
|
|
135
|
-
--app \
|
|
136
|
-
--src-dir \
|
|
137
|
-
--import-alias "@/*" \
|
|
138
|
-
--use-npm 2>&1; then
|
|
139
|
-
echo -e "${GREEN}✅ Next.js frontend created${RESET}"
|
|
140
|
-
echo -e " ${CYAN}Run: cd frontend && npm run dev${RESET}"
|
|
141
|
-
else
|
|
142
|
-
echo -e "${RED}❌ Failed to create Next.js app${RESET}"
|
|
143
|
-
echo -e " ${YELLOW}Try manually: npx create-next-app@latest frontend${RESET}"
|
|
144
|
-
fi
|
|
145
|
-
fi
|
|
146
|
-
|
|
147
|
-
{{/IF_NEXTJS}}
|
|
148
|
-
{{#IF_RUST}}
|
|
149
|
-
echo -e "${CYAN}🦀 Setting up Rust environment...${RESET}"
|
|
150
|
-
|
|
151
|
-
# Update rust and install common tools
|
|
152
|
-
rustup update stable --quiet 2>/dev/null || true
|
|
153
|
-
rustup component add rustfmt clippy --quiet 2>/dev/null || true
|
|
154
|
-
cargo install cargo-watch --quiet 2>/dev/null || true
|
|
155
|
-
|
|
156
|
-
echo -e "${GREEN}✅ Rust environment ready${RESET}"
|
|
157
|
-
|
|
158
|
-
{{/IF_RUST}}
|
|
159
|
-
# ============================================================================
|
|
160
|
-
# Additional Tools
|
|
161
|
-
# ============================================================================
|
|
162
|
-
|
|
163
|
-
{{#IF_GH_CLI}}
|
|
164
|
-
echo -e "${CYAN}🐙 Installing GitHub CLI...${RESET}"
|
|
165
|
-
if ! command -v gh &> /dev/null; then
|
|
166
|
-
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg 2>/dev/null \
|
|
167
|
-
&& sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
|
|
168
|
-
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
|
|
169
|
-
&& sudo apt update -qq \
|
|
170
|
-
&& sudo apt install gh -y -qq
|
|
171
|
-
echo -e "${GREEN}✅ GitHub CLI installed${RESET}"
|
|
172
|
-
else
|
|
173
|
-
echo -e "${GREEN}✅ GitHub CLI already installed${RESET}"
|
|
174
|
-
fi
|
|
175
|
-
|
|
176
|
-
{{/IF_GH_CLI}}
|
|
177
|
-
{{#IF_PULUMI}}
|
|
178
|
-
echo -e "${CYAN}☁️ Installing Pulumi...${RESET}"
|
|
179
|
-
if ! command -v pulumi &> /dev/null; then
|
|
180
|
-
curl -fsSL https://get.pulumi.com | sh -s -- --no-edit-path 2>/dev/null
|
|
181
|
-
echo 'export PATH="$PATH:$HOME/.pulumi/bin"' >> ~/.bashrc
|
|
182
|
-
echo -e "${GREEN}✅ Pulumi installed${RESET}"
|
|
183
|
-
else
|
|
184
|
-
echo -e "${GREEN}✅ Pulumi already installed${RESET}"
|
|
185
|
-
fi
|
|
186
|
-
|
|
187
|
-
{{/IF_PULUMI}}
|
|
188
|
-
{{#IF_GCLOUD}}
|
|
189
|
-
echo -e "${CYAN}☁️ Installing Google Cloud SDK...${RESET}"
|
|
190
|
-
if ! command -v gcloud &> /dev/null; then
|
|
191
|
-
curl -fsSL https://sdk.cloud.google.com | bash -s -- --disable-prompts --install-dir=$HOME 2>/dev/null
|
|
192
|
-
echo 'source ~/google-cloud-sdk/path.bash.inc' >> ~/.bashrc
|
|
193
|
-
echo 'source ~/google-cloud-sdk/completion.bash.inc' >> ~/.bashrc
|
|
194
|
-
export PATH="$PATH:$HOME/google-cloud-sdk/bin"
|
|
195
|
-
echo -e "${GREEN}✅ Google Cloud SDK installed${RESET}"
|
|
196
|
-
else
|
|
197
|
-
echo -e "${GREEN}✅ Google Cloud SDK already installed${RESET}"
|
|
198
|
-
fi
|
|
199
|
-
|
|
200
|
-
{{/IF_GCLOUD}}
|
|
201
|
-
{{#IF_CLAUDE_CODE}}
|
|
202
|
-
echo -e "${CYAN}🤖 Installing Claude Code CLI...${RESET}"
|
|
203
|
-
if ! command -v claude &> /dev/null; then
|
|
204
|
-
curl -fsSL https://claude.ai/install.sh | bash 2>/dev/null || true
|
|
205
|
-
echo -e "${GREEN}✅ Claude Code CLI installed${RESET}"
|
|
206
|
-
else
|
|
207
|
-
echo -e "${GREEN}✅ Claude Code CLI already installed${RESET}"
|
|
208
|
-
fi
|
|
209
|
-
|
|
210
|
-
{{/IF_CLAUDE_CODE}}
|
|
211
|
-
{{#IF_INFISICAL}}
|
|
212
|
-
echo -e "${CYAN}🔐 Installing Infisical CLI...${RESET}"
|
|
213
|
-
if ! command -v infisical &> /dev/null; then
|
|
214
|
-
curl -1sLf 'https://artifacts-cli.infisical.com/setup.deb.sh' | sudo -E bash 2>/dev/null
|
|
215
|
-
sudo apt-get update -qq && sudo apt-get install -y -qq infisical
|
|
216
|
-
echo -e "${GREEN}✅ Infisical CLI installed${RESET}"
|
|
217
|
-
else
|
|
218
|
-
echo -e "${GREEN}✅ Infisical CLI already installed${RESET}"
|
|
219
|
-
fi
|
|
220
|
-
|
|
221
|
-
{{/IF_INFISICAL}}
|
|
222
|
-
{{#IF_PRECOMMIT}}
|
|
223
|
-
echo -e "${CYAN}🪝 Setting up pre-commit hooks...${RESET}"
|
|
224
|
-
if command -v pre-commit &> /dev/null; then
|
|
225
|
-
if [ -f ".pre-commit-config.yaml" ]; then
|
|
226
|
-
pre-commit install --install-hooks 2>/dev/null || true
|
|
227
|
-
echo -e "${GREEN}✅ Pre-commit hooks installed${RESET}"
|
|
228
|
-
fi
|
|
229
|
-
else
|
|
230
|
-
pip install pre-commit --quiet
|
|
231
|
-
if [ -f ".pre-commit-config.yaml" ]; then
|
|
232
|
-
pre-commit install --install-hooks 2>/dev/null || true
|
|
233
|
-
echo -e "${GREEN}✅ Pre-commit hooks installed${RESET}"
|
|
234
|
-
fi
|
|
235
|
-
fi
|
|
236
|
-
|
|
237
|
-
{{/IF_PRECOMMIT}}
|
|
238
|
-
# ============================================================================
|
|
239
|
-
# Git Configuration
|
|
240
|
-
# ============================================================================
|
|
241
|
-
|
|
242
|
-
echo -e "${CYAN}🔧 Configuring Git...${RESET}"
|
|
243
|
-
|
|
244
|
-
git config --global init.defaultBranch main
|
|
245
|
-
git config --global pull.rebase false
|
|
246
|
-
git config --global core.autocrlf input
|
|
247
|
-
git config --global --add safe.directory /workspaces/{{PROJECT_NAME}}
|
|
248
|
-
|
|
249
|
-
echo -e "${GREEN}✅ Git configured${RESET}"
|
|
250
|
-
|
|
251
|
-
# ============================================================================
|
|
252
|
-
# Shell Aliases
|
|
253
|
-
# ============================================================================
|
|
254
|
-
|
|
255
|
-
if ! grep -q "# {{PROJECT_NAME}} aliases" ~/.bashrc 2>/dev/null; then
|
|
256
|
-
cat >> ~/.bashrc << 'ALIASES'
|
|
257
|
-
|
|
258
|
-
# {{PROJECT_NAME}} aliases
|
|
259
|
-
alias ll='ls -alF'
|
|
260
|
-
alias la='ls -A'
|
|
261
|
-
alias ..='cd ..'
|
|
262
|
-
alias ...='cd ../..'
|
|
263
|
-
alias ws='cd /workspaces/{{PROJECT_NAME}}'
|
|
264
|
-
alias mh='make help'
|
|
265
|
-
alias mt='make test'
|
|
266
|
-
alias mq='make quality'
|
|
267
|
-
alias mc='make check'
|
|
268
|
-
ALIASES
|
|
269
|
-
fi
|
|
270
|
-
|
|
271
|
-
# ============================================================================
|
|
272
|
-
# Done!
|
|
273
|
-
# ============================================================================
|
|
274
|
-
|
|
275
|
-
echo ""
|
|
276
|
-
echo -e "${GREEN}╔════════════════════════════════════════════════════════════╗${RESET}"
|
|
277
|
-
echo -e "${GREEN}║ ✨ Development environment is ready! ║${RESET}"
|
|
278
|
-
echo -e "${GREEN}╚════════════════════════════════════════════════════════════╝${RESET}"
|
|
279
|
-
echo ""
|
|
280
|
-
echo -e "${CYAN}🎯 Next steps:${RESET}"
|
|
281
|
-
echo ""
|
|
282
|
-
echo " • Run ${CYAN}make doctor${RESET} to verify your setup"
|
|
283
|
-
echo " • Run ${CYAN}make help${RESET} to see available commands"
|
|
284
|
-
{{#IF_AI_SESSIONS}}
|
|
285
|
-
echo " • Run ${CYAN}make session-start${RESET} to begin an AI-assisted dev session"
|
|
286
|
-
{{/IF_AI_SESSIONS}}
|
|
287
|
-
echo " • Run ${CYAN}make test${RESET} to run tests"
|
|
288
|
-
echo " • Run ${CYAN}make quality${RESET} to check code quality"
|
|
289
|
-
echo ""
|
|
290
|
-
{{#IF_POSTGRES}}
|
|
291
|
-
echo -e "${CYAN}📊 Database:${RESET} postgresql://{{DB_USER}}:{{DB_PASSWORD}}@db:5432/{{DB_NAME}}"
|
|
292
|
-
{{/IF_POSTGRES}}
|
|
293
|
-
{{#IF_REDIS}}
|
|
294
|
-
echo -e "${CYAN}📦 Redis:${RESET} redis://redis:6379"
|
|
295
|
-
{{/IF_REDIS}}
|
|
296
|
-
echo ""
|
|
297
|
-
echo -e "${GREEN}Happy coding! 🚀${RESET}"
|
|
298
|
-
echo ""
|