Prezentare generală
După ce aplicația ta este construită și testată local, ai două căi pentru distribuire:- Implementează un tarball — încarcă aplicația direct pe un server Twenty anume pentru uz intern sau privat.
- Publică pe npm — listează aplicația ta în marketplace-ul Twenty pentru ca orice spațiu de lucru să o poată descoperi și instala.
Construirea aplicației
Rulează comandabuild pentru a compila aplicația și a genera un manifest.json pregătit pentru distribuire:
.twenty/output/. Adaugă --tarball pentru a produce și un pachet .tgz pentru distribuire manuală sau pentru comanda de publish.
Implementare pe un server (tarball)
Pentru aplicațiile pe care nu le dorești disponibile public — instrumente proprietare, integrări doar pentru enterprise sau build-uri experimentale — poți implementa un tarball direct pe un server Twenty.Cerințe
Înainte de implementare, ai nevoie de un remote configurat care să indice serverul țintă. Remote-urile stochează local URL-ul serverului și credențialele de autentificare în~/.twenty/config.json.
Adaugă un remote:
Implementare
Construiește și încarcă aplicația ta pe server într-un singur pas:Partajarea unei aplicații implementate
Aplicațiile tarball nu sunt listate în marketplace-ul public, astfel încât alte spații de lucru de pe același server nu le vor descoperi prin navigare. Pentru a partaja o aplicație implementată:- Mergi la Setări > Aplicații > Înregistrări și deschide aplicația ta
- În fila Distribuție, fă clic pe Copiază linkul de partajare
- Partajează acest link cu utilizatori din alte spații de lucru — îi duce direct la pagina de instalare a aplicației
Gestionarea versiunilor
Când actualizezi o aplicație tarball deja implementată, serverul solicită caversion din package.json să fie strict mai mare (conform ordonării semver) decât versiunea implementată în prezent. Redeployarea aceleiași versiuni sau trimiterea uneia inferioare este respinsă înainte ca tarball-ul să fie stocat — vei vedea o eroare VERSION_ALREADY_EXISTS de la CLI.
Pentru a lansa o actualizare:
- Incrementează câmpul
versiondinpackage.json(de ex.1.2.3→1.2.4,1.3.0sau2.0.0) - Rulează
yarn twenty app:publish --private(sauyarn twenty app:publish --private --remote production) - Spațiile de lucru care au aplicația instalată și au activat actualizarea automată pentru aceasta (în fila Setări a aplicației) sunt actualizate automat în fundal; celelalte vor vedea actualizarea disponibilă în setările lor
Etichetele de pre-lansare funcționează conform așteptărilor: incrementarea de la
1.0.0-rc.1 la 1.0.0-rc.2 este permisă, iar o lansare finală precum 1.0.0 este recunoscută corect ca fiind mai mare decât 1.0.0-rc.5. Versiunea din package.json trebuie să fie ea însăși un șir semver valid.Compatibilitatea versiunii serverului
Dacă aplicația ta folosește o funcționalitate introdusă într-o anumită versiune de server Twenty (de exemplu, furnizori OAuth adăugați în v2.3.0), ar trebui să declari versiunea minimă de server necesară aplicației folosind câmpulengines.twenty din package.json:
Ce se întâmplă în timpul implementării și instalării:
- Dacă
engines.twentyeste setat și versiunea serverului țintă nu respectă intervalul, implementarea (încărcarea arhivei tarball) sau instalarea este respinsă cu eroareaSERVER_VERSION_INCOMPATIBLEși cu un mesaj care indică atât intervalul necesar, cât și versiunea efectivă a serverului. - Dacă
engines.twentynu este setat, aplicația este acceptată pe orice versiune de server (retrocompatibilă cu aplicațiile existente). - Dacă serverul nu are nicio
APP_VERSIONconfigurată, verificarea este omisă.
Serverul este verificarea autoritativă — validează
engines.twenty atât la încărcarea arhivei tarball, cât și la instalarea în spațiul de lucru. Dacă implementezi un tarball în afara fluxului standard sau instalezi din marketplace, serverul impune în continuare compatibilitatea.CI/CD automatizat (fluxuri de lucru preconfigurate)
Aplicațiile generate cucreate-twenty-app vin, gata de utilizare, cu trei fluxuri de lucru GitHub Actions, în .github/workflows/. CI rulează fără nicio configurare, CD necesită un singur secret, iar publicarea pe npm necesită o configurare unică pentru npm trusted publisher.
CI — ci.yml
Rulează testele de integrare la fiecare push pe main și la fiecare pull request.
Ce face:
- Preia codul sursă al aplicației.
- Pornește o instanță de test Twenty izolată folosind acțiunea compozită
twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main(echivalentul din CI alyarn twenty docker:start --test). - Activează Corepack, configurează Node.js pe baza fișierului
.nvmrcși instalează dependențele cuyarn install --immutable. - Rulează
yarn test, transmitândTWENTY_API_URLșiTWENTY_API_KEYdin instanța pornită, astfel încât testele să poată comunica cu un server real.
TWENTY_VERSION(variabilă de mediu, implicitlatest) — fixează versiunea serverului Twenty folosită în CI editând acest parametru înci.yml.- Concurența este grupată după
github.refși anulează execuțiile în desfășurare la noile push-uri.
CD — cd.yml
Implementează aplicația pe un server Twenty configurat la fiecare push pe main și, opțional, dintr-un pull request când se aplică eticheta deploy.
Ce face:
- Preia head-ul PR-ului (pentru PR-urile etichetate) sau commitul împins.
- Rulează
twentyhq/twenty/.github/actions/deploy-twenty-app@main— echivalentul din CI alyarn twenty app:publish --private. - Rulează
twentyhq/twenty/.github/actions/install-twenty-app@mainastfel încât versiunea nou implementată să fie instalată în spațiul de lucru țintă.
Valoarea implicită a
TWENTY_DEPLOY_URL, http://localhost:3000, este un placeholder — nu va putea accesa nimic dintr-un runner găzduit de GitHub. Actualizează-l la URL-ul public al serverului tău (sau folosește un runner self-hosted cu acces la rețea) înainte de a activa CD.deploy la un pull request. Condiția if: din cd.yml va rula jobul pentru acel PR folosind commitul head al PR-ului, permițându-ți să validezi o modificare pe serverul țintă înainte de a face merge.
Publicare — publish.yml
Publică aplicația pe npm, cu proveniență, când împingi un tag de versiune (de ex. v1.0.0) sau când rulezi manual fluxul de lucru din fila Actions.
Ce face:
- Face checkout al aplicației tale, configurează Node.js și actualizează npm (publicarea de încredere necesită npm 11.5.1 sau o versiune ulterioară).
- Rulează
yarn twenty app:publish, care construiește aplicația și publică.twenty/outputîn npm. În CI adaugă automat--provenanceși--access public, astfel încât nu sunt necesare flaguri în fluxul de lucru.
publish.yml (vezi documentația npm trusted publishing). Publicarea cu provenance certifică ce repozitoriu GitHub a construit pachetul, ceea ce este, de asemenea, modul în care îți revendici proprietatea asupra aplicației tale într-un marketplace Twenty.
npm acceptă doar proveniență din depozite sursă publice. Dacă publici dintr-un depozit privat, npm respinge pachetul de proveniență OIDC cu un
E422 ... Eroare „Unsupported GitHub Actions source repository visibility: "private".” Pentru a publica dintr-un depozit privat, renunță la proveniență setând TWENTY_APP_PUBLISH_DISABLE_PROVENANCE: 'true' în env al etapei de publicare (un indiciu comentat este inclus în fișierul generat publish.yml):Fixarea acțiunilor reutilizabile
Fluxurile de lucruci.yml și cd.yml fac referire la acțiuni reutilizabile la @main, astfel încât actualizările acțiunilor din repo-ul twentyhq/twenty sunt preluate automat. Dacă dorești builduri deterministe, înlocuiește @main cu un SHA de commit sau cu un tag de release pe fiecare linie uses:.
Publicarea pe npm
Publicarea pe npm face ca aplicația ta să poată fi descoperită în marketplace-ul Twenty. Orice spațiu de lucru Twenty poate răsfoi, instala și actualiza aplicațiile din marketplace direct din interfață.Cerințe
- Un cont npm
- Cuvântul cheie
twenty-appdin array-ulkeywordsal fișieruluipackage.json(adaugă-l manual — nu este inclus în mod implicit în șablonulcreate-twenty-app)
Metadate pentru marketplace
ConfigurațiadefineApplication() acceptă câmpuri opționale care controlează modul în care aplicația ta apare în marketplace. Folosește logo și galleryImages pentru a face referire la imaginile din folderul public/:
src/application-config.ts
author, category, aboutDescription, websiteUrl, termsUrl, etc.).
Dimensiuni recomandate pentru imaginile din galerie
Marketplace-ul redăgalleryImages într-un container fix cu raport 8:5 (de exemplu, 1600×1000 px).
Imaginile din galerie cu orice raport de aspect sunt afișate integral și nu sunt niciodată decupate, însă orice imagine semnificativ mai înaltă sau mai îngustă decât
8:5 va afișa benzi goale pe laterale.Limită de dimensiune pentru imagini
Fișierullogo și fiecare fișier din galleryImages nu trebuie să depășească 10 MB. Fișierele mai mari sunt omise atunci când marketplace-ul re-găzduiește resursele tale publicate, astfel că nu vor fi afișate.
Publicare
beta sau next):
Cum funcționează descoperirea în marketplace
Serverul Twenty sincronizează catalogul marketplace-ului din registrul npm la fiecare oră. Poți declanșa sincronizarea imediat, în loc să aștepți:defineApplication() — vezi secțiunea Metadate pentru marketplace de mai sus.
Dacă aplicația ta nu definește un
aboutDescription în defineApplication(), piața va folosi automat fișierul README.md al pachetului tău de pe npm drept conținut pentru pagina Despre. Acest lucru înseamnă că poți menține un singur README atât pentru npm, cât și pentru piața Twenty. Dacă vrei o descriere diferită în piață, setează explicit aboutDescription.Publicare CI
Fluxul de lucru generatpublish.yml descris mai sus publică automat pe npm la etichetele de versiune, cu provenance. Deoarece yarn twenty app:publish adaugă --provenance și --access public pentru tine când rulează în CI, fluxul de lucru nu are nevoie de flaguri npm — doar de configurarea unică a Trusted Publisher.
Pentru alte sisteme CI (GitLab CI, CircleCI etc.), rulează yarn install apoi yarn twenty app:publish. Provenance este emisă atunci când mediul poate genera un token OIDC și este omisă automat în caz contrar.
npm provenance adaugă un badge de încredere la listarea ta în npm, permițând utilizatorilor să verifice că pachetul a fost construit dintr-un commit specific într-un pipeline CI public. Este, de asemenea, ceea ce îți permite să revendici proprietatea asupra aplicației tale într-un marketplace Twenty. Vezi documentația npm provenance pentru detalii.
Instalarea aplicațiilor
După ce o aplicație este publicată (npm) sau implementată (tarball), spațiile de lucru o pot instala prin interfața utilizatorului (UI). Mergi la pagina Setări > Aplicații din Twenty, unde pot fi parcurse și instalate atât aplicațiile din marketplace, cât și cele implementate prin tarball. Poți instala aplicații și din linia de comandă:Serverul impune versionarea semver la instalare, reflectând regulile de la deploy:
- Instalarea aceleiași versiuni care este deja instalată în spațiul tău de lucru este respinsă cu o eroare
APP_ALREADY_INSTALLED. - Instalarea unei versiuni mai mici decât cea instalată în prezent este respinsă cu o eroare
CANNOT_DOWNGRADE_APPLICATION.
yarn twenty app:install.