{"id":3524,"date":"2019-04-14T08:51:00","date_gmt":"2019-04-14T08:51:00","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/"},"modified":"2026-04-24T11:32:09","modified_gmt":"2026-04-24T11:32:09","slug":"kvalitate-pirmie-5-vienkarsi-soli-lai-javascript-projekta-izlidzinatu-kodu-ar-github-darbplusmam","status":"publish","type":"post","link":"https:\/\/thecodest.co\/lv\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/","title":{"rendered":"Kvalit\u0101te ir pirmaj\u0101 viet\u0101! 5 vienk\u0101r\u0161i so\u013ci, lai JavaScript projekt\u0101 uzlabotu kodu ar GitHub darbpl\u016bsm\u0101m"},"content":{"rendered":"<p>Ko mums vajadz\u0113tu dar\u012bt, kad <a href=\"https:\/\/thecodest.co\/lv\/dictionary\/why-do-projects-fail\/\">projekts<\/a> ir mazs vai klients v\u0113l nezina, vai ir v\u0113rts ieguld\u012bt vair\u0101k? Ac\u012bmredzot, pie <strong><a href=\"https:\/\/thecodest.co\/blog\/product-building-with-mvp-why-is-this-worth-implementing\/\">Projekta MVP posms<\/a><\/strong>, <a href=\"https:\/\/thecodest.co\/lv\/dictionary\/what-is-code-refactoring\/\">kods<\/a> stila vai vien\u012bbas testi nav galven\u0101 priorit\u0101te. Investori parasti v\u0113las, lai b\u016btu labs <a href=\"https:\/\/thecodest.co\/lv\/dictionary\/how-to-make-product\/\">produkts<\/a> un c'mon - ja tas darbojas, tas nav nepiecie\u0161ams test\u0113t, vai ne?<\/p>\n\n\n\n<p>Paties\u012bb\u0101 man ir zin\u0101ma pieredze <strong><a href=\"https:\/\/thecodest.co\/contact\">lietot\u0146u veido\u0161ana no nulles<\/a><\/strong>, pat tad, ja vispirms netiek izmantota lab\u0101k\u0101 prakse. Da\u017ei biznesa apst\u0101k\u013ci lika man mekl\u0113t kompromisu starp investora bud\u017eeta pl\u0101niem un izstr\u0101d\u0101t\u0101ja \u201epat\u012bkamo\u201d sarakstu. Par laimi, ja izmantojat GitHub, liel\u0101ko da\u013cu bie\u017e\u0101k sastopamo ar koda kvalit\u0101ti saist\u012bto probl\u0113mu var atrisin\u0101t da\u017eu min\u016b\u0161u laik\u0101.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u0160aj\u0101 rakst\u0101 es jums par\u0101d\u012b\u0161u, k\u0101 izmantot GitHub darbpl\u016bsmas Node.js vid\u0113, lai standartiz\u0113tu savu kodu b\u0101zi.<\/strong><\/h2>\n\n\n\n<p>Da\u017ei pie\u0146\u0113mumi, pirms s\u0101kam:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>J\u016bs p\u0101rzin\u0101t NPM un Linux konsole.<\/li>\n\n\n\n<li>Jums ir zin\u0101ma pieredze ar stila pirmprocesoriem, modu\u013cu iel\u0101d\u0113t\u0101jiem, komplekt\u0113t\u0101jiem u. c.<\/li>\n\n\n\n<li>J\u016bs zin\u0101t, kam ir paredz\u0113ti linteri, un patie\u0161\u0101m v\u0113laties tos izmantot savos projektos.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. Tipiska JavaScript projekta strukt\u016bra<\/strong><\/h2>\n\n\n\n<p>Ja esat k\u0101dreiz izmantojis k\u0101du <a href=\"https:\/\/thecodest.co\/lv\/blog\/javascript-tools-in-action\/\">JS<\/a> ietvarstrukt\u016bras, piem\u0113ram. <a href=\"https:\/\/thecodest.co\/lv\/blog\/hire-vue-js-developers\/\">Vue<\/a> vai <a href=\"https:\/\/thecodest.co\/lv\/blog\/conditional-component-visibility-in-react\/\">React<\/a>, j\u016bs varat viegli paman\u012bt da\u017eas kop\u012bgas lietas, piem\u0113ram:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>\/src<\/em> direktoriju ar visu j\u016bsu JS lo\u0123iku un komponent\u0113m,<\/li>\n\n\n\n<li><em>\/tests<\/em> direktoriju vien\u012bbas un e2e testiem,<\/li>\n\n\n\n<li><em>\/akt\u012bvi<\/em> stilu, att\u0113lu utt. direktoriju.<\/li>\n<\/ul>\n\n\n\n<p>Pat ja m\u0113s run\u0101jam par <a href=\"https:\/\/thecodest.co\/lv\/blog\/hire-javascript-developer\/\">JavaScript<\/a> projektu, m\u0113s str\u0101d\u0101jam <a href=\"https:\/\/thecodest.co\/lv\/dictionary\/what-is-node-js-used-for\/\">Mezgls<\/a> vide, t\u0101p\u0113c ac\u012bmredzot ir j\u0101b\u016bt ar\u012b Node s\u012bkumiem, piem\u0113ram. <em>package.json<\/em>, <em>package-lock.json<\/em> un <em>\/node_modules<\/em> katalogs m\u016bsu saknes direktorij\u0101.<\/p>\n\n\n\n<p>Visas \u0161\u012bs lietas ir sav\u0101s viet\u0101s - to m\u0113s saucam par. <strong>konvencija<\/strong>. R\u0101mji ir rad\u012bti, lai nodro\u0161in\u0101tu da\u017eas sapr\u0101t\u012bgas konvencijas, t\u0101p\u0113c parasti mums pat nav nepiecie\u0161ams r\u016bp\u0113ties par s\u0101kotn\u0113jo dizaina modeli. T\u0101 k\u0101 \u0161aj\u0101 piem\u0113r\u0101 es v\u0113los izskaidrot da\u017eas pieejas, es nepiem\u0113ro\u0161u nek\u0101dus gatavus risin\u0101jumus, piem\u0113ram, Vue CLI.<\/p>\n\n\n\n<p><strong>Laiks saprast, kas sl\u0113pjas zem visiem \u0161iem ma\u0123iskajiem lint skriptiem!<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Tipisk\u0101 Node projekta papla\u0161in\u0101\u0161ana<\/strong><\/h2>\n\n\n\n<p>Lai nodro\u0161in\u0101tu augstas kvalit\u0101tes risin\u0101jumus, linteri ir pirm\u0101 lieta, ar ko j\u0101s\u0101k jauna projekta izveide. Piev\u0113rs\u012bsim uzman\u012bbu diviem linteriem - stilu linteram Stylelint (<em>*.scss<\/em>) un ESLint avota failiem (<em>*.js<\/em>). Abi \u0161ie linteri ir pieejami NPM un ir diezgan viegli konfigur\u0113jami. Lietojot linterus, ir j\u0101iziet instal\u0113\u0161anas process, j\u0101pievieno konfigur\u0101cijas faili un j\u0101defin\u0113 projekta skripti. Izdar\u012bsim to soli pa solim.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Stylelint pievieno\u0161ana<\/strong><\/h2>\n\n\n\n<p>Stylelint instal\u0113\u0161ana Node vid\u0113 ir \u013coti vienk\u0101r\u0161a. Saska\u0146\u0101 ar <a href=\"https:\/\/stylelint.io\/user-guide\/get-started\">ofici\u0101lie dokumenti<\/a>, jums vienk\u0101r\u0161i j\u0101skrien:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">npm install --save-dev stylelint stylelint-config-standard<\/code><\/pre>\n\n\n\n<p>un pagaidiet, l\u012bdz tas b\u016bs pabeigts.<\/p>\n\n\n\n<p><em>stylelint-config-standard<\/em> nodro\u0161ina standartnoteikumu kopumu, un to var aizst\u0101t ar jebkuru pakotni, kas lab\u0101k atbilst j\u016bsu vajadz\u012bb\u0101m (piem. <a href=\"https:\/\/www.npmjs.com\/package\/stylelint-config-airbnb\">Airbnb stil\u0101<\/a>). Tad izveidojiet jaunu sl\u0113pto failu <em>.stylelintrc.json<\/em>, kas ir Stylelint konfigur\u0101cijas fails, kur\u0161 ir atbild\u012bgs par m\u016bsu iepriek\u0161 defin\u0113to noteikumu iel\u0101d\u0113\u0161anu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">{\n    \"extends\": \"stylelint-config-standard\"\n}<\/code><\/pre>\n\n\n\n<p>\u0160obr\u012bd vien\u012bgais, k\u0101 pietr\u016bkst, ir k\u0101ds NPM skripts (vai skripti), kas deklar\u0113ts package.json fail\u0101, lai s\u0101ktu m\u016bsu SCSS failu atpaz\u012b\u0161anu. L\u016bk, mans priek\u0161likums:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">\"skripti\": {\n    \"lint:scss\": \"stylelint '**\/*.scss' --syntax scss -f verbose --color\",\n    \"lint:scss:fix\": \"stylelint '**\/*.scss' --syntax scss --fix -f verbose -color\".\n}<\/code><\/pre>\n\n\n\n<p>K\u0101 redzat, es esmu deklar\u0113jis skriptu, kas satur <strong>-fix<\/strong> opcija - \u0161\u012b opcija ir j\u0101izmanto pirms izmai\u0146u ievieto\u0161anas repozitorij\u0101.<\/p>\n\n\n\n<p><strong>Atcerieties, ka ir nepareiza prakse izmantot <em>-fix<\/em> sav\u0101 CI pl\u016bsm\u0101, jo tad kods, ko nododat produkcijai, repozitorij\u0101 netiek pareizi stiliz\u0113ts.<\/strong> T\u0101p\u0113c mums ir nepiecie\u0161ami abi scen\u0101riji.<\/p>\n\n\n\n<p>Izm\u0113\u0123in\u0101sim m\u016bsu linteri, izveidojot failu <em>\/assets\/scss\/styles.scss<\/em> ar noteiktu saturu, piem\u0113ram:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"css\" class=\"language-css\">\u0137ermenis {\n                    fona kr\u0101sa: #fff;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">npm palaist lint:scss<\/code><\/pre>\n\n\n\n<p>Jums konsoles log\u0101 vajadz\u0113tu redz\u0113t kaut ko l\u012bdz\u012bgu \u0161im:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">&gt; stylelint '**\/*.scss' --syntax scss -f verbose --color\n\nassets\/scss\/styles.scss\n\n2:21 \u2716 Sagaid\u0101mais 2 atstarpju ievilkums ievilkums\n\n1 p\u0101rbaud\u012bts avots\n\n~\/Codest\/Projects\/github-workflow-demo\/assets\/scss\/styles.scss\n\nAtrasta 1 probl\u0113ma\n\nnopietn\u012bbas l\u012bmenis \"k\u013c\u016bda\": 1\n\nievilkums: 1\n\nnpm ERR! kods ELIFECYCLE\n\nnpm ERR! errno 2\n\nnpm ERR! github-workflow-demo@1.0.0 lint:scss: `stylelint '**\/*.scss' --syntax scss -f verbose --color`\n\nnpm ERR! Izie\u0161anas statuss 2<\/code><\/pre>\n\n\n\n<p>Tas faktiski noz\u012bm\u0113, ka m\u016bsu linteris darbojas!<\/p>\n\n\n\n<p>Rezult\u0101t\u0101 ir prec\u012bzi par\u0101d\u012bts, kur\u0101 rind\u0101 ir k\u013c\u016bda, un aprakst\u012bta probl\u0113ma, kas j\u0101atrisina. Da\u017eas probl\u0113mas nav nov\u0113r\u0161amas autom\u0101tiski, jo t\u0101m ir nepiecie\u0161ams izstr\u0101d\u0101t\u0101ja l\u0113mums, bet vairum\u0101 gad\u012bjumu jums vienk\u0101r\u0161i ir j\u0101izpilda t\u0101 pati komanda ar <strong>-fix<\/strong> iesp\u0113ja, t\u0101p\u0113c palaid\u012bsim to.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">npm palaist lint:scss:fix<\/code><\/pre>\n\n\n\n<p>Tagad jums vajadz\u0113tu redz\u0113t za\u013cu izvades sign\u0101lu bez atrast\u0101m k\u013c\u016bd\u0101m:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">stylelint '**\/*.scss' --syntax scss --fix -f verbose --color\n\n\n1 p\u0101rbaud\u012bts avots\n\n\/Users\/wojciechbak\/Codest\/Projects\/github-workflow-demo\/assets\/scss\/styles.scss\n\nAtrasts 0 probl\u0113mu<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. ESLint pievieno\u0161ana<\/strong><\/h2>\n\n\n\n<p>\u0160is solis ir gandr\u012bz t\u0101ds pats k\u0101 iepriek\u0161\u0113jais. M\u0113s instal\u0113sim ESLint, defin\u0113sim noklus\u0113juma noteikumu kopumu un deklar\u0113sim divus NPM skriptus - vienu CI, otru - iepriek\u0161\u0113jai izspie\u0161anai. P\u0101rejam cauri \u0161im!<\/p>\n\n\n\n<p>Ja ikdienas darb\u0101 izmantojat NPM, iesp\u0113jams, v\u0113laties instal\u0113t ESLint glob\u0101li. Ja t\u0101 nav, l\u016bdzu, skatiet instal\u0113\u0161anas nor\u0101d\u012bjumus sada\u013c\u0101 <a href=\"https:\/\/eslint.org\/docs\/user-guide\/getting-started\">ofici\u0101lie dokumenti<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">npm install -g eslint<\/code><\/pre>\n\n\n\n<p>Kad j\u016bsu dator\u0101 ir pieejama komanda eslint, vienk\u0101r\u0161i palaidiet to sav\u0101 projekt\u0101:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">eslint --init<\/code><\/pre>\n\n\n\n<p>Iev\u0113rojot t\u0101l\u0101k\u0101s instrukcijas, kas par\u0101d\u0101s termin\u0101l\u012b, vienk\u0101r\u0161i pie\u0146emiet da\u017eus projekta l\u0113mumus, piem\u0113ram:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Javascript vai <a href=\"https:\/\/thecodest.co\/lv\/dictionary\/typescript-developer\/\">TypeScript<\/a><\/li>\n\n\n\n<li>Airbnb vai Google stil\u0101<\/li>\n\n\n\n<li>konfigur\u0101cijas tips (JSON fails, JS fails vai inline in <em>package.json<\/em>)<\/li>\n\n\n\n<li>ES modu\u013ci (<em>imports\/eksports<\/em>) vai <em>piepras\u012bt<\/em> sintakse<\/li>\n<\/ul>\n\n\n\n<p>\u0160aj\u0101 viet\u0101 ir v\u0113rts uzrakst\u012bt da\u017eus v\u0101rdus par koda format\u0113t\u0101ju ar nosaukumu Prettier. Tas ir piln\u012bb\u0101 standartiz\u0113ts un sader\u012bgs ar liel\u0101ko da\u013cu koda redaktoru (piem\u0113ram, VS Code). Prettier nodro\u0161ina daudzus iepriek\u0161 defin\u0113tu koda stiliz\u0113\u0161anas noteikumu kopumus, sadarbojas ar linteriem un var b\u016bt lielisks pal\u012bgs, lai pan\u0101ktu augst\u0101ko koda kvalit\u0101ti. Lai saprastu, kas \u012bsti ir Prettier, apmekl\u0113jiet \u0161o <a href=\"https:\/\/prettier.io\/docs\/en\/comparison.html\">sal\u012bdzin\u0101jums<\/a> no ofici\u0101lajiem dokumentiem.<\/p>\n\n\n\n<p>Ja tas ir izdar\u012bts, ESlint konfigur\u0101cijas fails (piem. <em>.eslintrc.json<\/em>, (atkar\u012bb\u0101 no t\u0101, ko esat izv\u0113l\u0113jies iepriek\u0161) vajadz\u0113tu par\u0101d\u012bties j\u016bsu saknes direktorij\u0101, kaut kur blakus <em>.stylelintrc.json<\/em> izveidots pirms tam.<\/p>\n\n\n\n<p>Tagad mums ir j\u0101defin\u0113 skripti <em>package.json<\/em> failu, t\u0101pat k\u0101 SCSS failiem:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">\"skripti\": {\n    \"lint:js\": \"eslint '**\/*.js' --ignore-pattern node_modules\/\",\n    \"lint:js:fix\": \"eslint '**\/*.js' --ignore-pattern node_modules\/ --fix\".\n}<\/code><\/pre>\n\n\n\n<p>Apsveicam! ESLint ir gatavs lieto\u0161anai jau tagad. P\u0101rbaud\u012bsim, vai tas darbojas pareizi. Izveidot <em>\/src\/index.js<\/em> failu ar noteiktu saturu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">console.log(\"kaut kas\");<\/code><\/pre>\n\n\n\n<p>Palaist linteri:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">npm palaist lint:js<\/code><\/pre>\n\n\n\n<p><code><br><\/code>Izvades rezult\u0101tam vajadz\u0113tu izskat\u012bties \u0161\u0101di:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">&gt; eslint '**\/*.js' --ignore-pattern node_modules\/\n\n~\/Codest\/Projects\/github-workflow-demo\/src\/index.js\n\n1:1 br\u012bdin\u0101jums Negaid\u012bts konsoles pazi\u0146ojums no-console\n\n\u2716 1 probl\u0113ma (0 k\u013c\u016bdu, 1 br\u012bdin\u0101jums)<\/code><\/pre>\n\n\n\n<p>\u0160is br\u012bdin\u0101jums nepazud\u012bs p\u0113c <em>-fix<\/em> iesp\u0113ja, jo <strong>linteri neietekm\u0113 potenci\u0101li noz\u012bm\u012bgu kodu. Tie ir paredz\u0113ti tikai koda stiliz\u0101cijai<\/strong>, tostarp balt\u0101s atstarpes, jaun\u0101s rindkopas, semikoloni, p\u0113di\u0146as u. c.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. GitHub darba pl\u016bsmu defin\u0113\u0161ana<\/strong><\/h2>\n\n\n\n<p><a href=\"https:\/\/help.github.com\/en\/actions\/configuring-and-managing-workflows\/configuring-a-workflow\">GitHub darbpl\u016bsmas<\/a> ir diezgan labi dokument\u0113ta lieta. J\u016btieties br\u012bvi, lai iedzi\u013cin\u0101tos \u0161aj\u0101 jaut\u0101jum\u0101, bet pagaid\u0101m es ievies\u012b\u0161u vienk\u0101r\u0161u darbpl\u016bsmu, lai m\u016bsu kodu p\u0113c ievieto\u0161anas att\u0101lin\u0101taj\u0101 repozitorij\u0101 (protams, izvietot\u0101 GitHub vietn\u0113) at\u0161ifr\u0113tu.<\/p>\n\n\n\n<p>Izveidot <em>\/.github\/workflows<\/em> direktoriju un jaunu <em>code-quality-workflow.yml<\/em> failu, jo GitHub darbpl\u016bsmas ir j\u0101defin\u0113 ar YAML failiem.<\/p>\n\n\n\n<p>Lai pareizi darbin\u0101tu darbpl\u016bsmu, mums ir j\u0101atbild uz da\u017eiem jaut\u0101jumiem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kad m\u0113s v\u0113lamies palaist m\u016bsu darbpl\u016bsmu (pie push, pie pull piepras\u012bjuma, pie apvieno\u0161anas utt.)?<\/li>\n\n\n\n<li>Vai m\u0113s v\u0113lamies izsl\u0113gt da\u017eas situ\u0101cijas (piem\u0113ram, push to branch master)?<\/li>\n\n\n\n<li>K\u0101da vide mums ir j\u0101iestata, lai pareizi palaistu m\u016bsu komandas (\u0161aj\u0101 piem\u0113r\u0101 - Node)?<\/li>\n\n\n\n<li>Vai mums ir j\u0101instal\u0113 atkar\u012bbas? Ja j\u0101, tad k\u0101 mums to vajadz\u0113tu ievietot ke\u0161atmi\u0146\u0101?<\/li>\n\n\n\n<li>K\u0101di pas\u0101kumi mums j\u0101veic, lai pabeigtu p\u0101rbaudi?<\/li>\n<\/ul>\n\n\n\n<p>P\u0113c da\u017eiem apsv\u0113rumiem un da\u017eu stundu darba ar docs piem\u0113ru <em>.yml<\/em> fails var izskat\u012bties \u0161\u0101di:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">nosaukums: Kods kvalit\u0101te\n\non: 'push\n\ndarba vietas:\n  code-quality:\n    nosaukums: Lint source code\n    runs-on: ubuntu-latest\n    so\u013ci:\n    - izmanto: actions\/checkout@v1\n\n    - nosaukums: Setup Node\n      izmanto: actions\/setup-node@v1\n      ar:\n        nod-version: '12.1'\n\n    - nosaukums: Cache dependencies\n      izmanto: actions\/cache@v1\n      with:\n        ce\u013c\u0161: .\/node_modules\n        atsl\u0113ga: $((( runner.OS ))-dependencies-$((( hashFiles('<strong>**\/package-lock.json')<\/strong> ))\n        restore-keys: |\n          $(( runner.OS ))-atkar\u012bbas-$(( env.cache-name ))-\n          $(( runner.OS ))- atkar\u012bbas-\n          $(( runner.OS ))- $(( runner.OS ))-\n\n    - nosaukums: instal\u0113t atkar\u012bbas\n      palaist: |\n        npm install\n\n    - nosaukums: Lint faili\n      palaist: |\n        npm palaist lint<\/code><\/pre>\n\n\n\n<p>GitHub nodro\u0161ina visu mums nepiecie\u0161amo vides saturu. P\u0113d\u0113j\u0101 rind\u0101 m\u0113s izpild\u0101m komandu <strong><em>npm palaist lint<\/em><\/strong> kas iepriek\u0161 nebija defin\u0113ts:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">\"skripti\": {\n    \"lint\": \"npm run lint:js &amp;&amp; npm run lint:scss\".\n}<\/code><\/pre>\n\n\n\n<p>\u0145emiet v\u0113r\u0101, ka m\u016bsu darbpl\u016bsm\u0101 es neizmantoju <strong>:fix<\/strong> komandas.<\/p>\n\n\n\n<p>Kad visas \u0161\u012bs darb\u012bbas ir paveiktas, varat izbaud\u012bt \u0161o skaisto rezult\u0101tu no GitHub pirms Pull piepras\u012bjuma apvieno\u0161anas: <img decoding=\"async\" src=\"https:\/\/camo.githubusercontent.com\/ec82df2be0b1977d857d5f5c1d2d893010fc44a4\/68747470733a2f2f692e696d6775722e636f6d2f425848465370372e706e67\" alt=\"\"> <img decoding=\"async\" src=\"https:\/\/camo.githubusercontent.com\/00e93d296b7bf5b089c7b785ecc1cbd18de54ead\/68747470733a2f2f696d6775722e636f6d2f6f63736e6762362e706e67\" alt=\"\"><\/p>","protected":false},"excerpt":{"rendered":"<p>Koda kvalit\u0101te ir b\u016btiska izstr\u0101des procesa da\u013ca, jo \u012bpa\u0161i, ja v\u0113laties str\u0101d\u0101t efekt\u012bvi un ilgtermi\u0146\u0101. Past\u0101v daudzas pieejas un paraugprakses, tostarp visa veida veikl\u0101s metodolo\u0123ijas, bet liel\u0101k\u0101 da\u013ca no t\u0101m attiecas uz k\u0101du lielu uz\u0146\u0113muma projektu, ko \u012bsteno vismaz 6 cilv\u0113ki.<\/p>","protected":false},"author":2,"featured_media":3525,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3524","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Quality first! 5 easy steps to lint your code with GitHub workflows in JavaScript project - The Codest<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/lv\/emuars\/kvalitate-pirmie-5-vienkarsi-soli-lai-javascript-projekta-izlidzinatu-kodu-ar-github-darbplusmam\/\" \/>\n<meta property=\"og:locale\" content=\"lv_LV\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Quality first! 5 easy steps to lint your code with GitHub workflows in JavaScript project\" \/>\n<meta property=\"og:description\" content=\"Code quality is a crucial part of the development process, especially when you want to work efficiently in a long-term manner. There are many approaches and best practices, including whole agile methodologies stuff, but most of them relate to some big, enterprise project conducted by at least 6 people.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/lv\/emuars\/kvalitate-pirmie-5-vienkarsi-soli-lai-javascript-projekta-izlidzinatu-kodu-ar-github-darbplusmam\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2019-04-14T08:51:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-24T11:32:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/cover-image-137.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 min\u016btes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"Quality first! 5 easy steps to lint your code with GitHub workflows in JavaScript project\",\"datePublished\":\"2019-04-14T08:51:00+00:00\",\"dateModified\":\"2026-04-24T11:32:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\\\/\"},\"wordCount\":1187,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/cover-image-137.jpg\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"lv-LV\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\\\/\",\"name\":\"Quality first! 5 easy steps to lint your code with GitHub workflows in JavaScript project - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/cover-image-137.jpg\",\"datePublished\":\"2019-04-14T08:51:00+00:00\",\"dateModified\":\"2026-04-24T11:32:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\\\/#breadcrumb\"},\"inLanguage\":\"lv-LV\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"lv-LV\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/cover-image-137.jpg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/cover-image-137.jpg\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Quality first! 5 easy steps to lint your code with GitHub workflows in JavaScript project\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"lv-LV\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lv-LV\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lv-LV\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/lv\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kvalit\u0101te ir pirmaj\u0101 viet\u0101! 5 vienk\u0101r\u0161i so\u013ci, lai uzlabotu kodu ar GitHub darbpl\u016bsm\u0101m JavaScript projekt\u0101 - The Codest","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thecodest.co\/lv\/emuars\/kvalitate-pirmie-5-vienkarsi-soli-lai-javascript-projekta-izlidzinatu-kodu-ar-github-darbplusmam\/","og_locale":"lv_LV","og_type":"article","og_title":"Quality first! 5 easy steps to lint your code with GitHub workflows in JavaScript project","og_description":"Code quality is a crucial part of the development process, especially when you want to work efficiently in a long-term manner. There are many approaches and best practices, including whole agile methodologies stuff, but most of them relate to some big, enterprise project conducted by at least 6 people.","og_url":"https:\/\/thecodest.co\/lv\/emuars\/kvalitate-pirmie-5-vienkarsi-soli-lai-javascript-projekta-izlidzinatu-kodu-ar-github-darbplusmam\/","og_site_name":"The Codest","article_published_time":"2019-04-14T08:51:00+00:00","article_modified_time":"2026-04-24T11:32:09+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/cover-image-137.jpg","type":"image\/jpeg"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"6 min\u016btes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"Quality first! 5 easy steps to lint your code with GitHub workflows in JavaScript project","datePublished":"2019-04-14T08:51:00+00:00","dateModified":"2026-04-24T11:32:09+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/"},"wordCount":1187,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/cover-image-137.jpg","articleSection":["Software Development"],"inLanguage":"lv-LV","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/","url":"https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/","name":"Kvalit\u0101te ir pirmaj\u0101 viet\u0101! 5 vienk\u0101r\u0161i so\u013ci, lai uzlabotu kodu ar GitHub darbpl\u016bsm\u0101m JavaScript projekt\u0101 - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/cover-image-137.jpg","datePublished":"2019-04-14T08:51:00+00:00","dateModified":"2026-04-24T11:32:09+00:00","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/#breadcrumb"},"inLanguage":"lv-LV","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/"]}]},{"@type":"ImageObject","inLanguage":"lv-LV","@id":"https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/cover-image-137.jpg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/cover-image-137.jpg","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"Quality first! 5 easy steps to lint your code with GitHub workflows in JavaScript project"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"lv-LV"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"lv-LV","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"lv-LV","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/lv\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts\/3524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/comments?post=3524"}],"version-history":[{"count":9,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts\/3524\/revisions"}],"predecessor-version":[{"id":8622,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts\/3524\/revisions\/8622"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/media\/3525"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/media?parent=3524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/categories?post=3524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/tags?post=3524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}