From 428e4b30e618e484d43cfa8bea1c8fd83fed15b9 Mon Sep 17 00:00:00 2001 From: tahadavari <77568584+tahadavari@users.noreply.github.com> Date: Wed, 17 Jul 2024 20:38:00 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20=20@=203b001?= =?UTF-8?q?7031551f0aa014c65403b2edcfc898b5007=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 4 +- assets/js/75c3f910.396f9937.js | 1 - assets/js/75c3f910.9ab496ca.js | 1 + assets/js/bcd34c72.a83c4a3a.js | 1 - assets/js/bcd34c72.ea9bbd61.js | 1 + ...n.57773aa7.js => runtime~main.00591452.js} | 2 +- blog/archive/index.html | 4 +- blog/first-blog-post/index.html | 4 +- blog/index.html | 4 +- blog/long-blog-post/index.html | 4 +- blog/mdx-blog-post/index.html | 4 +- blog/tags/docusaurus/index.html | 4 +- blog/tags/facebook/index.html | 4 +- blog/tags/hello/index.html | 4 +- blog/tags/hola/index.html | 4 +- blog/tags/index.html | 4 +- blog/welcome/index.html | 4 +- docs/Roadmaps/index.html | 4 +- docs/frontend/index.html | 4 +- docs/frontend/phase01-sandbox/index.html | 4 +- docs/frontend/phase02-pilot/index.html | 4 +- docs/frontend/phase03-ui-ux/index.html | 4 +- docs/frontend/phase04-css-and-sass/index.html | 4 +- docs/frontend/phase05-animation/index.html | 4 +- docs/frontend/phase06-clean-code/index.html | 4 +- docs/frontend/phase07-ci-cd/index.html | 4 +- .../phase08-authentication/index.html | 4 +- docs/frontend/phase09-test/index.html | 4 +- docs/frontend/phase10-dom/index.html | 4 +- docs/frontend/phase11-typescript/index.html | 4 +- docs/general/index.html | 4 +- docs/general/phase01-presentation/index.html | 4 +- docs/general/phase02-grammar/index.html | 4 +- docs/intro/index.html | 4 +- docs/intro/phase01-onboarding/index.html | 4 +- docs/intro/phase02-health/index.html | 4 +- docs/intro/phase03-non-tech/index.html | 4 +- docs/intro/phase04-git/index.html | 4 +- docs/meetings/04-1-1/index.html | 4 +- docs/meetings/ama/index.html | 4 +- docs/meetings/coffee-chat/index.html | 4 +- docs/meetings/daily/index.html | 4 +- docs/meetings/gathering/index.html | 4 +- docs/meetings/index.html | 4 +- docs/project/index.html | 4 +- docs/project/phase01-etl/index.html | 4 +- docs/project/star-sprint-project/index.html | 4 +- docs/roadmaps/Backend/index.html | 4 +- docs/roadmaps/DevOps/index.html | 4 +- docs/roadmaps/Frontend/index.html | 4 +- docs/software-engineering/index.html | 4 +- .../phase01-c-sharp/index.html | 4 +- .../index.html | 4 +- .../phase03-clean-code/index.html | 4 +- .../phase04-unit-test/index.html | 4 +- .../phase05-tdd/index.html | 18 +++----- .../phase06-cicd/index.html | 42 +++++++++++++------ .../phase07-SQL/index.html | 4 +- .../phase08-EFCore/index.html | 4 +- .../index.html | 4 +- .../phase08-optional02-nest/index.html | 4 +- .../phase09-web/index.html | 4 +- docs/tags/index.html | 4 +- docs/tags/readonly/index.html | 4 +- docs/tags/sandbox/index.html | 4 +- index.html | 4 +- 66 files changed, 156 insertions(+), 146 deletions(-) delete mode 100644 assets/js/75c3f910.396f9937.js create mode 100644 assets/js/75c3f910.9ab496ca.js delete mode 100644 assets/js/bcd34c72.a83c4a3a.js create mode 100644 assets/js/bcd34c72.ea9bbd61.js rename assets/js/{runtime~main.57773aa7.js => runtime~main.00591452.js} (98%) diff --git a/404.html b/404.html index 526b6a16..0bae3ae4 100644 --- a/404.html +++ b/404.html @@ -6,13 +6,13 @@ صفحه ای که دنبال آن بودید پیدا نشد. | آکادمی ستاره - +
پرش به مطلب اصلی

صفحه ای که دنبال آن بودید پیدا نشد.

صفحه‌ای که دنبال آن بودید پیدا نشد.

لطفا با صاحب وبسایت تماس بگیرید و ایشان را از مشکل پیش آمده مطلع کنید.

- + \ No newline at end of file diff --git a/assets/js/75c3f910.396f9937.js b/assets/js/75c3f910.396f9937.js deleted file mode 100644 index 57981443..00000000 --- a/assets/js/75c3f910.396f9937.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodestar_documents=self.webpackChunkcodestar_documents||[]).push([[8210],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),d=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=d(e.components);return r.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=d(n),m=a,f=u["".concat(s,".").concat(m)]||u[m]||p[m]||i;return n?r.createElement(f,o(o({ref:t},c),{},{components:n})):r.createElement(f,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var d=2;d{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var r=n(7462),a=(n(7294),n(3905));const i={title:"TDD",description:""},o=void 0,l={unversionedId:"software-engineering/phase05-tdd",id:"software-engineering/phase05-tdd",title:"TDD",description:"",source:"@site/docs/software-engineering/phase05-tdd.md",sourceDirName:"software-engineering",slug:"/software-engineering/phase05-tdd",permalink:"/codestar-documents/docs/software-engineering/phase05-tdd",draft:!1,editUrl:"https://github.com/Star-Academy/codestar-documents/tree/master/docs/software-engineering/phase05-tdd.md",tags:[],version:"current",frontMatter:{title:"TDD",description:""},sidebar:"tutorialSidebar",previous:{title:"Unit Test",permalink:"/codestar-documents/docs/software-engineering/phase04-unit-test"},next:{title:"CI/CD",permalink:"/codestar-documents/docs/software-engineering/phase06-cicd"}},s={},d=[{value:"\u0645\u0642\u062f\u0645\u0647",id:"\u0645\u0642\u062f\u0645\u0647",level:2},{value:"\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 \u0645\u0628\u0627\u0646\u06cc TDD",id:"\u0622\u0634\u0646\u0627\u06cc\u06cc-\u0628\u0627-\u0645\u0628\u0627\u0646\u06cc-tdd",level:2},{value:"\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0628\u0627 \u0627\u0635\u0648\u0644 SOLID \u0648 \u062a\u0627\u062b\u06cc\u0631 \u0622\u0646 \u0628\u0631 TDD",id:"\u0622\u0634\u0646\u0627\u06cc\u06cc-\u0628\u06cc\u0634\u062a\u0631-\u0628\u0627-\u0627\u0635\u0648\u0644-solid-\u0648-\u062a\u0627\u062b\u06cc\u0631-\u0622\u0646-\u0628\u0631-tdd",level:2},{value:"\u06af\u0633\u062a\u0631\u0634 \u067e\u0631\u0648\u0698\u0647 Full Text Search \u0628\u0627 \u0631\u0648\u06cc\u06a9\u0631\u062f TDD",id:"\u06af\u0633\u062a\u0631\u0634-\u067e\u0631\u0648\u0698\u0647-full-text-search-\u0628\u0627-\u0631\u0648\u06cc\u06a9\u0631\u062f-tdd",level:2}],c={toc:d};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"\u0645\u0642\u062f\u0645\u0647"},"\u0645\u0642\u062f\u0645\u0647"),(0,a.kt)("p",null,"\u062f\u0631 \u0627\u06cc\u0646 \u0641\u0627\u0632 \u0628\u0627 \u0645\u0641\u0627\u0647\u06cc\u0645\nTest-driven development\n\u0622\u0634\u0646\u0627 \u0645\u06cc\u200c\u0634\u0648\u06cc\u062f \u0648 \u067e\u0631\u0648\u0698\u0647 \u062c\u0633\u062a\u062c\u0648 \u0631\u0627 \u0628\u0627 \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f."),(0,a.kt)("h2",{id:"\u0622\u0634\u0646\u0627\u06cc\u06cc-\u0628\u0627-\u0645\u0628\u0627\u0646\u06cc-tdd"},"\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 \u0645\u0628\u0627\u0646\u06cc TDD"),(0,a.kt)("p",null,"\u0628\u0631\u0627\u06cc \u062f\u0631\u06a9 \u0645\u0641\u0647\u0648\u0645\nTDD\n\u0648 \u0645\u0631\u0627\u062d\u0644 \u0622\u0646 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0645\u0637\u0627\u0644\u0639\u0647 \u06a9\u0646\u06cc\u062f:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://medium.com/javascript-scene/testing-software-what-is-tdd-459b2145405c"},"Testing Software: What is TDD?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://medium.com/@stevenpcurtis.sc/test-driven-development-tdd-the-advantages-and-disadvantages-5347899ead90"},"Test Driven Development (TDD): The Advantages and Disadvantages")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://medium.com/hackernoon/introduction-to-test-driven-development-tdd-61a13bc92d92"},"Introduction to Test Driven Development (TDD)"))),(0,a.kt)("admonition",{title:"\u200c",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u0627\u06cc\u0646 \u062f\u0648 \u0648\u06cc\u062f\u0648\u06cc\u0648 \u0645\u0631\u0628\u0648\u0637 \u0628\u0647\nTDD\n\u0631\u0627 \u0646\u06cc\u0632 \u0628\u0628\u0646\u06cc\u062f."),(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=llaUBH5oayw"},"Test Driven Development - What? Why? And How?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://www.youtube.com/watch?v=WDFN_u5FTyM"},"TDD Isn't Hard, It's Something Else")))),(0,a.kt)("h2",{id:"\u0622\u0634\u0646\u0627\u06cc\u06cc-\u0628\u06cc\u0634\u062a\u0631-\u0628\u0627-\u0627\u0635\u0648\u0644-solid-\u0648-\u062a\u0627\u062b\u06cc\u0631-\u0622\u0646-\u0628\u0631-tdd"},"\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0628\u0627 \u0627\u0635\u0648\u0644 SOLID \u0648 \u062a\u0627\u062b\u06cc\u0631 \u0622\u0646 \u0628\u0631 TDD"),(0,a.kt)("p",null,"\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0641\u06a9\u0631 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0647\u0631 \u06cc\u06a9 \u0627\u0632 \u0627\u0635\u0648\u0644\nSOLID\u060c\n\u0686\u06af\u0648\u0646\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0628\u0631 \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0634\u062f\u0646 \u0631\u0648\u0646\u062f\nTDD\n\u062a\u0627\u062b\u06cc\u0631 \u0628\u06af\u0630\u0627\u0631\u062f. \u0628\u0627 \u0647\u0645\u200c\u062a\u06cc\u0645\u06cc \u062e\u0648\u062f \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f \u0628\u062d\u062b \u06a9\u0646\u06cc\u062f."),(0,a.kt)("p",null,"\u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u0628\u0631\u0627\u06cc \u062f\u0631\u06a9 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0645\u0637\u0627\u0644\u0639\u0647 \u06a9\u0646\u06cc\u062f:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://medium.com/ibm-garage/solid-design-principles-makes-test-driven-development-faster-and-easier-35c9eec22ff1"},"SOLID design principles make test-driven development (TDD) faster and easier")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://softwareengineering.stackexchange.com/a/111868"},"Does test-driven development force me to follow SOLID?"))),(0,a.kt)("h2",{id:"\u06af\u0633\u062a\u0631\u0634-\u067e\u0631\u0648\u0698\u0647-full-text-search-\u0628\u0627-\u0631\u0648\u06cc\u06a9\u0631\u062f-tdd"},"\u06af\u0633\u062a\u0631\u0634 \u067e\u0631\u0648\u0698\u0647 Full Text Search \u0628\u0627 \u0631\u0648\u06cc\u06a9\u0631\u062f TDD"),(0,a.kt)("p",null,"\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647\nFull Text Search\n\u062e\u0648\u062f\n\u0642\u0627\u0628\u0644\u06cc\u062a\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0627\u0645\u06a9\u0627\u0646 \u062c\u0633\u062a\u062c\u0648\u06cc \u0639\u0628\u0627\u0631\u062a \u0646\u06cc\u0632 \u0641\u0631\u0627\u0647\u0645 \u0634\u0648\u062f.\n\u0627\u06cc\u0646 \u0648\u0631\u0648\u062f\u06cc \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0648\u0631\u0648\u062f\u06cc \u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f :"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'get +disease -cough "star academy"\n')),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'get +illness +disease -cough -"star academy"\n')),(0,a.kt)("p",null,"\u062a\u062d\u0644\u06cc\u0644 \u0648\u0631\u0648\u062f\u06cc"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'get : \u062d\u062a\u0645\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\n+illness +disease : \u062d\u062f\u0627\u0642\u0644 \u06cc\u06a9\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u062f\u0648 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\n-cough : \u0646\u0628\u0627\u06cc\u062f \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\n"star academy" : \u0627\u06cc\u0646 \u0639\u0628\u0627\u0631\u062a \u062d\u062a\u0645\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\n-"star academy" : \u0627\u06cc\u0646 \u0639\u0628\u0627\u0631\u062a \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\n')),(0,a.kt)("admonition",{title:"\u200c",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0631\u0627 \u0633\u0639\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0627\u0645\u0644\u0627 \u0628\u0627 \u0631\u0648\u06cc\u06a9\u0631\u062f\nTDD\n\u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/75c3f910.9ab496ca.js b/assets/js/75c3f910.9ab496ca.js new file mode 100644 index 00000000..b135448c --- /dev/null +++ b/assets/js/75c3f910.9ab496ca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodestar_documents=self.webpackChunkcodestar_documents||[]).push([[8210],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),d=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=d(e.components);return r.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=d(n),m=a,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||i;return n?r.createElement(f,o(o({ref:t},c),{},{components:n})):r.createElement(f,o({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,o[1]=s;for(var d=2;d{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>s,toc:()=>d});var r=n(7462),a=(n(7294),n(3905));const i={title:"TDD",description:""},o=void 0,s={unversionedId:"software-engineering/phase05-tdd",id:"software-engineering/phase05-tdd",title:"TDD",description:"",source:"@site/docs/software-engineering/phase05-tdd.md",sourceDirName:"software-engineering",slug:"/software-engineering/phase05-tdd",permalink:"/codestar-documents/docs/software-engineering/phase05-tdd",draft:!1,editUrl:"https://github.com/Star-Academy/codestar-documents/tree/master/docs/software-engineering/phase05-tdd.md",tags:[],version:"current",frontMatter:{title:"TDD",description:""},sidebar:"tutorialSidebar",previous:{title:"Unit Test",permalink:"/codestar-documents/docs/software-engineering/phase04-unit-test"},next:{title:"CI/CD",permalink:"/codestar-documents/docs/software-engineering/phase06-cicd"}},l={},d=[{value:"\u0645\u0642\u062f\u0645\u0647",id:"\u0645\u0642\u062f\u0645\u0647",level:2},{value:"\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 \u0645\u0628\u0627\u0646\u06cc TDD",id:"\u0622\u0634\u0646\u0627\u06cc\u06cc-\u0628\u0627-\u0645\u0628\u0627\u0646\u06cc-tdd",level:2},{value:"\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0628\u0627 \u0627\u0635\u0648\u0644 SOLID \u0648 \u062a\u0627\u062b\u06cc\u0631 \u0622\u0646 \u0628\u0631 TDD",id:"\u0622\u0634\u0646\u0627\u06cc\u06cc-\u0628\u06cc\u0634\u062a\u0631-\u0628\u0627-\u0627\u0635\u0648\u0644-solid-\u0648-\u062a\u0627\u062b\u06cc\u0631-\u0622\u0646-\u0628\u0631-tdd",level:2},{value:"\u06af\u0633\u062a\u0631\u0634 \u067e\u0631\u0648\u0698\u0647 Full Text Search \u0628\u0627 \u0631\u0648\u06cc\u06a9\u0631\u062f TDD",id:"\u06af\u0633\u062a\u0631\u0634-\u067e\u0631\u0648\u0698\u0647-full-text-search-\u0628\u0627-\u0631\u0648\u06cc\u06a9\u0631\u062f-tdd",level:2}],c={toc:d};function p(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"\u0645\u0642\u062f\u0645\u0647"},"\u0645\u0642\u062f\u0645\u0647"),(0,a.kt)("p",null,"\u062f\u0631 \u0627\u06cc\u0646 \u0641\u0627\u0632 \u0628\u0627 \u0645\u0641\u0627\u0647\u06cc\u0645 Test-driven development\n\u0622\u0634\u0646\u0627 \u0645\u06cc\u200c\u0634\u0648\u06cc\u062f \u0648 \u067e\u0631\u0648\u0698\u0647 \u062c\u0633\u062a\u062c\u0648 \u0631\u0627 \u0628\u0627 \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f."),(0,a.kt)("h2",{id:"\u0622\u0634\u0646\u0627\u06cc\u06cc-\u0628\u0627-\u0645\u0628\u0627\u0646\u06cc-tdd"},"\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 \u0645\u0628\u0627\u0646\u06cc TDD"),(0,a.kt)("p",null,"\u0628\u0631\u0627\u06cc \u062f\u0631\u06a9 \u0645\u0641\u0647\u0648\u0645 TDD\n\u0648 \u0645\u0631\u0627\u062d\u0644 \u0622\u0646 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0645\u0637\u0627\u0644\u0639\u0647 \u06a9\u0646\u06cc\u062f:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://medium.com/javascript-scene/testing-software-what-is-tdd-459b2145405c"},"Testing Software: What is TDD?")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://medium.com/@stevenpcurtis.sc/test-driven-development-tdd-the-advantages-and-disadvantages-5347899ead90"},"Test Driven Development (TDD): The Advantages and Disadvantages")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://medium.com/hackernoon/introduction-to-test-driven-development-tdd-61a13bc92d92"},"Introduction to Test Driven Development (TDD)"))),(0,a.kt)("h2",{id:"\u0622\u0634\u0646\u0627\u06cc\u06cc-\u0628\u06cc\u0634\u062a\u0631-\u0628\u0627-\u0627\u0635\u0648\u0644-solid-\u0648-\u062a\u0627\u062b\u06cc\u0631-\u0622\u0646-\u0628\u0631-tdd"},"\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0628\u0627 \u0627\u0635\u0648\u0644 SOLID \u0648 \u062a\u0627\u062b\u06cc\u0631 \u0622\u0646 \u0628\u0631 TDD"),(0,a.kt)("p",null,"\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0641\u06a9\u0631 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0647\u0631 \u06cc\u06a9 \u0627\u0632 \u0627\u0635\u0648\u0644 SOLID\u060c\n\u0686\u06af\u0648\u0646\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0628\u0631 \u0633\u0627\u062f\u0647\u200c\u062a\u0631 \u0634\u062f\u0646 \u0631\u0648\u0646\u062f TDD\n\u062a\u0627\u062b\u06cc\u0631 \u0628\u06af\u0630\u0627\u0631\u062f. \u0628\u0627 \u0647\u0645\u200c\u062a\u06cc\u0645\u06cc \u062e\u0648\u062f \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f \u0628\u062d\u062b \u06a9\u0646\u06cc\u062f."),(0,a.kt)("p",null,"\u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u0628\u0631\u0627\u06cc \u062f\u0631\u06a9 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0645\u0637\u0627\u0644\u0639\u0647 \u06a9\u0646\u06cc\u062f:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://medium.com/ibm-garage/solid-design-principles-makes-test-driven-development-faster-and-easier-35c9eec22ff1"},"SOLID design principles make test-driven development (TDD) faster and easier")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://softwareengineering.stackexchange.com/a/111868"},"Does test-driven development force me to follow SOLID?"))),(0,a.kt)("h2",{id:"\u06af\u0633\u062a\u0631\u0634-\u067e\u0631\u0648\u0698\u0647-full-text-search-\u0628\u0627-\u0631\u0648\u06cc\u06a9\u0631\u062f-tdd"},"\u06af\u0633\u062a\u0631\u0634 \u067e\u0631\u0648\u0698\u0647 Full Text Search \u0628\u0627 \u0631\u0648\u06cc\u06a9\u0631\u062f TDD"),(0,a.kt)("p",null,"\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647\nFull Text Search\n\u062e\u0648\u062f\n\u0642\u0627\u0628\u0644\u06cc\u062a\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0627\u0645\u06a9\u0627\u0646 \u062c\u0633\u062a\u062c\u0648\u06cc \u0639\u0628\u0627\u0631\u062a \u0646\u06cc\u0632 \u0641\u0631\u0627\u0647\u0645 \u0634\u0648\u062f.\n\u0627\u06cc\u0646 \u0648\u0631\u0648\u062f\u06cc \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0648\u0631\u0648\u062f\u06cc \u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f :"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'get +disease -cough "star academy"\n')),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'get +illness +disease -cough -"star academy"\n')),(0,a.kt)("p",null,"\u062a\u062d\u0644\u06cc\u0644 \u0648\u0631\u0648\u062f\u06cc"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'get : \u062d\u062a\u0645\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\n+illness +disease : \u062d\u062f\u0627\u0642\u0644 \u06cc\u06a9\u06cc \u0627\u0632 \u0627\u06cc\u0646 \u062f\u0648 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\n-cough : \u0646\u0628\u0627\u06cc\u062f \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\n"star academy" : \u0627\u06cc\u0646 \u0639\u0628\u0627\u0631\u062a \u062d\u062a\u0645\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\n-"star academy" : \u0627\u06cc\u0646 \u0639\u0628\u0627\u0631\u062a \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f\n')),(0,a.kt)("admonition",{title:"\u200c",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"\u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0631\u0627 \u0633\u0639\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0627\u0645\u0644\u0627 \u0628\u0627 \u0631\u0648\u06cc\u06a9\u0631\u062f\nTDD\n\u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bcd34c72.a83c4a3a.js b/assets/js/bcd34c72.a83c4a3a.js deleted file mode 100644 index eff0a7bc..00000000 --- a/assets/js/bcd34c72.a83c4a3a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcodestar_documents=self.webpackChunkcodestar_documents||[]).push([[3277],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),s=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),d=s(n),u=r,k=d["".concat(l,".").concat(u)]||d[u]||m[u]||o;return n?a.createElement(k,i(i({ref:t},c),{},{components:n})):a.createElement(k,i({ref:t},c))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:r,i[1]=p;for(var s=2;s{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var a=n(7462),r=(n(7294),n(3905));const o={title:"CI/CD",description:""},i=void 0,p={unversionedId:"software-engineering/phase06-cicd",id:"software-engineering/phase06-cicd",title:"CI/CD",description:"",source:"@site/docs/software-engineering/phase06-cicd.md",sourceDirName:"software-engineering",slug:"/software-engineering/phase06-cicd",permalink:"/codestar-documents/docs/software-engineering/phase06-cicd",draft:!1,editUrl:"https://github.com/Star-Academy/codestar-documents/tree/master/docs/software-engineering/phase06-cicd.md",tags:[],version:"current",frontMatter:{title:"CI/CD",description:""},sidebar:"tutorialSidebar",previous:{title:"TDD",permalink:"/codestar-documents/docs/software-engineering/phase05-tdd"},next:{title:"SQL",permalink:"/codestar-documents/docs/software-engineering/phase07-SQL"}},l={},s=[{value:"\u0645\u0642\u062f\u0645\u0647",id:"\u0645\u0642\u062f\u0645\u0647",level:2},{value:"CI/CD \u0686\u06cc\u0633\u062a \u0648 \u0686\u0631\u0627 \u0627\u0647\u0645\u06cc\u062a \u062f\u0627\u0631\u062f",id:"cicd-\u0686\u06cc\u0633\u062a-\u0648-\u0686\u0631\u0627-\u0627\u0647\u0645\u06cc\u062a-\u062f\u0627\u0631\u062f",level:2},{value:"\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 GitHub Actions \u0648 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 CI/CD Pipeline \u0628\u0647 Repository",id:"\u0622\u0634\u0646\u0627\u06cc\u06cc-\u0628\u0627-github-actions-\u0648-\u0627\u0636\u0627\u0641\u0647-\u06a9\u0631\u062f\u0646-cicd-pipeline-\u0628\u0647-repository",level:2},{value:"\u0627\u0646\u062a\u0634\u0627\u0631 package \u062f\u0631 NuGet.org",id:"\u0627\u0646\u062a\u0634\u0627\u0631-package-\u062f\u0631-nugetorg",level:2},{value:"\u0633\u0627\u062e\u062a \u06cc\u06a9 Console App \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0633\u0631\u0686",id:"\u0633\u0627\u062e\u062a-\u06cc\u06a9-console-app-\u0628\u0631\u0627\u06cc-\u067e\u0631\u0648\u0698\u0647-\u0633\u0631\u0686",level:2}],c={toc:s};function m(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"\u0645\u0642\u062f\u0645\u0647"},"\u0645\u0642\u062f\u0645\u0647"),(0,r.kt)("p",null,"\u062f\u0631 \u0627\u06cc\u0646 \u0641\u0627\u0632 \u0628\u0627 \u0645\u0641\u0647\u0648\u0645 CI/CD\n\u0648 \u0627\u0647\u0645\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0622\u0634\u0646\u0627 \u0645\u06cc\u200c\u0634\u0648\u06cc\u062f \u0648 \u0633\u067e\u0633 \u067e\u0631\u0648\u0698\u0647\u0654 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 CI/CD\n\u0645\u062c\u0647\u0632 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f."),(0,r.kt)("h2",{id:"cicd-\u0686\u06cc\u0633\u062a-\u0648-\u0686\u0631\u0627-\u0627\u0647\u0645\u06cc\u062a-\u062f\u0627\u0631\u062f"},"CI/CD \u0686\u06cc\u0633\u062a \u0648 \u0686\u0631\u0627 \u0627\u0647\u0645\u06cc\u062a \u062f\u0627\u0631\u062f"),(0,r.kt)("p",null,"\u0628\u0631\u0627\u06cc \u062f\u0631\u06a9 \u0645\u0641\u0647\u0648\u0645 CI/CD\n\u0648 \u0627\u0647\u0645\u06cc\u062a \u0622\u0646 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0645\u0637\u0627\u0644\u0639\u0647 \u06a9\u0646\u06cc\u062f."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.redhat.com/en/topics/devops/what-is-ci-cd"},"What is CI/CD?(redhat)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://medium.com/swlh/whats-the-point-of-ci-anyway-ac3f9eaa244c"},"What\u2019s the Point of CI Anyway?")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://medium.com/driven-by-code/the-journey-to-ci-cd-b1872927c36b"},"The Journey to CI/CD"))),(0,r.kt)("h2",{id:"\u0622\u0634\u0646\u0627\u06cc\u06cc-\u0628\u0627-github-actions-\u0648-\u0627\u0636\u0627\u0641\u0647-\u06a9\u0631\u062f\u0646-cicd-pipeline-\u0628\u0647-repository"},"\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 GitHub Actions \u0648 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 CI/CD Pipeline \u0628\u0647 Repository"),(0,r.kt)("p",null,"\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc CI/CD\n\u0645\u0639\u0631\u0648\u0641\u060c GitHub Actions\n\u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u06a9\u0645\u06a9 \u0622\u0646\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u06cc\u06a9 Pipeline\n\u0634\u0627\u0645\u0644 \u0639\u0645\u0644\u06cc\u0627\u062a build\u060c\n\u0627\u062c\u0631\u0627\u06cc unit test\u0647\u0627\u060c\n\u0627\u0646\u062a\u0634\u0627\u0631 package\n\u0648 \u062f\u06cc\u06af\u0631 \u0639\u0645\u0644\u06cc\u0627\u062a\u06cc \u06a9\u0647 \u062f\u0631 \u062f\u0633\u062a\u0647\u0654 CI/CD\n\u0645\u06cc\u200c\u06af\u0646\u062c\u062f \u0631\u0627 \u0628\u0647 Repository\n\u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645. \u0627\u06cc\u0646 \u0628\u062e\u0634 \u0634\u0627\u0645\u0644 \u0645\u0631\u0627\u062d\u0644 \u0632\u06cc\u0631 \u0627\u0633\u062a:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},"github/workflows/buildPipeline.yml."),"\n\u0631\u0627 \u062f\u0631 Repository\n\u062e\u0648\u062f \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0628\u0631\u0627\u06cc Pipeline\n\u062e\u0648\u062f \u06cc\u06a9 \u0646\u0627\u0645 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"name: build\n")),(0,r.kt)("admonition",{parentName:"li",title:"\u200c",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u0628\u0647 \u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},"buildPipeline.yml"),"\n\u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u06a9\u0647 Pipeline\n\u062f\u0631 \u0647\u0646\u06af\u0627\u0645 push\n\u0648 pull request\n\u0631\u0648\u06cc master\n\u0627\u062c\u0631\u0627 \u0634\u0648\u062f:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"on:\n push:\n branches: [master]\n pull_request:\n branches: [master]\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0645\u0631\u0627\u062d\u0644 Pipeline\n\u0631\u0627 \u0628\u0647 \u062a\u0631\u062a\u06cc\u0628 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:"),(0,r.kt)("ol",{parentName:"li"},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u06a9\u0647 Pipeline\n\u0631\u0648\u06cc \u0622\u062e\u0631\u06cc\u0646 \u0648\u0631\u0698\u0646 ubuntu\n(\u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0622\u0646 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f) \u0627\u062c\u0631\u0627 \u0634\u0648\u062f:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"jobs:\n build:\n runs-on: ubuntu-latest\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0633\u067e\u0633 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u06a9\u0647 CI\n\u0627\u0632 agent\u0627\u06cc\n\u0628\u0647 \u0646\u0627\u0645 ",(0,r.kt)("inlineCode",{parentName:"p"},"actions/checkout@v3"),"\n\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u062f:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"steps:\n - uses: actions/checkout@v3\n")),(0,r.kt)("admonition",{parentName:"li",title:"\u200c",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647 \u0628\u06cc\u0634\u062a\u0631 ",(0,r.kt)("a",{parentName:"p",href:"https://www.edwardthomson.com/blog/building_an_action.html"},"Packaging an Action"),"\n\u0631\u0627 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f \u0633\u067e\u0633 \u0633\u0631\u06cc \u0628\u0647 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/actions/checkout"},"Repository"),"\n\u0622\u0646 \u0628\u0632\u0646\u06cc\u062f."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u062f\u0631 \u0642\u062f\u0645 \u0628\u0639\u062f \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u06a9\u0647 .Net 8.0\n\u0646\u0635\u0628 \u0634\u0648\u062f:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Setup .NET\n uses: actions/setup-dotnet@v2\n with:\n dotnet-version: 8.0.x\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0633\u067e\u0633 dependency\u0647\u0627\u06cc\n\u067e\u0631\u0648\u0698\u0647 restore\n\u0634\u0648\u0646\u062f:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Install dependencies\n run: dotnet restore\n working-directory: \n")),(0,r.kt)("admonition",{parentName:"li",title:"\u200c",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u062f\u0642\u062a \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0628\u0647 \u062c\u0627\u06cc ",(0,r.kt)("inlineCode",{parentName:"p"},""),"\n\u0622\u062f\u0631\u0633 \u0641\u0648\u0644\u062f\u0631 solution\n\u062e\u0648\u062f \u0631\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u062d\u0627\u0644 solution\n\u0631\u0627 build\n\u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Build\n run: dotnet build --configuration Release --no-restore\n working-directory: \n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u062a\u0633\u062a\u200c\u0647\u0627 \u0631\u0627 run\n\u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},'- name: Test\n run: dotnet test --no-restore --verbosity normal --collect:"XPlat Code Coverage"\n working-directory: \n')))),(0,r.kt)("p",{parentName:"li"},"\u062a\u0628\u0631\u06cc\u06a9! CI\n\u0634\u0645\u0627 \u0622\u0645\u0627\u062f\u0647\u200c\u0627\u0633\u062a."),(0,r.kt)("p",{parentName:"li"},"\u0641\u0627\u06cc\u0644 \u0631\u0627 commit\n\u06a9\u0631\u062f\u0647 \u0648 \u0631\u0648\u06cc master\n\u067e\u0648\u0634 \u06a9\u0646\u06cc\u062f."),(0,r.kt)("p",{parentName:"li"},"\u062f\u0631 Repository\n\u062e\u0648\u062f \u0648\u0627\u0631\u062f \u0645\u0646\u0648\u06cc Actions\n\u0634\u0648\u06cc\u062f\u061b \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f\u060c Pipeline\n\u0634\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0627\u0633\u062a:"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"actions",src:n(7658).Z,width:"1920",height:"952"})),(0,r.kt)("p",{parentName:"li"},"\u0622\u0646 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0631\u062f\u0647 \u0648 \u0648\u0627\u0631\u062f \u0628\u062e\u0634 build\n\u0634\u0648\u06cc\u062f:"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"ci",src:n(1792).Z,width:"1920",height:"950"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0627\u0641\u0632\u0648\u062f\u0646 badge\n\u0648\u0636\u0639\u06cc\u062a CI\n\u0628\u0647 README:"),(0,r.kt)("p",{parentName:"li"},"\u0627\u0632 \u0627\u06cc\u0646 \u0642\u0633\u0645\u062a \u062f\u06a9\u0645\u0647\u0654 Copy status badge Markdown\n\u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0647 \u0648 \u0645\u062a\u0646 \u06a9\u067e\u06cc\u200c\u0634\u062f\u0647 \u0631\u0627 \u0628\u0647 README\n\u062f\u0631 Repository\n\u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f."),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"get build badge",src:n(1260).Z,width:"1920",height:"952"})),(0,r.kt)("p",{parentName:"li"},"\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0648\u0636\u0639\u06cc\u062a Pipeline\n\u0631\u0627 \u062f\u0631 \u0647\u0631 \u0644\u062d\u0638\u0647 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f:"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"build badge",src:n(8981).Z,width:"1920",height:"949"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0627\u0641\u0632\u0648\u062f\u0646 \u0645\u0634\u0627\u0647\u062f\u0647 \u0648\u0636\u0639\u06cc\u062a code coverage:"),(0,r.kt)("p",{parentName:"li"},"\u0628\u0627 \u0627\u06a9\u0627\u0646\u062a GitHub\n\u062e\u0648\u062f \u062f\u0631 \u0633\u0627\u06cc\u062a ",(0,r.kt)("a",{parentName:"p",href:"https://codecov.io"},"codecov.io"),"\n\u0648\u0627\u0631\u062f \u0634\u0648\u06cc\u062f. \u0633\u067e\u0633 \u0628\u0647 \u0622\u062f\u0631\u0633 ",(0,r.kt)("inlineCode",{parentName:"p"},"https://codecov.io/gh/Star-Academy/"),"\n\u0628\u0631\u0648\u06cc\u062f."),(0,r.kt)("ol",{parentName:"li"},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0628\u062e\u0634 \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},"buildPipeline.yml"),"\n\u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Publish code coverage reports to codecove.io\n uses: codecov/codecov-action@v1\n with:\n token: ${{ secrets.CODECOV_TOKEN }}\n files: ./**/coverage.cobertura.xml\n fail_ci_if_error: true\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u06cc\u06a9\u200c\u0628\u0627\u0631 \u062f\u06cc\u06af\u0631 \u0635\u0641\u062d\u0647\u0654 ",(0,r.kt)("inlineCode",{parentName:"p"},"https://codecov.io/gh/Star-Academy/"),"\n\u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f\n\u0648\u0627\u0631\u062f \u0628\u062e\u0634 Setting\n\u0634\u062f\u0647 \u0648 \u0627\u0632 \u0633\u0645\u062a \u0686\u067e\u060c \u06af\u0632\u06cc\u0646\u0647\u200c\u06cc Badge\n\u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0628\u0627\u0632 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c Markdown\n\u0631\u0627 \u06a9\u067e\u06cc \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0647 README\n\u062f\u0631 Repository\n\u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f. \u0627\u06a9\u0646\u0648\u0646 \u0645\u0634\u0627\u0647\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0631\u062f \u06a9\u0647 \u062f\u0631 \u0647\u0631 \u0644\u062d\u0638\u0647\u060c \u0648\u0636\u0639\u06cc\u062a code coverage\n\u0634\u0645\u0627 \u0646\u06cc\u0632 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f:"))),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"code cov badge",src:n(1169).Z,width:"1920",height:"953"})))),(0,r.kt)("p",null,"\u062a\u0627 \u0628\u0647 \u0627\u06cc\u0646\u062c\u0627\u06cc \u06a9\u0627\u0631\u060c \u06a9\u0644 \u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},"buildPipeline.yml"),"\n\u0628\u0627\u06cc\u062f \u0628\u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yml"},'name: build\n\non:\n push:\n branches: [master]\n pull_request:\n branches: [master]\n\njobs:\n build:\n runs-on: ubuntu-latest\n\n steps:\n - uses: actions/checkout@v3\n\n - name: Setup .NET\n uses: actions/setup-dotnet@v2\n with:\n dotnet-version: 8.0.x\n\n - name: Install dependencies\n run: dotnet restore\n working-directory: \n\n - name: Build\n run: dotnet build --configuration Release --no-restore\n working-directory: \n\n - name: Test\n run: dotnet test --no-restore --verbosity normal --collect:"XPlat Code Coverage"\n working-directory: \n\n - name: Publish code coverage reports to codecove.io\n uses: codecov/codecov-action@v1\n with:\n token: ${{ secrets.CODECOV_TOKEN }}\n files: ./**/coverage.cobertura.xml\n fail_ci_if_error: true\n')),(0,r.kt)("h2",{id:"\u0627\u0646\u062a\u0634\u0627\u0631-package-\u062f\u0631-nugetorg"},"\u0627\u0646\u062a\u0634\u0627\u0631 package \u062f\u0631 NuGet.org"),(0,r.kt)("p",null,"\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u0645 \u06cc\u06a9 Pipeline\n\u062c\u062f\u06cc\u062f \u0628\u0633\u0627\u0632\u06cc\u0645 \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 release\n\u06cc\u06a9 \u0648\u0631\u0698\u0646 \u062f\u0631 Repository\u060c\n\u067e\u06a9\u06cc\u062c \u0631\u0627 \u062f\u0631 ",(0,r.kt)("a",{parentName:"p",href:"https://nuget.org"},"NuGet.org"),"\n\u0645\u0646\u062a\u0634\u0631 \u06a9\u0646\u062f."),(0,r.kt)("p",null,"\u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635\u0627\u062a package\n\u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},"csproj."),"\n\u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647\u0654 \u062e\u0648\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f. \u0628\u062f\u06cc\u0646 \u0645\u0646\u0638\u0648\u0631\u060c \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-xml"},'\n\n \n net8.0\n StarAcademy.CodeStar[Year].Team[TeamNumber].[LibraryName]\n [TeamMembers]\n Star Academy\n \n\n\n')),(0,r.kt)("admonition",{title:"\u200c",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u062f\u0631 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644\u060c \u0628\u0647 \u062c\u0627\u06cc ",(0,r.kt)("inlineCode",{parentName:"p"},"[Year]"),"\n\u0633\u0627\u0644 \u0634\u0645\u0633\u06cc\u060c \u0628\u0647 \u062c\u0627\u06cc ",(0,r.kt)("inlineCode",{parentName:"p"},"[TeamNumber]"),"\n\u0634\u0645\u0627\u0631\u0647\u0654 \u062a\u06cc\u0645 \u062e\u0648\u062f \u0648 \u0628\u0647 \u062c\u0627\u06cc ",(0,r.kt)("inlineCode",{parentName:"p"},"[LibraryName]"),"\n\u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647\u0654 \u062e\u0648\u062f \u0631\u0627 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f. \u0634\u0645\u0627\u0631\u0647 \u062a\u06cc\u0645 \u0628\u0647 \u0627\u06cc\u0646 \u062e\u0627\u0637\u0631 \u0628\u0627\u06cc\u062f \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0634\u0648\u062f \u06a9\u0647 \u0627\u06af\u0631 \u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647 \u062f\u0648 \u062a\u06cc\u0645 \u06cc\u06a9\u0633\u0627\u0646 \u0628\u0648\u062f\u060c publish\n\u062f\u0686\u0627\u0631 \u0645\u0634\u06a9\u0644 \u0646\u0634\u0648\u062f \u0648 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a ",(0,r.kt)("inlineCode",{parentName:"p"},"PackageId"),"\n\u06cc\u06a9\u062a\u0627 \u0628\u0627\u0634\u062f.")),(0,r.kt)("p",null,"\u062f\u0631 \u0627\u062f\u0627\u0645\u0647\u060c \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a Pipline\n\u0645\u0631\u0628\u0648\u0637 \u0628\u0647 publish\u060c\n\u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},".github/workflows/publishPipeline.yml"),"\n\u0631\u0627 \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645.\n\u0633\u067e\u0633 \u0645\u0631\u0627\u062d\u0644 \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0646\u0627\u0645\u060c trigger\n\u0648 OS\n\u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Pipeline\n\u0631\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"name: publish\n\non:\n release:\n types: published\n\njobs:\n publish:\n runs-on: ubuntu-latest\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0646\u0635\u0628 .Net:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"steps:\n - uses: actions/checkout@v3\n\n - name: Setup .NET\n uses: actions/setup-dotnet@v2\n with:\n dotnet-version: 8.0.x\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u06af\u0631\u0641\u062a\u0646 \u0648\u0631\u0698\u0646 release\n\u06a9\u0646\u0648\u0646\u06cc:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Get current release version\n id: version\n uses: pozetroninc/github-action-get-latest-release@master\n with:\n repository: Star-Academy/\n")),(0,r.kt)("admonition",{parentName:"li",title:"\u200c",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u062a\u06af release\n\u0628\u0639\u0646\u0648\u0627\u0646 \u0648\u0631\u0698\u0646 \u0628\u0647 NuGet\n\u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f. \u062f\u0631 \u0646\u062a\u06cc\u062c\u0647\u060c \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0642\u0627\u0628\u0644 \u0642\u0628\u0648\u0644 \u0648\u0631\u0698\u0646 \u0631\u0627 \u0627\u0632\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/en-us/nuget/concepts/package-versioning"},"\u0627\u06cc\u0646\u062c\u0627"),"\n\u0628\u062e\u0648\u0627\u0646\u06cc\u062f \u0648 \u062a\u06af \u0631\u0627 \u0645\u0637\u0627\u0628\u0642 \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648 \u0628\u0632\u0646\u06cc\u062f.")),(0,r.kt)("admonition",{parentName:"li",title:"\u200c",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u0628\u0647 \u062c\u0627\u06cc ",(0,r.kt)("inlineCode",{parentName:"p"},""),"\n\u0646\u0627\u0645 Repository\n\u062e\u0648\u062f \u0631\u0627 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"build \u0648 \u0633\u0627\u062e\u062a \u067e\u06a9\u06cc\u062c NuGet:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Build library and generate NuGet Package\n run: dotnet pack -c Release -o artifacts -p:PackageVersion=${{ steps.version.outputs.release }}\n working-directory: \n")),(0,r.kt)("admonition",{parentName:"li",title:"\u200c",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u0628\u0647 \u062c\u0627\u06cc ",(0,r.kt)("inlineCode",{parentName:"p"},""),"\n\u0622\u062f\u0631\u0633 \u0641\u0648\u0644\u062f\u0631\u06cc \u06a9\u0647 \u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},"csproj."),"\n\u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 class library\n\u062f\u0631 \u0622\u0646 \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u062f \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0627\u0646\u062a\u0634\u0627\u0631 \u067e\u06a9\u06cc\u062c NuGet:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Publish NuGet Package\n run: dotnet nuget push ./**/*.nupkg -k ${{ secrets.NUGET_API_KEY }} -s https://api.nuget.org/v3/index.json\n")))),(0,r.kt)("p",null,"\u0627\u0632 \u0627\u06cc\u0646 \u067e\u0633\u060c \u0647\u0631 \u06af\u0627\u0647 \u062f\u0631 Repository\n\u062e\u0648\u062f \u062a\u06af \u0628\u0632\u0646\u06cc\u062f\u060c Pipeline\n\u0641\u0648\u0642 trigger\n\u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u062f\u0631 \u0646\u062a\u06cc\u062c\u0647 \u067e\u06a9\u06cc\u062c \u0634\u0645\u0627 push\n\u0645\u06cc\u200c\u0634\u0648\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u062f\u0631 \u0645\u0646\u0648\u06cc Actions\n\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0648\u0636\u0639\u06cc\u062a publish\n\u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f."),(0,r.kt)("p",null,"\u067e\u06a9\u06cc\u062c \u0645\u0646\u062a\u0634\u0631 \u0634\u062f\u0647\u0654 \u062e\u0648\u062f \u0631\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0631 \u0622\u062f\u0631\u0633 ",(0,r.kt)("inlineCode",{parentName:"p"},"nuget.org/packages/[PackageId]"),"\n\u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f."),(0,r.kt)("admonition",{title:"\u200c",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647 \u0628\u06cc\u0634\u062a\u0631 ",(0,r.kt)("a",{parentName:"p",href:"https://devblogs.microsoft.com/dotnet/dotnet-loves-github-actions/"},"Intro to GitHub Actions for .NET"),"\n\u0631\u0627 \u0645\u0637\u0627\u0644\u0639\u0647 \u06a9\u0646\u06cc\u062f.")),(0,r.kt)("h2",{id:"\u0633\u0627\u062e\u062a-\u06cc\u06a9-console-app-\u0628\u0631\u0627\u06cc-\u067e\u0631\u0648\u0698\u0647-\u0633\u0631\u0686"},"\u0633\u0627\u062e\u062a \u06cc\u06a9 Console App \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0633\u0631\u0686"),(0,r.kt)("p",null,"\u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634\u060c \u06cc\u06a9 solution\n\u062f\u06cc\u06af\u0631 \u0628\u0633\u0627\u0632\u06cc\u062f\u060c \u0648 \u062f\u0631 \u0622\u0646 \u0628\u0627 Net Cli.\n\u06cc\u06a9 console app\n\u0628\u0633\u0627\u0632\u06cc\u062f. \u062f\u0631 \u067e\u0648\u0634\u0647 \u067e\u0631\u0648\u0698\u0647 \u06a9\u0646\u0633\u0648\u0644\u060c command\n\u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u067e\u06a9\u06cc\u062c \u0633\u0631\u0686 \u0634\u0645\u0627 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u06a9\u0646\u0633\u0648\u0644 \u0627\u0636\u0627\u0641\u0647 \u0634\u0648\u062f:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"dotnet add package [packageId]\n")),(0,r.kt)("p",null,"\u0628\u0627 \u0627\u06cc\u0646 command\u060c\n\u067e\u06a9\u06cc\u062c \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u0634\u0645\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u06a9\u0644\u0627\u0633\u200c\u0647\u0627\u06cc \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0627\u06af\u0631 \u067e\u06a9\u06cc\u062c \u062e\u0648\u062f \u0631\u0627 update\n\u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u0646 command\u060c\n\u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u067e\u06a9\u06cc\u062c \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u0634\u0645\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f."),(0,r.kt)("p",null,"\u062d\u0627\u0644 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u067e\u06a9\u06cc\u062c \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0633\u0631\u0686\u200c\u062a\u0627\u0646\u060c \u06cc\u06a9 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 \u0633\u0631\u0686 \u062a\u062d\u062a \u06a9\u0646\u0633\u0648\u0644 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f."))}m.isMDXComponent=!0},7658:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/phase06-actions-8c0c65c58498c133573e138b1ba53efe.png"},8981:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/phase06-build-badge-9897ddfb9a8ce38def82a627a23ea0d1.png"},1792:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/phase06-ci-75b9b1c62f3157effc3f3f082454311d.png"},1169:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/phase06-codcov-badge-3ccae870c6a8b1e5213d3a7d0a1f968f.png"},1260:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/phase06-get-build-badge-46495d092a6a4cdee81d6f36eb868623.png"}}]); \ No newline at end of file diff --git a/assets/js/bcd34c72.ea9bbd61.js b/assets/js/bcd34c72.ea9bbd61.js new file mode 100644 index 00000000..3cb2e1d2 --- /dev/null +++ b/assets/js/bcd34c72.ea9bbd61.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodestar_documents=self.webpackChunkcodestar_documents||[]).push([[3277],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),s=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return a.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),d=s(n),u=r,k=d["".concat(l,".").concat(u)]||d[u]||m[u]||o;return n?a.createElement(k,i(i({ref:t},c),{},{components:n})):a.createElement(k,i({ref:t},c))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:r,i[1]=p;for(var s=2;s{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var a=n(7462),r=(n(7294),n(3905));const o={title:"CI/CD",description:""},i=void 0,p={unversionedId:"software-engineering/phase06-cicd",id:"software-engineering/phase06-cicd",title:"CI/CD",description:"",source:"@site/docs/software-engineering/phase06-cicd.md",sourceDirName:"software-engineering",slug:"/software-engineering/phase06-cicd",permalink:"/codestar-documents/docs/software-engineering/phase06-cicd",draft:!1,editUrl:"https://github.com/Star-Academy/codestar-documents/tree/master/docs/software-engineering/phase06-cicd.md",tags:[],version:"current",frontMatter:{title:"CI/CD",description:""},sidebar:"tutorialSidebar",previous:{title:"TDD",permalink:"/codestar-documents/docs/software-engineering/phase05-tdd"},next:{title:"SQL",permalink:"/codestar-documents/docs/software-engineering/phase07-SQL"}},l={},s=[{value:"\u0645\u0642\u062f\u0645\u0647",id:"\u0645\u0642\u062f\u0645\u0647",level:2},{value:"CI/CD \u0686\u06cc\u0633\u062a \u0648 \u0686\u0631\u0627 \u0627\u0647\u0645\u06cc\u062a \u062f\u0627\u0631\u062f",id:"cicd-\u0686\u06cc\u0633\u062a-\u0648-\u0686\u0631\u0627-\u0627\u0647\u0645\u06cc\u062a-\u062f\u0627\u0631\u062f",level:2},{value:"\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 GitHub Actions \u0648 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 CI/CD Pipeline \u0628\u0647 Repository",id:"\u0622\u0634\u0646\u0627\u06cc\u06cc-\u0628\u0627-github-actions-\u0648-\u0627\u0636\u0627\u0641\u0647-\u06a9\u0631\u062f\u0646-cicd-pipeline-\u0628\u0647-repository",level:2},{value:"\u0627\u0646\u062a\u0634\u0627\u0631 package \u062f\u0631 NuGet.org",id:"\u0627\u0646\u062a\u0634\u0627\u0631-package-\u062f\u0631-nugetorg",level:2},{value:"\u0633\u0627\u062e\u062a \u06cc\u06a9 Console App \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0633\u0631\u0686",id:"\u0633\u0627\u062e\u062a-\u06cc\u06a9-console-app-\u0628\u0631\u0627\u06cc-\u067e\u0631\u0648\u0698\u0647-\u0633\u0631\u0686",level:2}],c={toc:s};function m(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,a.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"\u0645\u0642\u062f\u0645\u0647"},"\u0645\u0642\u062f\u0645\u0647"),(0,r.kt)("p",null,"\u062f\u0631 \u0627\u06cc\u0646 \u0641\u0627\u0632 \u0628\u0627 \u0645\u0641\u0647\u0648\u0645\nCI/CD\n\u0648 \u0627\u0647\u0645\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0622\u0634\u0646\u0627 \u0645\u06cc\u200c\u0634\u0648\u06cc\u062f \u0648 \u0633\u067e\u0633 \u067e\u0631\u0648\u0698\u0647\u0654 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647\nCI/CD\n\u0645\u062c\u0647\u0632 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f."),(0,r.kt)("h2",{id:"cicd-\u0686\u06cc\u0633\u062a-\u0648-\u0686\u0631\u0627-\u0627\u0647\u0645\u06cc\u062a-\u062f\u0627\u0631\u062f"},"CI/CD \u0686\u06cc\u0633\u062a \u0648 \u0686\u0631\u0627 \u0627\u0647\u0645\u06cc\u062a \u062f\u0627\u0631\u062f"),(0,r.kt)("p",null,"\u0628\u0631\u0627\u06cc \u062f\u0631\u06a9 \u0645\u0641\u0647\u0648\u0645\nCI/CD\n\u0648 \u0627\u0647\u0645\u06cc\u062a \u0622\u0646 \u0644\u06cc\u0646\u06a9\u200c\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0645\u0637\u0627\u0644\u0639\u0647 \u06a9\u0646\u06cc\u062f."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.redhat.com/en/topics/devops/what-is-ci-cd"},"What is CI/CD?(redhat)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://medium.com/swlh/whats-the-point-of-ci-anyway-ac3f9eaa244c"},"What\u2019s the Point of CI Anyway?")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://medium.com/driven-by-code/the-journey-to-ci-cd-b1872927c36b"},"The Journey to CI/CD"))),(0,r.kt)("admonition",{title:"\u200c",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647 \u0628\u06cc\u0634\u062a\u0631\n",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=42UP1fxi2SY"},"CI/CD In 5 Minutes"),"\n\u0631\u0627 \u0645\u0637\u0627\u0644\u0639\u0647 \u06a9\u0646\u06cc\u062f.")),(0,r.kt)("h2",{id:"\u0622\u0634\u0646\u0627\u06cc\u06cc-\u0628\u0627-github-actions-\u0648-\u0627\u0636\u0627\u0641\u0647-\u06a9\u0631\u062f\u0646-cicd-pipeline-\u0628\u0647-repository"},"\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 GitHub Actions \u0648 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 CI/CD Pipeline \u0628\u0647 Repository"),(0,r.kt)("admonition",{title:"\u200c",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u0628\u0631\u0627\u06cc \u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627\nGithub Action\n\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0648\u06cc\u062f\u06cc\u0648 \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0628\u0646\u06cc\u062f\n",(0,r.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=jtzwGXw-FkU"},"Introduction to GitHub Actions"))),(0,r.kt)("p",null,"\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\nCI/CD\n\u0645\u0639\u0631\u0648\u0641\u060c\nGitHub Actions\n\u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u06a9\u0645\u06a9 \u0622\u0646\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u06cc\u06a9\nPipeline\n\u0634\u0627\u0645\u0644 \u0639\u0645\u0644\u06cc\u0627\u062a\nbuild\u060c\n\u0627\u062c\u0631\u0627\u06cc\nunit test\u0647\u0627\u060c\n\u0627\u0646\u062a\u0634\u0627\u0631\npackage\n\u0648 \u062f\u06cc\u06af\u0631 \u0639\u0645\u0644\u06cc\u0627\u062a\u06cc \u06a9\u0647 \u062f\u0631 \u062f\u0633\u062a\u0647\u0654\nCI/CD\n\u0645\u06cc\u200c\u06af\u0646\u062c\u062f \u0631\u0627 \u0628\u0647\nRepository\n\u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645. \u0627\u06cc\u0646 \u0628\u062e\u0634 \u0634\u0627\u0645\u0644 \u0645\u0631\u0627\u062d\u0644 \u0632\u06cc\u0631 \u0627\u0633\u062a:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},"github/workflows/buildPipeline.yml."),"\n\u0631\u0627 \u062f\u0631 Repository\n\u062e\u0648\u062f \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0628\u0631\u0627\u06cc Pipeline\n\u062e\u0648\u062f \u06cc\u06a9 \u0646\u0627\u0645 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"name: build\n")),(0,r.kt)("admonition",{parentName:"li",title:"\u200c",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u0628\u0647 \u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},"buildPipeline.yml"),"\n\u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u06a9\u0647 Pipeline\n\u062f\u0631 \u0647\u0646\u06af\u0627\u0645 push\n\u0648 pull request\n\u0631\u0648\u06cc master\n\u0627\u062c\u0631\u0627 \u0634\u0648\u062f:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"on:\n push:\n branches: [master]\n pull_request:\n branches: [master]\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0645\u0631\u0627\u062d\u0644 Pipeline\n\u0631\u0627 \u0628\u0647 \u062a\u0631\u062a\u06cc\u0628 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:"),(0,r.kt)("ol",{parentName:"li"},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u06a9\u0647 Pipeline\n\u0631\u0648\u06cc \u0622\u062e\u0631\u06cc\u0646 \u0648\u0631\u0698\u0646 ubuntu\n(\u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0622\u0646 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f) \u0627\u062c\u0631\u0627 \u0634\u0648\u062f:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"jobs:\n build:\n runs-on: ubuntu-latest\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0633\u067e\u0633 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u06a9\u0647 CI\n\u0627\u0632 agent\u0627\u06cc\n\u0628\u0647 \u0646\u0627\u0645 ",(0,r.kt)("inlineCode",{parentName:"p"},"actions/checkout@v3"),"\n\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u062f:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"steps:\n - uses: actions/checkout@v3\n")),(0,r.kt)("admonition",{parentName:"li",title:"\u200c",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647 \u0628\u06cc\u0634\u062a\u0631 ",(0,r.kt)("a",{parentName:"p",href:"https://www.edwardthomson.com/blog/building_an_action.html"},"Packaging an Action"),"\n\u0631\u0627 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f \u0633\u067e\u0633 \u0633\u0631\u06cc \u0628\u0647 ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/actions/checkout"},"Repository"),"\n\u0622\u0646 \u0628\u0632\u0646\u06cc\u062f."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u062f\u0631 \u0642\u062f\u0645 \u0628\u0639\u062f \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u06a9\u0647 .Net 8.0\n\u0646\u0635\u0628 \u0634\u0648\u062f:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Setup .NET\n uses: actions/setup-dotnet@v2\n with:\n dotnet-version: 8.0.x\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0633\u067e\u0633 dependency\u0647\u0627\u06cc\n\u067e\u0631\u0648\u0698\u0647 restore\n\u0634\u0648\u0646\u062f:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Install dependencies\n run: dotnet restore\n working-directory: \n")),(0,r.kt)("admonition",{parentName:"li",title:"\u200c",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u062f\u0642\u062a \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0628\u0647 \u062c\u0627\u06cc ",(0,r.kt)("inlineCode",{parentName:"p"},""),"\n\u0622\u062f\u0631\u0633 \u0641\u0648\u0644\u062f\u0631 solution\n\u062e\u0648\u062f \u0631\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u062d\u0627\u0644 solution\n\u0631\u0627 build\n\u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Build\n run: dotnet build --configuration Release --no-restore\n working-directory: \n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a \u062a\u0633\u062a\u200c\u0647\u0627 \u0631\u0627 run\n\u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},'- name: Test\n run: dotnet test --no-restore --verbosity normal --collect:"XPlat Code Coverage"\n working-directory: \n')))),(0,r.kt)("p",{parentName:"li"},"\u062a\u0628\u0631\u06cc\u06a9! CI\n\u0634\u0645\u0627 \u0622\u0645\u0627\u062f\u0647\u200c\u0627\u0633\u062a."),(0,r.kt)("p",{parentName:"li"},"\u0641\u0627\u06cc\u0644 \u0631\u0627 commit\n\u06a9\u0631\u062f\u0647 \u0648 \u0631\u0648\u06cc master\n\u067e\u0648\u0634 \u06a9\u0646\u06cc\u062f."),(0,r.kt)("p",{parentName:"li"},"\u062f\u0631 Repository\n\u062e\u0648\u062f \u0648\u0627\u0631\u062f \u0645\u0646\u0648\u06cc Actions\n\u0634\u0648\u06cc\u062f\u061b \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f\u060c Pipeline\n\u0634\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0627\u0633\u062a:"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"actions",src:n(7658).Z,width:"1920",height:"952"})),(0,r.kt)("p",{parentName:"li"},"\u0622\u0646 \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0631\u062f\u0647 \u0648 \u0648\u0627\u0631\u062f \u0628\u062e\u0634 build\n\u0634\u0648\u06cc\u062f:"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"ci",src:n(1792).Z,width:"1920",height:"950"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0627\u0641\u0632\u0648\u062f\u0646 badge\n\u0648\u0636\u0639\u06cc\u062a CI\n\u0628\u0647 README:"),(0,r.kt)("p",{parentName:"li"},"\u0627\u0632 \u0627\u06cc\u0646 \u0642\u0633\u0645\u062a \u062f\u06a9\u0645\u0647\u0654 Copy status badge Markdown\n\u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0647 \u0648 \u0645\u062a\u0646 \u06a9\u067e\u06cc\u200c\u0634\u062f\u0647 \u0631\u0627 \u0628\u0647 README\n\u062f\u0631 Repository\n\u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f."),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"get build badge",src:n(1260).Z,width:"1920",height:"952"})),(0,r.kt)("p",{parentName:"li"},"\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0648\u0636\u0639\u06cc\u062a Pipeline\n\u0631\u0627 \u062f\u0631 \u0647\u0631 \u0644\u062d\u0638\u0647 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f:"),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"build badge",src:n(8981).Z,width:"1920",height:"949"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0627\u0641\u0632\u0648\u062f\u0646 \u0645\u0634\u0627\u0647\u062f\u0647 \u0648\u0636\u0639\u06cc\u062a code coverage:"),(0,r.kt)("p",{parentName:"li"},"\u0628\u0627 \u0627\u06a9\u0627\u0646\u062a GitHub\n\u062e\u0648\u062f \u062f\u0631 \u0633\u0627\u06cc\u062a ",(0,r.kt)("a",{parentName:"p",href:"https://codecov.io"},"codecov.io"),"\n\u0648\u0627\u0631\u062f \u0634\u0648\u06cc\u062f. \u0633\u067e\u0633 \u0628\u0647 \u0622\u062f\u0631\u0633 ",(0,r.kt)("inlineCode",{parentName:"p"},"https://codecov.io/gh/Star-Academy/"),"\n\u0628\u0631\u0648\u06cc\u062f."),(0,r.kt)("ol",{parentName:"li"},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0628\u062e\u0634 \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},"buildPipeline.yml"),"\n\u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Publish code coverage reports to codecove.io\n uses: codecov/codecov-action@v1\n with:\n token: ${{ secrets.CODECOV_TOKEN }}\n files: ./**/coverage.cobertura.xml\n fail_ci_if_error: true\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u06cc\u06a9\u200c\u0628\u0627\u0631 \u062f\u06cc\u06af\u0631 \u0635\u0641\u062d\u0647\u0654 ",(0,r.kt)("inlineCode",{parentName:"p"},"https://codecov.io/gh/Star-Academy/"),"\n\u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u06cc\u062f\n\u0648\u0627\u0631\u062f \u0628\u062e\u0634 Setting\n\u0634\u062f\u0647 \u0648 \u0627\u0632 \u0633\u0645\u062a \u0686\u067e\u060c \u06af\u0632\u06cc\u0646\u0647\u200c\u06cc Badge\n\u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0635\u0641\u062d\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0628\u0627\u0632 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c Markdown\n\u0631\u0627 \u06a9\u067e\u06cc \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0647 README\n\u062f\u0631 Repository\n\u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f. \u0627\u06a9\u0646\u0648\u0646 \u0645\u0634\u0627\u0647\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u062f \u06a9\u0631\u062f \u06a9\u0647 \u062f\u0631 \u0647\u0631 \u0644\u062d\u0638\u0647\u060c \u0648\u0636\u0639\u06cc\u062a code coverage\n\u0634\u0645\u0627 \u0646\u06cc\u0632 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f:"))),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("img",{alt:"code cov badge",src:n(1169).Z,width:"1920",height:"953"})))),(0,r.kt)("p",null,"\u062a\u0627 \u0628\u0647 \u0627\u06cc\u0646\u062c\u0627\u06cc \u06a9\u0627\u0631\u060c \u06a9\u0644 \u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},"buildPipeline.yml"),"\n\u0628\u0627\u06cc\u062f \u0628\u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yml"},'name: build\n\non:\n push:\n branches: [master]\n pull_request:\n branches: [master]\n\njobs:\n build:\n runs-on: ubuntu-latest\n\n steps:\n - uses: actions/checkout@v3\n\n - name: Setup .NET\n uses: actions/setup-dotnet@v2\n with:\n dotnet-version: 8.0.x\n\n - name: Install dependencies\n run: dotnet restore\n working-directory: \n\n - name: Build\n run: dotnet build --configuration Release --no-restore\n working-directory: \n\n - name: Test\n run: dotnet test --no-restore --verbosity normal --collect:"XPlat Code Coverage"\n working-directory: \n\n - name: Publish code coverage reports to codecove.io\n uses: codecov/codecov-action@v1\n with:\n token: ${{ secrets.CODECOV_TOKEN }}\n files: ./**/coverage.cobertura.xml\n fail_ci_if_error: true\n')),(0,r.kt)("h2",{id:"\u0627\u0646\u062a\u0634\u0627\u0631-package-\u062f\u0631-nugetorg"},"\u0627\u0646\u062a\u0634\u0627\u0631 package \u062f\u0631 NuGet.org"),(0,r.kt)("p",null,"\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u0645 \u06cc\u06a9 Pipeline\n\u062c\u062f\u06cc\u062f \u0628\u0633\u0627\u0632\u06cc\u0645 \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 release\n\u06cc\u06a9 \u0648\u0631\u0698\u0646 \u062f\u0631 Repository\u060c\n\u067e\u06a9\u06cc\u062c \u0631\u0627 \u062f\u0631 ",(0,r.kt)("a",{parentName:"p",href:"https://nuget.org"},"NuGet.org"),"\n\u0645\u0646\u062a\u0634\u0631 \u06a9\u0646\u062f."),(0,r.kt)("p",null,"\u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635\u0627\u062a package\n\u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},"csproj."),"\n\u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647\u0654 \u062e\u0648\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f. \u0628\u062f\u06cc\u0646 \u0645\u0646\u0638\u0648\u0631\u060c \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0628\u0627\u0634\u062f:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-xml"},'\n\n \n net8.0\n StarAcademy.CodeStar[Year].Team[TeamNumber].[LibraryName]\n [TeamMembers]\n Star Academy\n \n\n\n')),(0,r.kt)("admonition",{title:"\u200c",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u062f\u0631 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644\u060c \u0628\u0647 \u062c\u0627\u06cc ",(0,r.kt)("inlineCode",{parentName:"p"},"[Year]"),"\n\u0633\u0627\u0644 \u0634\u0645\u0633\u06cc\u060c \u0628\u0647 \u062c\u0627\u06cc ",(0,r.kt)("inlineCode",{parentName:"p"},"[TeamNumber]"),"\n\u0634\u0645\u0627\u0631\u0647\u0654 \u062a\u06cc\u0645 \u062e\u0648\u062f \u0648 \u0628\u0647 \u062c\u0627\u06cc ",(0,r.kt)("inlineCode",{parentName:"p"},"[LibraryName]"),"\n\u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647\u0654 \u062e\u0648\u062f \u0631\u0627 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f. \u0634\u0645\u0627\u0631\u0647 \u062a\u06cc\u0645 \u0628\u0647 \u0627\u06cc\u0646 \u062e\u0627\u0637\u0631 \u0628\u0627\u06cc\u062f \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0634\u0648\u062f \u06a9\u0647 \u0627\u06af\u0631 \u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647 \u062f\u0648 \u062a\u06cc\u0645 \u06cc\u06a9\u0633\u0627\u0646 \u0628\u0648\u062f\u060c publish\n\u062f\u0686\u0627\u0631 \u0645\u0634\u06a9\u0644 \u0646\u0634\u0648\u062f \u0648 \u062f\u0631 \u0646\u0647\u0627\u06cc\u062a ",(0,r.kt)("inlineCode",{parentName:"p"},"PackageId"),"\n\u06cc\u06a9\u062a\u0627 \u0628\u0627\u0634\u062f.")),(0,r.kt)("p",null,"\u062f\u0631 \u0627\u062f\u0627\u0645\u0647\u060c \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a Pipline\n\u0645\u0631\u0628\u0648\u0637 \u0628\u0647 publish\u060c\n\u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},".github/workflows/publishPipeline.yml"),"\n\u0631\u0627 \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645.\n\u0633\u067e\u0633 \u0645\u0631\u0627\u062d\u0644 \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0646\u0627\u0645\u060c trigger\n\u0648 OS\n\u0645\u0631\u0628\u0648\u0637 \u0628\u0647 Pipeline\n\u0631\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645."),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"name: publish\n\non:\n release:\n types: published\n\njobs:\n publish:\n runs-on: ubuntu-latest\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0646\u0635\u0628 .Net:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"steps:\n - uses: actions/checkout@v3\n\n - name: Setup .NET\n uses: actions/setup-dotnet@v2\n with:\n dotnet-version: 8.0.x\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u06af\u0631\u0641\u062a\u0646 \u0648\u0631\u0698\u0646 release\n\u06a9\u0646\u0648\u0646\u06cc:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Get current release version\n id: version\n uses: pozetroninc/github-action-get-latest-release@master\n with:\n repository: Star-Academy/\n")),(0,r.kt)("admonition",{parentName:"li",title:"\u200c",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u062a\u06af release\n\u0628\u0639\u0646\u0648\u0627\u0646 \u0648\u0631\u0698\u0646 \u0628\u0647 NuGet\n\u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f. \u062f\u0631 \u0646\u062a\u06cc\u062c\u0647\u060c \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0642\u0627\u0628\u0644 \u0642\u0628\u0648\u0644 \u0648\u0631\u0698\u0646 \u0631\u0627 \u0627\u0632\n",(0,r.kt)("a",{parentName:"p",href:"https://docs.microsoft.com/en-us/nuget/concepts/package-versioning"},"\u0627\u06cc\u0646\u062c\u0627"),"\n\u0628\u062e\u0648\u0627\u0646\u06cc\u062f \u0648 \u062a\u06af \u0631\u0627 \u0645\u0637\u0627\u0628\u0642 \u0627\u06cc\u0646 \u0627\u0644\u06af\u0648 \u0628\u0632\u0646\u06cc\u062f.")),(0,r.kt)("admonition",{parentName:"li",title:"\u200c",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u0628\u0647 \u062c\u0627\u06cc ",(0,r.kt)("inlineCode",{parentName:"p"},""),"\n\u0646\u0627\u0645 Repository\n\u062e\u0648\u062f \u0631\u0627 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"build \u0648 \u0633\u0627\u062e\u062a \u067e\u06a9\u06cc\u062c NuGet:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Build library and generate NuGet Package\n run: dotnet pack -c Release -o artifacts -p:PackageVersion=${{ steps.version.outputs.release }}\n working-directory: \n")),(0,r.kt)("admonition",{parentName:"li",title:"\u200c",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"\u0628\u0647 \u062c\u0627\u06cc ",(0,r.kt)("inlineCode",{parentName:"p"},""),"\n\u0622\u062f\u0631\u0633 \u0641\u0648\u0644\u062f\u0631\u06cc \u06a9\u0647 \u0641\u0627\u06cc\u0644 ",(0,r.kt)("inlineCode",{parentName:"p"},"csproj."),"\n\u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 class library\n\u062f\u0631 \u0622\u0646 \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u062f \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"\u0627\u0646\u062a\u0634\u0627\u0631 \u067e\u06a9\u06cc\u062c NuGet:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-yml"},"- name: Publish NuGet Package\n run: dotnet nuget push ./**/*.nupkg -k ${{ secrets.NUGET_API_KEY }} -s https://api.nuget.org/v3/index.json\n")))),(0,r.kt)("p",null,"\u0627\u0632 \u0627\u06cc\u0646 \u067e\u0633\u060c \u0647\u0631 \u06af\u0627\u0647 \u062f\u0631 Repository\n\u062e\u0648\u062f \u062a\u06af \u0628\u0632\u0646\u06cc\u062f\u060c Pipeline\n\u0641\u0648\u0642 trigger\n\u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u062f\u0631 \u0646\u062a\u06cc\u062c\u0647 \u067e\u06a9\u06cc\u062c \u0634\u0645\u0627 push\n\u0645\u06cc\u200c\u0634\u0648\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u062f\u0631 \u0645\u0646\u0648\u06cc Actions\n\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0648\u0636\u0639\u06cc\u062a publish\n\u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f."),(0,r.kt)("p",null,"\u067e\u06a9\u06cc\u062c \u0645\u0646\u062a\u0634\u0631 \u0634\u062f\u0647\u0654 \u062e\u0648\u062f \u0631\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0631 \u0622\u062f\u0631\u0633 ",(0,r.kt)("inlineCode",{parentName:"p"},"nuget.org/packages/[PackageId]"),"\n\u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f."),(0,r.kt)("admonition",{title:"\u200c",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"\u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647 \u0628\u06cc\u0634\u062a\u0631 ",(0,r.kt)("a",{parentName:"p",href:"https://devblogs.microsoft.com/dotnet/dotnet-loves-github-actions/"},"Intro to GitHub Actions for .NET"),"\n\u0631\u0627 \u0645\u0637\u0627\u0644\u0639\u0647 \u06a9\u0646\u06cc\u062f.")),(0,r.kt)("h2",{id:"\u0633\u0627\u062e\u062a-\u06cc\u06a9-console-app-\u0628\u0631\u0627\u06cc-\u067e\u0631\u0648\u0698\u0647-\u0633\u0631\u0686"},"\u0633\u0627\u062e\u062a \u06cc\u06a9 Console App \u0628\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u0633\u0631\u0686"),(0,r.kt)("p",null,"\u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634\u060c \u06cc\u06a9 solution\n\u062f\u06cc\u06af\u0631 \u0628\u0633\u0627\u0632\u06cc\u062f\u060c \u0648 \u062f\u0631 \u0622\u0646 \u0628\u0627 Net Cli.\n\u06cc\u06a9 console app\n\u0628\u0633\u0627\u0632\u06cc\u062f. \u062f\u0631 \u067e\u0648\u0634\u0647 \u067e\u0631\u0648\u0698\u0647 \u06a9\u0646\u0633\u0648\u0644\u060c command\n\u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u067e\u06a9\u06cc\u062c \u0633\u0631\u0686 \u0634\u0645\u0627 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u06a9\u0646\u0633\u0648\u0644 \u0627\u0636\u0627\u0641\u0647 \u0634\u0648\u062f:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"dotnet add package [packageId]\n")),(0,r.kt)("p",null,"\u0628\u0627 \u0627\u06cc\u0646 command\u060c\n\u067e\u06a9\u06cc\u062c \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u0634\u0645\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u06a9\u0644\u0627\u0633\u200c\u0647\u0627\u06cc \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0627\u06af\u0631 \u067e\u06a9\u06cc\u062c \u062e\u0648\u062f \u0631\u0627 update\n\u06a9\u0631\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u0646 command\u060c\n\u0646\u0633\u062e\u0647 \u062c\u062f\u06cc\u062f \u067e\u06a9\u06cc\u062c \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u0634\u0645\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f."),(0,r.kt)("p",null,"\u062d\u0627\u0644 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u067e\u06a9\u06cc\u062c \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0633\u0631\u0686\u200c\u062a\u0627\u0646\u060c \u06cc\u06a9 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 \u0633\u0631\u0686 \u062a\u062d\u062a \u06a9\u0646\u0633\u0648\u0644 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f."))}m.isMDXComponent=!0},7658:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/phase06-actions-8c0c65c58498c133573e138b1ba53efe.png"},8981:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/phase06-build-badge-9897ddfb9a8ce38def82a627a23ea0d1.png"},1792:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/phase06-ci-75b9b1c62f3157effc3f3f082454311d.png"},1169:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/phase06-codcov-badge-3ccae870c6a8b1e5213d3a7d0a1f968f.png"},1260:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/phase06-get-build-badge-46495d092a6a4cdee81d6f36eb868623.png"}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.57773aa7.js b/assets/js/runtime~main.00591452.js similarity index 98% rename from assets/js/runtime~main.57773aa7.js rename to assets/js/runtime~main.00591452.js index dc70e284..636c36ac 100644 --- a/assets/js/runtime~main.57773aa7.js +++ b/assets/js/runtime~main.00591452.js @@ -1 +1 @@ -(()=>{"use strict";var e,c,a,f,b,d={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return d[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=d,r.c=t,e=[],r.O=(c,a,f,b)=>{if(!a){var d=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[a,f,b]},r.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return r.d(c,{a:c}),c},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var d={};c=c||[null,a({}),a([]),a(a)];for(var t=2&f&&e;"object"==typeof t&&!~c.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((c=>d[c]=()=>e[c]));return d.default=()=>e,r.d(b,d),b},r.d=(e,c)=>{for(var a in c)r.o(c,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((c,a)=>(r.f[a](e,c),c)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",331:"ed2209af",778:"15bb220a",926:"ca5d7680",940:"1fbf11c3",948:"8717b14a",971:"060f21eb",1057:"a6e4b508",1065:"aeb04cee",1293:"1cce234f",1426:"c8dfccb4",1518:"239388e8",1777:"a38f8d1b",1914:"d9f32620",2047:"9a64c60d",2267:"59362658",2362:"e273c56f",2521:"8cc79eb8",2535:"814f3328",2539:"ea307944",2860:"947a9fd6",3089:"a6aa9e1f",3176:"7b80e38e",3237:"1df93b7f",3277:"bcd34c72",3386:"0905dc1d",3514:"73664a40",3608:"9e4087bc",3663:"b61f8cb4",3751:"3720c009",4013:"01a85c17",4076:"dd933b0d",4121:"55960ee5",4128:"1c012b50",4184:"2f9c5418",4350:"d06c0554",4371:"e5953ea1",4430:"7eecb460",4644:"eb849422",4661:"c1c2bb6d",5056:"bfb1565e",5179:"65418e96",5224:"02622542",5402:"be2c5105",5727:"7a6c6835",6059:"52a424b4",6103:"ccc49370",6381:"135f9412",6632:"783bd968",6689:"8251dd08",6883:"3f303b1e",6959:"1467c75f",6965:"c173d844",7125:"c8839696",7164:"a3f1f56d",7234:"52374779",7333:"40ee9b41",7408:"b5bdea31",7615:"335a1157",7639:"2c3c5a7e",7918:"17896441",7947:"855f1ae2",8102:"c436265c",8107:"b513f306",8110:"df2fb5a6",8140:"a303700d",8210:"75c3f910",8298:"a5310155",8610:"6875c492",8636:"f4f34a3a",8682:"1c7175fc",8830:"0370342f",9003:"925b3f96",9342:"b9af8a09",9430:"a4cb42d3",9463:"e3ecc388",9514:"1be78505",9642:"7661071f",9751:"ddfe2875",9817:"14eb3368",9883:"07c32e87",9924:"df203c0f",9960:"cb8dbeb2"}[e]||e)+"."+{53:"0e6f9370",331:"1dcddcab",778:"af6e45a0",926:"b955a397",940:"5236a4f2",948:"6c21296b",971:"dece71cb",1057:"283e92d2",1065:"1901503a",1293:"d078ac01",1426:"dd116b73",1518:"f5d7b854",1777:"5f16b151",1914:"6dc11ec3",2047:"025d270c",2267:"e07d4f0f",2362:"e6495ba0",2521:"b4175d54",2535:"423f26c4",2539:"485a8eff",2860:"43ccb664",3089:"7f968fd9",3176:"5534ba73",3237:"6b317403",3277:"a83c4a3a",3386:"4fd8aef8",3514:"8d34822e",3608:"027e5ec0",3663:"6353aa40",3751:"b5f7a17d",4013:"41dee6ca",4076:"d03edf4f",4121:"b1a57207",4128:"bcc0a4ce",4184:"b09a8225",4350:"04c52834",4371:"78ca78c0",4430:"3405058c",4644:"8303b33c",4661:"78759f23",4972:"3aa4d2fe",5056:"88e6c0cc",5179:"b52f9d85",5224:"872fbb86",5402:"89598dd8",5727:"fcf0dcb3",6048:"3203fec5",6059:"0f2e8825",6103:"17e5de3e",6381:"ac496ec4",6632:"0543a9d3",6689:"aadd9c5f",6883:"ba00718c",6959:"c0cff30b",6965:"89aa0000",7036:"aec69176",7125:"a3a557e1",7164:"6e3f8a06",7234:"726d5c5a",7333:"0f555b88",7408:"1be5ef1e",7615:"faa09cdd",7639:"99f1154e",7918:"98065512",7947:"e01d5a2b",8102:"ef5215b6",8107:"1844a512",8110:"15c204c9",8140:"49cdc83a",8210:"396f9937",8298:"76db3f5e",8610:"e6c86c8e",8636:"a564025c",8682:"d33ad623",8830:"ce6687c8",9003:"04d31f64",9342:"94728318",9430:"c8a34a45",9463:"490cb564",9514:"91574a2e",9642:"771ae069",9751:"b1f1d6fb",9817:"12e01927",9883:"c07529c9",9924:"0080b2e6",9960:"2d4e057d"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),f={},b="codestar-documents:",r.l=(e,c,a,d)=>{if(f[e])f[e].push(c);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(a))),c)return c(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/codestar-documents/",r.gca=function(e){return e={17896441:"7918",52374779:"7234",59362658:"2267","935f2afb":"53",ed2209af:"331","15bb220a":"778",ca5d7680:"926","1fbf11c3":"940","8717b14a":"948","060f21eb":"971",a6e4b508:"1057",aeb04cee:"1065","1cce234f":"1293",c8dfccb4:"1426","239388e8":"1518",a38f8d1b:"1777",d9f32620:"1914","9a64c60d":"2047",e273c56f:"2362","8cc79eb8":"2521","814f3328":"2535",ea307944:"2539","947a9fd6":"2860",a6aa9e1f:"3089","7b80e38e":"3176","1df93b7f":"3237",bcd34c72:"3277","0905dc1d":"3386","73664a40":"3514","9e4087bc":"3608",b61f8cb4:"3663","3720c009":"3751","01a85c17":"4013",dd933b0d:"4076","55960ee5":"4121","1c012b50":"4128","2f9c5418":"4184",d06c0554:"4350",e5953ea1:"4371","7eecb460":"4430",eb849422:"4644",c1c2bb6d:"4661",bfb1565e:"5056","65418e96":"5179","02622542":"5224",be2c5105:"5402","7a6c6835":"5727","52a424b4":"6059",ccc49370:"6103","135f9412":"6381","783bd968":"6632","8251dd08":"6689","3f303b1e":"6883","1467c75f":"6959",c173d844:"6965",c8839696:"7125",a3f1f56d:"7164","40ee9b41":"7333",b5bdea31:"7408","335a1157":"7615","2c3c5a7e":"7639","855f1ae2":"7947",c436265c:"8102",b513f306:"8107",df2fb5a6:"8110",a303700d:"8140","75c3f910":"8210",a5310155:"8298","6875c492":"8610",f4f34a3a:"8636","1c7175fc":"8682","0370342f":"8830","925b3f96":"9003",b9af8a09:"9342",a4cb42d3:"9430",e3ecc388:"9463","1be78505":"9514","7661071f":"9642",ddfe2875:"9751","14eb3368":"9817","07c32e87":"9883",df203c0f:"9924",cb8dbeb2:"9960"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(c,a)=>{var f=r.o(e,c)?e[c]:void 0;if(0!==f)if(f)a.push(f[2]);else if(/^(1303|532)$/.test(c))e[c]=0;else{var b=new Promise(((a,b)=>f=e[c]=[a,b]));a.push(f[2]=b);var d=r.p+r.u(c),t=new Error;r.l(d,(a=>{if(r.o(e,c)&&(0!==(f=e[c])&&(e[c]=void 0),f)){var b=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;t.message="Loading chunk "+c+" failed.\n("+b+": "+d+")",t.name="ChunkLoadError",t.type=b,t.request=d,f[1](t)}}),"chunk-"+c,c)}},r.O.j=c=>0===e[c];var c=(c,a)=>{var f,b,d=a[0],t=a[1],o=a[2],n=0;if(d.some((c=>0!==e[c]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(c&&c(a);n{"use strict";var e,c,a,f,b,d={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var a=t[e]={id:e,loaded:!1,exports:{}};return d[e].call(a.exports,a,a.exports,r),a.loaded=!0,a.exports}r.m=d,r.c=t,e=[],r.O=(c,a,f,b)=>{if(!a){var d=1/0;for(i=0;i=b)&&Object.keys(r.O).every((e=>r.O[e](a[o])))?a.splice(o--,1):(t=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[a,f,b]},r.n=e=>{var c=e&&e.__esModule?()=>e.default:()=>e;return r.d(c,{a:c}),c},a=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var b=Object.create(null);r.r(b);var d={};c=c||[null,a({}),a([]),a(a)];for(var t=2&f&&e;"object"==typeof t&&!~c.indexOf(t);t=a(t))Object.getOwnPropertyNames(t).forEach((c=>d[c]=()=>e[c]));return d.default=()=>e,r.d(b,d),b},r.d=(e,c)=>{for(var a in c)r.o(c,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:c[a]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((c,a)=>(r.f[a](e,c),c)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",331:"ed2209af",778:"15bb220a",926:"ca5d7680",940:"1fbf11c3",948:"8717b14a",971:"060f21eb",1057:"a6e4b508",1065:"aeb04cee",1293:"1cce234f",1426:"c8dfccb4",1518:"239388e8",1777:"a38f8d1b",1914:"d9f32620",2047:"9a64c60d",2267:"59362658",2362:"e273c56f",2521:"8cc79eb8",2535:"814f3328",2539:"ea307944",2860:"947a9fd6",3089:"a6aa9e1f",3176:"7b80e38e",3237:"1df93b7f",3277:"bcd34c72",3386:"0905dc1d",3514:"73664a40",3608:"9e4087bc",3663:"b61f8cb4",3751:"3720c009",4013:"01a85c17",4076:"dd933b0d",4121:"55960ee5",4128:"1c012b50",4184:"2f9c5418",4350:"d06c0554",4371:"e5953ea1",4430:"7eecb460",4644:"eb849422",4661:"c1c2bb6d",5056:"bfb1565e",5179:"65418e96",5224:"02622542",5402:"be2c5105",5727:"7a6c6835",6059:"52a424b4",6103:"ccc49370",6381:"135f9412",6632:"783bd968",6689:"8251dd08",6883:"3f303b1e",6959:"1467c75f",6965:"c173d844",7125:"c8839696",7164:"a3f1f56d",7234:"52374779",7333:"40ee9b41",7408:"b5bdea31",7615:"335a1157",7639:"2c3c5a7e",7918:"17896441",7947:"855f1ae2",8102:"c436265c",8107:"b513f306",8110:"df2fb5a6",8140:"a303700d",8210:"75c3f910",8298:"a5310155",8610:"6875c492",8636:"f4f34a3a",8682:"1c7175fc",8830:"0370342f",9003:"925b3f96",9342:"b9af8a09",9430:"a4cb42d3",9463:"e3ecc388",9514:"1be78505",9642:"7661071f",9751:"ddfe2875",9817:"14eb3368",9883:"07c32e87",9924:"df203c0f",9960:"cb8dbeb2"}[e]||e)+"."+{53:"0e6f9370",331:"1dcddcab",778:"af6e45a0",926:"b955a397",940:"5236a4f2",948:"6c21296b",971:"dece71cb",1057:"283e92d2",1065:"1901503a",1293:"d078ac01",1426:"dd116b73",1518:"f5d7b854",1777:"5f16b151",1914:"6dc11ec3",2047:"025d270c",2267:"e07d4f0f",2362:"e6495ba0",2521:"b4175d54",2535:"423f26c4",2539:"485a8eff",2860:"43ccb664",3089:"7f968fd9",3176:"5534ba73",3237:"6b317403",3277:"ea9bbd61",3386:"4fd8aef8",3514:"8d34822e",3608:"027e5ec0",3663:"6353aa40",3751:"b5f7a17d",4013:"41dee6ca",4076:"d03edf4f",4121:"b1a57207",4128:"bcc0a4ce",4184:"b09a8225",4350:"04c52834",4371:"78ca78c0",4430:"3405058c",4644:"8303b33c",4661:"78759f23",4972:"3aa4d2fe",5056:"88e6c0cc",5179:"b52f9d85",5224:"872fbb86",5402:"89598dd8",5727:"fcf0dcb3",6048:"3203fec5",6059:"0f2e8825",6103:"17e5de3e",6381:"ac496ec4",6632:"0543a9d3",6689:"aadd9c5f",6883:"ba00718c",6959:"c0cff30b",6965:"89aa0000",7036:"aec69176",7125:"a3a557e1",7164:"6e3f8a06",7234:"726d5c5a",7333:"0f555b88",7408:"1be5ef1e",7615:"faa09cdd",7639:"99f1154e",7918:"98065512",7947:"e01d5a2b",8102:"ef5215b6",8107:"1844a512",8110:"15c204c9",8140:"49cdc83a",8210:"9ab496ca",8298:"76db3f5e",8610:"e6c86c8e",8636:"a564025c",8682:"d33ad623",8830:"ce6687c8",9003:"04d31f64",9342:"94728318",9430:"c8a34a45",9463:"490cb564",9514:"91574a2e",9642:"771ae069",9751:"b1f1d6fb",9817:"12e01927",9883:"c07529c9",9924:"0080b2e6",9960:"2d4e057d"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,c)=>Object.prototype.hasOwnProperty.call(e,c),f={},b="codestar-documents:",r.l=(e,c,a,d)=>{if(f[e])f[e].push(c);else{var t,o;if(void 0!==a)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var b=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),b&&b.forEach((e=>e(a))),c)return c(a)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/codestar-documents/",r.gca=function(e){return e={17896441:"7918",52374779:"7234",59362658:"2267","935f2afb":"53",ed2209af:"331","15bb220a":"778",ca5d7680:"926","1fbf11c3":"940","8717b14a":"948","060f21eb":"971",a6e4b508:"1057",aeb04cee:"1065","1cce234f":"1293",c8dfccb4:"1426","239388e8":"1518",a38f8d1b:"1777",d9f32620:"1914","9a64c60d":"2047",e273c56f:"2362","8cc79eb8":"2521","814f3328":"2535",ea307944:"2539","947a9fd6":"2860",a6aa9e1f:"3089","7b80e38e":"3176","1df93b7f":"3237",bcd34c72:"3277","0905dc1d":"3386","73664a40":"3514","9e4087bc":"3608",b61f8cb4:"3663","3720c009":"3751","01a85c17":"4013",dd933b0d:"4076","55960ee5":"4121","1c012b50":"4128","2f9c5418":"4184",d06c0554:"4350",e5953ea1:"4371","7eecb460":"4430",eb849422:"4644",c1c2bb6d:"4661",bfb1565e:"5056","65418e96":"5179","02622542":"5224",be2c5105:"5402","7a6c6835":"5727","52a424b4":"6059",ccc49370:"6103","135f9412":"6381","783bd968":"6632","8251dd08":"6689","3f303b1e":"6883","1467c75f":"6959",c173d844:"6965",c8839696:"7125",a3f1f56d:"7164","40ee9b41":"7333",b5bdea31:"7408","335a1157":"7615","2c3c5a7e":"7639","855f1ae2":"7947",c436265c:"8102",b513f306:"8107",df2fb5a6:"8110",a303700d:"8140","75c3f910":"8210",a5310155:"8298","6875c492":"8610",f4f34a3a:"8636","1c7175fc":"8682","0370342f":"8830","925b3f96":"9003",b9af8a09:"9342",a4cb42d3:"9430",e3ecc388:"9463","1be78505":"9514","7661071f":"9642",ddfe2875:"9751","14eb3368":"9817","07c32e87":"9883",df203c0f:"9924",cb8dbeb2:"9960"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(c,a)=>{var f=r.o(e,c)?e[c]:void 0;if(0!==f)if(f)a.push(f[2]);else if(/^(1303|532)$/.test(c))e[c]=0;else{var b=new Promise(((a,b)=>f=e[c]=[a,b]));a.push(f[2]=b);var d=r.p+r.u(c),t=new Error;r.l(d,(a=>{if(r.o(e,c)&&(0!==(f=e[c])&&(e[c]=void 0),f)){var b=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;t.message="Loading chunk "+c+" failed.\n("+b+": "+d+")",t.name="ChunkLoadError",t.type=b,t.request=d,f[1](t)}}),"chunk-"+c,c)}},r.O.j=c=>0===e[c];var c=(c,a)=>{var f,b,d=a[0],t=a[1],o=a[2],n=0;if(d.some((c=>0!==e[c]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(c&&c(a);n آرشیو | آکادمی ستاره - + - + \ No newline at end of file diff --git a/blog/first-blog-post/index.html b/blog/first-blog-post/index.html index 6c98960a..ce4216d0 100644 --- a/blog/first-blog-post/index.html +++ b/blog/first-blog-post/index.html @@ -6,13 +6,13 @@ First Blog Post | آکادمی ستاره - +

First Blog Post

· خواندن ۱ دقیقه
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/index.html b/blog/index.html index bbdbac21..2a925096 100644 --- a/blog/index.html +++ b/blog/index.html @@ -6,13 +6,13 @@ Blog | آکادمی ستاره - +

· خواندن ۱ دقیقه
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

· خواندن ۱ دقیقه
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/long-blog-post/index.html b/blog/long-blog-post/index.html index c9ef89c9..b2e07dce 100644 --- a/blog/long-blog-post/index.html +++ b/blog/long-blog-post/index.html @@ -6,13 +6,13 @@ Long Blog Post | آکادمی ستاره - +

Long Blog Post

· خواندن 3 دقیقه
Endilie Yacop Sucipto

This is the summary of a very long blog post,

Use a <!-- truncate --> comment to limit blog post size in the list view.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/mdx-blog-post/index.html b/blog/mdx-blog-post/index.html index 45cc5749..a1d6baa1 100644 --- a/blog/mdx-blog-post/index.html +++ b/blog/mdx-blog-post/index.html @@ -6,13 +6,13 @@ MDX Blog Post | آکادمی ستاره - +

MDX Blog Post

· خواندن ۱ دقیقه
Sébastien Lorber

Blog posts support Docusaurus Markdown features, such as MDX.

tip

Use the power of React to create interactive blog posts.

<button onClick={() => alert('button clicked!')}>Click me!</button>
- + \ No newline at end of file diff --git a/blog/tags/docusaurus/index.html b/blog/tags/docusaurus/index.html index 2de5fe9d..4059e7d1 100644 --- a/blog/tags/docusaurus/index.html +++ b/blog/tags/docusaurus/index.html @@ -6,13 +6,13 @@ 4 پست با برچسب "docusaurus" | آکادمی ستاره - +

4 پست با برچسب "docusaurus"

مشاهده تمام برچسب‌ها

· خواندن ۱ دقیقه
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

· خواندن ۱ دقیقه
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/tags/facebook/index.html b/blog/tags/facebook/index.html index 2df3f969..b0ef5957 100644 --- a/blog/tags/facebook/index.html +++ b/blog/tags/facebook/index.html @@ -6,13 +6,13 @@ یک پست با برچسب "facebook" | آکادمی ستاره - +

یک پست با برچسب "facebook"

مشاهده تمام برچسب‌ها

· خواندن ۱ دقیقه
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- + \ No newline at end of file diff --git a/blog/tags/hello/index.html b/blog/tags/hello/index.html index 0345aa6b..fb56fb69 100644 --- a/blog/tags/hello/index.html +++ b/blog/tags/hello/index.html @@ -6,13 +6,13 @@ 2 پست با برچسب "hello" | آکادمی ستاره - +

2 پست با برچسب "hello"

مشاهده تمام برچسب‌ها

· خواندن ۱ دقیقه
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- + \ No newline at end of file diff --git a/blog/tags/hola/index.html b/blog/tags/hola/index.html index fb6cd058..c9d1c9a7 100644 --- a/blog/tags/hola/index.html +++ b/blog/tags/hola/index.html @@ -6,13 +6,13 @@ یک پست با برچسب "hola" | آکادمی ستاره - +

یک پست با برچسب "hola"

مشاهده تمام برچسب‌ها

· خواندن ۱ دقیقه
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html index a3d0672b..c311119e 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -6,13 +6,13 @@ برچسب‌ها | آکادمی ستاره - + - + \ No newline at end of file diff --git a/blog/welcome/index.html b/blog/welcome/index.html index 54e10603..310663c0 100644 --- a/blog/welcome/index.html +++ b/blog/welcome/index.html @@ -6,13 +6,13 @@ Welcome | آکادمی ستاره - +

Welcome

· خواندن ۱ دقیقه
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- + \ No newline at end of file diff --git a/docs/Roadmaps/index.html b/docs/Roadmaps/index.html index aa218ffa..1428d39d 100644 --- a/docs/Roadmaps/index.html +++ b/docs/Roadmaps/index.html @@ -6,13 +6,13 @@ مسیرهای یادگیری | آکادمی ستاره - + - + \ No newline at end of file diff --git a/docs/frontend/index.html b/docs/frontend/index.html index 15ccf62e..5946768b 100644 --- a/docs/frontend/index.html +++ b/docs/frontend/index.html @@ -6,13 +6,13 @@ فرانت‌اند | آکادمی ستاره - + - + \ No newline at end of file diff --git a/docs/frontend/phase01-sandbox/index.html b/docs/frontend/phase01-sandbox/index.html index 5aa862fb..f35a2fcc 100644 --- a/docs/frontend/phase01-sandbox/index.html +++ b/docs/frontend/phase01-sandbox/index.html @@ -6,7 +6,7 @@ Sandbox | آکادمی ستاره - + @@ -72,7 +72,7 @@ ESLint یک پکیج استاندارد است که به شما این امکان را می‌دهد.

برای وضع قوانین کافی است یک فایل با نام eslintrc. را به پروژه اضافه کنید. ما پیشنهاد می‌کنیم از قواعد پیش‌فرض ESLint استفاده کنید:

{
"extends": "eslint:recommended"
}

برای آشنایی بیشتر با این قواعد می‌توانید از لینک زیر استفاده کنید:

- + \ No newline at end of file diff --git a/docs/frontend/phase02-pilot/index.html b/docs/frontend/phase02-pilot/index.html index 6e3bc202..03ed3b7d 100644 --- a/docs/frontend/phase02-pilot/index.html +++ b/docs/frontend/phase02-pilot/index.html @@ -6,7 +6,7 @@ Pilot | آکادمی ستاره - + @@ -101,7 +101,7 @@ در این فاز شما باید با توجه به موارد آموزش داده شده، یک Landing Page برای سایت خود بسازید. می‌توانید از نرم‌افزارهای مشابه ایده بگیرید اما اینکه چه قابلیت‌هایی در سایت شما وجود داشته باشد، کاملاً بستگی به خودتان دارد. در صورتی که پیاده‌سازی قابلیتی ضروری باشد، در مستندات به آن اشاره خواهیم کرد.

- + \ No newline at end of file diff --git a/docs/frontend/phase03-ui-ux/index.html b/docs/frontend/phase03-ui-ux/index.html index e448ca10..91f39a3b 100644 --- a/docs/frontend/phase03-ui-ux/index.html +++ b/docs/frontend/phase03-ui-ux/index.html @@ -6,7 +6,7 @@ UI/UX | آکادمی ستاره - + @@ -64,7 +64,7 @@ این اتفاق بر سر بسیاری از لوگوها آمده و کاربران از آن بیزارند. همه چیز باید به اندازه باشد تا بهترین UI و UX حاصل شود.

Patreon&#39;s Logo - Before and After

برای آشنایی بیشتر با این مفهوم می‌توانید از لینک‌های زیر استفاده کنید:


پروژه

سایتی که تا اینجا طراحی کرده‌اید را از منظر UI و UX بررسی کنید. در صورتی که جایی از سایت مشکلی مشاهده می‌کنید، آن را برطرف کنید.

- + \ No newline at end of file diff --git a/docs/frontend/phase04-css-and-sass/index.html b/docs/frontend/phase04-css-and-sass/index.html index e5336e56..c60fef68 100644 --- a/docs/frontend/phase04-css-and-sass/index.html +++ b/docs/frontend/phase04-css-and-sass/index.html @@ -6,7 +6,7 @@ CSS & Sass | آکادمی ستاره - + @@ -74,7 +74,7 @@ قابلیت‌های بی‌شماری دارد؛ اما زیاده‌روی نکنید! فقط از قابلیت‌هایی استفاده کنید که واقعاً به آن‌ها نیاز دارید.

- + \ No newline at end of file diff --git a/docs/frontend/phase05-animation/index.html b/docs/frontend/phase05-animation/index.html index bf890f1c..512ed489 100644 --- a/docs/frontend/phase05-animation/index.html +++ b/docs/frontend/phase05-animation/index.html @@ -6,7 +6,7 @@ Animation | آکادمی ستاره - + @@ -85,7 +85,7 @@ سعی کنید Animationهای جذابی را به Landing Page خود اضافه کنید.

توجه داشته باشید که در استفاده از Animation نباید زیاده‌روی کنید، در غیر این صورت نه تنها کاربران را جذب نمی‌کنید، بلکه باعث ریزش آن‌ها می‌شوید.

- + \ No newline at end of file diff --git a/docs/frontend/phase06-clean-code/index.html b/docs/frontend/phase06-clean-code/index.html index e90388a2..6bb9d676 100644 --- a/docs/frontend/phase06-clean-code/index.html +++ b/docs/frontend/phase06-clean-code/index.html @@ -6,7 +6,7 @@ Clean Code | آکادمی ستاره - + @@ -137,7 +137,7 @@ بعد از اینکه Approve کردند، به منتور عادی مراجعه کنید و پس از Approve او، به منتور سنیور بگویید تا کد شما را ببیند.

همچنین لازم است شما هم حداقل کد یک تیم دیگر را Review کنید. سعی کنید تمام مواردی که در این فاز یاد گرفتید را هنگام Review مورد بررسی قرار دهید.

برای آشنایی بیشتر با این مفهوم می‌توانید از لینک‌های زیر استفاده کنید:

- + \ No newline at end of file diff --git a/docs/frontend/phase07-ci-cd/index.html b/docs/frontend/phase07-ci-cd/index.html index f175f16d..ac358863 100644 --- a/docs/frontend/phase07-ci-cd/index.html +++ b/docs/frontend/phase07-ci-cd/index.html @@ -6,7 +6,7 @@ CI/CD | آکادمی ستاره - + @@ -36,7 +36,7 @@ در صفحۀ Actions پروژۀ خود می‌توانید اجرا آن را مرحله به مرحله زیر نظر بگیرید و در صورتی که خطایی رخ دهد از آن باخبر شوید.


پروژه

با توجه به مطالبی که در این فاز یاد گرفتید، فرآیند CI/CD را برای پروژۀ خود فراهم کنید.

- + \ No newline at end of file diff --git a/docs/frontend/phase08-authentication/index.html b/docs/frontend/phase08-authentication/index.html index efbabcc6..01b648f2 100644 --- a/docs/frontend/phase08-authentication/index.html +++ b/docs/frontend/phase08-authentication/index.html @@ -6,7 +6,7 @@ Authentication | آکادمی ستاره - + @@ -63,7 +63,7 @@ اگر هر یک از این عملیات با موفقیت انجام شود، کاربر باید به صفحۀ اصلی سایت منتقل شود. همچنین از Guard برای محافظت از صفحات خصوصی استفاده کنید. برای این کار احتیاج به یک صفحه مانند Profile دارید که در حال حاضر صرفاً کافی است حاوی یک متن ساده باشد.

- + \ No newline at end of file diff --git a/docs/frontend/phase09-test/index.html b/docs/frontend/phase09-test/index.html index 6a034064..fee21824 100644 --- a/docs/frontend/phase09-test/index.html +++ b/docs/frontend/phase09-test/index.html @@ -6,7 +6,7 @@ Test | آکادمی ستاره - + @@ -106,7 +106,7 @@ و E2E تست بنوسید، پس از نوشتن به منتور خود تست‌های خود را نمایش دهید.

- + \ No newline at end of file diff --git a/docs/frontend/phase10-dom/index.html b/docs/frontend/phase10-dom/index.html index 13432bb8..e8b8a833 100644 --- a/docs/frontend/phase10-dom/index.html +++ b/docs/frontend/phase10-dom/index.html @@ -6,7 +6,7 @@ DOM | آکادمی ستاره - + @@ -61,7 +61,7 @@ را به صورت پویا تغییر دهید، مانند تغییر رنگ، اندازه و موقعیت.
  • ایجاد رفتارهای تعاملی: DOM به شما امکان می‌دهد رفتارهای تعاملی به صفحات وب اضافه کنید، مانند کلیک کردن، کشیدن و رها کردن و تغییر ورودی کاربر.
  • برای آشنایی بیشتر با این مفهوم می‌توانید از لینک‌ زیر استفاده کنید:

    - + \ No newline at end of file diff --git a/docs/frontend/phase11-typescript/index.html b/docs/frontend/phase11-typescript/index.html index dee9b592..9583fe8e 100644 --- a/docs/frontend/phase11-typescript/index.html +++ b/docs/frontend/phase11-typescript/index.html @@ -6,7 +6,7 @@ TypeScript | آکادمی ستاره - + @@ -148,7 +148,7 @@ پیش از تعریف آن‌ها، مشخص می‌شوند.

    برای اطلاعات بیشتر و یادگیری عمیق‌تر درباره دکوریتورها در TypeScript ، می‌توانید از منابع زیر استفاده کنید:

    - + \ No newline at end of file diff --git a/docs/general/index.html b/docs/general/index.html index 3355c9ac..79c95dcf 100644 --- a/docs/general/index.html +++ b/docs/general/index.html @@ -6,13 +6,13 @@ عمومی | آکادمی ستاره - + - + \ No newline at end of file diff --git a/docs/general/phase01-presentation/index.html b/docs/general/phase01-presentation/index.html index 6c8b2ba9..22b68f5a 100644 --- a/docs/general/phase01-presentation/index.html +++ b/docs/general/phase01-presentation/index.html @@ -6,7 +6,7 @@ Presentation | آکادمی ستاره - + @@ -18,7 +18,7 @@ یا اینکه چه اطلاعاتی را درج کنید؟ نکتۀ مهمی که باید در نظر بگیرید این است که از قالبی استفاده کنید که به‌راحتی خوانده شود.

    رنگ

    • اگر در اتاق تاریکی ارائه می‌دهید، از قالب رنگی تیره، در غیر این صورت از قالب رنگی روشن استفاده کنید.
    • ترکیب رنگی که استفاده می‌کنید بر روی سرعت خواندن مخاطبان اثرگذار است.
      • سریع‌ترین ترکیب رنگی، مشکی روی زرد است.
      • خواندن ترکیب رنگ‌های قرمز، سبز و قهوه‌ای برای بسیاری از مخاطبان دشوار است.
    • حتماً به تضاد رنگی توجه کنید.
    • از رنگ‌های گرم، مانند قرمز یا نارنجی، به‌عنوان پس‌زمینه استفاده نکنید.

    جزئیات

    • از اسلایدهایی استفاده کنید که جزئیات مهم را برجسته می‌کنند.
    • از استعمال جزئیاتی که مخاطب نیاز ندارد بداند یا نمی‌تواند به‌خاطر بسپارد، بپرهیزید.
    • از اطلاعاتی که صرفاً برای پُر کردن صفحه استفاده می‌شوند، استفاده نکنید (Filler Content).
    • از لیست‌های طولانی استفاده نکنید.

    ارائه

    ارائه به معنی تعامل سخنران با مخاطبان است. شما راه‌های مختلفی برای نحوۀ ارائه دارید که در ادامه مزایا و معایب هر کدام را ذکر می‌کنیم.

    حفظ‌کردن سخنرانی

    مزایا

    • امکان ارتباط چشمی را فراهم می‌کند.

    معایب

    • برای سخنرانی‌های طولانی سخت است.
    • امکان خطا وجود دارد.
    • قابل ارتقاء نیست.

    روخوانی از متن

    مزایا

    • دقت را بالا می‌برد.

    معایب

    • امکان ارتباط چشمی را حذف می‌کند.
    • به نظر طبیعی نمی‌رسد.
    • قابل ارتقاء نیست.

    بداهه‌گویی

    مزایا

    • به نظر طبیعی می‌رسد.

    معایب

    • بسیار امکان خطا وجود دارد.

    استفاده از Slideها

    مزایا

    • امکان ارتباط چشمی را فراهم می‌کند.
    • نظم را تضمین می‌کند.
    • قابل ارتقاء است.

    معایب

    • تا حدی امکان خطا وجود دارد.

    قبل از ارائه

    ارائه‌ای تاثیرگذار است که نیازهای مخاطبان هنگام طراحی آن در نظر گرفته شده باشد.

    • تمام Slideها را تا جای ممکن دقیق و منطقی مرتب کنید.

    خلاصه

    با یک Outline Slide شروع کنید که تیتر مطالبی را که قرار است ارائه شوند، در آن قرار داده‌اید.

    • مشکلی که وجود دارد را تعریف کنید (اهمیت، سختی و فرض‌ها).
    • کارهایی که قبلاً انجام شده و مرتبط با موضوع هستند را معرفی کنید (مزایا و معایب).
    • روشی که شما پیشنهاد می‌کنید را توصیف کنید (نمودار).
    • نتایج آزمایش‌هایی که انجام داده‌اید را در اختیار مخاطبان قرار دهید (کامل‌بودن، رعایت انصاف و پیچیدگی).
    • نتیجه‌گیری کنید (ایدۀ اصلی و برتری‌های آن).
    • مراجع را معرفی کنید (اطلاعات کامل).

    جزئیات

    • از قابل‌فهم‌بودن و خوانایی جلوه‌های بصری اطمینان حاصل کنید.
    • برای برجسته‌کردن نکات مهم از رنگ استفاده کنید (زیاده‌روی نکنید).
    • در یک Slide، مطالب زیادی قرار ندهید.
    • تمام مطالبی که در Slide است باید توضیح داده شوند.
    • فرمول و روابط ریاضی زیادی در Slideها قرار ندهید (فقط میزانی که مورد نیاز است).
    • تمرکز شما باید روی نتایج باشد.
    • از عکس یا نمودار برای تفهیم نکات خود بهره بگیرید.
    • به تغییرات ناگهانی موجود در نمودارها و جداول اشاره کنید.

    محتوا

    • حداقل یک Slide حاوی مشارکت‌های اصلی داشته باشید.
    • یک Slide که حاوی نتایج و جهت‌دهی برای آینده است، داشته باشید.
    • یک Slide برای لیست مقالات و مراجع داشته باشید.
    • چند Slide اضافه که حاوی جزئیات کار هستند، داشته باشید (برای زمانی که مخاطبان از شما در مورد آن‌ها سوال بپرسند).

    پیشگیری

    • برای مواقع اضطراری چند نسخۀ پشتیبان همراه خود داشته باشید (فرمت‌های مختلف مثل PDF یا ذخیره‌سازی ابری).
    • حداقل دو بار به‌صورت تمرینی ارائه دهید (برای مدیریت زمان و اعمال تغییرات مورد نیاز).
    • اگر ارائه حضوری است، قبل از آن به سالن همایش بروید و با محیط آشنا شوید.

    لباس

    • یک لباس تمیز و اتوکشیده‌شده فراهم کنید.
      • لباس یا کفشی که تنگ باشد نپوشید.
      • لباس یا کفش جدید نپوشید.

    هنگام ارائه

    اضطراب

    • ترس یا اضطراب خود را بپذیرید.
    • قبل از اینکه وارد سالن شوید چند نفس عمیق بکشید.
    • این نکته را در نظر بگیرید که شما برای ارائه بسیار تلاش کرده‌اید و تمرین داشته‌اید.
    • به جای آنکه بر روی خودتان تمرکز کنید، بر روی مطلبی که قرار است ارائه دهید متمرکز شوید.
    • در صورت امکان سعی کنید تعدادی از دوستان یا همکاران شما در جمعیت حضور داشته باشند.
    • به چهره‌های مهربان و دوستانه نگاه کنید.

    سپاس‌گزاری

    • سخنرانی خود را با تشکر از مخاطبان شروع کنید.
    • از تلاش و حمایت منتورها، مدیران و همکاران خود تشکر کنید.

    نسبت

    • چند دقیقه در مورد نسبت این ارائه با مخاطبان صحبت کنید.
    • نتایج را خلاصه‌وار توضیح دهید.
    • ارتباط این مطلب با مطالب دیگری که ارائه داده شده‌اند یا قرار است ارائه داده شوند، چیست؟
    • چرا این مطلب توجه شما را جلب کرد و می‌خواهید آن را ارائه دهید؟

    جذب

    • صدای خود را با توجه به محیط و مخاطبان تنظیم کنید.
    • سرعت ارائه را متوسط نگه‌دارید به گونه‌ای که مخاطبان خسته نشود و از طرفی مطلب قابل‌فهم باشد.
    • سرعت و تُنِ صدای خود را کم و زیاد کنید تا مطالب خسته‌کننده نشوند.
    • اگه ارائه حضوری است، در جایی نایستید که همواره جلوی دید فردی را بگیرید.
    • لزومی ندارد ارائه دقیقاً مانند آنچه فراهم کرده‌اید پیش برود اما از طرفی نباید بیش از حد از آن فاصله بگیرد.

    ارتباط چشمی

    • همواره ارتباط چشمی برقرار کنید.
    • به مخاطبان نگاه کنید، نه پرده نمایش.
    • به افراد مختلف نگاه کنید و سعی کنید با همه ارتباط بگیرید.

    محتوا

    • هدف، اهمیت مطلب، ایده‌های اصلی و برتری راه‌حل‌تان را تشریح کنید.
    • نکات اصلی را تکرار کنید.
    • به مخاطبان بگویید چه چیزی قرار است به آن‌ها گفته شود و در نهایت به آن‌هایی بگویید چه چیزی به آن‌ها گفتید.

    پرسش و پاسخ

    • حتماً بخشی از زمان را به پرسش و پاسخ اختصاص دهید (10 الی 15 دقیقه برای یک سخنرانی 45 دقیقه‌ای).
    • برای سوالات سخت و چالشی خودتان را آماده کنید.
    • در برابر سوالاتی که سخت هستند، بیش از حد حالت تدافعی نگیرید.
    • سوال را تکرار کنید.
    • یک سوال سخت می‌تواند تبدیل به یک ایده شود و در تحقیقات بعدی از آن استفاده کرد.
    • خیلی راحت بگویید نمی‌دانم.
    • در صورت لزوم به کسی که سوال را پرسیده پیشنهاد دهید بعد از سخنرانی با او گفت‌وگو کنید.
    • چیزی نگویید که از آن اطمینان ندارید.
    - + \ No newline at end of file diff --git a/docs/general/phase02-grammar/index.html b/docs/general/phase02-grammar/index.html index 439b3a57..6ab4bfc7 100644 --- a/docs/general/phase02-grammar/index.html +++ b/docs/general/phase02-grammar/index.html @@ -6,7 +6,7 @@ Grammar | آکادمی ستاره - + @@ -53,7 +53,7 @@ تا لیستی از کلمات مشابه را به شما نشان دهد؛ همچنین در صورتی که بر روی هرکدام از نتایج کلیک کنید، توضیحات مختصری را در مورد علت انتخاب املای مورد نظر به شما می‌دهد.


    کلیدهای میانبر

    عبارتمیانبر
    فتحهShift + ش
    ضمهShift + س
    کسرهShift + ی
    تنوین فتحهShift + ض
    تنوین ضمهShift + ص
    تنوین کسرهShift + ث
    ویرگولShift + ف
    نقطه‌ویرگولShift + غ
    گیومه بازShift + ن
    گیومه بستهShift + م
    کشیدن حروفShift + ت
    نیم‌فاصلهCtrl + Shift + 2
    - + \ No newline at end of file diff --git a/docs/intro/index.html b/docs/intro/index.html index 0c5bd295..c555fee8 100644 --- a/docs/intro/index.html +++ b/docs/intro/index.html @@ -6,13 +6,13 @@ مقدمات | آکادمی ستاره - +

    مقدمات

    آموزش‌های این بخش برای کارآموزان تمام دوره‌ها به صورت مشترک آماده شده است و قبل از شروع فازهای اختصاصی باید این بخش را مطالعه کنند.

    - + \ No newline at end of file diff --git a/docs/intro/phase01-onboarding/index.html b/docs/intro/phase01-onboarding/index.html index c26ca48a..4936886e 100644 --- a/docs/intro/phase01-onboarding/index.html +++ b/docs/intro/phase01-onboarding/index.html @@ -6,7 +6,7 @@ Onboarding | آکادمی ستاره - + @@ -22,7 +22,7 @@ برو؛ اونجا لیستی از Issueهای باز رو می‌تونی ببینی؛ اسم خودت رو پیدا و Issue رو مطالعه کن.

    - + \ No newline at end of file diff --git a/docs/intro/phase02-health/index.html b/docs/intro/phase02-health/index.html index ae6c409a..917b6f5a 100644 --- a/docs/intro/phase02-health/index.html +++ b/docs/intro/phase02-health/index.html @@ -6,7 +6,7 @@ Health | آکادمی ستاره - + @@ -26,7 +26,7 @@ یک نمونه از این برنامه‌هاست که متن‌باز هست و برای هر سه سیستم‌عامل دسکتاپ وجود داره.

    استفاده از فیلتر نور آبی

    نور آبی که از صفحه نمایش‌ها ساطع میشه ممکنه باعث بهم ریختن ساعت خواب شما بشه. خوشبختانه سیستم‌عامل‌ها برای جلوگیری از این امر قابلیتی در نظر گرفتن که تو ساعات مشخص نور آبی صفحه را فیلتر میکنن (نرم‌افزارهای Third Party زیادی هم برای این کار وجود داره). پیشنهاد میکنم این قابلیت را از چند ساعت قبل از خوابتون فعال کنید.

    - + \ No newline at end of file diff --git a/docs/intro/phase03-non-tech/index.html b/docs/intro/phase03-non-tech/index.html index cd577177..0b3486a4 100644 --- a/docs/intro/phase03-non-tech/index.html +++ b/docs/intro/phase03-non-tech/index.html @@ -6,7 +6,7 @@ Non-Tech Meetings | آکادمی ستاره - + @@ -29,7 +29,7 @@ بازی های کامپیوتری مثل کانتر(Counter-Strike)، اسم فامیلی، آوالون (Avalon)، پانتومیم، اسکریبل و ... و هم یک سری مسابقه های معمایی و پازلی که به لول آخر برسیم تا برنده شیم.

    - + \ No newline at end of file diff --git a/docs/intro/phase04-git/index.html b/docs/intro/phase04-git/index.html index a565a8d1..fc82ee4e 100644 --- a/docs/intro/phase04-git/index.html +++ b/docs/intro/phase04-git/index.html @@ -6,7 +6,7 @@ Git | آکادمی ستاره - + @@ -64,7 +64,7 @@ همچنان که کامیت می‌سازید، یک برنچ master برایتان ساخته می‌شود که به آخرین کامیتی که ساخته‌اید اشاره می‌کند. هر بار که کامیت می‌کنید نشانگر برنچ master به طور خودکار به جلو حرکت می‌کند.

    چگونه گیت می‌داند که روی چه شاخه‌ای کار می‌کنید؟

    گیت نشانگر خاصی به نام HEAD را در خود دارد. HEAD نشانگری است که به برنچ محلی که روی آن هستید اشاره می‌کند.

    ساختن برنچ جدید

    برای ساخت یک برنچ جدید (اشاره‌گر به مکان کنونی HEAD) کافی است از دستور زیر استفاده کنید تا یک برنچ جدید با نام دلخواه برای شما ساخته شود:

    git branch <branch-name>

    تعویض برنچ‌ها

    برای تعویض یا جابه‌جایی به یک برنچ از پیش ساخته شده، می‌توانید دستور زیر را اجرا کنید:

    git checkout <branch-name>

    مزیت استفاده از برنچ‌ها

    عموماً از برنچ‌ها برای مدیریت دسترسی و حفاظت از شاخۀ اصلی استفاده می‌شود.

    ادغام برنچ‌ها

    برای ادغام first-branch با second-branch ابتدا به second-branch میرویم و سپس با استفاده از دستور merge، محتویات شاخۀ first-branch را به شاخۀ second-branch نیز منتقل می‌کنیم:

    git checkout second-branch
    git merge first-branch

    برای آشنایی بیشتر با این مفهوم می‌توانید از لینک‌های زیر استفاده کنید:

    - + \ No newline at end of file diff --git a/docs/meetings/04-1-1/index.html b/docs/meetings/04-1-1/index.html index f419594e..27a7f203 100644 --- a/docs/meetings/04-1-1/index.html +++ b/docs/meetings/04-1-1/index.html @@ -6,7 +6,7 @@ جلسات یک به یک | آکادمی ستاره - + @@ -15,7 +15,7 @@ بگذارد.

    چارچوب

    به طور کلی جلسات یک به یک در کداستار از دو بخش اصلی تشکیل می‌شوند:

    1. دریافت بازخورد

      در این بخش کارآموز بازخوردهای خود را درباره کداستار به ارشد خود می‌دهد. ارشد نیز برای بهبود عملکرد کارآموز به وی بازخوردهای لازم را ارائه می‌دهد.

    2. انتقال تجربه

      در این بخش کارآموز دغدغه‌های فنی و غیرفنی خود را برای ارشد مطرح می‌کند تا ارشد راهنمایی‌های مناسبی را در اختیار وی قرار دهد.

    - + \ No newline at end of file diff --git a/docs/meetings/ama/index.html b/docs/meetings/ama/index.html index 93509a40..2e7beee2 100644 --- a/docs/meetings/ama/index.html +++ b/docs/meetings/ama/index.html @@ -6,7 +6,7 @@ جلسات AMA | آکادمی ستاره - + @@ -21,7 +21,7 @@ مهمان می‌تواند یک ارائه‌ی کوتاه (حداکثر 15 دقیقه) برای کارآموزان داشته باشد. در ادامه مهمان به سوالاتی که کارآموزان پیش از جلسه در فرم مربوط به جمع‌آوری سوالات ثبت کرده‌اند پاسخ می‌دهد. پس از پاسخ به سوالات از پیش ثبت شده، مهمان می‌تواند به صلاحدید خود به سایر سوالات کارآموزان نیز پاسخ دهد.

    - + \ No newline at end of file diff --git a/docs/meetings/coffee-chat/index.html b/docs/meetings/coffee-chat/index.html index 3f5b2e64..2abc4315 100644 --- a/docs/meetings/coffee-chat/index.html +++ b/docs/meetings/coffee-chat/index.html @@ -6,7 +6,7 @@ جلسات غیررسمی | آکادمی ستاره - + @@ -17,7 +17,7 @@ که بنا بر صلاحدید ارشدها نیاز به تغییر زمان یا افراد جلسه بود، کارآموزان موظف به اعمال تغییر خواسته شده و دریافت تایید ارشدها هستند.

    چارچوب

    جلسات غیررسمی چارچوبی برای برگزاری ندارند، اما حفظ رفتار حرفه‌ای در این جلسات الزامی است.

    عدم حضور در جلسه غیررسمی (به هر دلیل) شامل امتیاز منفی می‌شود.

    - + \ No newline at end of file diff --git a/docs/meetings/daily/index.html b/docs/meetings/daily/index.html index 1838b89b..c116a818 100644 --- a/docs/meetings/daily/index.html +++ b/docs/meetings/daily/index.html @@ -6,7 +6,7 @@ جلسات روزانه | آکادمی ستاره - + @@ -46,7 +46,7 @@ و ...)، آموزش برخی tip and trickهای تکنولوژی‌های مورد استفاده و انتقال موضوعات جذاب روز درباره حوزه مورد توجه کارآموزی اشاره کرد.

    - + \ No newline at end of file diff --git a/docs/meetings/gathering/index.html b/docs/meetings/gathering/index.html index 57cbf821..49b9c30c 100644 --- a/docs/meetings/gathering/index.html +++ b/docs/meetings/gathering/index.html @@ -6,7 +6,7 @@ جلسات دورهمی | آکادمی ستاره - + @@ -15,7 +15,7 @@ دورهمی حاضر می‌باشد.

    مدت زمان جلسه

    مدت زمان جلسه با توجه نظر برگزارکنندگان جلسه تعیین می‌شود.

    چارچوب جلسه

    جلسات دورهمی با محوریت موضوعاتی مانند بوردگیم، صحبت درباره فیلم یا کتاب و یا موضوعات پیشنهادی برگزار می‌شوند. موضوع هر جلسه بنا بر نظرسنجی، پیش از برگزاری آن جلسه اعلام می‌شود. حفظ رفتار حرفه‌ای در این جلسات الزامی است.

    - + \ No newline at end of file diff --git a/docs/meetings/index.html b/docs/meetings/index.html index fe38fe58..fbda616f 100644 --- a/docs/meetings/index.html +++ b/docs/meetings/index.html @@ -6,13 +6,13 @@ جلسات | آکادمی ستاره - + - + \ No newline at end of file diff --git a/docs/project/index.html b/docs/project/index.html index 3de4c248..904d69a0 100644 --- a/docs/project/index.html +++ b/docs/project/index.html @@ -6,13 +6,13 @@ پروژه | آکادمی ستاره - +

    پروژه

    قبل از شروع پروژه نیاز است تمام کارآموزان به‌طور جداگانه داک‌های این بخش را مطالعه نمایند.

    - + \ No newline at end of file diff --git a/docs/project/phase01-etl/index.html b/docs/project/phase01-etl/index.html index a9931ebc..e2187ad1 100644 --- a/docs/project/phase01-etl/index.html +++ b/docs/project/phase01-etl/index.html @@ -6,7 +6,7 @@ ETL | آکادمی ستاره - + @@ -53,7 +53,7 @@ صفحۀ GitHub آن مشاهده کنید.


    اشتراک‌گذاری

    توصیه می‌کنیم Pipeline خود را با اعضای تیم به اشتراک بگذارید، Pipeline آن‌ها را نیز بررسی کنید و روش‌های مورد استفاده را ببینید. برای این کار می‌توانید از آیکن Export the pipeline استفاده کنید.

    - + \ No newline at end of file diff --git a/docs/project/star-sprint-project/index.html b/docs/project/star-sprint-project/index.html index 94cf3a86..367486ec 100644 --- a/docs/project/star-sprint-project/index.html +++ b/docs/project/star-sprint-project/index.html @@ -6,7 +6,7 @@ BI | آکادمی ستاره - + @@ -54,7 +54,7 @@ استخراج شده و نمودار نمایش داده می‌شود.

    note

    در این مرحله تنها تجمیع سازی‌ای که روی ستون تجمیع سازی صورت می‌گیرد میانگین می‌باشد.


    تجمیع سازی پیشرفته

    در این مرحله کاربر علاوه بر میانگین می‌تواند از تجمیع سازی‌هایی مانند میانه، حداکثر، حداقل، تعداد و جمع روی ستون تجمیع سازی استفاده کند.


    لاگ گیری و تحلیل لاگ

    ایجاد لاگ یکی از مهم‌ترین وظایف نرم‌افزار می‌باشد که با هدف ایجاد شفافیت روی فرایندهای انجام شده توسط نرم‌افزار صورت می‌گیرد که یکی از کاربردهای آن کمک به تیم توسعه در جهت بررسی کارکرد نرم‌افزار است. نرم‌افزار می‌بایست لاگ‌های قابل تحلیل ایجاد کند تا تیم توسعه بتواند با مطالعه لاگ و تحلیل آن با استفاده از ابزارهای تحلیل لاگ بتواند از کیفیت عملکرد قسمت‌های مختلف نرم‌افزار مطلع شود. تیم توسعه نیز باید با ابزارهای تحلیل لاگ آشنایی داشته باشد و پس از بارگذاری لاگ‌ها در این ابزارها به تحلیل و بررسی لاگ‌ها به وسیله ابزارها بپردازد.

    - + \ No newline at end of file diff --git a/docs/roadmaps/Backend/index.html b/docs/roadmaps/Backend/index.html index dd1afa39..d7bf848b 100644 --- a/docs/roadmaps/Backend/index.html +++ b/docs/roadmaps/Backend/index.html @@ -6,13 +6,13 @@ Backend | آکادمی ستاره - +

    Backend

    سلام!😊

    یکی از مشکلات اساسی در فضای آکادمیک اینه که بیشتر دانشگاه‌ها فضایی برای یادگیری مهارت‌های عملی در پروژه‌های IT فراهم نمی‌کنن و تمرکزشون بیشتر روی مطالب تئوریه. اما دنیای واقعی فناوری اطلاعات نیاز به ترکیبی از دانش تئوری و مهارت‌های عملی داره. برای همین، تصمیم گرفتیم با کمک افراد حرفه‌ای در حوزه مهندسی نرم‌افزار، یه مسیر یادگیری طراحی کنیم که تو بتونی مهارت‌های لازم رو به صورت خودخوان کسب کنی و به رشد فردی و حرفه‌ای خودت کمک کنی.🚀

    انتخاب زبان برنامه‌نویسی

    اولین قدم، انتخاب زبان برنامه‌نویسیه. پیشنهاد ما زبان‌های OOP مثل Java یا #C هستن. این زبان‌ها به دلیل شیءگرایی و ساختارمند بودن، در پروژه‌های بزرگ و سازمانی استفاده می‌شن. یادگیری اصول برنامه‌نویسی با این زبان‌ها به شما کمک می‌کنه تا پایه‌ای قوی برای یادگیری زبان‌های دیگر و مفاهیم پیشرفته‌تر داشته باشین.

    فاز اول: تسلط بر زبان Java یا #C 👨‍💻

    برای شروع، می‌تونین با Java یا #C کار کنین. اگه تصمیم به یادگیری Java گرفتی و بعدا خواستی به #C مهاجرت کنی، اصلا جای نگرانی نیست؛ مفاهیم OOP و بسیاری از اصول برنامه‌نویسی در هر دو زبان مشترکن. فقط کافیه سینتکس‌ها و کتابخانه‌های مخصوص #C رو یاد بگیری که با تمرین و استفاده از منابع آموزشی مثل مستندات مایکروسافت به راحتی ممکنه.

    منابع پیشنهادی:

    جاواکاپ: مجموعه‌ای از ویدیوها و تمرین‌های آموزشی به زبان فارسی. ویدیوها رو ببین و تمرین‌ها رو انجام بده تا از میزان پیشرفتت مطمئن بشی.

    جاواکاپ

    برنامه‌نویسی پیشرفته شریف (AP شریف): این دوره شامل منابع متنوعیه که پایه و اساس دانش یک مهندس نرم‌افزار رو تشکیل می‌ده. تمرین‌ها و پروژه‌ها رو انجام بده و کیفیت کارت رو بررسی کن.

    AP شریف

    ثبت‌نام در دوره

    توصیه ما 🌟

    اول جاواکاپ رو ببین و تمرین‌هاش رو حل کن، بعدش برو سراغ AP شریف و تمرین‌ها و پروژه‌های اون رو انجام بده. برای دسترسی به تمرین‌های بیشتر می‌تونی از سایت کوئرا یا موارد مشابه کمک بگیری.

    سایت‌های مشابه کوئرا:

    برای ارزیابی کدها و بررسی میزان پیشرفت، علاوه بر کوئرا، می‌تونین از سایت‌های مشابهی مثل Codeforces، HackerRank، و LeetCode استفاده کنین. این سایت‌ها بستری عالی برای تمرین و ارزیابی مهارت‌های برنامه‌نویسی فراهم می‌کنن.

    فاز دوم: ساختمان داده و الگوریتم‌ها 📚

    ساختمان داده و الگوریتم‌ها یکی از مهم‌ترین بخش‌های برنامه‌نویسی هستن. تسلط بر این مفاهیم به شما کمک می‌کنه تا مسائل پیچیده رو بهینه‌تر و کارآمدتر حل کنین. برای شروع، می‌تونین از پلی‌لیست یوتیوب GeeksForGeeks استفاده کنین و سپس سوالات الگوریتمی مختلف رو حل کنین تا این مفاهیم به خوبی در ذهنتون جا بیفته.

    پلی‌لیست GeeksForGeeks

    تمرینات الگوریتمی کوئرا

    فاز سوم: فریمورک‌ها و تکنولوژی‌های کاربردی 🔧

    حالا وقتشه که بریم سراغ فریمورک‌ها و تکنولوژی‌های کاربردی. فریمورک‌ها ابزارهایی هستن که توسعه نرم‌افزار رو سریع‌تر و کارآمدتر می‌کنن. یادگیری فریمورک‌ها و تکنولوژی‌های جدید به تو کمک می‌کنه تا در پروژه‌های واقعی و تجاری بهتر عمل کنی و مهارت‌های خودت رو به سطح بالاتری برسونی.

    برای این کار می‌تونی از مستندات کارآموزی کداستار استفاده کنی. در مستندات کارآموزی کداستار تلاش کردیم علاوه‌بر سرنخ دادن به مطالب متنوع، پروژه‌هایی تعریف کنیم که حین انجامشون با کلی چالش فنی مختلف روبه‌رو بشیم و با حل این چالش‌ها، مهارت‌های فنی و تحقیقاتیمون رشد کنه.

    مستندات کارآموزی کداستار

    ممکنه یه جاهایی نیاز به ویدیو پیدا کنی. برای این کار میتونی از یوتیوب و آپارات کداستار کمک بگیری.

    آپارات کداستار

    فاز چهارم: پروژه‌های عملی و همکاری در تیم‌ها 👥

    یکی از بهترین راه‌ها برای یادگیری و تثبیت مهارت‌ها، انجام پروژه‌های عملی و همکاری در تیم‌هاست. این کار باعث می‌شه با چالش‌های واقعی مواجه بشی و مهارت‌های تیمی و فنی‌ات رو ارتقا بدی. پیشنهاد می‌کنیم به پروژه‌های متن‌باز بپیوندی یا توی هکاتون‌ها و مسابقات برنامه‌نویسی شرکت کنی.

    فاز پنجم: یادگیری مستمر و به‌روز رسانی دانش 📖

    دنیای فناوری اطلاعات دائما در حال تغییر و به‌روزرسانیه. برای موفقیت در این حوزه، باید همواره به‌روز باشی و مفاهیم جدید رو یاد بگیری. مطالعه مقالات، کتاب‌ها و دوره‌های آنلاین مرتبط و شرکت در کنفرانس‌ها و وبینارهای حوزه IT بسیار مهمه.

    منابع پیشنهادی:

    دوره‌های Coursera: این پلتفرم دوره‌های متنوعی در حوزه مهندسی نرم‌افزار ارائه می‌ده که می‌تونی ازشون استفاده کنی.

    کتاب‌های مرجع: کتاب‌هایی مثل "Clean Code" نوشته Robert C. Martin و "Design Patterns" نوشته Erich Gamma و همکارانش می‌تونن منابع بسیار خوبی باشن.

    کنفرانس‌ها و وبینارها: شرکت در این رویدادها باعث می‌شه با جدیدترین تکنولوژی‌ها و روش‌ها آشنا بشی.

    سخن‌آخر 🎓

    امیدواریم این نقشه راه بهت کمک کنه تا مهارت‌های ضروری در حوزه مهندسی نرم‌افزار رو کسب کنی و به رشد فردی و حرفه‌ای خودت برسی.

    موفق باشی، تیم کداستار⭐

    - + \ No newline at end of file diff --git a/docs/roadmaps/DevOps/index.html b/docs/roadmaps/DevOps/index.html index 65f6685b..6b621c69 100644 --- a/docs/roadmaps/DevOps/index.html +++ b/docs/roadmaps/DevOps/index.html @@ -6,13 +6,13 @@ DevOps | آکادمی ستاره - +

    DevOps

    سلام!😊

    یکی از مشکلات اساسی در فضای آکادمیک اینه که بیشتر دانشگاه‌ها فضایی برای یادگیری مهارت‌های عملی در پروژه‌های IT فراهم نمی‌کنن و تمرکزشون بیشتر روی مطالب تئوریه. اما دنیای واقعی فناوری اطلاعات نیاز به ترکیبی از دانش تئوری و مهارت‌های عملی داره. برای همین، تصمیم گرفتیم با کمک افراد حرفه‌ای در حوزه مهندسی نرم‌افزار، یه مسیر یادگیری طراحی کنیم که تو بتونی مهارت‌های لازم رو به صورت خودخوان کسب کنی و به رشد فردی و حرفه‌ای خودت کمک کنی.🚀

    💡 اگر می‌خوای تبدیل به یک متخصص DevOps بشی، اولین پیش‌نیاز شناخت چرخه تولید نرم‌افزاره. چون که به عنوان یک متخصص DevOps از تو انتظار می‌ره که این چرخه رو بفهمی و برای بهینه کردن هرچه بیشتر اون تلاش کنی.

    💻 بعد از شناخت نرم‌افزار و چرخه تولیدش، نوبت به فهمیدن فرهنگ DevOps می‌رسه. این فرهنگ به ما یاد می‌ده که چطور در یک سازمان افرادی که تخصص‌های متفاوتی دارن رو برای رسیدن به یک محصول خوب در کنار هم جمع کنیم.

    🔍 بعد از شناخت فرهنگ DevOps و چرخه تولید نرم‌افزار باید بریم سراغ ابزارهایی که به ما کمک می‌کنن این فرهنگ رو پیاده کنیم. اگر به علامت DevOps و چرخه نرم‌افزار دقت کنیم می‌بینیم که چند بخش مختلف مثل Build, Test, Release, Deploy, Operate و Monitor داره. یک متخصص DevOps خوب، برای هر کدوم از این بخش‌ها یک ابزار مناسب در جعبه‌ابزارش داره و می‌تونه در زمان نیاز از اون ابزار برای بهتر کردن روال کار کمک بگیره.

    📌 اگر بخوایم دقیق‌تر بشیم، احتمالا شما باید لینوکس، برنامه‌نویسی با یک زبان، ابزارهای اتوماتیک‌سازی مثل Ansible، ابزارهای بیلد و تست یعنی یکی از پایپلاین‌های CI مرسوم مثل (GitHub Actions, Azure Pipelines, Gitlab CI یا Jenkins)، ابزارهای مدیریت کانتینر مثل Docker و Kubernetes و ابزارهای مانیتورینگ مثل ELK و Grafana و Prometheus رو بشناسید.

    📂 برای یادگیری هر کدوم از این ابزارها، منابع خیلی زیادی وجود داره ولی احتمالا بهترین منبع، داک رسمی خود این ابزارها باشه. علاوه بر داک اون‌ها یوتیوب هم برای شناخت بهترشون منبع خوبیه. اما در نهایت مهمه که این یادگیری‌ها با تمرین همراه باشه.

    🔗 همونطور که گفتیم بهترین منبع برای یادگیری این ابزارها داک اصلی خودشونه اما اگر می‌خواید برای یادگیریتون مسیر خاصی داشته باشید و اون رو دنبال کنید، https://roadmap.sh/devops و https://github.com/MichaelCade/90DaysOfDevOps منابع خوبی هستن.

    موفق باشی، تیم کداستار⭐

    - + \ No newline at end of file diff --git a/docs/roadmaps/Frontend/index.html b/docs/roadmaps/Frontend/index.html index 7a997554..82b2e369 100644 --- a/docs/roadmaps/Frontend/index.html +++ b/docs/roadmaps/Frontend/index.html @@ -6,7 +6,7 @@ Frontend | آکادمی ستاره - + @@ -58,7 +58,7 @@ 🟥Decoded Frontend
    🟥Web Dev Simplified
    🟥Kevin Powell

    موفق باشی، تیم کداستار⭐

    - + \ No newline at end of file diff --git a/docs/software-engineering/index.html b/docs/software-engineering/index.html index b1798913..7462df12 100644 --- a/docs/software-engineering/index.html +++ b/docs/software-engineering/index.html @@ -6,13 +6,13 @@ مهندسی نرم‌افزار | آکادمی ستاره - + - + \ No newline at end of file diff --git a/docs/software-engineering/phase01-c-sharp/index.html b/docs/software-engineering/phase01-c-sharp/index.html index fd36859b..d5d31b6c 100644 --- a/docs/software-engineering/phase01-c-sharp/index.html +++ b/docs/software-engineering/phase01-c-sharp/index.html @@ -6,7 +6,7 @@ C# | آکادمی ستاره - + @@ -170,7 +170,7 @@ استفاده ‌کنید.

    برای آشنایی با امکانات جدید زبان #C می‌توانید ویدئوهای زیر را مشاهده کنید.

    - + \ No newline at end of file diff --git a/docs/software-engineering/phase02-full-text-search-project/index.html b/docs/software-engineering/phase02-full-text-search-project/index.html index 6fbea394..32b14384 100644 --- a/docs/software-engineering/phase02-full-text-search-project/index.html +++ b/docs/software-engineering/phase02-full-text-search-project/index.html @@ -6,7 +6,7 @@ Full-Text Search | آکادمی ستاره - + @@ -77,7 +77,7 @@ نباشند.

    مطالعه بیشتر

    برای آشنایی بیشتر با نحوۀ کار موتور‌های جستجو دیدن ویدئوی How Google searches one document among Billions of documents quickly توصیه می‌شود.

    - + \ No newline at end of file diff --git a/docs/software-engineering/phase03-clean-code/index.html b/docs/software-engineering/phase03-clean-code/index.html index 4dd0b1e2..3548618c 100644 --- a/docs/software-engineering/phase03-clean-code/index.html +++ b/docs/software-engineering/phase03-clean-code/index.html @@ -6,7 +6,7 @@ Clean Code | آکادمی ستاره - + @@ -62,7 +62,7 @@ است را نادیده بگیرید.

    برای آشنایی بیشتر با موضوع Code Review می‌توانید ویدئوی زیر را مشاهده کنید:

    How to Do Code Reviews Like a Human

    - + \ No newline at end of file diff --git a/docs/software-engineering/phase04-unit-test/index.html b/docs/software-engineering/phase04-unit-test/index.html index d7cf25af..f250e863 100644 --- a/docs/software-engineering/phase04-unit-test/index.html +++ b/docs/software-engineering/phase04-unit-test/index.html @@ -6,7 +6,7 @@ Unit Test | آکادمی ستاره - + @@ -84,7 +84,7 @@ کنند و همچنین شما نیز نگاهی به تست بقیه گروه‌ها داشته باشید. آیا با دید یکسانی تست نوشته‌اید؟ برای چه بخشی تست ننوشته بودید و دلیل آن چه چیزی بوده؟

    - + \ No newline at end of file diff --git a/docs/software-engineering/phase05-tdd/index.html b/docs/software-engineering/phase05-tdd/index.html index ef3ec9bc..6cf17312 100644 --- a/docs/software-engineering/phase05-tdd/index.html +++ b/docs/software-engineering/phase05-tdd/index.html @@ -6,21 +6,15 @@ TDD | آکادمی ستاره - +
    -

    TDD

    مقدمه

    در این فاز با مفاهیم -Test-driven development -آشنا می‌شوید و پروژه جستجو را با این الگو بازنویسی می‌کنید.

    آشنایی با مبانی TDD

    برای درک مفهوم -TDD -و مراحل آن لینک‌های زیر را مطالعه کنید:

    این دو ویدویو مربوط به -TDD -را نیز ببنید.

    آشنایی بیشتر با اصول SOLID و تاثیر آن بر TDD

    در این مرحله، فکر کنید که هر یک از اصول -SOLID، -چگونه می‌تواند بر ساده‌تر شدن روند -TDD +

    TDD

    مقدمه

    در این فاز با مفاهیم Test-driven development +آشنا می‌شوید و پروژه جستجو را با این الگو بازنویسی می‌کنید.

    آشنایی با مبانی TDD

    برای درک مفهوم TDD +و مراحل آن لینک‌های زیر را مطالعه کنید:

    آشنایی بیشتر با اصول SOLID و تاثیر آن بر TDD

    در این مرحله، فکر کنید که هر یک از اصول SOLID، +چگونه می‌تواند بر ساده‌تر شدن روند TDD تاثیر بگذارد. با هم‌تیمی خود در این مورد بحث کنید.

    در ادامه برای درک این موضوع لینک‌های زیر را مطالعه کنید:

    گسترش پروژه Full Text Search با رویکرد TDD

    در این مرحله به پروژه Full Text Search خود @@ -28,7 +22,7 @@ این ورودی به صورت زیر به برنامه در کنار ورودی های دیگر داده می‌شود :

    get +disease -cough "star academy"
    get +illness +disease -cough -"star academy"

    تحلیل ورودی

    get : حتما وجود داشته باشد
    +illness +disease : حداقل یکی از این دو وجود داشته باشد
    -cough : نباید وجود داشته باشد
    "star academy" : این عبارت حتما وجود داشته باشد
    -"star academy" : این عبارت وجود نداشته باشد

    این مرحله را سعی کنید کاملا با رویکرد TDD انجام دهید.

    - + \ No newline at end of file diff --git a/docs/software-engineering/phase06-cicd/index.html b/docs/software-engineering/phase06-cicd/index.html index 5c7776fb..43bdb21e 100644 --- a/docs/software-engineering/phase06-cicd/index.html +++ b/docs/software-engineering/phase06-cicd/index.html @@ -6,22 +6,38 @@ CI/CD | آکادمی ستاره - +
    -

    CI/CD

    مقدمه

    در این فاز با مفهوم CI/CD -و اهمیت استفاده از آن آشنا می‌شوید و سپس پروژهٔ خود را به CI/CD -مجهز می‌کنید.

    CI/CD چیست و چرا اهمیت دارد

    برای درک مفهوم CI/CD -و اهمیت آن لینک‌های زیر را مطالعه کنید.

    آشنایی با GitHub Actions و اضافه کردن CI/CD Pipeline به Repository

    یکی از ابزارهای CI/CD -معروف، GitHub Actions -است که به کمک آن، می‌توانیم یک Pipeline -شامل عملیات build، -اجرای unit testها، -انتشار package -و دیگر عملیاتی که در دستهٔ CI/CD -می‌گنجد را به Repository +

    CI/CD

    مقدمه

    در این فاز با مفهوم +CI/CD +و اهمیت استفاده از آن آشنا می‌شوید و سپس پروژهٔ خود را به +CI/CD +مجهز می‌کنید.

    CI/CD چیست و چرا اهمیت دارد

    برای درک مفهوم +CI/CD +و اهمیت آن لینک‌های زیر را مطالعه کنید.

    برای مطالعه بیشتر +CI/CD In 5 Minutes +را مطالعه کنید.

    آشنایی با GitHub Actions و اضافه کردن CI/CD Pipeline به Repository

    در ابتدا برای آشنایی با +Github Action +می‌توانید ویدیو زیر را ببنید +Introduction to GitHub Actions

    یکی از ابزارهای +CI/CD +معروف، +GitHub Actions +است که به کمک آن، می‌توانیم یک +Pipeline +شامل عملیات +build، +اجرای +unit testها، +انتشار +package +و دیگر عملیاتی که در دستهٔ +CI/CD +می‌گنجد را به +Repository خود اضافه کنیم. این بخش شامل مراحل زیر است:

    1. فایل github/workflows/buildPipeline.yml. را در Repository خود می‌سازیم.

    2. برای Pipeline @@ -116,7 +132,7 @@ پکیج به پروژه شما اضافه می‌شود و می‌توانید از کلاس‌های آن استفاده کنید. همچنین اگر پکیج خود را update کرده باشید، با اجرای این command، نسخه جدید پکیج به پروژه شما اضافه می‌شود.

      حال با استفاده از پکیج کتابخانه سرچ‌تان، یک نرم‌افزار سرچ تحت کنسول پیاده‌سازی کنید.

    - + \ No newline at end of file diff --git a/docs/software-engineering/phase07-SQL/index.html b/docs/software-engineering/phase07-SQL/index.html index 2900f515..c227c6b8 100644 --- a/docs/software-engineering/phase07-SQL/index.html +++ b/docs/software-engineering/phase07-SQL/index.html @@ -6,7 +6,7 @@ SQL | آکادمی ستاره - + @@ -181,7 +181,7 @@ می‌توان ستون‌ها را دسته‌بندی کرد. این دستور با Aggregate Funcitons به کار می‌رود. برای مثال دستور زیر تعداد آقایان و خانم‌ها را خروجی می‌دهد.

    SELECT IsMale, COUNT(IsMale) FROM Student GROUP BY IsMale;

    دستور زیر تعداد دروس ثبت‌نامی هر دانشجو را نشان می‌دهد.

    SELECT ParticipantStudentNumber, COUNT(ParticipantStudentNumber)
    FROM Enrollment
    GROUP BY ParticipantStudentNumber;
    - + \ No newline at end of file diff --git a/docs/software-engineering/phase08-EFCore/index.html b/docs/software-engineering/phase08-EFCore/index.html index 601811a0..2506b23f 100644 --- a/docs/software-engineering/phase08-EFCore/index.html +++ b/docs/software-engineering/phase08-EFCore/index.html @@ -6,7 +6,7 @@ EFCore | آکادمی ستاره - + @@ -38,7 +38,7 @@ داده‌ها را به روزرسانی کنید. برای آشنایی بیشتر با این مورد Update Records in Entity Framework Core را مطالعه نمائید.

    Delete

    برای حذف داده‌ها در جدول به راحتی می‌توانید به وسیله EFCore داده‌ها را حذف کنید. برای آشنایی بیشتر با این مورد Delete Records in Entity Framework Core را مطالعه نمائید.

    - + \ No newline at end of file diff --git a/docs/software-engineering/phase08-optional01-Elasticsearch/index.html b/docs/software-engineering/phase08-optional01-Elasticsearch/index.html index 7be53813..bb1ce634 100644 --- a/docs/software-engineering/phase08-optional01-Elasticsearch/index.html +++ b/docs/software-engineering/phase08-optional01-Elasticsearch/index.html @@ -6,7 +6,7 @@ Elasticsearch (اختیاری) | آکادمی ستاره - + @@ -245,7 +245,7 @@ آن است که در زیر لینک آن آمده است:

    اشعار از API وبسایت گنجور به دست آمده است.

    - + \ No newline at end of file diff --git a/docs/software-engineering/phase08-optional02-nest/index.html b/docs/software-engineering/phase08-optional02-nest/index.html index ecd619cc..18e71c52 100644 --- a/docs/software-engineering/phase08-optional02-nest/index.html +++ b/docs/software-engineering/phase08-optional02-nest/index.html @@ -6,7 +6,7 @@ Nest (اختیاری) | آکادمی ستاره - + @@ -81,7 +81,7 @@ استفاده کنید. از Response Validatorی که در قسمت قبل نوشتید در این اپلیکیشن استفاده کنید.

    - + \ No newline at end of file diff --git a/docs/software-engineering/phase09-web/index.html b/docs/software-engineering/phase09-web/index.html index 4be4ac78..eff6a9c3 100644 --- a/docs/software-engineering/phase09-web/index.html +++ b/docs/software-engineering/phase09-web/index.html @@ -6,7 +6,7 @@ ASP.NET Core | آکادمی ستاره - + @@ -104,7 +104,7 @@ برگرداند.

    پی‌نوشت

    جهت آشنایی با ASP.NET Core Web API می‌توانید از ویدئوهای آموزشی Web APIs for Beginners مایکروسافت نیز استفاده کنید.

    - + \ No newline at end of file diff --git a/docs/tags/index.html b/docs/tags/index.html index f3ba814f..3f215808 100644 --- a/docs/tags/index.html +++ b/docs/tags/index.html @@ -6,13 +6,13 @@ برچسب‌ها | آکادمی ستاره - + - + \ No newline at end of file diff --git a/docs/tags/readonly/index.html b/docs/tags/readonly/index.html index 4e6a7015..c444ece2 100644 --- a/docs/tags/readonly/index.html +++ b/docs/tags/readonly/index.html @@ -6,13 +6,13 @@ 3 مطلب برچسب شده با "Readonly" | آکادمی ستاره - +

    3 مطلب برچسب شده با "Readonly"

    مشاهده تمام برچسب‌ها

    Animation

    Sure, it looks stupid now. There's no music playing.

    UI/UX

    Oh, no wait; I'm sorry; That's "pretty dumb".

    - + \ No newline at end of file diff --git a/docs/tags/sandbox/index.html b/docs/tags/sandbox/index.html index a366dd65..a723813c 100644 --- a/docs/tags/sandbox/index.html +++ b/docs/tags/sandbox/index.html @@ -6,13 +6,13 @@ یک مطلب برچسب شده با "Sandbox" | آکادمی ستاره - +

    یک مطلب برچسب شده با "Sandbox"

    مشاهده تمام برچسب‌ها

    Sandbox

    When I was a kid, my mom used to just throw me into a pile of broken glass!

    - + \ No newline at end of file diff --git a/index.html b/index.html index baf5c830..d11afd4d 100644 --- a/index.html +++ b/index.html @@ -6,13 +6,13 @@ آکادمی ستاره - + - + \ No newline at end of file