Visão Geral
Depois que seu aplicativo estiver compilado e testado localmente, você tem dois caminhos para distribuí-lo:- Implantar um tarball — envie seu aplicativo diretamente para um servidor Twenty específico para uso interno ou privado.
- Publicar no npm — liste seu aplicativo no Marketplace da Twenty para que qualquer espaço de trabalho possa descobrir e instalar.
Compilando seu app
Execute o comando build para compilar seu app e gerar ummanifest.json pronto para distribuição:
.twenty/output/. Adicione --tarball para também gerar um pacote .tgz para distribuição manual ou para o comando de publish.
Implantando em um servidor (tarball)
Para aplicativos que você não quer disponibilizar publicamente — ferramentas proprietárias, integrações apenas para empresas ou builds experimentais — você pode implantar um tarball diretamente em um servidor Twenty.Pré-requisitos
Antes de implantar, você precisa de um remote configurado apontando para o servidor de destino. Os remotes armazenam a URL do servidor e as credenciais de autenticação localmente em~/.twenty/config.json.
Adicionar um remote:
Implantando
Compile e envie seu aplicativo para o servidor em uma única etapa:Compartilhando um aplicativo implantado
Aplicativos em tarball não são listados no marketplace público, então outros espaços de trabalho no mesmo servidor não os descobrirão ao navegar. Para compartilhar um aplicativo implantado:- Vá para Configurações > Aplicações > Registros e abra seu aplicativo
- Na guia Distribuição, clique em Copiar link de compartilhamento
- Compartilhe esse link com usuários de outros espaços de trabalho — ele os leva diretamente para a página de instalação do aplicativo
Gerenciamento de versões
Ao atualizar um aplicativo empacotado como tarball já implantado, o servidor exige que oversion no package.json seja estritamente maior (de acordo com a ordenação do semver) do que a versão atualmente implantada. Reimplantar a mesma versão, ou enviar uma inferior, é rejeitado antes que o tarball seja armazenado — você verá um erro VERSION_ALREADY_EXISTS na CLI.
Para lançar uma atualização:
- Atualize o campo
versionno seupackage.json(por exemplo,1.2.3→1.2.4,1.3.0ou2.0.0) - Execute
yarn twenty app:publish --private(ouyarn twenty app:publish --private --remote production) - Espaços de trabalho que têm o app instalado e ativaram a atualização automática para o app (na aba Configurações do app) são atualizados automaticamente em segundo plano; os demais verão a atualização disponível em suas configurações
Tags de pré-lançamento funcionam como esperado: incrementar
1.0.0-rc.1 → 1.0.0-rc.2 é permitido, e uma versão final como 1.0.0 é corretamente reconhecida como superior a 1.0.0-rc.5. A versão em package.json deve ser, ela própria, uma string semver válida.Compatibilidade da versão do servidor
Se o seu aplicativo usar um recurso introduzido em uma versão específica do servidor Twenty (por exemplo, provedores OAuth adicionados na v2.3.0), você deve declarar a versão mínima do servidor que seu aplicativo requer usando o campoengines.twenty em package.json:
O que acontece no momento da implantação e da instalação:
- Se
engines.twentyestiver definido e a versão do servidor de destino não satisfizer o intervalo, a implantação (upload do tarball) ou a instalação será rejeitada com o erroSERVER_VERSION_INCOMPATIBLEe uma mensagem indicando tanto o intervalo exigido quanto a versão real do servidor. - Se
engines.twentynão estiver definido, o aplicativo é aceito em qualquer versão do servidor (retrocompatível com os aplicativos existentes). - Se o servidor não tiver
APP_VERSIONconfigurado, a verificação será ignorada.
O servidor realiza a verificação definitiva — ele valida
engines.twenty tanto no upload do tarball quanto na instalação no espaço de trabalho. Se você implantar um tarball fora de banda ou instalar a partir do marketplace, o servidor ainda impõe a compatibilidade.CI/CD automatizado (fluxos de trabalho pré-configurados)
Os apps gerados comcreate-twenty-app já vêm com três fluxos de trabalho do GitHub Actions prontos, em .github/workflows/. A CI é executada sem nenhuma configuração, a CD requer um único segredo e a publicação no npm exige uma configuração única de trusted-publisher do npm.
CI — ci.yml
Executa testes de integração a cada push para main e a cada pull request.
O que faz:
- Faz checkout do código-fonte do seu app.
- Inicia uma instância de teste do Twenty isolada usando a ação composta
twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main(o equivalente em CI deyarn twenty docker:start --test). - Habilita o Corepack, configura o Node.js a partir do seu
.nvmrce instala as dependências comyarn install --immutable. - Executa
yarn test, passandoTWENTY_API_URLeTWENTY_API_KEYda instância iniciada para que seus testes possam se comunicar com um servidor real.
TWENTY_VERSION(env, padrãolatest) — fixe a versão do servidor Twenty usada no CI editando isto emci.yml.- A concorrência é agrupada por
github.refe cancela execuções em andamento quando há novos pushes.
CD — cd.yml
Faz o deploy do seu app para um servidor Twenty configurado a cada push para main e, opcionalmente, a partir de um pull request quando o rótulo deploy é aplicado.
O que faz:
- Faz checkout do head do PR (para PRs rotulados) ou do commit enviado.
- Executa
twentyhq/twenty/.github/actions/deploy-twenty-app@main— o equivalente em CI deyarn twenty app:publish --private. - Executa
twentyhq/twenty/.github/actions/install-twenty-app@mainpara que a versão recém-implantada seja instalada no espaço de trabalho de destino.
O
TWENTY_DEPLOY_URL padrão de http://localhost:3000 é um placeholder — ele não alcançará nada a partir de um runner hospedado pelo GitHub. Atualize-o para a URL pública do seu servidor (ou use um runner self-hosted com acesso à rede) antes de habilitar o CD.deploy a um pull request. A condição if: em cd.yml executará o job para esse PR usando o commit HEAD do PR, permitindo que você valide uma alteração no servidor de destino antes de fazer o merge.
Publicar — publish.yml
Publica seu app no npm com procedência quando você envia uma tag de versão (por exemplo, v1.0.0), ou quando executa o fluxo de trabalho manualmente na aba Actions.
O que faz:
- Faz o checkout do seu app, configura o Node.js e atualiza o npm (a publicação confiável requer o npm 11.5.1 ou posterior).
- Executa
yarn twenty app:publish, que compila o app e publica.twenty/outputno npm. Em CI, adiciona automaticamente--provenancee--access public, portanto não são necessárias flags no fluxo de trabalho.
publish.yml (consulte a documentação de publicação confiável do npm). Publicar com proveniência certifica qual repositório do GitHub compilou o pacote, o que também é como você reivindica a propriedade do seu app em um marketplace da Twenty.
npm só aceita proveniência de repositórios de código-fonte públicos. Se você publicar a partir de um repositório privado, o npm rejeita o pacote de proveniência OIDC com um
E422 ... Erro: Unsupported GitHub Actions source repository visibility: “private”. Para publicar a partir de um repositório privado, desative a proveniência definindo TWENTY_APP_PUBLISH_DISABLE_PROVENANCE: ‘true’noenvda etapa de publicação (uma dica comentada está incluída nopublish.yml` gerado pelo scaffold):Fixando as ações reutilizáveis
Os fluxos de trabalhoci.yml e cd.yml fazem referência a ações reutilizáveis em @main, portanto as atualizações de ações no repositório twentyhq/twenty são aplicadas automaticamente. Se você quiser builds determinísticos, substitua @main por um SHA de commit ou uma tag de release em cada linha uses:.
Publicação no npm
Publicar no npm torna seu aplicativo descobrível no Marketplace da Twenty. Qualquer espaço de trabalho da Twenty pode navegar, instalar e atualizar aplicativos do Marketplace diretamente pela UI.Requisitos
- Uma conta no npm
- A palavra-chave
twenty-appno arraykeywordsdo seupackage.json(adicione-a manualmente — não é incluída por padrão no templatecreate-twenty-app)
Metadados do Marketplace
A configuraçãodefineApplication() oferece suporte a campos opcionais que controlam como seu app aparece no marketplace. Use logo e galleryImages para referenciar imagens da pasta public/:
src/application-config.ts
author, category, aboutDescription, websiteUrl, termsUrl, etc.).
Dimensões recomendadas para imagens da galeria
O marketplace renderizagalleryImages em um contêiner fixo de 8:5 (por exemplo, 1600×1000 px).
Imagens da galeria de qualquer proporção são exibidas por completo e nunca são cortadas, mas qualquer coisa significativamente mais alta ou mais estreita que
8:5 exibirá faixas vazias nas laterais.Limite de tamanho de imagem
O arquivologo e cada arquivo em galleryImages não devem exceder 10 MB. Arquivos maiores são ignorados quando o marketplace volta a hospedar os seus recursos publicados, portanto eles não serão exibidos.
Publicar
beta ou next):
Como funciona a descoberta no marketplace
O servidor Twenty sincroniza seu catálogo do marketplace a partir do registro do npm a cada hora. Você pode acionar a sincronização imediatamente em vez de esperar:defineApplication() — consulte Metadados do marketplace acima.
Se o seu aplicativo não definir um
aboutDescription em defineApplication(), o marketplace usará automaticamente o README.md do seu pacote no npm como conteúdo da página Sobre. Isso significa que você pode manter um único README tanto para o npm quanto para o marketplace da Twenty. Se quiser uma descrição diferente no marketplace, defina explicitamente aboutDescription.Publicação via CI
O fluxo de trabalhopublish.yml estruturado conforme descrito acima publica automaticamente no npm em tags de versão, com proveniência. Como yarn twenty app:publish adiciona --provenance e --access public para você quando é executado em CI, o fluxo de trabalho não precisa de flags do npm — apenas da configuração única de trusted publisher.
Para outros sistemas de CI (GitLab CI, CircleCI, etc.), execute yarn install e depois yarn twenty app:publish. A proveniência é emitida quando o ambiente pode gerar um token OIDC e é ignorada automaticamente caso contrário.
A proveniência do npm adiciona um selo de confiança à sua listagem no npm, permitindo que os usuários verifiquem que o pacote foi construído a partir de um commit específico em um pipeline de CI público. É também o que permite que você reivindique a propriedade do seu app em um marketplace da Twenty. Consulte a documentação de proveniência do npm para mais detalhes.
Instalando aplicativos
Depois que um app é publicado (npm) ou implantado (tarball), os espaços de trabalho podem instalá-lo pela interface do usuário. Vá para a página Configurações > Aplicações no Twenty, onde é possível navegar e instalar tanto apps do marketplace quanto apps implantados por tarball. Você também pode instalar apps pela linha de comando:O servidor impõe o versionamento semver na instalação, espelhando as regras da implantação:
- Instalar a mesma versão que já está instalada no seu espaço de trabalho é rejeitado com um erro
APP_ALREADY_INSTALLED. - Instalar uma versão inferior à atualmente instalada é rejeitado com um erro
CANNOT_DOWNGRADE_APPLICATION.
yarn twenty app:install.