From 74728cd18a6ee4443b303537fcc09ae835699401 Mon Sep 17 00:00:00 2001 From: Pc Date: Sun, 10 Dec 2023 01:51:55 +0330 Subject: [PATCH] ci: add ci pipeline for build all services --- .github/release-drafter.yml | 111 ++++++++++++++++++ .github/workflows/ci.yml | 58 +++++++++ .github/workflows/release-drafter-labeler.yml | 21 ++++ .github/workflows/release-drafter.yml | 19 +++ README.md | 10 +- assets/booking.png | Bin 0 -> 24757 bytes assets/logo.png | Bin 0 -> 22622 bytes .../docker-compose/infrastructure.yaml | 69 +++++++++++ deployments/monitoring/prometheus.yml | 23 ++++ src/booking/package.json | 3 +- src/flight/package.json | 3 +- src/identity/package.json | 3 +- src/passenger/package.json | 3 +- 13 files changed, 314 insertions(+), 9 deletions(-) create mode 100644 .github/release-drafter.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/release-drafter-labeler.yml create mode 100644 .github/workflows/release-drafter.yml create mode 100644 assets/booking.png create mode 100644 assets/logo.png create mode 100644 deployments/docker-compose/infrastructure.yaml create mode 100644 deployments/monitoring/prometheus.yml diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 0000000..610efe0 --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,111 @@ +# https://johanneskonings.dev/github/2021/02/28/github_automatic_releases_and-changelog/ +# https://tiagomichaelsousa.dev/articles/stop-writing-your-changelogs-manually +# https://github.com/release-drafter/release-drafter/issues/551 +# https://github.com/release-drafter/release-drafter/pull/1013 +# https://github.com/release-drafter/release-drafter/issues/139 +# https://github.com/atk4/data/blob/develop/.github/release-drafter.yml + +# This release drafter follows the conventions from https://keepachangelog.com, https://common-changelog.org/ +# https://www.conventionalcommits.org + +name-template: 'v$RESOLVED_VERSION' +tag-template: 'v$RESOLVED_VERSION' +template: | + ## What Changed ๐Ÿ‘€ + $CHANGES + **Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION +categories: + - title: ๐Ÿš€ Features + labels: + - feature + - title: ๐Ÿ› Bug Fixes + labels: + - fix + - bug + - title: ๐Ÿงช Test + labels: + - test + - title: ๐Ÿ‘ท CI + labels: + - ci + - title: โ™ป๏ธ Changes + labels: + - changed + - enhancement + - refactor + - title: โ›”๏ธ Deprecated + labels: + - deprecated + - title: ๐Ÿ” Security + labels: + - security + - title: ๐Ÿ“„ Documentation + labels: + - docs + - documentation + - title: ๐Ÿงฉ Dependency Updates + labels: + - deps + - dependencies + - title: ๐Ÿงฐ Maintenance + label: 'chore' + - title: ๐Ÿ“ Other changes +## putting no labels pr to `Other Changes` category with no label - https://github.com/release-drafter/release-drafter/issues/139#issuecomment-480473934 + +# https://www.trywilco.com/post/wilco-ci-cd-github-heroku +# https://github.com/release-drafter/release-drafter#autolabeler +# https://github.com/fuxingloh/multi-labeler + +# Using regex for defining rules - https://regexr.com/ - https://regex101.com/ +autolabeler: + - label: 'chore' + branch: + - '/(chore)\/.*/' + - label: 'security' + branch: + - '/(security)\/.*/' + - label: 'refactor' + branch: + - '/(refactor)\/.*/' + - label: 'docs' + branch: + - '/(docs)\/.*/' + - label: 'ci' + branch: + - '/(ci)\/.*/' + - label: 'test' + branch: + - '/(test)\/.*/' + - label: 'bug' + branch: + - '/(fix)\/.*/' + - label: 'feature' + branch: + - '/(feat)\/.*/' + - label: 'minor' + branch: + - '/(feat)\/.*/' + - label: 'patch' + branch: + - '/(fix)\/.*/' + body: + - '/JIRA-[0-9]{1,4}/' + +change-template: '- $TITLE (#$NUMBER)' +exclude-contributors: + - 'meysamhadeli' +change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks. +version-resolver: + major: + labels: + - major + minor: + labels: + - minor + patch: + labels: + - patch + default: patch + +exclude-labels: + - skip-changelog diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..d5534b3 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,58 @@ +name: CI + +on: + push: + branches: [ "main"] + paths-ignore: + - "README.md" + - "CHANGELOG.md" + pull_request: + branches: [ "main" ] + +jobs: + + ci: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '20.x' + + - name: build building-blocks + run: | + npm install + npm run build + working-directory: ./src/building-blocks + + - name: build identity + run: | + npm install + npm run build + working-directory: ./src/identity + + - name: build flight + run: | + npm install + npm run build + working-directory: ./src/flight + + - name: build passenger + run: | + npm install + npm run build + working-directory: ./src/passenger + + - name: build booking + run: | + npm install + npm run build + working-directory: ./src/booking + +# - name: test identity +# run: npm test +# working-directory: ./src/identity + + diff --git a/.github/workflows/release-drafter-labeler.yml b/.github/workflows/release-drafter-labeler.yml new file mode 100644 index 0000000..960bec7 --- /dev/null +++ b/.github/workflows/release-drafter-labeler.yml @@ -0,0 +1,21 @@ +name: Release Drafter Auto Labeler + +on: + pull_request: + types: + - opened + - synchronize + - reopened + - labeled + - unlabeled + +jobs: + auto-labeler: + runs-on: ubuntu-latest + steps: + - uses: release-drafter/release-drafter@v5 + with: + config-name: release-drafter.yml + disable-releaser: true # only run auto-labeler for PRs + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml new file mode 100644 index 0000000..435365f --- /dev/null +++ b/.github/workflows/release-drafter.yml @@ -0,0 +1,19 @@ + # https://johanneskonings.dev/github/2021/02/28/github_automatic_releases_and-changelog/ + # https://tiagomichaelsousa.dev/articles/stop-writing-your-changelogs-manually + name: Release Drafter + + on: + push: + branches: + - main + + jobs: + update_release_draft: + name: Release drafter + runs-on: ubuntu-latest + + steps: + - name: Update Release Draft + uses: release-drafter/release-drafter@v5 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 951ab31..3ce36ce 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,12 @@ -# booking-microservices-nestjs +
+ booking-microservices-nestjs +
+ + +
+
+ +> **The main idea of creating this project is implementing an infrastructure for up and running distributed system with the latest technology and architecture like Vertical Slice Architecture, Event Driven Architecture, CQRS, Postgres, RabbitMq and Nestjs, and we will not deal mainly with business.** ๐Ÿš€ ## License This project is made available under the MIT license. See [LICENSE](https://github.com/meysamhadeli/booking-microservices-nestjs/blob/main/LICENSE) for details. diff --git a/assets/booking.png b/assets/booking.png new file mode 100644 index 0000000000000000000000000000000000000000..7d0eb89e6be39f3219efa0b2ca5988cb348e28f5 GIT binary patch literal 24757 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 literal 0 HcmV?d00001 diff --git a/assets/logo.png b/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bb808f50d2c96a7ef738b150d11b4b8680075623 GIT binary patch literal 22622 zcmZ^Lby!qi)b2r1T0lCar5ou|N~9UOg&_o_yAh>ZN?>3_O1h*|NlEDrsgWGIv1pct8@<)xo=PAav0ZiTNa zGjmXt_WlFFz*vgeM_}-c;4@(UiQwtW?$8KqU1AbKn4(Ts$RxI6R>bO8)&`qbQ4xmG zI>sXVvSAroPz+J$OAx@hG^&^ zoyx3* zM2d)qD#N${KzTX(^G-xM0kOIMcheg29(mIJ?auzdi9w3~aQUt!<^eiDpf-Y>Guzmh zdg$DXR_W1hUt|Q#=>qSTFHHpIvA!B&|M9(y_7S;xNt2zU(I@eY8XE^^@3}=zEALvg z)V;u8r&?@+75s2zCU5x9@`Ao_{^ zm?!Wu@R%!x5+@NLuzA7na}EGW?U(T{InaQiw7fL{X!%EO{5_dWr3VuLck4~k^$5=|5tkGNckMPrR$UM0-;(eX#!M76x;Oa4%;`EcTa$IHg=w3JajU)@IC zU*MYrr+%{^rTjr78C>_Ra8&u9hdU4u6$cF-<$GcsGiz=f6E6QYQlFB!mlV38FQ^+Y z2z{n6>`6k^k!_B|WO@)COtgz>`ibDz`;df$*ZL~@vfrQYGX8klgsF%1@e|)K7KWtn z>OY?QKE3Snwh*gI&{rsB-lwOb&wg&o@`T7NNs;Nv@6YRM*!0g6_}}2Xu~(c|Z2f zTKq^OpY|th%>Ez77Gmq;i5D(j7~aQTMGIC6dkQ~_Lh^bFo^+LhN8@SfecHU!{8Z^S zU+}*;>FBecvHO!G_CHM#OVLdUOhFWD>$vGiPx=(&XqV{Vmze4X6e#G_Xsi`sO^}vM z7CqBxE)psqhIm2ZHAXbea@)*qL$08B)nTCuU&9o0wW0Mr6tVQAJ^WUO`Z80lx(|0a z?Z2p67*${Hs(3!Srt;+RQ_+%jE4D7RPPES2bQwZ>(o?l^AUX?E8m1q{8}{RR$R*8H zHDy<3T^3j-Jm)*tHfOQtx<|UVGl%qW&U%@}nRP1WAa?G7)g;uU*%aC|?=iA1H4feJ z*}^*QKYg;bIQsh3;UxEzY#TX+9HkZJeSs;IK=GbW1bQ%-0R3nG#kOJe;M3plgahxI z61(2zj=srdX<*(Dw^H2P!Q zeQ>akbD?ym^!IL@=p@WO+q`YIW&S2MG+!RptrRU3-J3d>>Ob%(RWPu8;1i z?sVy!DdQc^9fv8s_Zn1snYfu^nFDp-%QDNlJTo1ZiC2l^*~ZvTwH)X8c5imEcQbY$ z?}?t7pFKZwI2(C3Nd5HLl(@UNzpJ~)pyzw%mYux6FFK35iaNLSY^ZE<+_H`Z$qJMc z2A-yQrjcnm6h;*~!hHu)HYoR-#%jk;b2FPW7s_TGCKd-Jy8}wDRk<^%ew%bkB43>x zoa?W;46bDrW)}WBPC)ROdYT%TUboVy*T9&wr+6Lu=DUnmS_k~zib+XYT@7zNlV5vhmd=e=>H!>cp>dH+mm5$81%yNk) z!;)dS5Ioz|9~{%X^{n;k)*Kv3cRYr4vK*}|qkgD)} z=kPWnH}Y;!Y*jRz5LmXp+rDJP2_f}wO{mmpsH~Z3@HRMHVQ80cCS{D)BJ<+rGl4W& zdfOh11q{3!s7}4rSk;H<9NGCS9K}ICj^*dea)ju;NGVGGJ>Xb=V%P{JF;B77LE5EF z8tDeHlckuII+uPgzo=Ab*j&|9Gn@23^>LV+TT-g;-`i2#$=h)(JvV5tP-?Y%HTfs( z0I!VdFm{8=%t2|%J;&GXG;Zj}Q2)?FL36=9qrtk;`J)`6+%w;-Ad>;z+p?1Swpr%6 zsrE%LzvCw#pOJ_!A(MAoYB{|1>|5mnP94YgLl)yHEvTB>Hv<xxn9VP2*qAaOXnj z&~kcE{VC>-q7TQISi46lSFXcX$(&Z?znI*tXQt0yx7FVVBKg*!9=(F`df8vISS1fH z*F%!l3M~t>v(%&|C(;*u&Q)&G?M*aIT5V)UvZcw~_f_i6&VL^-A>vIATAWW9&MoGj z*DIGvmP@`4biVzoSYhO}V|6~TrzcVFexkY~K8hR z7pWVbH=SO1p6!u&VehLfnE1wfSKPGC-EL!C;co~1xT~`2a9Fu`+wpd!(*Pg&1S>rI zF8O{u{O{Q7!Pk?F3XHMwS+ulNc$BS2mcvPZ3#$u>M*0JF?|pXMN)XGptJlgS`ZqHN zIG52Q?d3j2$F9hdq6)EI#$MW%VIRrEf}678`2b`CvT3=ul{TIA=H;En@#qz_xA2ep zxfH_x?uO_5)A2ReYmpJK$fScRLR103ml*(pKLNlM_*F1iiF)t?!1h}J5c>iEWX`ZA zO$qP@mb0RP8vt-KqW++H=SzD6fNIbixmViWu)Rf}WaH@o+Kc9v+SKxLM|UXW%Wppe z2+4wfSiY$v?MSukHhRDsN20!K*|8Rx^p06Am}$+8+6he}TO^&SF7mgxHO$-pfrzVx zc$EcRo%|bOc{HXf0(3NYH?%6DrjllRpX=KpTKso)O~p91EqarW{H1%R(5Nc*n@>%1 zc8ux+&rQ|jz|sx;(G?y=KKbuc#~yvdL)0f+0No394Mq!I`R^7lK(K&@`sOhZB96Lt z056>}P#?$v%ze}qcnJJ_hPu85=>ESC`4I>{_A60}l2u^f(y;_vet|8_ZTNC^8Jm6; zZc{UR;dDKt1HM+ynPJ$YnhPR*$yu6#6o8`uh5biWl#M;{0?0X^HPTj!B?n6oVhz&nQOxr`CBUr{6BN**# zvhV%vxzj=eVOS1%N8=4n) z+z7E7$`F*5m3>9v{zsd7xwp61!$iFW4lcR~^<14Hk3~1cuunG2C(KUX%%QmWcwsg> zr%(txd;}j4@A-^6xU?VU#iT%~=_>-5q@R%5o*Ywt%(!P7;}e;P(9lP{E>E{X(|XAR zZea(zyc`*~F=hyzDIRmwHx*{+yeF~zqA+(pEHl&1r2e`9e6R0AaMN{*qRDu4*;Bd& zsYMa#D$KK5$x8WhQjfv=Cn$B5Dr~r3UY+hlD+?=VT4oej8AKv>FE1}GsnGxLBE{rR zmi&-}qZZD3O6dh``6~WWtq331FK9sU2b2kv4By=Nm+2ZcjTR-3y%?Qg6{0dPL+jLldo;naO6N~B-0Z3cur_6ho{m1`+as|P@^&J$4L zE5@jARKkvfgM%V*ouX!jEyJQ_qzi(o<1e^c16b^8DN#mN>I!Q04~Bq%KpKykr->Ke zS01hy17_2o0k+BNFoch?@-}Fay7Zu_{$tCZ=#C~UEG%4m@P(9?B>rci@G1@Z2Z)kV zI^-JMhsDlyZQ$Rt{E1K;vU0Qb;fyC$)Al{bJnWQ08Ak4T^Kpw=s~WoDZ>qB5X0dddTZE9{ulPe19Idl;~A>-Z)Uj=}#as+kzayx{s!DUUMmqatDc zh0|d7`|=$82XrQK+9i`s)FY%a4dt2JUz-ceWyJtMfAYV3N=0;-P47Rs(V)L7(^YnI z(~1Gzw1YhyTw#%NUY9(kCa6+McVS${)_Bk^fJo56gD0MoECejWGc$MIu1(JKs|w6M z2KW4Fc!nCFm`1>mIn-1>A22uNvFNdASe81l@pOSB&)KRp3D=s-UM$h}_?G?ef7WFxO#CIgc`s*Y1rP;412gVxCQ1%?gq zeg|I^&<-i;((;ImaElWKCGlbhRT7N0cHM@&F5kIo8%Z6Ua(G@%q{*G8Tpt7g2~SY> ze-fa7Kwj4xa^cE)+WWUIDsT?)<1&UWp#d+qHP)U0mBro1s?T~O)7&kyxFc-I!yM-I zpF9QLI-}xdse+4S%$mq6f-dPT&Wg+e@V1pfMp%VD8t|A3wHEej{r0vm)8Zdno&e5> zpFHkB@SQSy1yz`N2J?{^(D4kbeHIP4V#a(ha{Re}r@+?2<~a~7P7eO=%L;i-P`45z zJNy+pO^yb-w8vtEmu<9R<^<@P#Dt@(hDS1(Z29Ko5G8*Y=+x+T;LiH?pWi}?@{+e3 zLMIcZJ9$fWOF-f5wS=T+>Ksg_9p+OZX9eNl-Y}uoo}H1M-R3ak@Ez%s#Yc+%VNIlb zr$;@fJJgYM`5os#za@XFRsM`TC=eM+Aml}xw1B|)l&r3-sZES%98tyd?c(#|*@#Iy!D)}R z&>12pIQd!(32wQ|T^ZF~P~eE9IPK<(>`4*6O@+bKlk+-F4Uf32YWTo#SsLI7$ zXT^QHGf%Zg37XyxEcuB*vl--fqvK-&_disfG@<`bELeFWXa29%hhE~8H0V%J)a0|{ z%Wt7Armq`l)+GGTTnv$nk8Ny9!57m8Y za~?4PzUD0b8u?8W%(rDIReX5;>L0w3Agk>qPb+)HAm%g_@|l>4$cQZTwbJ8P2_p(Y z8`rxd{>Gb+OAoRl>}m~b4Rw^*@*%Oiuqr~WWQo%h<^7=MU7ZJ%e4#x~M6+az{rkIx z(l5>quQiZQfCDtpTgkQ8G49fT|C2>+Wy8Uwt9h$LHv2bvI@$FjeIXn4+X`_(!a~Pi)A>lQ~NLi4p34Kc3 z0|1u}^#X~zd1R5GGcLHcL+)TV29pl{8Z6N!O6RXp<*8~ECObr6OD{Ha>m{&7*(Ifj=TlaE`*QO#^% zx|qojyfwz`_E>an-1W&Okii_S7#ECX<1}1YukO9` zG-(QRKJB}>5n`Q?Vz<#OINYo~Fo1b{N6;o!!IRA@exwc8=DpNcRfEfVn!&p(s+33Y zqsPb<*-s3*IBayEVeP*8H(Pj~YSqPvaPygq78p@tfo)Scm|4if%5ys&1N*GsT`+=Q zJsnPKZ9i7-8I-Z4dZy<0KK&%b`ysQ_4~@m@z`r?u97NGRlF4zs#8pjICixSaLz&a1 z2IHB)p3l;+UozCQdXtK7Ev)Op6`*BYcD&eZ`jo|yKKT7O0{OCTg z-^X6+hhX-&ccY^Y;b@zRC|P%Oa1(ST)C>@Ni$vTk<70=~k*F#MKo@~r)9`-P#Um*&wh1tYVG znYR?n(QE7!t{pO(IpZbY_~!EOxF+5oHX9akw|jM_yDePSdSVOGUwX8yiA>r}p5Hbc z?o;ieF<9G5lpOBF`9irx>Isa?iLGT>HcE` z*d)oI&5NRS0H`YTLmqYgRr`(8lwTUdyoJLp&00)R=CLXTpVN@WY1=6dzC$_a8l_Z? zDbuZIb1l!^FFm83a{Uw`8 z+BM=#idB)yS}1a@|g;>$I;3wrukvV z%6|=^?)4Pb=hHK-(A-e86WueSxl$6_EJOD6<>I}Ue zoM)YH(ca?Nw20i#1Z-dkiBe6;rRM19*_xUW%M%h(gjG2%iqXrFhe4EX4EOOEC~0Y@ zUz9CB0}DSAP@)C;ex#Xit8QXJvY@)JRJ^VeSZJ~3Cqu%_*N-oaxycGWwH;5M5?a+5 zl=40V9{yKTQ74U0BbJ*R`h$wN6wZu6EMVh>YIM*TGH}r&A|gWQ{Y>zPGQi8K@dgX< ziYtSzUFsOumL^9#8ph+GU zQzesA>A2XGm`KR>Tw(TF#aWO)uScP45OxZ`h?}HQ4)QD`mrSMv4{x2qf;m- z#}?hkxXRSp6jmc&7Rxtj>EVoaFkMCtqX7%3SjEKIB$d15D}Hljzk4F8SsuyDpk)J# z#xcJb+bK>+lfDx@<_U<(Z#2BTxM;}9xFtT#s z6L-3utsf#Y6Ev0P*eoed&X(~Q%2HWQU${ovv!JTD^pK4hM91=nW73?u4ffouf zd8Co2{&?CAIpRd`Wv3D&019@$0;BuAa-NuH~qoLlS3Sleo(0 z+Ql%nn_SisNySjD(r@!+XQzZZE7sbPjPf|z>MvlWm^w9Qrg()`a;Z*sd>MT-{Lo&NqeW^n>FEa zyHyC6@;fVquuo>Bi&W3oWsM*N(g#=7zfMPxBa%lFtfIC)Uk(w0di=*SavX|nHTzDvEN0c_{!7GD!5IF0 zTqBg42u5g>J(qU$&``VwPeuLF|DcNw2lppCH|KX81NwRPL%%dQBKjs~o2TvDJy@@6 zq|-GpsG30+8-a;sIDH&Wv%Xj?3C+H9m-?2_V`X_udL>0TZ zoc8h~M|ODcZ0o=Z&1=u`7i)dxwv-Hhv;>I`V;XTjZFfD%heJs{^=h_A6DvruOzM$= z!o>DY5^;@c9SPXyJ$?xK-H-m;B&T=z)%{kV-|X@IZnPRj-h2?&<(0lPi4-*IeK7>u zp^BQC=h=ZsHC0$5DymYW-oeMFGh7h!+-Wd9=<4%j?eu99qTAm9GzRO7kDZ1+w=c_R zlRzuvr2{K~uR1ri0?8M|>K1vn5|ERi8^55v?}z_xvFh8q4h{}Lps&K%)+y*(1T21} zz&Q8XGoP5jFFvtoTqBMxKdb$n|4#Dd5!>F4p9-5GEV}2ln4_*w;^D{TPLCFn2OV!a zoH)S9+%6<*jqP?3(f6WZO+os;;@0dQ%rA%Q>MjFecvN<^b08qdfx(ggjdjdJatQ#t zCAqU~1`7yeSeHV1kel4hZ}O%GYpqszqxR`+82e`PLPxaUs~4Y1;1|x2+ed&R3KIDd zMVwztDn>Y)`d#Gb$SudMUVGPcOo2O1&rDZW7nM^BA^NK%-}COi>=DHAWs5m^#IEGo zPlD^v^F62&D)6{qZCr?t3`)ABCA)C!Wv-5|2X1HNL2Oi?`!CKU}rq;-p@ zu?~eE%MHcuFI(OnrFCg=x7JM9)oK;0Z8e$R<0M3UWBm-Vu9@|ha>}s2NjedGNK0n{ z`Tjo4weCxnuxZf11-O<|x1%duil%-WA|r<^x4#W{O%`XuL1;Ly9&`Y&z?w+6vHjNS zj`r@8Yr6KxFZ*oYRkUNoJxgNMxHt$Lin?vaB-8Fvh4w9(<=JcZ@p1paK~hw}giNLK z;Q`?oA1M11i@Xd-j?so+s1hkXN};@8zRx-Ao3hLRdjYKEe&A(ESEo@Q{}%@4G4^!x zm_&y@A}61A*FRT{@Xdn6F#|9|X9(I`+t`RATwapNbcOPzS`iXrLw!F)V7)Rh+7S4r zEo3TY+ji3Aa-#~yx%XOlR_V+cTwO~~xEl)WW4>s4Aeec!rSC3l754z%cf6}lfHH`H z+ug_wLrD|oo{mU_+@vP0U(Zc=kU;D1FuC9LUVVj0bAfG!!~CWHQk_Fg_4!~Ky(f1e zclxrFLyNys(6Ph5cX0yayk*PQ(i^Td7#5h>UlC}N*&Wy5xFJnb;++C+ING0UFg*l5 zK4t{*UUoh)YKOV6tuEPPPxfIYr9%k`WCbq+n`3bTG6 z-1_y|(+H2P);6>@m04n-HtQQZmXz#ptIo@Lr1u;p{ig{g!bU+a^YRuA_GxxC4a2_o z`p19T?`;+f&;Fc>K*#u-_gI0K1E|G1V74DwT-djFV%t97LcZ*>S36k=IO7S5L?lV) zB78txFzTB(UV7JjxRv9RDx%-#6;z=9+7FxVHs=>kCp09whKXipqTR}EKjZBCy|QZK zH)Gc$D{e#Juo+Ae+AGl9^V~z`s~fM0d<4UprqdH_1KH4lN@A2J&^H~#o#&g8WT?Ck zh~JF3kV$b0Qn^b)Sh>!E;Hq8i_H`fxPeuTyH3j-tD(Mdat<3?JSiO-b<>~ZtO)2H3 z)Cq+aND?H9H^NS*P(qJwBqb|Dw(Ete65Gei>ePXSpp#|my7ww8mP(he`q0;6cEpq% zfv>Mo0R?aUa#;O71eUGpq1lJ*5QSHK>J(km3({S7RZokhuRecDA%&wlw;AOBtr8v-!l3B+a~q45RdlRK&ofD;G8+TYf@_+b}r}$K*oT>G|DV zMTU`(N036#mna7LF7h=Pk4YvbK&J!7v_CZG!h!Mkf8km}-L;fyYcM@KW5S@o`nxnQ zp}$0CRsV%hu{&sj~@fZyE(swVBR0bOoZ+)^I?WSlr|~o)I2&K7E4m^m{^N5i7&bMuuTgGRey`ERf%$h4$5C zwJ3a2uWdNusgYqb+rDqhDz9w(RP2>rg}hz`$#ksSR8Nt~G*{Zd7w-%)3rmXR5nky( z+{Q2BviM9z%iuxrkLWk}?flm_W%w5J&%FED7&m?H{B3ji^@=zr{HLKYZ&WEaKl6l$ zuOp`gfsFn8; zmt8iS%^cK7KmTlc9qKmhcREV~yd?y|)~^oxJh#l(SN5ETb`-+~d2;zZ5^(IsmA_nf zXRmJyX`_THY(kEUJDxsRFgXKfAg3J>ptr;ZUA#GqohG{eGeW^gig4wRb>5M@8^^yMk)W3H=CJ~!jz#%k zvc-+Hfedw*$+U;b^b2shG5Ov55^^yhq=j}X%i%Z-ZPMwpyx;)bmy>^GJdu7 zMoN!)T%)rwvqr61aZd)D?Kza#+uSP0(B!)=X|dyw$>7fCGJ;uA8}mHsY1mA|*78l# zf>yly0tPq{!URi!IcC~yOgDv+{j9eq- zy^gj#XEae~?#G`vlUtRct zGs#sbnqe<%pr^zp7HadOeraQa-HKC(y2(SM(8nZ62Ge5Dt99;uBcxo!s@DX9?{AC6ubG$4-%$~cd!*E)=S1#22bI!Ozs#$aO*CzjPGHBX94))Mw+6#u z`$U}A=hkZ2T{Ns$l2VL7mn(~{;K{M$Ci`}wC*5qmtiH9=E4K3#=-5V0xw8JieVGR5 zBrt9Bu|lFnY~&UWz4Lp}@saZ@Qn!`&yU@R~=klS{=MOZCj+Dw+TEj@evWyK{RN7rq z9=ILivWvGiSu@wH_k~u2J69oGTBKT429v�IYlKHz(O^w`FQ|UHnH_80bR_l&4%x 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 KEIV^C?mq!|Y@yfy literal 0 HcmV?d00001 diff --git a/deployments/docker-compose/infrastructure.yaml b/deployments/docker-compose/infrastructure.yaml new file mode 100644 index 0000000..cc3eed2 --- /dev/null +++ b/deployments/docker-compose/infrastructure.yaml @@ -0,0 +1,69 @@ +version: "3.3" +services: + + ####################################################### + # Rabbitmq + ####################################################### + rabbitmq: + image: rabbitmq:3-management + container_name: rabbitmq + restart: unless-stopped + ports: + - 5672:5672 + - 15672:15672 + networks: + - booking + + + ####################################################### + # Postgress + ####################################################### + postgres: + container_name: postgres + image: postgres:latest + restart: unless-stopped + ports: + - '5432:5432' + environment: + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=postgres + networks: + - booking + + + ####################################################### + # Jaeger + ####################################################### + jaeger: + image: jaegertracing/all-in-one + container_name: jaeger + restart: unless-stopped + ports: + - 5775:5775/udp + - 5778:5778 + - 6831:6831/udp + - 6832:6832/udp + - 9411:9411 + - 14268:14268 + - 16686:16686 + networks: + - booking + + ####################################################### + # Zipkin + ####################################################### + zipkin: + image: openzipkin/zipkin:latest + container_name: zipkin + restart: unless-stopped + ports: + - '9411:9411' + networks: + - booking + +networks: + booking: + + + + diff --git a/deployments/monitoring/prometheus.yml b/deployments/monitoring/prometheus.yml new file mode 100644 index 0000000..cb5f1a3 --- /dev/null +++ b/deployments/monitoring/prometheus.yml @@ -0,0 +1,23 @@ +global: + scrape_interval: 15s + scrape_timeout: 10s + evaluation_interval: 15s +scrape_configs: +- job_name: identity + honor_timestamps: true + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: + - localhost:4000 +- job_name: passenger + honor_timestamps: true + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: + - localhost:4001 \ No newline at end of file diff --git a/src/booking/package.json b/src/booking/package.json index 8dfb4f7..2925f41 100644 --- a/src/booking/package.json +++ b/src/booking/package.json @@ -7,7 +7,7 @@ "license": "MIT", "scripts": { "build": "nest build", - "dev": "tsc -p tsconfig.json && NODE_ENV=development nodemon src/main.ts --watch", + "dev": "tsc -p tsconfig.json && nodemon src/main.ts --watch", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix" }, @@ -65,7 +65,6 @@ "ts-mapper": "^1.2.4", "tsyringe": "4.8.0", "typeorm": "^0.3.17", - "win-node-env": "^0.6.1", "yup": "1.3.2" }, "devDependencies": { diff --git a/src/flight/package.json b/src/flight/package.json index fbc3875..dabdcc5 100644 --- a/src/flight/package.json +++ b/src/flight/package.json @@ -7,7 +7,7 @@ "license": "MIT", "scripts": { "build": "nest build", - "dev": "tsc -p tsconfig.json && NODE_ENV=development nodemon src/main.ts --watch", + "dev": "tsc -p tsconfig.json && nodemon src/main.ts --watch", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix" }, @@ -65,7 +65,6 @@ "tsyringe": "4.8.0", "typeorm": "^0.3.17", "typeorm-extension": "^3.2.0", - "win-node-env": "^0.6.1", "yup": "1.3.2" }, "devDependencies": { diff --git a/src/identity/package.json b/src/identity/package.json index f6acb80..77f2dc5 100644 --- a/src/identity/package.json +++ b/src/identity/package.json @@ -7,7 +7,7 @@ "license": "MIT", "scripts": { "build": "nest build", - "dev": "tsc -p tsconfig.json && NODE_ENV=development nodemon src/main.ts --watch", + "dev": "tsc -p tsconfig.json && nodemon src/main.ts --watch", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix" }, @@ -68,7 +68,6 @@ "tsyringe": "4.8.0", "typemoq": "^2.1.0", "typeorm": "^0.3.17", - "win-node-env": "^0.6.1", "yup": "1.3.2" }, "devDependencies": { diff --git a/src/passenger/package.json b/src/passenger/package.json index 6087374..c628a7a 100644 --- a/src/passenger/package.json +++ b/src/passenger/package.json @@ -7,7 +7,7 @@ "license": "MIT", "scripts": { "build": "nest build", - "dev": "tsc -p tsconfig.json && NODE_ENV=development nodemon src/main.ts --watch", + "dev": "tsc -p tsconfig.json && nodemon src/main.ts --watch", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix" }, @@ -64,7 +64,6 @@ "ts-mapper": "^1.2.4", "tsyringe": "4.8.0", "typeorm": "^0.3.17", - "win-node-env": "^0.6.1", "yup": "1.3.2" }, "devDependencies": {