From 4232a35741e4f820c5394e9274bbcbed39ca2f2b Mon Sep 17 00:00:00 2001 From: Gero Posmyk-Leinemann Date: Tue, 22 Jul 2025 16:40:40 +0000 Subject: [PATCH 1/2] [dev] Improve devcontainer, add automations Co-authored-by: Ona --- .devcontainer/devcontainer.json | 156 ++++++++++++++++++++++++-------- .gitignore | 3 + .gitpod/automations.yaml | 74 +++++++++++++++ dev/install-dependencies.sh | 7 -- 4 files changed, 195 insertions(+), 45 deletions(-) create mode 100644 .gitpod/automations.yaml delete mode 100755 dev/install-dependencies.sh diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4ee0385c521932..94b4b486b1fabc 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,41 +1,121 @@ { - "name": "gitpod", - "build": { - "context": "..", - "dockerfile": "./Dockerfile" - }, - "workspaceMount": "source=${localWorkspaceFolder},target=/workspace/gitpod,type=bind", - "workspaceFolder": "/workspace/gitpod/", - "postCreateCommand": "dev/install-dependencies.sh", - "mounts": [ - "source=/usr/local/gitpod/config/,target=/usr/local/gitpod/config/,type=bind" - ], - "remoteEnv": { - "GIT_EDITOR": "code --wait", - "KUBE_EDITOR": "code --wait" - }, - "features": { - "ghcr.io/devcontainers/features/docker-in-docker:2": { - "installDockerComposeSwitch": false - } - }, - "customizations": { - "vscode": { - "extensions": [ - "EditorConfig.EditorConfig", - "golang.go", - "hashicorp.terraform", - "ms-azuretools.vscode-docker", - "ms-kubernetes-tools.vscode-kubernetes-tools", - "stkb.rewrap", - "zxh404.vscode-proto3", - "matthewpi.caddyfile-support", - "timonwong.shellcheck", - "fwcd.kotlin", - "dbaeumer.vscode-eslint", - "esbenp.prettier-vscode", - "hbenl.vscode-mocha-test-adapter" - ] - } + "name": "gitpod", + "build": { + "context": "..", + "dockerfile": "./Dockerfile" + }, + "features": { + "ghcr.io/devcontainers/features/docker-in-docker:2": {} + }, + "workspaceFolder": "/workspace/gitpod", + "workspaceMount": "source=${localWorkspaceFolder},target=/workspace/gitpod,type=bind", + "mounts": [ + "source=/usr/local/gitpod/config/,target=/usr/local/gitpod/config/,type=bind" + ], + "remoteEnv": { + "GIT_EDITOR": "code --wait", + "KUBE_EDITOR": "code --wait" + }, + "forwardPorts": [ + 1337, + 3000, + 3001, + 3306, + 4000, + 5900, + 6080, + 7777, + 9229, + 9999, + 13001, + 13444, + 8022 + ], + "portsAttributes": { + "13001": { + "label": "Port 13001", + "onAutoForward": "ignore", + "elevateIfNeeded": true + }, + "1337": { + "label": "Port 1337", + "onAutoForward": "openPreview", + "elevateIfNeeded": true + }, + "13444": { + "label": "Port 13444", + "elevateIfNeeded": true + }, + "3000": { + "label": "Port 3000", + "onAutoForward": "ignore", + "elevateIfNeeded": true + }, + "3001": { + "label": "Port 3001", + "onAutoForward": "ignore", + "elevateIfNeeded": true + }, + "3306": { + "label": "Port 3306", + "onAutoForward": "ignore", + "elevateIfNeeded": true + }, + "4000": { + "label": "Port 4000", + "onAutoForward": "ignore", + "elevateIfNeeded": true + }, + "5900": { + "label": "Port 5900", + "onAutoForward": "ignore", + "elevateIfNeeded": true + }, + "6080": { + "label": "Port 6080", + "onAutoForward": "ignore", + "elevateIfNeeded": true + }, + "7777": { + "label": "Port 7777", + "onAutoForward": "ignore", + "elevateIfNeeded": true + }, + "8022": { + "label": "Port 8022", + "onAutoForward": "ignore", + "elevateIfNeeded": true + }, + "9229": { + "label": "Port 9229", + "onAutoForward": "ignore", + "elevateIfNeeded": true + }, + "9999": { + "label": "Port 9999", + "onAutoForward": "ignore", + "elevateIfNeeded": true + } + }, + "customizations": { + "vscode": { + "extensions": [ + "EditorConfig.EditorConfig", + "golang.go", + "hashicorp.terraform", + "ms-azuretools.vscode-docker", + "ms-kubernetes-tools.vscode-kubernetes-tools", + "stkb.rewrap", + "zxh404.vscode-proto3", + "matthewpi.caddyfile-support", + "heptio.jsonnet", + "timonwong.shellcheck", + "fwcd.kotlin", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "akosyakov.gitpod-monitor", + "hbenl.vscode-mocha-test-adapter" + ] } + } } diff --git a/.gitignore b/.gitignore index c4cae571fe90df..6d36ce9ede3426 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,6 @@ dump.rdb # Claude settings .claude/settings.local.json + +# Gitpod mcp-config.json +.gitpod/mcp-config.json diff --git a/.gitpod/automations.yaml b/.gitpod/automations.yaml new file mode 100644 index 00000000000000..be1f0e764680a0 --- /dev/null +++ b/.gitpod/automations.yaml @@ -0,0 +1,74 @@ +tasks: + removeADCFile: + command: | + if [[ -n "${GCP_ADC_FILE}" ]]; then + echo "$GCP_ADC_FILE" > "/home/gitpod/.config/gcloud/application_default_credentials.json" + yes | gcloud auth application-default revoke + gp env -u GCP_ADC_FILE + fi + exit 0 + name: 'Remove GCP_ADC_FILE' + triggeredBy: + - postDevcontainerStart + installLocalAppCli: + command: | + leeway run components/local-app:install-cli + leeway run components/local-app:cli-completion + exit 0 + name: 'Install `gitpod` CLI' + triggeredBy: + - postDevcontainerStart + configurePreview: + command: INSTALL_CONTEXT=true leeway run dev/preview:configure-workspace + dependsOn: + - installPreviewctl + name: 'Preview environment configuration' + triggeredBy: + - postDevcontainerStart + buildJava: + command: | + if [ -z "$RUN_GRADLE_TASK" ]; then + read -r -p "Press enter to continue Java gradle task" + fi + leeway exec --package components/supervisor-api/java:lib --package components/gitpod-protocol/java:lib -- ./gradlew build + leeway exec --package components/ide/jetbrains/backend-plugin:plugin-latest --package components/ide/jetbrains/gateway-plugin:publish-latest --parallel -- ./gradlew buildPlugin + name: 'Java: build with Gradle' + setupClaudeCode: + command: | + if [[ -z "${CLAUDE_JSON}" ]]; then + echo "Skipping setup for Claude Code. Setup a CLAUDE_JSON variable to reuse Claude Code in workspaces." + else + echo $CLAUDE_JSON > ~/.claude.json + fi + name: 'claude code' + triggeredBy: + - postDevcontainerStart + installPreviewctl: + command: leeway run dev/preview/previewctl:install + name: 'Preview environment configuration: init' + installInstallerDependencies: + command: | + (cd install/installer && make deps) + exit 0 + name: 'Installer dependencies' + triggeredBy: + - postDevcontainerStart + buildTypescript: + command: yarn --network-timeout 100000 && yarn build + name: 'TypeScript: install and build' + triggeredBy: + - postDevcontainerStart + setupPreCommit: + command: | + pre-commit install --install-hooks + exit 0 + name: 'Install pre-commit hooks' + triggeredBy: + - postDevcontainerStart + initGo: + command: | + ./components/gitpod-protocol/go/scripts/generate-config.sh + leeway exec --filter-type go -v -- go mod verify + name: 'Go: init' + triggeredBy: + - postDevcontainerStart diff --git a/dev/install-dependencies.sh b/dev/install-dependencies.sh deleted file mode 100755 index dc674943d0da64..00000000000000 --- a/dev/install-dependencies.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" -leeway run dev/preview:configure-workspace -leeway run dev:install-dev-utils -leeway run dev/preview/previewctl:install -pre-commit install --install-hooks From 02e10caae4bae2b642e30adaf3f621b51778d3fb Mon Sep 17 00:00:00 2001 From: Gero Posmyk-Leinemann Date: Wed, 23 Jul 2025 08:39:46 +0000 Subject: [PATCH 2/2] Review comments Co-authored-by: Ona --- .devcontainer/devcontainer.json | 83 --------------------------------- .gitpod/automations.yaml | 24 ---------- 2 files changed, 107 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 94b4b486b1fabc..df755d3e1680e2 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -16,87 +16,6 @@ "GIT_EDITOR": "code --wait", "KUBE_EDITOR": "code --wait" }, - "forwardPorts": [ - 1337, - 3000, - 3001, - 3306, - 4000, - 5900, - 6080, - 7777, - 9229, - 9999, - 13001, - 13444, - 8022 - ], - "portsAttributes": { - "13001": { - "label": "Port 13001", - "onAutoForward": "ignore", - "elevateIfNeeded": true - }, - "1337": { - "label": "Port 1337", - "onAutoForward": "openPreview", - "elevateIfNeeded": true - }, - "13444": { - "label": "Port 13444", - "elevateIfNeeded": true - }, - "3000": { - "label": "Port 3000", - "onAutoForward": "ignore", - "elevateIfNeeded": true - }, - "3001": { - "label": "Port 3001", - "onAutoForward": "ignore", - "elevateIfNeeded": true - }, - "3306": { - "label": "Port 3306", - "onAutoForward": "ignore", - "elevateIfNeeded": true - }, - "4000": { - "label": "Port 4000", - "onAutoForward": "ignore", - "elevateIfNeeded": true - }, - "5900": { - "label": "Port 5900", - "onAutoForward": "ignore", - "elevateIfNeeded": true - }, - "6080": { - "label": "Port 6080", - "onAutoForward": "ignore", - "elevateIfNeeded": true - }, - "7777": { - "label": "Port 7777", - "onAutoForward": "ignore", - "elevateIfNeeded": true - }, - "8022": { - "label": "Port 8022", - "onAutoForward": "ignore", - "elevateIfNeeded": true - }, - "9229": { - "label": "Port 9229", - "onAutoForward": "ignore", - "elevateIfNeeded": true - }, - "9999": { - "label": "Port 9999", - "onAutoForward": "ignore", - "elevateIfNeeded": true - } - }, "customizations": { "vscode": { "extensions": [ @@ -108,12 +27,10 @@ "stkb.rewrap", "zxh404.vscode-proto3", "matthewpi.caddyfile-support", - "heptio.jsonnet", "timonwong.shellcheck", "fwcd.kotlin", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", - "akosyakov.gitpod-monitor", "hbenl.vscode-mocha-test-adapter" ] } diff --git a/.gitpod/automations.yaml b/.gitpod/automations.yaml index be1f0e764680a0..c29a9ed4021a67 100644 --- a/.gitpod/automations.yaml +++ b/.gitpod/automations.yaml @@ -1,15 +1,4 @@ tasks: - removeADCFile: - command: | - if [[ -n "${GCP_ADC_FILE}" ]]; then - echo "$GCP_ADC_FILE" > "/home/gitpod/.config/gcloud/application_default_credentials.json" - yes | gcloud auth application-default revoke - gp env -u GCP_ADC_FILE - fi - exit 0 - name: 'Remove GCP_ADC_FILE' - triggeredBy: - - postDevcontainerStart installLocalAppCli: command: | leeway run components/local-app:install-cli @@ -27,22 +16,9 @@ tasks: - postDevcontainerStart buildJava: command: | - if [ -z "$RUN_GRADLE_TASK" ]; then - read -r -p "Press enter to continue Java gradle task" - fi leeway exec --package components/supervisor-api/java:lib --package components/gitpod-protocol/java:lib -- ./gradlew build leeway exec --package components/ide/jetbrains/backend-plugin:plugin-latest --package components/ide/jetbrains/gateway-plugin:publish-latest --parallel -- ./gradlew buildPlugin name: 'Java: build with Gradle' - setupClaudeCode: - command: | - if [[ -z "${CLAUDE_JSON}" ]]; then - echo "Skipping setup for Claude Code. Setup a CLAUDE_JSON variable to reuse Claude Code in workspaces." - else - echo $CLAUDE_JSON > ~/.claude.json - fi - name: 'claude code' - triggeredBy: - - postDevcontainerStart installPreviewctl: command: leeway run dev/preview/previewctl:install name: 'Preview environment configuration: init'