Skip to content

Latest commit

 

History

History
426 lines (350 loc) · 11.3 KB

File metadata and controls

426 lines (350 loc) · 11.3 KB

Setup Droplet DigitalOcean para Compilar Codea Studio Code

1. Crear Droplet en DigitalOcean

Paso a Paso:

  1. Ve a https://cloud.digitalocean.com/droplets/new
  2. Choose Region: Escoge el mas cercano (New York, Amsterdam, etc.)
  3. Choose an image: Ubuntu 22.04 (LTS) x64
  4. Choose Size: Premium AMD - 8 vCPUs, 32 GB RAM
  5. Choose Authentication: SSH Key (mas seguro) o Password
  6. Hostname: codea-builder
  7. Create Droplet

TIP: Pagar solo cuando compiles

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

2. Configurar el Servidor

# 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/CodeaStudioCode

3. Script Automatizado de Build + Upload

Crea este script en tu droplet:

# En el droplet
nano ~/build-release.sh

Pega 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

4. Uso

Compilar y subir release completo:

# En el droplet
./build-release.sh 1.109.0

Que hace:

  1. Compila Windows ARM64 -> Sube a GitHub -> Borra local
  2. Compila Windows x64 -> Sube a GitHub -> Borra local
  3. Compila Linux x64 -> Sube a GitHub -> Borra local
  4. Compila Linux ARM64 -> Sube a GitHub -> Borra local
  5. Compila macOS ARM64 -> Sube a GitHub -> Borra local
  6. 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

5. Apagar/Prender Droplet (Ahorrar Dinero)

Desde la Web:

  1. https://cloud.digitalocean.com/droplets
  2. Click en "codea-builder"
  3. Power Off cuando termines
  4. Power On cuando vayas a compilar

Desde CLI (doctl):

# 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>

6. Tips

  1. 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"
  2. Snapshot del droplet:

    • DigitalOcean -> Snapshots -> Create Snapshot
    • Restaura rapido si algo falla
  3. Limpiar espacio:

    npm cache clean --force
    rm -rf ~/.npm
    rm -rf ~/CodeaStudioCode/node_modules/.cache

Resumen - Tu Setup de 32GB RAM

Pasos:

  1. Crear droplet (32GB RAM - $0.238/hora)
  2. Configurar servidor (seccion 2)
  3. Crear script (seccion 3)
  4. Ejecutar: ./build-release.sh 1.109.0
  5. Apagar droplet

Lo que obtienes:

  • Windows ARM64 (tu prioridad)
  • Windows x64
  • Linux x64
  • Linux ARM64
  • macOS ARM64

Cada uno se sube a GitHub apenas termina de compilar.

Costos con 32GB:

  • Build completo: ~60 minutos = $0.24
  • 10 releases/mes: $2.40/mes
  • Apagando entre builds: Solo pagas cuando compiles

Ventajas de 32GB:

  • Compilacion completa con minificacion
  • Binarios optimizados (20-30% mas pequenos)
  • No hay problemas de memoria
  • Builds mas rapidos y confiables