From df502380828cda465f8643cd2df7cc89a57f4943 Mon Sep 17 00:00:00 2001 From: Mauricio Astudillo Toledo Date: Mon, 22 Jun 2026 17:08:16 +0000 Subject: [PATCH] chore: add devcontainer --- .devcontainer/Dockerfile | 9 ++ .devcontainer/devcontainer-lock.json | 19 +++ .devcontainer/devcontainer.json | 197 +++++++++++++++++++++++++++ .devcontainer/post-create.sh | 12 ++ README.md | 2 + 5 files changed, 239 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer-lock.json create mode 100644 .devcontainer/devcontainer.json create mode 100755 .devcontainer/post-create.sh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..9dbab2f --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,9 @@ +FROM mcr.microsoft.com/devcontainers/java:21 + +USER root + +RUN apt-get update \ + && apt-get install -y --no-install-recommends ripgrep \ + && rm -rf /var/lib/apt/lists/* + +USER vscode diff --git a/.devcontainer/devcontainer-lock.json b/.devcontainer/devcontainer-lock.json new file mode 100644 index 0000000..cf38368 --- /dev/null +++ b/.devcontainer/devcontainer-lock.json @@ -0,0 +1,19 @@ +{ + "features": { + "ghcr.io/devcontainers-extra/features/zsh-plugins:0": { + "version": "0.0.5", + "resolved": "ghcr.io/devcontainers-extra/features/zsh-plugins@sha256:4dcc8e97307345cff26c2b4dfd840c2947b8b5bb20f492a68bdb9fbe9ccb67ba", + "integrity": "sha256:4dcc8e97307345cff26c2b4dfd840c2947b8b5bb20f492a68bdb9fbe9ccb67ba" + }, + "ghcr.io/devcontainers/features/java:1": { + "version": "1.8.0", + "resolved": "ghcr.io/devcontainers/features/java@sha256:9663ce0219ff85786e87901ce5f0a59f488edd5f99b46015192cda48468b233a", + "integrity": "sha256:9663ce0219ff85786e87901ce5f0a59f488edd5f99b46015192cda48468b233a" + }, + "ghcr.io/devcontainers/features/node:1": { + "version": "1.7.1", + "resolved": "ghcr.io/devcontainers/features/node@sha256:8c0de46939b61958041700ee89e3493f3b2e4131a06dc46b4d9423427d06e5f6", + "integrity": "sha256:8c0de46939b61958041700ee89e3493f3b2e4131a06dc46b4d9423427d06e5f6" + } + } +} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..b163064 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,197 @@ +{ + "name": "Transbank SDK Java Development Container", + "build": { + "dockerfile": "Dockerfile", + "context": ".." + }, + "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + "postCreateCommand": "bash .devcontainer/post-create.sh", + "forwardPorts": [ + 8080 + ], + "remoteUser": "vscode", + "mounts": [ + "source=transbank-maven-cache,target=/home/vscode/.m2,type=volume", + "source=${localEnv:HOME}/.ssh,target=/home/vscode/.ssh,type=bind,consistency=cached" + ], + "features": { + "ghcr.io/devcontainers/features/java:1": { + "version": "none", + "installMaven": "true", + "installGradle": "false" + }, + "ghcr.io/devcontainers/features/node:1": { + "version": "24", + "installYarn": "false" + }, + "ghcr.io/devcontainers-extra/features/zsh-plugins:0": { + "plugins": "git zsh-autosuggestions zsh-syntax-highlighting", + "omzPlugins": "https://github.com/zsh-users/zsh-autosuggestions https://github.com/zsh-users/zsh-syntax-highlighting" + } + }, + "customizations": { + "vscode": { + "extensions": [ + "redhat.java", // Language Support for Java + "vscjava.vscode-java-pack", // Extension Pack for Java (Language Support, Debugger, Test Runner, Maven) + "GabrielBB.vscode-lombok", // Lombok Annotations Support + "sonarsource.sonarlint-vscode", // SonarLint (mismo análisis que el CI) + "usernamehw.errorlens", // Error Lens - Muestra errores inline en el código + "ryanluker.vscode-coverage-gutters", // Coverage Gutters - Visualiza cobertura de tests + "ms-vsliveshare.vsliveshare", // Live Share - Colaboración en tiempo real + "gruntfuggly.todo-tree", // TODO Tree - Gestiona TODOs, FIXMEs, etc + "aaron-bond.better-comments", // Better Comments - Comentarios coloreados + "redhat.vscode-xml", // Soporte XML para pom.xml + "fill-labs.dependi", // Dependi - Gestor de dependencias + "vscode-icons-team.vscode-icons", // Iconos para archivos + "github.vscode-github-actions", // GitHub Actions - Si usan CI/CD con GitHub + "ms-azuretools.vscode-docker", // Docker support + "adpyke.codesnap", // CodeSnap - Screenshots de código para docs + "editorconfig.editorconfig", // EditorConfig - Consistencia de código + "esbenp.prettier-vscode", // Prettier - Solo para JSON, YAML, MD (NO Java) + "yzhang.markdown-all-in-one", // Markdown All in One + "shd101wyy.markdown-preview-enhanced" // Markdown Preview Enhanced + ], + "settings": { + "java.configuration.runtimes": [ + { + "name": "JavaSE-21", + "path": "/usr/lib/jvm/msopenjdk-current", + "default": true + } + ], + "java.compile.nullAnalysis.mode": "automatic", + "java.test.config": { + "vmArgs": [ + "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" + ] + }, + // Lombok: habilitar procesador de anotaciones + "java.jdt.ls.lombokSupport.enabled": true, + "remote.extensionKind": { + "redhat.java": [ + "workspace" + ], + "vscjava.vscode-java-test": [ + "workspace" + ], + "vscjava.vscode-maven": [ + "workspace" + ], + "redhat.vscode-xml": [ + "workspace" + ], + "GabrielBB.vscode-lombok": [ + "workspace" + ], + "gruntfuggly.todo-tree": [ + "workspace" + ], + "ms-azuretools.vscode-docker": [ + "workspace" + ], + "github.vscode-github-actions": [ + "workspace" + ], + "editorconfig.editorconfig": [ + "workspace" + ], + "esbenp.prettier-vscode": [ + "workspace" + ], + "github.copilot": [ + "ui" + ], + "github.copilot-chat": [ + "ui" + ], + "sonarsource.sonarlint-vscode": [ + "workspace" + ] + }, + "github.copilot.nextEditSuggestions.enabled": true, + "git.enableCommitSigning": false, + "maven.executable.preferMavenWrapper": false, + "maven.terminal.useJavaHome": true, + "maven.view": "hierarchical", + "explorer.confirmDelete": false, + "explorer.confirmDragAndDrop": false, + "editor.bracketPairColorization.enabled": true, + "editor.guides.bracketPairs": true, + "editor.guides.bracketPairsHorizontal": true, + "editor.autoClosingBrackets": "always", + "editor.linkedEditing": true, + "editor.fontLigatures": true, + "editor.suggestSelection": "first", + "editor.inlineSuggest.enabled": true, + "editor.codeLens": true, + "editor.formatOnSave": true, + "editor.rulers": [ + 120 + ], + "editor.unicodeHighlight.invisibleCharacters": false, + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit" + }, + "todo-tree.ripgrep.ripgrep": "/usr/bin/rg", + "terminal.integrated.defaultProfile.linux": "zsh", + "terminal.integrated.profiles.linux": { + "zsh": { + "path": "/usr/bin/zsh" + } + }, + "[java]": { + "editor.defaultFormatter": "redhat.java", + "editor.formatOnSave": true, + "editor.tabSize": 4, + "editor.insertSpaces": true + }, + "[xml]": { + "editor.defaultFormatter": "redhat.vscode-xml", + "editor.tabSize": 2, + "editor.formatOnSave": true + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.tabSize": 2 + }, + "files.insertFinalNewline": true, + "files.trimTrailingWhitespace": true, + "files.watcherExclude": { + "**/target/**": true, + "**/node_modules/**": true, + "**/vendor/**": true, + "**/.git/objects/**": true, + "**/.git/subtree-cache/**": true, + "**/.m2/repository/**": true, + "**/var/cache/**": true + }, + "files.associations": { + "*.java": "java", + "pom.xml": "xml" + }, + "extensions.autoUpdate": false, + "extensions.autoCheckUpdates": false, + "extensions.ignoreRecommendations": true, + "remote.containers.installRecommendedExtensions": false, + "settingsSync.enabled": false, + "errorLens.enabledDiagnosticLevels": [ + "error", + "warning", + "info" + ], + "errorLens.excludeBySource": [ + "cSpell" + ], + "coverage-gutters.coverageFileNames": [ + "target/site/jacoco/jacoco.xml", + "jacoco.xml", + "coverage/lcov.info" + ], + "coverage-gutters.showLineCoverage": true, + "coverage-gutters.showRulerCoverage": true, + "sonarlint.pathToNodeExecutable": "/usr/local/share/nvm/current/bin/node" + } + } + } +} diff --git a/.devcontainer/post-create.sh b/.devcontainer/post-create.sh new file mode 100755 index 0000000..5169e0d --- /dev/null +++ b/.devcontainer/post-create.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +set -euo pipefail + +cd "$(dirname "${BASH_SOURCE[0]}")/.." + +if mvn clean install -P no-gpg --no-transfer-progress; then + echo "Build OK" +else + echo "Build FAILED - revisa los errores" + exit 1 +fi diff --git a/README.md b/README.md index e1f4a52..ba03524 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ Proyecto de ejemplo mostrando el paso a paso de como usar el SDK Java de transba - Thymeleaf - Lombok +El contenedor de desarrollo usa Java 21 para el editor, las extensiones y el entorno de ejecución, pero el proyecto sigue compilando para Java 17 según `pom.xml`. + ## Instalación Una vez tengas clonado el repositorio, debes instalar las dependencias del proyecto. Corre los siguientes comandos en una terminal para instalar las dependencias: