# Fix CI: apt-get update falla tras actualizar la imagen base

## Contexto

El pipeline de `vscode-server` (`.gitea/workflows/main-workflow.yml`) construye la imagen a partir de
`FROM gitea.p-lao.com/aleleba/vscode:latest`, publicada manualmente desde el repo separado
`aleleba-vscode-dockerfile-configuration` (sin CI propia — se sube a mano).

Revisé el log del run fallido (run #34, job 1542,
https://gitea.p-lao.com/aleleba/vscode-server/actions/runs/34/jobs/0) y el primer paso que rompe es
`RUN sudo apt-get update` en [Dockerfile:14](Dockerfile#L14):

```
Err:4 https://packages.microsoft.com/repos/code stable InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY EB3E94ADBE1229CF
E: The repository 'https://packages.microsoft.com/repos/code stable InRelease' is not signed.
```

**Causa raíz:** el Dockerfile de la imagen base agrega el repo de VS Code a mano vía
`add-apt-repository "deb [arch=...] https://packages.microsoft.com/repos/vscode stable main"` y confía la
clave de Microsoft con el método legacy `apt-key add` (keyring global `/etc/apt/trusted.gpg`). Pero el
propio paquete `.deb` de `code` (instalado sin versión fija, siempre "latest") sobreescribe
`/etc/apt/sources.list.d/vscode.list` apuntando a una ruta distinta —
`https://packages.microsoft.com/repos/code` — y añadiendo `signed-by=/etc/apt/keyrings/packages.microsoft.gpg`,
un keyring que el Dockerfile de la imagen base nunca crea. Como ese Dockerfile no vuelve a correr
`apt-get update` después de instalar `code`, el problema queda dormido en la imagen — y sólo se dispara la
próxima vez que alguien corre `apt-get update` sobre esa capa, que es justo lo primero que hace
`vscode-server` en su propio Dockerfile. Esto explica por qué el mismo commit (`62a2849`) tuvo corridas
exitosas (#32, #33) y luego falló (#34): la imagen `:latest` cambió por debajo (rebuild manual del usuario)
sin que cambiara el código de este repo.

Se optó por resolverlo del lado de `vscode-server` (en vez de tocar el repo de la imagen base, que no está
abierto en esta sesión) porque desbloquea el CI de inmediato y no depende de reconstruir/republicar la
imagen base.

## Cambio

En [Dockerfile](Dockerfile), antes del `RUN sudo apt-get update` inicial (línea 14), eliminar el archivo de
fuentes de VS Code que quedó roto — ya no hace falta: `code` ya está instalado en la imagen base, y este
repo no necesita volver a instalarlo ni actualizarlo.

```dockerfile
# Single apt update at the beginning

# The VS Code apt source baked into the base image points at a signed-by keyring
# that was never created, breaking `apt-get update` on any layer built on top of it.
# code is already installed in the base image, so this repo doesn't need the repo entry.
RUN sudo rm -f /etc/apt/sources.list.d/vscode.list /etc/apt/sources.list.d/vscode.sources

RUN sudo apt-get update
```

No se requieren más cambios en el Dockerfile: el resto de los pasos y el workflow de Gitea Actions no están
involucrados en el fallo.

## Bump de versión en README

El [README.md](README.md#L11) trae un `## Version` (actualmente `1.2.1`) que se incrementa manualmente en
cada cambio publicable. Subir a `1.2.2` (patch, es un fix) junto con el cambio del Dockerfile.

## Commit, tag y push

Este repo no usa PRs: los cambios van directo a `master` y el push dispara el workflow
(`on: push: branches: [ master ]`). Además se tagea la versión para dejar un punto de referencia.

1. `git add Dockerfile README.md`
2. `git commit -m "Fix VS Code apt source breaking apt-get update on the base image"`
3. `git tag v1.2.2`
4. `git push origin master`
5. `git push origin v1.2.2`

## Verificación

1. Ejecutar `docker build --platform linux/amd64 -t vscode-server-test .` localmente (o `docker buildx
   build --platform linux/amd64,linux/arm64 ...` para replicar el multi-arch del CI) y confirmar que el
   paso `apt-get update` y la instalación de paquetes completan sin el error `NO_PUBKEY`.
2. Tras el push, confirmar en https://gitea.p-lao.com/aleleba/vscode-server/actions que el job
   `build-and-push` termina en verde para ambas plataformas.
3. (Opcional, recomendado para evitar que el problema reaparezca en la imagen base) Actualizar el
   Dockerfile de `aleleba-vscode-dockerfile-configuration` para usar el método moderno `signed-by` en vez de
   `apt-key add`, de forma que la clave quede en el mismo keyring que el paquete `code` espera. Esto queda
   fuera del alcance de este cambio ya que ese repo no está abierto en esta sesión.
