- Ve a https://cloud.digitalocean.com/droplets/new
- Choose Region: Escoge el mas cercano (New York, Amsterdam, etc.)
- Choose an image: Ubuntu 22.04 (LTS) x64
- Choose Size: Premium AMD - 8 vCPUs, 32 GB RAM
- Choose Authentication: SSH Key (mas seguro) o Password
- Hostname: codea-builder
- Create Droplet
Los droplets se cobran por hora. Apagalo cuando no lo uses:
- Basic 4GB: $0.036/hora
- 16GB: $0.119/hora
- 32GB: $0.238/hora (Recomendado para compilacion completa)
- Solo pagas las horas que esta encendido
# Conectar al droplet
ssh root@your-droplet-ip
# Actualizar sistema
apt update && apt upgrade -y
# Instalar dependencias base
apt install -y \
build-essential \
pkg-config \
libx11-dev \
libx11-xcb-dev \
libxkbfile-dev \
libsecret-1-dev \
libkrb5-dev \
git \
curl \
zip \
unzip \
p7zip-full \
xvfb
# Instalar herramientas para cross-compilation de Windows
dpkg --add-architecture i386
apt update
apt install -y \
mingw-w64 \
wine \
wine64 \
wine32
# Instalar Node.js 22
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs
# Verificar versiones
node --version # debe ser v22.x
npm --version
# Instalar GitHub CLI (para subir releases)
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | \
dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | \
tee /etc/apt/sources.list.d/github-cli.list > /dev/null
apt update
apt install gh -y
# Autenticar GitHub CLI
gh auth login
# Selecciona: GitHub.com -> HTTPS -> Yes -> Login with browser
# Clonar tu repo
cd ~
git clone https://github.com/OxyHQ/CodeaStudioCode.git
cd CodeaStudioCode
# IMPORTANTE: Configurar repo por defecto para gh
gh repo set-default OxyHQ/CodeaStudioCodeCrea este script en tu droplet:
# En el droplet
nano ~/build-release.shPega esto (compila UNA plataforma y la sube inmediatamente):
#!/bin/bash
set -e
VERSION=$1
if [ -z "$VERSION" ]; then
echo "Uso: ./build-release.sh 1.109.0"
exit 1
fi
# Configurar NODE con 30GB de RAM (tienes 32GB, dejar 2GB para sistema)
export NODE_OPTIONS="--max-old-space-size=30720"
cd ~/CodeaStudioCode
# Limpiar builds anteriores
echo "========================================="
echo "Limpiando builds anteriores..."
echo "========================================="
rm -rf ../VSCode-* ~/CodeaStudioCode-*.{tar.gz,zip,exe}
# Actualizar codigo
echo ""
echo "========================================="
echo "Actualizando codigo..."
echo "========================================="
git fetch --all --tags
git checkout main
git pull
# Instalar/actualizar dependencias
echo ""
echo "========================================="
echo "Instalando dependencias..."
echo "========================================="
npm ci
# Compilar codigo (una vez para todas las plataformas)
echo ""
echo "========================================="
echo "Compilando codigo base..."
echo "========================================="
npm run compile-build
npm run compile-extensions-build
npm run minify-vscode
# Funcion para subir a GitHub
upload_to_github() {
local file=$1
local platform=$2
echo ""
echo ">>> Subiendo ${platform} a GitHub..."
# Crear release si no existe, o agregar asset si existe
if ! gh release view v${VERSION} > /dev/null 2>&1; then
# Primera plataforma - crear release
gh release create v${VERSION} \
--title "Codea Studio Code ${VERSION}" \
--notes "## Codea Studio Code ${VERSION}
### Compilando plataformas...
- ${platform} - Disponible ahora
- Otras plataformas compilandose...
_Actualizado automaticamente mientras compila._" \
--prerelease \
${file}
echo ">>> Release creado y ${platform} subido"
else
# Release existe - agregar asset
gh release upload v${VERSION} ${file} --clobber
echo ">>> ${platform} subido a release existente"
fi
# Borrar archivo local para ahorrar espacio
rm -f ${file}
echo ">>> Archivo local eliminado (ya esta en GitHub)"
}
# ============================================
# WINDOWS ARM64 (Prioridad #1)
# ============================================
echo ""
echo "========================================="
echo "Building Windows ARM64 (1/5)..."
echo "========================================="
# || true ignora errores de rcedit (solo afecta iconos, no funcionalidad)
npm run gulp -- vscode-win32-arm64-min || true
if [ -d "../VSCode-win32-arm64" ]; then
cd ../VSCode-win32-arm64
ZIP_FILE=~/CodeaStudioCode-win32-arm64-v${VERSION}.zip
zip -r ${ZIP_FILE} *
echo ">>> Windows ARM64 compilado: $(du -h ${ZIP_FILE} | cut -f1)"
cd ~/CodeaStudioCode
upload_to_github ${ZIP_FILE} "Windows ARM64"
rm -rf ../VSCode-win32-arm64
else
echo ">>> ERROR: Windows ARM64 no se pudo compilar"
fi
# ============================================
# WINDOWS x64 (Prioridad #2)
# ============================================
echo ""
echo "========================================="
echo "Building Windows x64 (2/5)..."
echo "========================================="
npm run gulp -- vscode-win32-x64-min || true
if [ -d "../VSCode-win32-x64" ]; then
cd ../VSCode-win32-x64
ZIP_FILE=~/CodeaStudioCode-win32-x64-v${VERSION}.zip
zip -r ${ZIP_FILE} *
echo ">>> Windows x64 compilado: $(du -h ${ZIP_FILE} | cut -f1)"
cd ~/CodeaStudioCode
upload_to_github ${ZIP_FILE} "Windows x64"
rm -rf ../VSCode-win32-x64
else
echo ">>> ERROR: Windows x64 no se pudo compilar"
fi
# ============================================
# LINUX x64 (Prioridad #3)
# ============================================
echo ""
echo "========================================="
echo "Building Linux x64 (3/5)..."
echo "========================================="
npm run gulp -- vscode-linux-x64-min
cd ../VSCode-linux-x64
TAR_FILE=~/CodeaStudioCode-linux-x64-v${VERSION}.tar.gz
tar czf ${TAR_FILE} *
echo ">>> Linux x64 compilado: $(du -h ${TAR_FILE} | cut -f1)"
cd ~/CodeaStudioCode
# Subir inmediatamente
upload_to_github ${TAR_FILE} "Linux x64"
rm -rf ../VSCode-linux-x64
# ============================================
# LINUX ARM64 (Prioridad #4)
# ============================================
echo ""
echo "========================================="
echo "Building Linux ARM64 (4/5)..."
echo "========================================="
npm run gulp -- vscode-linux-arm64-min
cd ../VSCode-linux-arm64
TAR_FILE=~/CodeaStudioCode-linux-arm64-v${VERSION}.tar.gz
tar czf ${TAR_FILE} *
echo ">>> Linux ARM64 compilado: $(du -h ${TAR_FILE} | cut -f1)"
cd ~/CodeaStudioCode
# Subir inmediatamente
upload_to_github ${TAR_FILE} "Linux ARM64"
rm -rf ../VSCode-linux-arm64
# ============================================
# macOS ARM64 (Prioridad #5)
# ============================================
echo ""
echo "========================================="
echo "Building macOS ARM64 (5/5)..."
echo "========================================="
npm run gulp -- vscode-darwin-arm64-min
cd ../VSCode-darwin-arm64
TAR_FILE=~/CodeaStudioCode-darwin-arm64-v${VERSION}.tar.gz
tar czf ${TAR_FILE} *
echo ">>> macOS ARM64 compilado: $(du -h ${TAR_FILE} | cut -f1)"
cd ~/CodeaStudioCode
# Subir inmediatamente
upload_to_github ${TAR_FILE} "macOS ARM64"
rm -rf ../VSCode-darwin-arm64
# ============================================
# FINALIZAR RELEASE
# ============================================
echo ""
echo "========================================="
echo "Actualizando notas de release..."
echo "========================================="
# Actualizar release notes con version final
gh release edit v${VERSION} \
--notes "## Codea Studio Code ${VERSION}
### Descargas disponibles:
| Plataforma | Arquitectura | Archivo |
|------------|--------------|---------|
| Windows | ARM64 | CodeaStudioCode-win32-arm64-v${VERSION}.zip |
| Windows | x64 | CodeaStudioCode-win32-x64-v${VERSION}.zip |
| Linux | x64 | CodeaStudioCode-linux-x64-v${VERSION}.tar.gz |
| Linux | ARM64 | CodeaStudioCode-linux-arm64-v${VERSION}.tar.gz |
| macOS | ARM64 (Apple Silicon) | CodeaStudioCode-darwin-arm64-v${VERSION}.tar.gz |
### Instalacion:
**Windows:** Descomprime el ZIP y ejecuta \`Code.exe\`
**Linux:** Descomprime el tar.gz y ejecuta \`./code\`
**macOS:** Descomprime el tar.gz y arrastra la app a Aplicaciones
---
Compilado en DigitalOcean con 32GB RAM" \
--prerelease=false
echo ""
echo "========================================="
echo ">>> RELEASE COMPLETO!"
echo "========================================="
echo ""
echo "Release: https://github.com/OxyHQ/CodeaStudioCode/releases/tag/v${VERSION}"
echo ""
echo "Todas las plataformas subidas:"
echo " - Windows ARM64"
echo " - Windows x64"
echo " - Linux x64"
echo " - Linux ARM64"
echo " - macOS ARM64"
echo ""Hacer ejecutable:
chmod +x ~/build-release.sh# En el droplet
./build-release.sh 1.109.0Que hace:
- Compila Windows ARM64 -> Sube a GitHub -> Borra local
- Compila Windows x64 -> Sube a GitHub -> Borra local
- Compila Linux x64 -> Sube a GitHub -> Borra local
- Compila Linux ARM64 -> Sube a GitHub -> Borra local
- Compila macOS ARM64 -> Sube a GitHub -> Borra local
- Actualiza release notes finales
Ventajas:
- Los usuarios pueden empezar a descargar mientras compila
- Si falla una plataforma, las anteriores ya estan
- Ahorra espacio en disco (borra cada build despues de subirlo)
- Menos RAM necesaria
- https://cloud.digitalocean.com/droplets
- Click en "codea-builder"
- Power Off cuando termines
- Power On cuando vayas a compilar
# En tu PC local
snap install doctl
doctl auth init
# Pega tu API token de: https://cloud.digitalocean.com/account/api/tokens
# Ver droplets
doctl compute droplet list
# Apagar
doctl compute droplet-action power-off <droplet-id>
# Prender
doctl compute droplet-action power-on <droplet-id>-
Compilar en background:
nohup ./build-release.sh 1.109.0 > build.log 2>&1 & # Ver progreso desde tu PC ssh root@droplet-ip "tail -f build.log"
-
Snapshot del droplet:
- DigitalOcean -> Snapshots -> Create Snapshot
- Restaura rapido si algo falla
-
Limpiar espacio:
npm cache clean --force rm -rf ~/.npm rm -rf ~/CodeaStudioCode/node_modules/.cache
- Crear droplet (32GB RAM - $0.238/hora)
- Configurar servidor (seccion 2)
- Crear script (seccion 3)
- Ejecutar:
./build-release.sh 1.109.0 - Apagar droplet
- Windows ARM64 (tu prioridad)
- Windows x64
- Linux x64
- Linux ARM64
- macOS ARM64
Cada uno se sube a GitHub apenas termina de compilar.
- Build completo: ~60 minutos = $0.24
- 10 releases/mes: $2.40/mes
- Apagando entre builds: Solo pagas cuando compiles
- Compilacion completa con minificacion
- Binarios optimizados (20-30% mas pequenos)
- No hay problemas de memoria
- Builds mas rapidos y confiables