mirror of
https://github.com/melgarafael/DeskcommCRM.git
synced 2026-10-02 01:28:34 +08:00
fix(imagens): a imagem de voz também declara a versão depois do pnpm install (#1569)
O PR corrigiu app, worker e scheduler, mas o workflow publica QUATRO
imagens: o Dockerfile.voice-agent ainda declarava ARG/ENV APP_VERSION
antes do `pnpm install`, e refazia a instalação inteira a cada release.
- Dockerfile.voice-agent: ARG/ENV APP_VERSION descem para depois de
`COPY . .`, no mesmo padrão do Dockerfile.worker do PR.
- Teste de packaging: nenhum `RUN` pode vir depois de `ARG APP_VERSION`
nos quatro Dockerfiles publicados. Sabotado: com o voice-agent do head
do PR, reprova citando Dockerfile.voice-agent.
- Fragmento: "três imagens" passa a "quatro", o agente de voz entra na
frase do pnpm install, e o crédito segue o formato dos demais
("Contribuição de @bonito-system (#1569).").
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N9fyW7pXJCsyDPtu5PoQpN
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
61c4b46dd2
commit
492d4a2b44
@@ -4,4 +4,4 @@ secao: alterado
|
||||
titulo: A construção das imagens não reinstala as dependências só porque o número da versão mudou
|
||||
---
|
||||
|
||||
As três imagens declaravam o número da versão antes das etapas mais demoradas da construção, e isso fazia o Docker refazer essas etapas em toda versão nova: no worker, a instalação inteira das dependências; no app e no scheduler, a instalação dos pacotes do sistema. Agora o número entra no fim, e essas etapas são reaproveitadas de uma versão para a outra. Nada muda no que a imagem contém nem no que quem opera precisa fazer. Crédito: @bonito-system.
|
||||
As quatro imagens declaravam o número da versão antes das etapas mais demoradas da construção, e isso fazia o Docker refazer essas etapas em toda versão nova: no worker e no agente de voz, a instalação inteira das dependências; no app e no scheduler, a instalação dos pacotes do sistema. Agora o número entra no fim, e essas etapas são reaproveitadas de uma versão para a outra. Nada muda no que a imagem contém nem no que quem opera precisa fazer. Contribuição de @bonito-system (#1569).
|
||||
|
||||
@@ -8,8 +8,6 @@ LABEL org.opencontainers.image.source="https://github.com/melgarafael/DeskcommCR
|
||||
org.opencontainers.image.licenses="MIT" \
|
||||
org.opencontainers.image.title="DeskcommCRM voice-agent"
|
||||
|
||||
ARG APP_VERSION=dev
|
||||
ENV APP_VERSION=$APP_VERSION
|
||||
RUN corepack enable && corepack prepare pnpm@9.15.9 --activate
|
||||
|
||||
COPY package.json pnpm-lock.yaml ./
|
||||
@@ -22,4 +20,11 @@ RUN pnpm install --frozen-lockfile
|
||||
|
||||
COPY . .
|
||||
|
||||
# A versão por ÚLTIMO, como no Dockerfile.worker. Declarada antes do `pnpm install`,
|
||||
# a instrução `ARG` entrava na chave de cache de tudo o que vem depois e a
|
||||
# instalação INTEIRA de dependências era refeita a cada release, só porque o
|
||||
# número mudou. Aqui ela só invalida o que não custa nada.
|
||||
ARG APP_VERSION=dev
|
||||
ENV APP_VERSION=$APP_VERSION
|
||||
|
||||
CMD ["pnpm", "exec", "tsx", "workers/voice-agent/index.ts"]
|
||||
|
||||
@@ -249,6 +249,23 @@ describe("packaging — o artefato que o cliente instala", () => {
|
||||
}
|
||||
});
|
||||
|
||||
it("a versão vem depois das camadas caras em cada Dockerfile publicado", () => {
|
||||
// `ARG` entra na chave de cache de toda instrução seguinte do estágio. Com
|
||||
// APP_VERSION acima de um `RUN`, cada release refaz esse `RUN` (o `pnpm
|
||||
// install` inteiro, no worker e na voz) só porque o número mudou (#1569).
|
||||
for (const arquivo of [
|
||||
"Dockerfile",
|
||||
"Dockerfile.worker",
|
||||
"Dockerfile.scheduler",
|
||||
"Dockerfile.voice-agent",
|
||||
]) {
|
||||
const linhas = fs.readFileSync(path.join(RAIZ, arquivo), "utf8").split("\n");
|
||||
const arg = linhas.findIndex((l) => /^ARG APP_VERSION/.test(l));
|
||||
const runsDepois = linhas.slice(arg + 1).filter((l) => /^RUN /.test(l));
|
||||
expect(runsDepois, `${arquivo}: RUN depois de ARG APP_VERSION`).toEqual([]);
|
||||
}
|
||||
});
|
||||
|
||||
it("o workflow publica as quatro imagens e injeta APP_VERSION", () => {
|
||||
const wf = fs.readFileSync(path.join(RAIZ, ".github/workflows/publish-image.yml"), "utf8");
|
||||
for (const imagem of [
|
||||
|
||||
Reference in New Issue
Block a user