Bastidores

Desenvolvimento· Arrumando a casa · parte 11

Cortei a publicação de 17 minutos para 4 na minha máquina.

Como medi o gargalo do build, passei a publicar da minha máquina com gate e ship e mantive uma rede curta no GitHub Actions.

Barra longa de 17 minutos no GitHub Actions ao lado de uma barra curta de 4 minutos na máquina local.

A espera revelou o lugar errado para otimizar

Em novembro, o GitHub Actions acumulou 2.945 minutos no mês, sendo 2.244 em um único dia. Nas 12 falhas mais recentes de um produto que ainda não apresentei aqui, 7 aconteceram no deploy e 4 em checagens de código. Eu estava esperando uma máquina remota repetir trabalho que a minha podia provar.

Antes de mudar o processo, medi as partes do build. Eu suspeitava dos idiomas, que levavam 42 s em paralelo. O gargalo real eram 1.826 imagens refeitas a cada build, em 230 s.

A diferença orientou a correção: reaproveitar trabalho quando aquilo que o determina não mudou e executar tarefas independentes em paralelo. Sem essa medição, eu poderia otimizar os idiomas e deixar o trecho mais demorado no mesmo lugar.

O gate prova e o ship publica

O comando bun gate executa a suíte em uma cópia limpa do commit. O resultado fica associado à árvore comprovada, e o pre-push chama o gate. Assim, a mesma árvore não precisa ser provada novamente.

O bun ship publica a partir de uma cópia limpa da ponta da main, com uma trava para evitar publicações concorrentes. Ele começa por staging, confere o resultado e só então avança para produção. Se uma tentativa falha, outra pode retomar sem repetir o ambiente que já está naquela revisão.

Também há recusas explícitas: uma pasta com alterações soltas não publica, um script de release chamado diretamente é recusado e uma revisão mais antiga que a publicada não passa. Essas condições mantêm a velocidade ligada a uma revisão identificável.

O GitHub continua como rede de proteção

No push, o GitHub verifica segredos, formato e lint em cerca de 1 minuto. Trabalhos que precisam rodar com o Mac desligado continuam lá, assim como aqueles que exigem outra arquitetura ou assinatura de loja. O teste de ponta a ponta roda localmente antes da publicação que pode afetá-lo.

Na medição de 4 de novembro, a publicação de staging e produção passou de 17m39s, além da fila, para 4m29s na máquina. Quando o teste de ponta a ponta precisa rodar, o processo local leva cerca de 3 minutos a mais.

O Garfim ainda falta migrar. A regra é um padrão de trabalho, e cada produto precisa ter sua implementação adequada ao próprio repositório.

A decisão aceita riscos e tem prazo de revisão

Com o Mac desligado ou quebrado, a publicação de código para, e o agendado continua. A recuperação é qualquer máquina com o checkout e as credenciais. Uma sessão de agente nessa máquina consegue publicar em produção; a proteção depende do portão e da regra de publicar quando pedido, sem uma barreira técnica para essa autorização.

O build também roda em macOS, enquanto a publicação precisa funcionar no ambiente de destino. O teste de staging e a conferência do resultado publicado ajudam a encontrar diferenças. Quando um segundo desenvolvedor entrar no repositório, vou reabrir a decisão: minha máquina deixa de ser passagem obrigatória para todo commit.

CI/CD reúne as verificações e as etapas que levam uma alteração até a publicação. Para escolher onde cada etapa roda, eu primeiro preciso saber o que ela protege e se realmente depende de uma máquina remota.

A cópia limpa é parte dessa resposta. Ela impede que um arquivo alterado apenas na pasta de trabalho entre na prova ou na publicação por acidente. Quando o resultado do gate fica ligado à árvore conferida, posso identificar exatamente o que passou pelas verificações.

O staging também tem uma função específica: receber a revisão antes de produção para que eu confira o resultado no ambiente publicado. Retomar a partir do ambiente que já recebeu aquela revisão evita repetir trabalho sem perder a identificação do que está no ar.

Para aplicar essa ideia em outro projeto, eu começaria anotando o tempo de cada parte, a fila e o destino das falhas recentes. Depois separaria as verificações que a máquina local consegue executar das tarefas que precisam do GitHub ligado quando o computador estiver desligado. A comparação precisa acompanhar a publicação inteira, não só o comando de build.

A regra de revisão com outro desenvolvedor também faz parte do desenho. Uma solução adequada para uma pessoa pode concentrar demais o processo quando há mais gente trabalhando. Registrar essa condição agora evita confundir a decisão atual com uma regra permanente.

A economia de espera veio de medir o caminho inteiro e assumir com clareza o que mudou. A conferência depois da publicação também fez parte da migração do meu site.

Teste local verde até no S23, e o staging ainda achou um defeito.08 nov · DesenvolvimentoOutra IA revisou 4.170 traduções da IA em inglês e corrigiu 307.08 nov · Inteligência artificialA conta live do Stripe estava ativa, mas falhou na minha conferência.08 nov · LançamentoTrês regras de HSTS num só domínio: por que deixei o preload de fora.08 nov · DesenvolvimentoUma palavra a menos derrubou 13 páginas que já estavam no ar.08 nov · DesenvolvimentoOutro agente de IA revisou meu código 71 vezes e criou dois defeitos.08 nov · Inteligência artificialDepois de 20 anos de carreira, publiquei meu primeiro pacote no npm.08 nov · LançamentoSozinho com IA: iPhone, Android, SaaS com MCP e CLI, e já faturando.07 nov · BastidoresCopiei a mecânica dos líderes e recusei a mentira deles.07 nov · BastidoresA pergunta de LGPD que trava a venda: e o backup?07 nov · ProdutoA IA calibrou minha câmera pelos números. Ficou cara de lanterna.07 nov · BastidoresUm usuário não via o dia de ontem. Abri todo o passado do Garfim.07 nov · Produto62% baixavam o Garfim. O problema estava antes da página.07 nov · LançamentoO idioma certo na tela pode virar o errado no servidor.07 nov · DesenvolvimentoO limite de 10 por minuto que deixou passar muito mais.07 nov · DesenvolvimentoUm PR do Dependabot travou meu banco e as rotas voltaram 500.07 nov · DesenvolvimentoMeus produtos novos não começam do zero. Começam de um clone.07 nov · DesenvolvimentoTirei uma trava da minha IA e a resposta caiu de 5,5 s para 3,7 s.07 nov · DesenvolvimentoTroquei velocidade por uma auditora que confere cada frase.07 nov · Inteligência artificialEscrevi o método CERNE lendo seis especificações reais.07 nov · Inteligência artificialComo anunciar na Meta e vender online no CPF sem abrir empresa.05 nov · BastidoresPausei anúncios depois de ignorar o resultado anterior.05 nov · BastidoresComo depurei um erro de API sem log no registro do Garfim.05 nov · DesenvolvimentoComo forçar atualização no React Native antes de um defeito grave.05 nov · DesenvolvimentoComo levei o LCP do ClipLeve de 9,9 s para menos de 1,5 s.05 nov · DesenvolvimentoPubliquei 650 páginas contra a regra do meu método.05 nov · Inteligência artificialUma conta para organizar erros, métricas e IA dos meus produtos.05 nov · BastidoresSeparei o painel do site e pus o Access na porta.05 nov · DesenvolvimentoUma lista de 69 itens encontrou requisitos só no papel.05 nov · BastidoresO antispam esperou tanto que parou o formulário.05 nov · DesenvolvimentoCortei a publicação de 17 minutos para 4 na minha máquina.05 nov · DesenvolvimentoEu gravo. A IA corta, legenda e entrega o vídeo curto.05 nov · Inteligência artificialComo criar anúncios UGC com IA usando o método PROVA.05 nov · Inteligência artificialA IA disse que usou as skills. A página provou o contrário.05 nov · Inteligência artificialNove páginas reprovadas antes de encontrar uma identidade.05 nov · Inteligência artificialEm 48 horas, juntei domínios, e‑mail, sites e medição num padrão só.30 out · BastidoresPor que tirei os três sites do GPT Sites.30 out · DesenvolvimentoComo troquei o luisjunior.ai com cerca de 10 segundos fora do ar.30 out · DesenvolvimentoRefiz o luisjunior.ai do zero: cada afirmação com prova.30 out · LançamentoUm padrão para todos os domínios, inclusive os de produtos futuros.30 out · BastidoresTodo o e‑mail dos meus domínios saiu do VPS num só dia.30 out · DesenvolvimentoDecidi mover o envio do Garfim do Resend para a Cloudflare.30 out · DesenvolvimentoO método FONTE para aparecer no Google e nas respostas de IA.30 out · Inteligência artificialTrês sites, três decisões de busca, e uma delas é não gerar páginas.30 out · Inteligência artificialMedição de vários sites num painel só, com consentimento.30 out · BastidoresComo a IA me apresenta mídias para aprovação29 out · Inteligência artificialO Garfim chegou ao Google Play. Agora tem Android e iPhone.22 out · LançamentoConseguir testadores e esperar 14 dias: a reta final do Garfim no Android.22 out · BastidoresO ClipLeve chegou à App Store. O que aprendi até aqui.20 out · LançamentoO ClipLeve foi rejeitado de novo. Dessa vez, por uma palavra.20 out · ProdutoO Garfim foi aprovado. E já está na App Store.16 out · LançamentoA última negativa do Garfim: câmera, assinatura e o caminho inteiro.16 out · LançamentoClipLeve: o cuidado por trás de um vídeo mais leve.12 out · ProdutoPor que restaurar uma assinatura pode falhar em outra conta.12 out · ProdutoQuando um aplicativo pode dizer que sua conta foi excluída?12 out · ProdutoO que a primeira negativa da App Store me fez explicar.08 out · LançamentoO que quero aprender com o teste fechado do Garfim.08 out · ProdutoO trabalho de uma assinatura continua depois da compra.03 out · DesenvolvimentoPor que o Garfim ganhou um plano gratuito.03 out · ProdutoO login funcionou. Por que a tela do Garfim não saiu do lugar?03 out · LançamentoPagenello: um site começa pelo que o visitante veio fazer.03 out · LançamentoComo uma foto do almoço vira um produto.27 set · ConcepçãoAs decisões que continuo tomando ao desenvolver com IA.27 set · DesenvolvimentoApresentar o Garfim ao público também é um teste do produto.27 set · Lançamento

GET luisjunior.ai/llms.txt

Esta é a versão do site escrita para modelos de linguagem: os mesmos fatos, sem layout, prontos para um assistente de IA ler e citar. Agentes no Chrome também encontram aqui ferramentas WebMCP para consultar produtos, textos e contato.

conectando…0 tokens · 0 tok/s