container-superposition 0.1.1
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/README.md +843 -0
- package/dist/scripts/init.d.ts +3 -0
- package/dist/scripts/init.d.ts.map +1 -0
- package/dist/scripts/init.js +1190 -0
- package/dist/scripts/init.js.map +1 -0
- package/dist/scripts/migrate-to-manifests.d.ts +12 -0
- package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
- package/dist/scripts/migrate-to-manifests.js +230 -0
- package/dist/scripts/migrate-to-manifests.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +6 -0
- package/dist/tool/questionnaire/composer.d.ts.map +1 -0
- package/dist/tool/questionnaire/composer.js +1232 -0
- package/dist/tool/questionnaire/composer.js.map +1 -0
- package/dist/tool/readme/markdown-parser.d.ts +30 -0
- package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
- package/dist/tool/readme/markdown-parser.js +139 -0
- package/dist/tool/readme/markdown-parser.js.map +1 -0
- package/dist/tool/readme/readme-generator.d.ts +9 -0
- package/dist/tool/readme/readme-generator.d.ts.map +1 -0
- package/dist/tool/readme/readme-generator.js +422 -0
- package/dist/tool/readme/readme-generator.js.map +1 -0
- package/dist/tool/schema/custom-loader.d.ts +17 -0
- package/dist/tool/schema/custom-loader.d.ts.map +1 -0
- package/dist/tool/schema/custom-loader.js +149 -0
- package/dist/tool/schema/custom-loader.js.map +1 -0
- package/dist/tool/schema/overlay-loader.d.ts +47 -0
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
- package/dist/tool/schema/overlay-loader.js +252 -0
- package/dist/tool/schema/overlay-loader.js.map +1 -0
- package/dist/tool/schema/types.d.ts +212 -0
- package/dist/tool/schema/types.d.ts.map +1 -0
- package/dist/tool/schema/types.js +5 -0
- package/dist/tool/schema/types.js.map +1 -0
- package/docs/README.md +308 -0
- package/docs/architecture.md +233 -0
- package/docs/creating-overlays.md +549 -0
- package/docs/custom-patches.md +540 -0
- package/docs/dependencies.md +279 -0
- package/docs/examples/custom-patches-example.md +85 -0
- package/docs/examples.md +576 -0
- package/docs/messaging-comparison.md +265 -0
- package/docs/messaging-quick-start.md +385 -0
- package/docs/observability-workflow.md +537 -0
- package/docs/overlay-manifest-refactoring.md +214 -0
- package/docs/overlay-metadata-archive.md +54 -0
- package/docs/overlays.md +523 -0
- package/docs/presets-architecture.md +498 -0
- package/docs/presets.md +366 -0
- package/docs/publishing.md +476 -0
- package/docs/quick-reference.md +326 -0
- package/docs/ux.md +170 -0
- package/features/README.md +85 -0
- package/features/cross-distro-packages/README.md +146 -0
- package/features/cross-distro-packages/devcontainer-feature.json +20 -0
- package/features/cross-distro-packages/install.sh +58 -0
- package/features/local-secrets-manager/devcontainer-feature.json +18 -0
- package/features/local-secrets-manager/install.sh +127 -0
- package/features/project-scaffolder/devcontainer-feature.json +24 -0
- package/features/project-scaffolder/install.sh +100 -0
- package/features/team-conventions/devcontainer-feature.json +24 -0
- package/features/team-conventions/install.sh +93 -0
- package/overlays/.registry/README.md +14 -0
- package/overlays/.registry/base-images.yml +26 -0
- package/overlays/.registry/base-templates.yml +7 -0
- package/overlays/README.md +155 -0
- package/overlays/alertmanager/.env.example +5 -0
- package/overlays/alertmanager/README.md +465 -0
- package/overlays/alertmanager/alert-rules.yml +56 -0
- package/overlays/alertmanager/alertmanager.yml +42 -0
- package/overlays/alertmanager/devcontainer.patch.json +12 -0
- package/overlays/alertmanager/docker-compose.yml +20 -0
- package/overlays/alertmanager/overlay.yml +17 -0
- package/overlays/alertmanager/setup.sh +53 -0
- package/overlays/alertmanager/verify.sh +31 -0
- package/overlays/aws-cli/README.md +473 -0
- package/overlays/aws-cli/devcontainer.patch.json +13 -0
- package/overlays/aws-cli/overlay.yml +13 -0
- package/overlays/azure-cli/README.md +551 -0
- package/overlays/azure-cli/devcontainer.patch.json +8 -0
- package/overlays/azure-cli/overlay.yml +13 -0
- package/overlays/bun/README.md +312 -0
- package/overlays/bun/devcontainer.patch.json +41 -0
- package/overlays/bun/overlay.yml +16 -0
- package/overlays/bun/setup.sh +79 -0
- package/overlays/bun/verify.sh +30 -0
- package/overlays/codex/README.md +128 -0
- package/overlays/codex/devcontainer.patch.json +3 -0
- package/overlays/codex/overlay.yml +14 -0
- package/overlays/codex/setup.sh +24 -0
- package/overlays/codex/verify.sh +30 -0
- package/overlays/commitlint/README.md +333 -0
- package/overlays/commitlint/devcontainer.patch.json +8 -0
- package/overlays/commitlint/overlay.yml +16 -0
- package/overlays/commitlint/setup.sh +234 -0
- package/overlays/direnv/README.md +504 -0
- package/overlays/direnv/devcontainer.patch.json +6 -0
- package/overlays/direnv/overlay.yml +13 -0
- package/overlays/direnv/setup.sh +139 -0
- package/overlays/docker-in-docker/README.md +534 -0
- package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
- package/overlays/docker-in-docker/overlay.yml +13 -0
- package/overlays/docker-sock/README.md +256 -0
- package/overlays/docker-sock/devcontainer.patch.json +9 -0
- package/overlays/docker-sock/docker-compose.yml +8 -0
- package/overlays/docker-sock/overlay.yml +13 -0
- package/overlays/dotnet/README.md +147 -0
- package/overlays/dotnet/devcontainer.patch.json +51 -0
- package/overlays/dotnet/global-tools.txt +24 -0
- package/overlays/dotnet/overlay.yml +13 -0
- package/overlays/dotnet/setup.sh +51 -0
- package/overlays/dotnet/verify.sh +26 -0
- package/overlays/gcloud/README.md +269 -0
- package/overlays/gcloud/devcontainer.patch.json +14 -0
- package/overlays/gcloud/overlay.yml +14 -0
- package/overlays/gcloud/verify.sh +52 -0
- package/overlays/git-helpers/README.md +168 -0
- package/overlays/git-helpers/devcontainer.patch.json +33 -0
- package/overlays/git-helpers/overlay.yml +15 -0
- package/overlays/git-helpers/setup.sh +91 -0
- package/overlays/go/README.md +293 -0
- package/overlays/go/devcontainer.patch.json +43 -0
- package/overlays/go/overlay.yml +15 -0
- package/overlays/go/setup.sh +33 -0
- package/overlays/go/verify.sh +40 -0
- package/overlays/grafana/.env.example +9 -0
- package/overlays/grafana/README.md +462 -0
- package/overlays/grafana/dashboard-provider.yml +11 -0
- package/overlays/grafana/dashboards/observability-overview.json +263 -0
- package/overlays/grafana/devcontainer.patch.json +12 -0
- package/overlays/grafana/docker-compose.yml +27 -0
- package/overlays/grafana/grafana-datasources.yml +57 -0
- package/overlays/grafana/overlay.yml +21 -0
- package/overlays/grafana/verify.sh +34 -0
- package/overlays/jaeger/.env.example +7 -0
- package/overlays/jaeger/README.md +867 -0
- package/overlays/jaeger/devcontainer.patch.json +12 -0
- package/overlays/jaeger/docker-compose.yml +17 -0
- package/overlays/jaeger/overlay.yml +19 -0
- package/overlays/java/README.md +267 -0
- package/overlays/java/devcontainer.patch.json +44 -0
- package/overlays/java/overlay.yml +16 -0
- package/overlays/java/setup.sh +41 -0
- package/overlays/java/verify.sh +42 -0
- package/overlays/just/README.md +443 -0
- package/overlays/just/devcontainer.patch.json +3 -0
- package/overlays/just/overlay.yml +13 -0
- package/overlays/just/setup.sh +182 -0
- package/overlays/kubectl-helm/README.md +660 -0
- package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
- package/overlays/kubectl-helm/overlay.yml +13 -0
- package/overlays/loki/.env.example +5 -0
- package/overlays/loki/README.md +1156 -0
- package/overlays/loki/devcontainer.patch.json +12 -0
- package/overlays/loki/docker-compose.yml +18 -0
- package/overlays/loki/loki-config.yaml +45 -0
- package/overlays/loki/overlay.yml +17 -0
- package/overlays/minio/.env.example +9 -0
- package/overlays/minio/README.md +639 -0
- package/overlays/minio/devcontainer.patch.json +30 -0
- package/overlays/minio/docker-compose.yml +28 -0
- package/overlays/minio/overlay.yml +18 -0
- package/overlays/minio/setup.sh +61 -0
- package/overlays/minio/verify.sh +64 -0
- package/overlays/mkdocs/README.md +309 -0
- package/overlays/mkdocs/devcontainer.patch.json +24 -0
- package/overlays/mkdocs/overlay.yml +15 -0
- package/overlays/modern-cli-tools/README.md +556 -0
- package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
- package/overlays/modern-cli-tools/overlay.yml +13 -0
- package/overlays/modern-cli-tools/setup.sh +153 -0
- package/overlays/mongodb/.env.example +9 -0
- package/overlays/mongodb/README.md +481 -0
- package/overlays/mongodb/devcontainer.patch.json +32 -0
- package/overlays/mongodb/docker-compose.yml +44 -0
- package/overlays/mongodb/overlay.yml +17 -0
- package/overlays/mongodb/verify.sh +48 -0
- package/overlays/mysql/.env.example +11 -0
- package/overlays/mysql/README.md +542 -0
- package/overlays/mysql/devcontainer.patch.json +34 -0
- package/overlays/mysql/docker-compose.yml +55 -0
- package/overlays/mysql/overlay.yml +16 -0
- package/overlays/mysql/verify.sh +48 -0
- package/overlays/nats/.env.example +5 -0
- package/overlays/nats/README.md +762 -0
- package/overlays/nats/devcontainer.patch.json +24 -0
- package/overlays/nats/docker-compose.yml +31 -0
- package/overlays/nats/overlay.yml +18 -0
- package/overlays/nats/verify.sh +50 -0
- package/overlays/ngrok/README.md +503 -0
- package/overlays/ngrok/devcontainer.patch.json +3 -0
- package/overlays/ngrok/overlay.yml +14 -0
- package/overlays/ngrok/setup.sh +125 -0
- package/overlays/nodejs/README.md +192 -0
- package/overlays/nodejs/devcontainer.patch.json +49 -0
- package/overlays/nodejs/global-packages.txt +16 -0
- package/overlays/nodejs/overlay.yml +14 -0
- package/overlays/nodejs/setup.sh +46 -0
- package/overlays/nodejs/verify.sh +32 -0
- package/overlays/otel-collector/.env.example +9 -0
- package/overlays/otel-collector/README.md +1257 -0
- package/overlays/otel-collector/devcontainer.patch.json +28 -0
- package/overlays/otel-collector/docker-compose.yml +22 -0
- package/overlays/otel-collector/otel-collector-config.yaml +68 -0
- package/overlays/otel-collector/overlay.yml +21 -0
- package/overlays/otel-collector/setup.sh +49 -0
- package/overlays/otel-demo-nodejs/.env.example +2 -0
- package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
- package/overlays/otel-demo-nodejs/README.md +409 -0
- package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
- package/overlays/otel-demo-nodejs/overlay.yml +23 -0
- package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
- package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
- package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
- package/overlays/otel-demo-nodejs/verify.sh +31 -0
- package/overlays/otel-demo-python/.env.example +2 -0
- package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
- package/overlays/otel-demo-python/README.md +82 -0
- package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
- package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-python/docker-compose.yml +19 -0
- package/overlays/otel-demo-python/overlay.yml +23 -0
- package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
- package/overlays/otel-demo-python/verify.sh +31 -0
- package/overlays/playwright/README.md +629 -0
- package/overlays/playwright/devcontainer.patch.json +9 -0
- package/overlays/playwright/overlay.yml +13 -0
- package/overlays/postgres/.env.example +6 -0
- package/overlays/postgres/README.md +602 -0
- package/overlays/postgres/devcontainer.patch.json +21 -0
- package/overlays/postgres/docker-compose.yml +22 -0
- package/overlays/postgres/overlay.yml +15 -0
- package/overlays/postgres/verify.sh +45 -0
- package/overlays/powershell/README.md +314 -0
- package/overlays/powershell/devcontainer.patch.json +22 -0
- package/overlays/powershell/overlay.yml +13 -0
- package/overlays/powershell/setup.sh +29 -0
- package/overlays/powershell/verify.sh +38 -0
- package/overlays/pre-commit/README.md +263 -0
- package/overlays/pre-commit/devcontainer.patch.json +9 -0
- package/overlays/pre-commit/overlay.yml +16 -0
- package/overlays/pre-commit/setup.sh +129 -0
- package/overlays/presets/docs-site.yml +118 -0
- package/overlays/presets/fullstack.yml +181 -0
- package/overlays/presets/microservice.yml +118 -0
- package/overlays/presets/web-api.yml +109 -0
- package/overlays/prometheus/.env.example +5 -0
- package/overlays/prometheus/README.md +1246 -0
- package/overlays/prometheus/devcontainer.patch.json +12 -0
- package/overlays/prometheus/docker-compose.yml +22 -0
- package/overlays/prometheus/overlay.yml +17 -0
- package/overlays/prometheus/prometheus.yml +12 -0
- package/overlays/prometheus/verify.sh +34 -0
- package/overlays/promtail/.env.example +2 -0
- package/overlays/promtail/README.md +357 -0
- package/overlays/promtail/devcontainer.patch.json +5 -0
- package/overlays/promtail/docker-compose.yml +16 -0
- package/overlays/promtail/overlay.yml +17 -0
- package/overlays/promtail/promtail-config.yaml +60 -0
- package/overlays/promtail/verify.sh +31 -0
- package/overlays/pulumi/README.md +472 -0
- package/overlays/pulumi/devcontainer.patch.json +13 -0
- package/overlays/pulumi/overlay.yml +14 -0
- package/overlays/pulumi/verify.sh +31 -0
- package/overlays/python/README.md +919 -0
- package/overlays/python/devcontainer.patch.json +41 -0
- package/overlays/python/overlay.yml +12 -0
- package/overlays/python/requirements-overlay.txt +13 -0
- package/overlays/python/setup.sh +47 -0
- package/overlays/python/verify.sh +32 -0
- package/overlays/rabbitmq/.env.example +7 -0
- package/overlays/rabbitmq/README.md +680 -0
- package/overlays/rabbitmq/devcontainer.patch.json +28 -0
- package/overlays/rabbitmq/docker-compose.yml +30 -0
- package/overlays/rabbitmq/overlay.yml +18 -0
- package/overlays/rabbitmq/verify.sh +41 -0
- package/overlays/redis/.env.example +4 -0
- package/overlays/redis/README.md +776 -0
- package/overlays/redis/devcontainer.patch.json +21 -0
- package/overlays/redis/docker-compose.yml +21 -0
- package/overlays/redis/overlay.yml +15 -0
- package/overlays/redis/verify.sh +41 -0
- package/overlays/redpanda/.env.example +10 -0
- package/overlays/redpanda/README.md +703 -0
- package/overlays/redpanda/devcontainer.patch.json +37 -0
- package/overlays/redpanda/docker-compose.yml +67 -0
- package/overlays/redpanda/overlay.yml +21 -0
- package/overlays/redpanda/verify.sh +48 -0
- package/overlays/rust/README.md +299 -0
- package/overlays/rust/devcontainer.patch.json +39 -0
- package/overlays/rust/overlay.yml +15 -0
- package/overlays/rust/setup.sh +36 -0
- package/overlays/rust/verify.sh +51 -0
- package/overlays/sqlite/README.md +584 -0
- package/overlays/sqlite/devcontainer.patch.json +14 -0
- package/overlays/sqlite/overlay.yml +15 -0
- package/overlays/sqlite/setup.sh +27 -0
- package/overlays/sqlite/verify.sh +43 -0
- package/overlays/sqlserver/.env.example +6 -0
- package/overlays/sqlserver/README.md +592 -0
- package/overlays/sqlserver/devcontainer.patch.json +22 -0
- package/overlays/sqlserver/docker-compose.yml +32 -0
- package/overlays/sqlserver/overlay.yml +17 -0
- package/overlays/sqlserver/verify.sh +30 -0
- package/overlays/tempo/.env.example +5 -0
- package/overlays/tempo/README.md +273 -0
- package/overlays/tempo/devcontainer.patch.json +12 -0
- package/overlays/tempo/docker-compose.yml +20 -0
- package/overlays/tempo/overlay.yml +20 -0
- package/overlays/tempo/tempo-config.yaml +32 -0
- package/overlays/tempo/verify.sh +31 -0
- package/overlays/terraform/README.md +389 -0
- package/overlays/terraform/devcontainer.patch.json +15 -0
- package/overlays/terraform/overlay.yml +14 -0
- package/overlays/terraform/verify.sh +63 -0
- package/package.json +74 -0
- package/templates/README.md +285 -0
- package/templates/compose/.devcontainer/devcontainer.json +46 -0
- package/templates/compose/.devcontainer/docker-compose.yml +12 -0
- package/templates/compose/README.md +20 -0
- package/templates/plain/.devcontainer/devcontainer.json +35 -0
- package/templates/plain/README.md +21 -0
- package/tool/README.md +281 -0
- package/tool/schema/base-images.schema.json +43 -0
- package/tool/schema/base-templates.schema.json +34 -0
- package/tool/schema/config.schema.json +71 -0
- package/tool/schema/overlay-manifest.schema.json +86 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# Google Cloud SDK Overlay
|
|
2
|
+
|
|
3
|
+
Adds Google Cloud SDK (gcloud) with comprehensive tooling for GCP development.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **gcloud CLI** - Google Cloud command-line interface
|
|
8
|
+
- **gsutil** - Cloud Storage management
|
|
9
|
+
- **bq** - BigQuery command-line tool
|
|
10
|
+
- **GKE gcloud auth plugin** - For Kubernetes cluster authentication
|
|
11
|
+
- **VS Code Extension:** Cloud Code (googlecloudtools.cloudcode)
|
|
12
|
+
|
|
13
|
+
## Authentication
|
|
14
|
+
|
|
15
|
+
### Interactive Login (Development)
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Login with browser-based OAuth
|
|
19
|
+
gcloud auth login
|
|
20
|
+
|
|
21
|
+
# Set default project
|
|
22
|
+
gcloud config set project YOUR_PROJECT_ID
|
|
23
|
+
|
|
24
|
+
# Verify authentication
|
|
25
|
+
gcloud auth list
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Service Account (CI/CD)
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Using service account JSON key
|
|
32
|
+
gcloud auth activate-service-account \
|
|
33
|
+
--key-file=/path/to/service-account-key.json
|
|
34
|
+
|
|
35
|
+
# Or via environment variable
|
|
36
|
+
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
|
|
37
|
+
gcloud auth activate-service-account \
|
|
38
|
+
--key-file="${GOOGLE_APPLICATION_CREDENTIALS}"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Application Default Credentials (ADC)
|
|
42
|
+
|
|
43
|
+
For applications using Google Cloud client libraries:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Set ADC for development
|
|
47
|
+
gcloud auth application-default login
|
|
48
|
+
|
|
49
|
+
# Verify ADC is configured
|
|
50
|
+
gcloud auth application-default print-access-token
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Environment variable approach:**
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Common Commands
|
|
60
|
+
|
|
61
|
+
### Project Management
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# List projects
|
|
65
|
+
gcloud projects list
|
|
66
|
+
|
|
67
|
+
# Set active project
|
|
68
|
+
gcloud config set project PROJECT_ID
|
|
69
|
+
|
|
70
|
+
# Get current project
|
|
71
|
+
gcloud config get-value project
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Compute Engine
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# List VM instances
|
|
78
|
+
gcloud compute instances list
|
|
79
|
+
|
|
80
|
+
# SSH into instance
|
|
81
|
+
gcloud compute ssh INSTANCE_NAME
|
|
82
|
+
|
|
83
|
+
# Create instance
|
|
84
|
+
gcloud compute instances create my-instance \
|
|
85
|
+
--zone=us-central1-a \
|
|
86
|
+
--machine-type=e2-medium
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Cloud Storage (gsutil)
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# List buckets
|
|
93
|
+
gsutil ls
|
|
94
|
+
|
|
95
|
+
# Create bucket
|
|
96
|
+
gsutil mb gs://my-bucket-name
|
|
97
|
+
|
|
98
|
+
# Copy files
|
|
99
|
+
gsutil cp file.txt gs://my-bucket/
|
|
100
|
+
gsutil cp gs://my-bucket/file.txt ./
|
|
101
|
+
|
|
102
|
+
# Sync directory
|
|
103
|
+
gsutil rsync -r ./local-dir gs://my-bucket/remote-dir
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### GKE (Google Kubernetes Engine)
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# List clusters
|
|
110
|
+
gcloud container clusters list
|
|
111
|
+
|
|
112
|
+
# Get cluster credentials
|
|
113
|
+
gcloud container clusters get-credentials CLUSTER_NAME \
|
|
114
|
+
--zone=us-central1-a
|
|
115
|
+
|
|
116
|
+
# Verify kubectl context
|
|
117
|
+
kubectl config current-context
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### BigQuery (bq)
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# List datasets
|
|
124
|
+
bq ls
|
|
125
|
+
|
|
126
|
+
# Query data
|
|
127
|
+
bq query --use_legacy_sql=false \
|
|
128
|
+
'SELECT * FROM `project.dataset.table` LIMIT 10'
|
|
129
|
+
|
|
130
|
+
# Load data
|
|
131
|
+
bq load dataset.table data.csv schema.json
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Cloud Functions
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# List functions
|
|
138
|
+
gcloud functions list
|
|
139
|
+
|
|
140
|
+
# Deploy function
|
|
141
|
+
gcloud functions deploy my-function \
|
|
142
|
+
--runtime=nodejs20 \
|
|
143
|
+
--trigger-http \
|
|
144
|
+
--allow-unauthenticated
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Configuration
|
|
148
|
+
|
|
149
|
+
### Set Defaults
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Set default region
|
|
153
|
+
gcloud config set compute/region us-central1
|
|
154
|
+
|
|
155
|
+
# Set default zone
|
|
156
|
+
gcloud config set compute/zone us-central1-a
|
|
157
|
+
|
|
158
|
+
# View all config
|
|
159
|
+
gcloud config list
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Multiple Configurations
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
# Create named configuration
|
|
166
|
+
gcloud config configurations create dev
|
|
167
|
+
gcloud config configurations create prod
|
|
168
|
+
|
|
169
|
+
# Switch configuration
|
|
170
|
+
gcloud config configurations activate dev
|
|
171
|
+
|
|
172
|
+
# List configurations
|
|
173
|
+
gcloud config configurations list
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Common Use Cases
|
|
177
|
+
|
|
178
|
+
### GCP Development
|
|
179
|
+
|
|
180
|
+
- Deploy Cloud Functions
|
|
181
|
+
- Manage Cloud Run services
|
|
182
|
+
- Interact with GCS buckets
|
|
183
|
+
|
|
184
|
+
### GKE Development
|
|
185
|
+
|
|
186
|
+
- Authenticate to GKE clusters
|
|
187
|
+
- Deploy containerized applications
|
|
188
|
+
- Manage Kubernetes resources
|
|
189
|
+
|
|
190
|
+
### Data Engineering
|
|
191
|
+
|
|
192
|
+
- BigQuery queries and data loading
|
|
193
|
+
- Cloud Storage data pipelines
|
|
194
|
+
- Dataflow job management
|
|
195
|
+
|
|
196
|
+
## Best Practices
|
|
197
|
+
|
|
198
|
+
1. **Use service accounts** for automation and CI/CD
|
|
199
|
+
2. **Store credentials securely** - Never commit service account keys
|
|
200
|
+
3. **Use ADC** for local development with client libraries
|
|
201
|
+
4. **Set default project** to avoid `--project` flags
|
|
202
|
+
5. **Use configurations** for multi-environment workflows
|
|
203
|
+
|
|
204
|
+
## Security Considerations
|
|
205
|
+
|
|
206
|
+
### Service Account Keys
|
|
207
|
+
|
|
208
|
+
⚠️ **Never commit service account keys to version control**
|
|
209
|
+
|
|
210
|
+
Use one of these secure methods:
|
|
211
|
+
|
|
212
|
+
- **Environment variables** in `.env` (excluded from git)
|
|
213
|
+
- **Secret management** (e.g., HashiCorp Vault)
|
|
214
|
+
- **Cloud-based secrets** (e.g., Secret Manager)
|
|
215
|
+
- **Workload Identity** (for GKE)
|
|
216
|
+
|
|
217
|
+
### Least Privilege
|
|
218
|
+
|
|
219
|
+
Grant minimal required permissions to service accounts:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# Example: Grant Storage Object Viewer role
|
|
223
|
+
gcloud projects add-iam-policy-binding PROJECT_ID \
|
|
224
|
+
--member="serviceAccount:SA_EMAIL" \
|
|
225
|
+
--role="roles/storage.objectViewer"
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Troubleshooting
|
|
229
|
+
|
|
230
|
+
### gcloud command not found
|
|
231
|
+
|
|
232
|
+
Rebuild container:
|
|
233
|
+
|
|
234
|
+
- **VS Code:** `Cmd+Shift+P` → "Dev Containers: Rebuild Container"
|
|
235
|
+
|
|
236
|
+
### Authentication errors
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
# Clear and re-authenticate
|
|
240
|
+
gcloud auth revoke
|
|
241
|
+
gcloud auth login
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Wrong project active
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
# Check current project
|
|
248
|
+
gcloud config get-value project
|
|
249
|
+
|
|
250
|
+
# Switch project
|
|
251
|
+
gcloud config set project NEW_PROJECT_ID
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### ADC not working
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
# Re-establish ADC
|
|
258
|
+
gcloud auth application-default login
|
|
259
|
+
|
|
260
|
+
# Or set GOOGLE_APPLICATION_CREDENTIALS
|
|
261
|
+
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## Related Overlays
|
|
265
|
+
|
|
266
|
+
- **kubectl-helm** - Kubernetes management (works with GKE)
|
|
267
|
+
- **terraform** - Infrastructure as Code for GCP resources
|
|
268
|
+
- **pulumi** - Modern IaC with TypeScript/Python/Go
|
|
269
|
+
- **nodejs/python/dotnet** - For Cloud Functions/Run development
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"ghcr.io/devcontainers/features/google-cloud-cli:1": {
|
|
5
|
+
"version": "latest",
|
|
6
|
+
"installGkeGcloudAuthPlugin": true
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"customizations": {
|
|
10
|
+
"vscode": {
|
|
11
|
+
"extensions": ["googlecloudtools.cloudcode"]
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
id: gcloud
|
|
2
|
+
name: Google Cloud SDK
|
|
3
|
+
description: Google Cloud Platform command-line tools (gcloud, gsutil, bq)
|
|
4
|
+
category: cloud
|
|
5
|
+
supports: []
|
|
6
|
+
requires: []
|
|
7
|
+
suggests: []
|
|
8
|
+
conflicts: []
|
|
9
|
+
tags:
|
|
10
|
+
- cloud
|
|
11
|
+
- gcp
|
|
12
|
+
- google
|
|
13
|
+
- cli
|
|
14
|
+
ports: []
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Verification script for gcloud overlay
|
|
3
|
+
# Confirms Google Cloud SDK is installed
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "🔍 Verifying gcloud overlay..."
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
# Check gcloud is installed
|
|
11
|
+
echo "1️⃣ Checking gcloud CLI..."
|
|
12
|
+
if command -v gcloud &> /dev/null; then
|
|
13
|
+
gcloud version | head -1
|
|
14
|
+
echo " ✅ gcloud CLI found"
|
|
15
|
+
else
|
|
16
|
+
echo " ❌ gcloud CLI not found"
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
# Check gsutil is installed
|
|
21
|
+
echo ""
|
|
22
|
+
echo "2️⃣ Checking gsutil..."
|
|
23
|
+
if command -v gsutil &> /dev/null; then
|
|
24
|
+
gsutil version -l | head -1
|
|
25
|
+
echo " ✅ gsutil found"
|
|
26
|
+
else
|
|
27
|
+
echo " ❌ gsutil not found"
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# Check bq is installed
|
|
32
|
+
echo ""
|
|
33
|
+
echo "3️⃣ Checking bq (BigQuery CLI)..."
|
|
34
|
+
if command -v bq &> /dev/null; then
|
|
35
|
+
bq version | head -1
|
|
36
|
+
echo " ✅ bq found"
|
|
37
|
+
else
|
|
38
|
+
echo " ❌ bq not found"
|
|
39
|
+
exit 1
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
# Check GKE auth plugin
|
|
43
|
+
echo ""
|
|
44
|
+
echo "4️⃣ Checking GKE gcloud auth plugin..."
|
|
45
|
+
if command -v gke-gcloud-auth-plugin &> /dev/null; then
|
|
46
|
+
echo " ✅ GKE auth plugin found"
|
|
47
|
+
else
|
|
48
|
+
echo " ⚠️ GKE auth plugin not found (may not be required for all use cases)"
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
echo ""
|
|
52
|
+
echo "✅ gcloud overlay verification complete"
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Git Helpers Overlay
|
|
2
|
+
|
|
3
|
+
Comprehensive Git tooling with GPG/SSH support, Git LFS, and GitHub CLI.
|
|
4
|
+
|
|
5
|
+
## What's Included
|
|
6
|
+
|
|
7
|
+
- **Git** - Latest version with enhanced configuration
|
|
8
|
+
- **Git LFS** - Large File Storage support
|
|
9
|
+
- **GitHub CLI (gh)** - GitHub command-line tool
|
|
10
|
+
- **SSH Agent Forwarding** - Mounts host SSH keys (read-only)
|
|
11
|
+
- **GPG Support** - Mounts host GPG keys for commit signing
|
|
12
|
+
- **VS Code Extensions**:
|
|
13
|
+
- GitLens - Enhanced Git visualization
|
|
14
|
+
- GitHub Pull Requests - PR management in VS Code
|
|
15
|
+
- Git Graph - Interactive git graph visualization
|
|
16
|
+
|
|
17
|
+
## Configuration
|
|
18
|
+
|
|
19
|
+
### SSH Keys (Optional Mount)
|
|
20
|
+
|
|
21
|
+
To use your host SSH keys in the container, add this mount to your `devcontainer.json`:
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
"mounts": [
|
|
25
|
+
"source=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,target=/home/vscode/.ssh,type=bind,consistency=cached,readOnly=true"
|
|
26
|
+
]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
This allows you to:
|
|
30
|
+
|
|
31
|
+
- Push/pull from Git repositories using SSH
|
|
32
|
+
- Use SSH agent forwarding
|
|
33
|
+
- Maintain existing SSH configurations
|
|
34
|
+
|
|
35
|
+
**Note**: Keys are mounted read-only for security. Generate new keys inside the container if needed.
|
|
36
|
+
|
|
37
|
+
### GPG Keys (Optional Mount)
|
|
38
|
+
|
|
39
|
+
To use your host GPG keys in the container, add this mount to your `devcontainer.json`:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
"mounts": [
|
|
43
|
+
"source=${localEnv:HOME}${localEnv:USERPROFILE}/.gnupg,target=/home/vscode/.gnupg,type=bind,consistency=cached"
|
|
44
|
+
]
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Important**: Only add this mount if you have a `~/.gnupg` directory on your host machine. Otherwise, the container may fail to start.
|
|
48
|
+
|
|
49
|
+
### GPG Commit Signing
|
|
50
|
+
|
|
51
|
+
GPG commit signing is supported but requires manual setup:
|
|
52
|
+
|
|
53
|
+
1. Import your GPG keys into the container, or generate new ones:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Generate a new key
|
|
57
|
+
gpg --full-generate-key
|
|
58
|
+
|
|
59
|
+
# Or import from your host (copy your key ID first on host with: gpg --list-secret-keys)
|
|
60
|
+
# On host: gpg --export-secret-keys YOUR_KEY_ID > key.gpg
|
|
61
|
+
# In container: gpg --import key.gpg
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
2. Configure Git to use your signing key:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
git config --global user.signingkey YOUR_KEY_ID
|
|
68
|
+
git config --global commit.gpgsign true
|
|
69
|
+
git config --global tag.gpgsign true
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Note**: GPG keys are not automatically mounted to avoid container startup failures when `~/.gnupg` doesn't exist on the host.
|
|
73
|
+
|
|
74
|
+
### GitHub CLI Authentication
|
|
75
|
+
|
|
76
|
+
Authenticate with GitHub:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
gh auth login
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Follow the interactive prompts to authenticate via browser or token.
|
|
83
|
+
|
|
84
|
+
## Git LFS
|
|
85
|
+
|
|
86
|
+
Git LFS is pre-installed. To use it in your repository:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# Initialize in your repo
|
|
90
|
+
git lfs install
|
|
91
|
+
|
|
92
|
+
# Track large files (e.g., videos, datasets)
|
|
93
|
+
git lfs track "*.mp4"
|
|
94
|
+
git lfs track "*.zip"
|
|
95
|
+
|
|
96
|
+
# Commit the .gitattributes file
|
|
97
|
+
git add .gitattributes
|
|
98
|
+
git commit -m "Configure Git LFS"
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Useful Git Aliases
|
|
102
|
+
|
|
103
|
+
A sample `.gitconfig-devcontainer` is created with useful aliases:
|
|
104
|
+
|
|
105
|
+
- `git st` - Status
|
|
106
|
+
- `git co` - Checkout
|
|
107
|
+
- `git br` - Branch
|
|
108
|
+
- `git ci` - Commit
|
|
109
|
+
- `git unstage` - Unstage files
|
|
110
|
+
- `git last` - Show last commit
|
|
111
|
+
- `git visual` - Pretty graph visualization
|
|
112
|
+
- `git amend` - Amend last commit without editing message
|
|
113
|
+
|
|
114
|
+
Include it in your `.gitconfig`:
|
|
115
|
+
|
|
116
|
+
```ini
|
|
117
|
+
[include]
|
|
118
|
+
path = ~/.gitconfig-devcontainer
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## GitHub CLI Usage
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# Create a pull request
|
|
125
|
+
gh pr create
|
|
126
|
+
|
|
127
|
+
# Check out a PR locally
|
|
128
|
+
gh pr checkout 123
|
|
129
|
+
|
|
130
|
+
# View repository issues
|
|
131
|
+
gh issue list
|
|
132
|
+
|
|
133
|
+
# Create a new repository
|
|
134
|
+
gh repo create
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Troubleshooting
|
|
138
|
+
|
|
139
|
+
### SSH Permissions
|
|
140
|
+
|
|
141
|
+
If you encounter SSH permission errors, the setup script automatically fixes permissions:
|
|
142
|
+
|
|
143
|
+
- `~/.ssh` directory: 700
|
|
144
|
+
- SSH key files: 600
|
|
145
|
+
|
|
146
|
+
### GPG Agent Issues
|
|
147
|
+
|
|
148
|
+
If GPG signing fails, ensure the GPG agent is running:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
gpg-agent --daemon
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Git LFS Not Tracking Files
|
|
155
|
+
|
|
156
|
+
Verify LFS is initialized in your repository:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
git lfs install
|
|
160
|
+
git lfs ls-files # List tracked files
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Security Notes
|
|
164
|
+
|
|
165
|
+
- SSH keys are mounted **read-only** from your host
|
|
166
|
+
- GPG keys are mounted with restricted permissions (700/600)
|
|
167
|
+
- Never commit private keys to your repository
|
|
168
|
+
- Use SSH agent forwarding for secure remote access
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"ghcr.io/devcontainers/features/git:1": {
|
|
5
|
+
"ppa": true,
|
|
6
|
+
"version": "os-provided"
|
|
7
|
+
},
|
|
8
|
+
"ghcr.io/devcontainers/features/git-lfs:1": {
|
|
9
|
+
"version": "latest"
|
|
10
|
+
},
|
|
11
|
+
"ghcr.io/devcontainers/features/github-cli:1": {
|
|
12
|
+
"version": "latest"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"customizations": {
|
|
16
|
+
"vscode": {
|
|
17
|
+
"extensions": [
|
|
18
|
+
"eamodio.gitlens",
|
|
19
|
+
"github.vscode-pull-request-github",
|
|
20
|
+
"mhutchie.git-graph"
|
|
21
|
+
],
|
|
22
|
+
"settings": {
|
|
23
|
+
"git.enableCommitSigning": false,
|
|
24
|
+
"git.enableSmartCommit": true,
|
|
25
|
+
"git.confirmSync": false,
|
|
26
|
+
"git.autofetch": true
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"postStartCommand": {
|
|
31
|
+
"enable-git-safe-directory": "git config --global --add safe.directory ${containerWorkspaceFolder}"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
id: git-helpers
|
|
2
|
+
name: Git Helpers
|
|
3
|
+
description: Git LFS, GitHub CLI, GPG/SSH support for secure Git operations
|
|
4
|
+
category: dev
|
|
5
|
+
supports: []
|
|
6
|
+
requires: []
|
|
7
|
+
suggests: []
|
|
8
|
+
conflicts: []
|
|
9
|
+
tags:
|
|
10
|
+
- dev
|
|
11
|
+
- git
|
|
12
|
+
- security
|
|
13
|
+
- ssh
|
|
14
|
+
- gpg
|
|
15
|
+
ports: []
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Git helpers setup script
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "🔧 Setting up Git helpers..."
|
|
7
|
+
|
|
8
|
+
# Verify Git installation
|
|
9
|
+
if command -v git &> /dev/null; then
|
|
10
|
+
echo "✓ Git installed: $(git --version)"
|
|
11
|
+
else
|
|
12
|
+
echo "✗ Git not found"
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
# Verify Git LFS installation
|
|
17
|
+
if command -v git-lfs &> /dev/null; then
|
|
18
|
+
echo "✓ Git LFS installed: $(git-lfs version)"
|
|
19
|
+
# Initialize Git LFS for the user
|
|
20
|
+
git lfs install --skip-repo
|
|
21
|
+
else
|
|
22
|
+
echo "✗ Git LFS not found"
|
|
23
|
+
exit 1
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
# Verify GitHub CLI installation
|
|
27
|
+
if command -v gh &> /dev/null; then
|
|
28
|
+
echo "✓ GitHub CLI installed: $(gh --version | head -n 1)"
|
|
29
|
+
else
|
|
30
|
+
echo "✗ GitHub CLI not found"
|
|
31
|
+
exit 1
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
# Set up SSH permissions if .ssh directory exists
|
|
35
|
+
if [ -d "$HOME/.ssh" ]; then
|
|
36
|
+
chmod 700 "$HOME/.ssh"
|
|
37
|
+
chmod 600 "$HOME/.ssh"/* 2>/dev/null || true
|
|
38
|
+
echo "✓ SSH directory permissions configured"
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
# Set up GPG permissions if .gnupg directory exists
|
|
42
|
+
if [ -d "$HOME/.gnupg" ]; then
|
|
43
|
+
chmod 700 "$HOME/.gnupg"
|
|
44
|
+
chmod 600 "$HOME/.gnupg"/* 2>/dev/null || true
|
|
45
|
+
echo "✓ GPG directory permissions configured"
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
# Create sample .gitconfig-include if it doesn't exist
|
|
49
|
+
if [ ! -f "$HOME/.gitconfig-devcontainer" ]; then
|
|
50
|
+
cat > "$HOME/.gitconfig-devcontainer" << 'EOF'
|
|
51
|
+
# Git configuration for devcontainer
|
|
52
|
+
# Include this in your .gitconfig with:
|
|
53
|
+
# [include]
|
|
54
|
+
# path = ~/.gitconfig-devcontainer
|
|
55
|
+
|
|
56
|
+
[core]
|
|
57
|
+
autocrlf = input
|
|
58
|
+
filemode = false
|
|
59
|
+
|
|
60
|
+
[push]
|
|
61
|
+
default = current
|
|
62
|
+
autoSetupRemote = true
|
|
63
|
+
|
|
64
|
+
[pull]
|
|
65
|
+
rebase = true
|
|
66
|
+
|
|
67
|
+
[rebase]
|
|
68
|
+
autoStash = true
|
|
69
|
+
|
|
70
|
+
# Useful aliases
|
|
71
|
+
[alias]
|
|
72
|
+
st = status
|
|
73
|
+
co = checkout
|
|
74
|
+
br = branch
|
|
75
|
+
ci = commit
|
|
76
|
+
unstage = reset HEAD --
|
|
77
|
+
last = log -1 HEAD
|
|
78
|
+
visual = log --graph --oneline --all --decorate
|
|
79
|
+
amend = commit --amend --no-edit
|
|
80
|
+
EOF
|
|
81
|
+
echo "✓ Sample .gitconfig-devcontainer created"
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
echo "✓ Git helpers setup complete"
|
|
85
|
+
echo ""
|
|
86
|
+
echo "💡 Tips:"
|
|
87
|
+
echo " - SSH keys are mounted from your host ~/.ssh directory (read-only)"
|
|
88
|
+
echo " - GPG keys are mounted from your host ~/.gnupg directory"
|
|
89
|
+
echo " - To enable commit signing, set git.enableCommitSigning in VS Code settings"
|
|
90
|
+
echo " - Authenticate with GitHub CLI: gh auth login"
|
|
91
|
+
echo " - Initialize Git LFS in your repo: git lfs install"
|