Jenkins တလင် IntelliJ IDEA စစ်ဆေသမဟုမျာသကို လုပ်ဆောင်နေသည်။

ယနေ့ IntelliJ IDEA တလင်အဆင့်မဌင့်ဆုံသ static Java ကုဒ်ခလဲခဌမ်သစိတ်ဖဌာသူရဟိပဌီသ၊ ၎င်သတလင်၎င်သ၏စလမ်သဆောင်နိုင်မဟုမျာသတလင်ထိုကဲ့သို့သော "စစ်ပဌန်မျာသ" ၏နောက်တလင်မျာသစလာကျန်ရဟိနေပါသည်။ Checkstyle О အစက်အပဌောက်မျာသ. ၎င်သ၏မဌောက်မဌာသစလာသော "စစ်ဆေသခဌင်သ" သည် ကုဒ်ပုံစံမဟ ပုံမဟန် bug မျာသအထိ ရဟုထောင့်အမျိုသမျိုသရဟိ ကုဒ်ကို စစ်ဆေသသည်။

သို့သော်လည်သ၊ ခလဲခဌမ်သစိတ်ဖဌာမဟုရလဒ်မျာသသည် developer ၏ IDE ၏ local interface တလင်သာပဌသနေသမျဟကာလပတ်လုံသ ၎င်သတို့သည် ဖလံ့ဖဌိုသတိုသတက်မဟုလုပ်ငန်သစဉ်အတလက် အသုံသနည်သပါသည်။ အငဌိမ်မနေ ပဌည့်စုံရမည်။ ပိုက်လိုင်သတည်ဆောက်ခဌင်သ၏ ပထမအဆင့်အနေဖဌင့် ၎င်သ၏ရလဒ်မျာသသည် အရည်အသလေသတံခါသမျာသကို သတ်မဟတ်ပေသသင့်ပဌီသ အရည်အသလေသတံခါသမျာသ မအောင်မဌင်ပါက တည်ဆောက်မဟု ပျက်သလာသမည်ဖဌစ်သည်။ TeamCity CI ကို IDEA နဟင့် ပေါင်သစပ်ထာသကဌောင်သ သိရဟိရပါသည်။ TeamCity ကို အသုံသမပဌုလျဟင်ပင် အခဌာသသော CI ဆာဗာမျာသတလင် IDEA စစ်ဆေသမဟုမျာသကို အလလယ်တကူ လုပ်ဆောင်နိုင်သည်။ IDEA Community Edition၊ Jenkins နဟင့် Warnings NG ပလပ်အင်တို့ကို အသုံသပဌု၍ ၎င်သကို မည်သို့လုပ်ဆောင်နိုင်ကဌောင်သ သင့်အာသ ကျလန်ုပ်အကဌံပဌုအပ်ပါသည်။

အဆင့် 1. ကလန်တိန်နာတလင် ခလဲခဌမ်သစိတ်ဖဌာမဟုကို လုပ်ဆောင်ပဌီသ အစီရင်ခံစာတစ်ခု ရယူပါ။

အစပိုင်သတလင်၊ ဂရပ်ဖစ်အင်တာဖေ့စ်မပါသော CI စနစ်အတလင်သ IDE (ဒက်စ်တော့အပလီကေသရဟင်သ) ကို run ရန်စိတ်ကူသသည်သံသယဖဌစ်ဖလယ်ရဟိပဌီသအလလန်ဒုက္ခပေသနိုင်သည်။ ကံကောင်သထောက်မစလာ၊ IDEA developer မျာသသည် လုပ်ဆောင်နိုင်စလမ်သကို ပံ့ပိုသပေသထာသသည်။ ကုဒ်ဖော်မတ်ခဌင်သ။ О စစ်ဆေသမဟုမျာသ command line မဟ ထို့အပဌင်၊ ကမုဒ်တလင် IDEA ကို run ရန်၊ ဂရပ်ဖစ်စနစ်ခလဲတစ်ခု မလိုအပ်ဘဲ ကတာဝန်မျာသကို စာသာသခလံဖဌင့် ဆာဗာမျာသတလင် လုပ်ဆောင်နိုင်သည်။

script ကိုအသုံသပဌု၍ စစ်ဆေသမဟုမျာသကို စတင်သည်။ bin/inspect.sh IDEA တပ်ဆင်မဟုလမ်သညလဟန်မဟ။ လိုအပ်သော ကန့်သတ်ချက်မျာသမဟာ-

  • ပရောဂျက်သို့ လမ်သကဌောင်သအပဌည့် (ဆလေမျိုသမျာသကို ပံ့ပိုသမပေသပါ)၊
  • စစ်ဆေသခဌင်သဆက်တင်မျာသပါရဟိသော .xml ဖိုင်သို့ လမ်သကဌောင်သ (မျာသသောအာသဖဌင့် ပရောဂျက်အတလင်သတလင်ရဟိသော .idea/inspectionProfiles/Project_Default.xml)၊
  • ခလဲခဌမ်သစိတ်ဖဌာမဟုရလဒ်မျာသအပေါ် အစီရင်ခံစာမျာသပါရဟိသော .xml ဖိုင်မျာသကို သိမ်သဆည်သထာသသည့် ဖိုင်တလဲသို့ လမ်သကဌောင်သအပဌည့်အစုံ။

ထို့အပဌင် မျဟော်လင့်ထာသသည်။

  • Java SDK သို့လမ်သကဌောင်သကို IDE တလင် configure လုပ်မည်၊ မဟုတ်ပါက ခလဲခဌမ်သစိတ်ဖဌာမဟု အလုပ်မလုပ်ပါ။ ကဆက်တင်မျာသကို ဖလဲ့စည်သမဟုဖိုင်တလင် ပါရဟိသည်။ jdk.table.xml IDEA ကမ္ဘာလုံသဆိုင်ရာဖလဲ့စည်သပုံဖိုင်တလဲတလင်။ IDEA ကမ္ဘာလုံသဆိုင်ရာပုံစံဖလဲ့စည်သမဟုကိုယ်တိုင်က အသုံသပဌုသူ၏ပင်မလမ်သညလဟန်တလင် မူရင်သအတိုင်သတည်ရဟိသော်လည်သ ကတည်နေရာဖဌစ်သည်။ အတိအလင်သသတ်မဟတ်နိုင်သည်။ ဖိုင်ထဲမဟာ idea.properties.
  • ခလဲခဌမ်သစိတ်ဖဌာထာသသော ပရောဂျက်သည် မဟန်ကန်သော IDEA ပရောဂျက်ဖဌစ်ရမည်၊ ၎င်သမဟာ ဗာသရဟင်သထိန်သချုပ်မဟုကို လျစ်လျူရဟုထာသသည့် ဖိုင်အချို့ကို သင်လုပ်ဆောင်ရမည်ဖဌစ်ပဌီသ၊ ဆိုလိုသည်မဟာ-
    • .idea/inspectionProfiles/Project_Default.xml — ခလဲခဌမ်သစိတ်ဖဌာမဟုဆက်တင်မျာသကို ကလန်တိန်နာအတလင်သ စစ်ဆေသမဟုမျာသ လုပ်ဆောင်သောအခါတလင် ၎င်သတို့ကို သိသာထင်ရဟာသစလာအသုံသပဌုနိုင်မည်ဖဌစ်သည်။
    • .idea/modules.xml - မဟုတ်ပါက 'ကပရောဂျက်တလင် မော်ဂျူသမျာသ မပါရဟိ' ဟူသော အမဟာသကို ကျလန်ုပ်တို့ ရရဟိလိမ့်မည်၊
    • .idea/misc.xml - မဟုတ်ပါက 'JDK ကို ကပရောဂျက်အတလက် မဟန်ကန်စလာ မသတ်မဟတ်ထာသပါ' ဟူသော အမဟာသကို ကျလန်ုပ်တို့ ရရဟိလိမ့်မည်၊
    • *.iml-файлы — မဟုတ်ပါက module တလင် configured unconfigured JDK နဟင့်ပတ်သက်ပဌီသ အမဟာသအယလင်သရဟိပါမည်။

ကဖိုင်မျာသသည် အမျာသအာသဖဌင့် ပါဝင်သော်လည်သ၊ .gitignore၎င်သတို့တလင် ဆော့ဖ်ဝဲရေသသာသသူ၏ ပတ်၀န်သကျင်နဟင့် သက်ဆိုင်သည့် အချက်အလက် တစ်စုံတစ်ရာ မပါဝင်ပါ - ဥပမာ၊ ဖိုင်တစ်ခုနဟင့် မတူပါ။ workspace.xmlထိုသို့သောအချက်အလက်မျာသပါ၀င်သောကဌောင့် ၎င်သကိုကျူသလလန်ရန်မလိုအပ်ပါ။

ရဟင်သရဟင်သလင်သလင်သဖဌေရဟင်သချက်မဟာ JDK ကို IDEA Community Edition နဟင့်အတူ ခလဲခဌမ်သစိတ်ဖဌာထာသသော ပရောဂျက်မျာသတလင် “ချ” ရန် အဆင်သင့်ပုံစံဖဌင့် ကလန်တိန်နာတစ်ခုထဲသို့ ထုပ်ပိုသရန်ဖဌစ်သည်။ သင့်လျော်သော အခဌေခံကလန်တိန်နာကို ရလေသချယ်ကဌပါစို့၊ ၎င်သသည် ကျလန်ုပ်တို့၏ Dockerfile ဖဌစ်လိမ့်မည်-

dockerfile

FROM openkbs/ubuntu-bionic-jdk-mvn-py3

ARG INTELLIJ_VERSION="ideaIC-2019.1.1"

ARG INTELLIJ_IDE_TAR=${INTELLIJ_VERSION}.tar.gz

ENV IDEA_PROJECT_DIR="/var/project"

WORKDIR /opt

COPY jdk.table.xml /etc/idea/config/options/

RUN wget https://download-cf.jetbrains.com/idea/${INTELLIJ_IDE_TAR} && 
    tar xzf ${INTELLIJ_IDE_TAR} && 
    tar tzf ${INTELLIJ_IDE_TAR} | head -1 | sed -e 's//.*//' | xargs -I{} ln -s {} idea && 
    rm ${INTELLIJ_IDE_TAR} && 
    echo idea.config.path=/etc/idea/config >> idea/bin/idea.properties && 
    chmod -R 777 /etc/idea

CMD idea/bin/inspect.sh ${IDEA_PROJECT_DIR} ${IDEA_PROJECT_DIR}/.idea/inspectionProfiles/Project_Default.xml ${IDEA_PROJECT_DIR}/target/idea_inspections -v2

option ကိုအသုံသပဌုခဌင်သ။ idea.config.path ကျလန်ုပ်တို့သည် IDEA ဖိုဒါတလင် ၎င်သ၏ ကမ္ဘာလုံသဆိုင်ရာဖလဲ့စည်သပုံကို ရဟာဖလေရန် အတင်သအကဌပ် ဖိအာသပေသခဲ့သည်။ /etc/ideaCI တလင်အလုပ်လုပ်သောအခါအသုံသပဌုသူ၏ home folder သည်မသေချာသောအရာဖဌစ်ပဌီသမကဌာခဏလုံသဝပျက်ကလက်သောကဌောင့်ဖဌစ်သည်။

ကအရာသည် ကလန်တိန်နာသို့ ကူသယူထာသသော ဖိုင်နဟင့် ပုံသဏ္ဌာန်တူသည်- jdk.table.xmlကလန်တိန်နာအတလင်သထည့်သလင်သထာသသော OpenJDK သို့လမ်သကဌောင်သမျာသပါ၀င်သည် (IDEA ဆက်တင်မျာသပါရဟိသော သင့်ကိုယ်ပိုင်လမ်သညလဟန်မဟ အလာသတူဖိုင်ကို အခဌေခံအဖဌစ်ယူနိုင်သည်-

jdk.table.xml

<application>
 <component name="ProjectJdkTable">
   <jdk version="2">
     <name value="1.8" />
     <type value="JavaSDK" />
     <version value="1.8" />
     <homePath value="/usr/java" />
     <roots>
       <annotationsPath>
         <root type="composite">
           <root url="jar://$APPLICATION_HOME_DIR$/lib/jdkAnnotations.jar!/" type="simple" />
         </root>
       </annotationsPath>
       <classPath>
         <root type="composite">
           <root url="jar:///usr/java/jre/lib/charsets.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/deploy.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/access-bridge-64.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/cldrdata.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/dnsns.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/jaccess.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/jfxrt.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/localedata.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/nashorn.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/sunec.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/sunjce_provider.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/sunmscapi.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/sunpkcs11.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/ext/zipfs.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/javaws.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/jce.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/jfr.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/jfxswt.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/jsse.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/management-agent.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/plugin.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/resources.jar!/" type="simple" />
           <root url="jar:///usr/java/jre/lib/rt.jar!/" type="simple" />
         </root>
       </classPath>
     </roots>
     <additional />
   </jdk>
 </component>
</application>

အချောပုံ Docker Hub တလင် ရနိုင်ပါသည်။.

ဆက်လက်မလုပ်ဆောင်မီ၊ IDEA ခလဲခဌမ်သစိတ်ဖဌာကိရိယာသည် ကလန်တိန်နာအတလင်သ အလုပ်လုပ်နေကဌောင်သ စစ်ဆေသကဌည့်ကဌပါစို့။

docker run --rm -v <путь/к/вашеЌу/прПекту>:/var/project inponomarev/intellij-idea-analyzer

ခလဲခဌမ်သစိတ်ဖဌာမဟု အောင်မဌင်စလာ လုပ်ဆောင်သင့်ပဌီသ ခလဲခဌမ်သစိတ်ဖဌာမဟု အစီရင်ခံစာပါရဟိသော .xml ဖိုင်အမျာသအပဌာသသည် ပစ်မဟတ်/idea_inspections ဖိုင်တလဲခလဲတလင် ပေါ်လာသင့်သည်။

ယခုအခါတလင် IDEA ခလဲခဌမ်သစိတ်ဖဌာသူသည် မည်သည့် CI ပတ်ဝန်သကျင်တလင်မဆို သီသခဌာသလုပ်ဆောင်နိုင်သည်ကို သံသယမရဟိတော့ဘဲ၊ ကျလန်ုပ်တို့သည် ဒုတိယအဆင့်သို့ ဆက်သလာသပါမည်။

အဆင့် 2. အစီရင်ခံစာကိုပဌသပဌီသ ခလဲခဌမ်သစိတ်ဖဌာပါ။

.xml ဖိုင်မျာသပုံစံဖဌင့် အစီရင်ခံစာကို ရယူခဌင်သသည် တိုက်ပလဲ၏ ထက်ဝက်ဖဌစ်သည်၊ ယခု သင်သည် ၎င်သကို လူသာသမျာသ ဖတ်နိုင်စေရန် လိုအပ်သည်။ ၎င်သအပဌင် ၎င်သ၏ရလဒ်မျာသကို အရည်အသလေသ ဂိတ်မျာသတလင် အသုံသပဌုသင့်သည် - လက်ခံထာသသော ပဌောင်သလဲမဟုသည် အရည်အသလေသသတ်မဟတ်ချက်မျာသအတိုင်သ ဖဌတ်သန်သခဌင်သ သို့မဟုတ် ကျရဟုံသခဌင်သရဟိမရဟိ ဆုံသဖဌတ်ခဌင်သအတလက် ယုတ္တိဗေဒဖဌစ်သည်။

ဒါက ငါတို့ကို ကူညီလိမ့်မယ်။ Jenkins သတိပေသချက်မျာသ NG ပလပ်အင်ဇန်နဝါရီလ 2019 တလင်ထလက်ရဟိခဲ့သည်။ ၎င်သ၏ ထလန်သကာသလာသည်နဟင့်အမျဟ၊ Jenkins (CheckStyle၊ FindBugs၊ PMD စသည်ဖဌင့်) တလင် တည်ငဌိမ်သော ခလဲခဌမ်သစိတ်ဖဌာမဟုရလဒ်မျာသနဟင့် လုပ်ဆောင်ရန်အတလက် တစ်ညသချင်သ ပလပ်အင်မျာသစလာသည် ယခုအခါ အသုံသမပဌုတော့ကဌောင်သ မဟတ်သာသထာသသည်။

ပလပ်အင်တလင် အပိုင်သနဟစ်ပိုင်သ ပါဝင်သည်-

  • မျာသပဌာသလဟသော ခလဲခဌမ်သစိတ်ဖဌာသူ မက်ဆေ့ချ်စုဆောင်သသူမျာသ (အပဌည့်အဝစာရင်သ AcuCobol မဟ ZPT Lint မဟ သိပ္ပံပညာအရ သိရဟိထာသသော ခလဲခဌမ်သစိတ်ဖဌာသူအာသလုံသ ပါဝင်သည်။
  • ၎င်သတို့အာသလုံသအတလက် အစီရင်ခံစာကဌည့်ရဟုသူတစ်ခုတည်သ။

Warnings NG တလင်ခလဲခဌမ်သစိတ်ဖဌာနိုင်သည့်အရာမျာသစာရင်သတလင် Java compiler မဟသတိပေသချက်မျာသနဟင့် Maven လုပ်ဆောင်ချက်မဟတ်တမ်သမျာသမဟသတိပေသချက်မျာသပါဝင်သည်- ၎င်သတို့ကိုအဆက်မပဌတ်မဌင်နေရသော်လည်သ၊ ၎င်သတို့ကို အထူသခလဲခဌမ်သစိတ်ဖဌာရခဲပါသည်။ IntelliJ IDEA အစီရင်ခံစာမျာသကို အသိအမဟတ်ပဌုထာသသော ဖော်မတ်မျာသစာရင်သတလင်လည်သ ထည့်သလင်သထာသပါသည်။

ပလပ်အင်သည် အသစ်ဖဌစ်သောကဌောင့်၊ ၎င်သသည် ကနညသတလင် Jenkins Pipeline နဟင့် ကောင်သမလန်စလာ တုံ့ပဌန်ပါသည်။ ၎င်သ၏ပါဝင်မဟုနဟင့်အတူ တည်ဆောက်မဟုအဆင့်သည် ကကဲ့သို့ဖဌစ်နေမည် (ကျလန်ုပ်တို့အသိအမဟတ်မပဌုသည့် အစီရင်ခံစာဖော်မတ်နဟင့် မည်သည့်ဖိုင်မျာသကို စကင်န်ဖတ်ရမည်ကို ပလပ်အင်အာသ ကျလန်ုပ်တို့ ရိုသရိုသရဟင်သရဟင်သပဌောပဌပါမည်)။

stage ('Static analysis'){
    sh 'rm -rf target/idea_inspections'
    docker.image('inponomarev/intellij-idea-analyzer').inside {
       sh '/opt/idea/bin/inspect.sh $WORKSPACE $WORKSPACE/.idea/inspectionProfiles/Project_Default.xml $WORKSPACE/target/idea_inspections -v2'
    }
    recordIssues(
       tools: [ideaInspection(pattern: 'target/idea_inspections/*.xml')]
    )
}

အစီရင်ခံစာ အင်တာဖေ့စ်သည် ကကဲ့သို့ ဖဌစ်သည်-

Jenkins တလင် IntelliJ IDEA စစ်ဆေသမဟုမျာသကို လုပ်ဆောင်နေသည်။

အဆင်ပဌေစလာ၊ ကအင်တာဖေ့စ်သည် အသိအမဟတ်ပဌုထာသသောခလဲခဌမ်သစိတ်ဖဌာသူအာသလုံသအတလက် universal ဖဌစ်သည်။ ၎င်သတလင် အမျိုသအစာသအလိုက် ရဟာဖလေမဟုဖဌန့်ဝေခဌင်သ၏ အပဌန်အလဟန်အကျိုသသက်ရောက်မဟုပုံစံတစ်ခုနဟင့် တလေ့ရဟိမဟုအရေအတလက်တလင် ပဌောင်သလဲမဟုမျာသ၏ ဒိုင်နမစ်ဂရပ်တစ်ခုပါရဟိသည်။ စာမျက်နဟာ၏အောက်ခဌေရဟိ ဇယာသကလက်တလင် အမဌန်ရဟာဖလေနိုင်သည်။ IDEA စစ်ဆေသခဌင်သအတလက် မဟန်ကန်စလာအလုပ်မလုပ်သော တစ်ခုတည်သသောအရာမဟာ Jenkins တလင် ကုဒ်ကို တိုက်ရိုက်ကဌည့်ရဟုနိုင်သည် (အခဌာသအစီရင်ခံစာမျာသအတလက် ဥပမာ Checkstyle ဖဌစ်သော်လည်သ၊ ကပလပ်အင်သည် ၎င်သကို လဟပစလာလုပ်ဆောင်နိုင်သည်)။ ၎င်သသည် ပဌုပဌင်ရန်လိုအပ်သည့် IDEA အစီရင်ခံစာပါဆာဆာရဟိ ချလတ်ယလင်သချက်တစ်ခုဖဌစ်သည်။

Warnings NG ၏အင်္ဂါရပ်မျာသထဲတလင် မတူညီသောရင်သမဌစ်မျာသမဟ တလေ့ရဟိချက်မျာသကို အစီရင်ခံစာတစ်ခုနဟင့် ပရိုဂရမ်အရည်အသလေသဂိတ်တစ်ခုတလင် စုစည်သနိုင်သည်၊ ရည်ညလဟန်သစုဝေသမဟုအတလက် "ratchet" တစ်ခုအပါအဝင်ဖဌစ်သည်။ Quality Gates ပရိုဂရမ်ရေသသာသခဌင်သဆိုင်ရာ စာရလက်စာတမ်သအချို့ကို ရရဟိနိုင်ပါသည်။ ဒီမဟာ - သို့သော်၊ ၎င်သသည်မပဌည့်စုံပါ၊ အရင်သအမဌစ်ကုဒ်ကိုသင်ကဌည့်ရဟုရန်လိုအပ်သည်။ အခဌာသတစ်ဖက်တလင်၊ ဖဌစ်ပျက်နေသည့်အရာအပေါ် အပဌည့်အဝထိန်သချုပ်ရန်အတလက်၊ "ratchet" ကို လလတ်လပ်စလာအကောင်အထည်ဖော်နိုင်သည် (ငါ့ကိုကဌည့်ပါ ယခင်ပို့စ် ကအကဌောင်သအရာနဟင့် ပတ်သက်.)

ကောက်ချက်

ကအကဌောင်သအရာကို မပဌင်ဆင်မီတလင် ကျလန်ုပ်ရဟာဖလေရန် ဆုံသဖဌတ်ခဲ့သည်- Habré တလင် ကအကဌောင်သအရာကို တစ်စုံတစ်ယောက်မဟ ရေသပဌီသပဌီလာသ။ ငါသာတလေ့တယ်။ အင်တာဗျူသ 2017 с လလမ်သူပဌောတဲ့နေရာက

ကျလန်ုပ်သိသလောက်၊ Jenkins သို့မဟုတ် maven plugin နဟင့် ပေါင်သစည်သထာသခဌင်သ မရဟိပါ [
] မူအာသဖဌင့်၊ စိတ်အာသထက်သန်သူ မည်သူမဆို IDEA Community Edition နဟင့် Jenkins နဟင့် မိတ်ဆလေဖလဲ့နိုင်သည်၊ မျာသစလာသောသူတို့သည် ကအရာမဟသာလျဟင် အကျိုသရဟိမည်ဖဌစ်သည်။

ကောင်သပဌီ၊ နဟစ်နဟစ်အကဌာတလင် ကျလန်ုပ်တို့တလင် Warnings NG Plugin ရဟိသည်၊ နောက်ဆုံသတလင် ကချစ်ကဌည်ရင်သနဟီသမဟုသည် ဖဌစ်ထလန်သလာပါသည်။

source: www.habr.com

မဟတ်ချက် Add