Skip to content

fix(templates): usa path.Join para acessar manifestos embutidos (corrige Windows) - #207

Open
noskcaj21 wants to merge 1 commit into
badtuxx:mainfrom
noskcaj21:fix/windows-embed-path-separator
Open

fix(templates): usa path.Join para acessar manifestos embutidos (corrige Windows)#207
noskcaj21 wants to merge 1 commit into
badtuxx:mainfrom
noskcaj21:fix/windows-embed-path-separator

Conversation

@noskcaj21

Copy link
Copy Markdown

Problema

No Windows, girus create cluster cria o cluster Kind mas falha ao implantar o Girus com:

ERRO: Erro ao carregar o template: open manifests\defaultDeployment.yaml: file does not exist

O mesmo afeta o carregamento de laboratórios (GetManifest).

Causa

Em internal/templates/templates.go, o acesso aos manifestos embutidos (go:embed) usa filepath.Join:

return fs.ReadFile(ManifestFS, filepath.Join(dir, name))

filepath.Join usa o separador do SO — no Windows gera manifests\defaultDeployment.yaml (barra invertida). Mas embed.FS/io/fs sempre usam / como separador, independente do sistema operacional (doc io/fs). Assim, no Windows o fs.ReadFile recebe um caminho inválido e retorna "file does not exist", mesmo com o arquivo embutido no binário.

No Linux/macOS filepath.Join já usa /, por isso o bug não aparece nessas plataformas.

Correção

Trocar filepath.Join por path.Join (que sempre usa /) no acesso à embed.FS. Os demais usos de filepath.Join no projeto operam sobre o filesystem real do SO e foram mantidos.

// embed.FS sempre usa "/" como separador, independente do SO.
return fs.ReadFile(ManifestFS, path.Join(dir, name))

Teste

Testado no Windows 11 com o binário recompilado:

  • girus create cluster → implanta backend + frontend com sucesso (pods Running)
  • girus list labs → lista os laboratórios normalmente
  • Sem regressão no Linux (comportamento idêntico, já que path.Join e filepath.Join produzem / lá)

Mudança de 1 linha (+ import path e um comentário).

…Windows)

O acesso aos manifestos embutidos via go:embed usava filepath.Join, que no
Windows gera separador "\" (ex.: manifests\defaultDeployment.yaml). Porém a
embed.FS/io/fs sempre usa "/" como separador, independente do sistema
operacional. Isso fazia GetManifest falhar no Windows com
"file does not exist", quebrando `girus create cluster` (deploy) e o
carregamento de labs. No Linux/macOS filepath.Join usa "/" e por isso o bug
nao aparecia.

Troca filepath.Join por path.Join (que sempre usa "/") no acesso a embed.FS.

Testado no Windows 11: `girus create cluster` implanta o backend/frontend e
`girus list labs` passa a funcionar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant