{"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":"kokybe-pirmieji-5-paprasti-zingsniai-kaip-javascript-projekte-su-github-darbo-eigomis-perbraizyti-koda","status":"publish","type":"post","link":"https:\/\/thecodest.co\/lt\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/","title":{"rendered":"Pirmiausia kokyb\u0117! 5 paprasti \u017eingsniai, kaip JavaScript projekte perbrai\u017eyti kod\u0105 naudojant \"GitHub\" darbo eig\u0105"},"content":{"rendered":"<p>K\u0105 tur\u0117tume daryti, kai <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/why-do-projects-fail\/\">projektas<\/a> yra ma\u017eas arba klientas vis dar ne\u017eino, ar verta investuoti daugiau? Akivaizdu, kad <strong><a href=\"https:\/\/thecodest.co\/blog\/product-building-with-mvp-why-is-this-worth-implementing\/\">Projekto MVP etapas<\/a><\/strong>, <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/what-is-code-refactoring\/\">kodas<\/a> stilius ar vienetiniai testai n\u0117ra svarbiausias prioritetas. Investuotojai paprastai nori tur\u0117ti ger\u0105 <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/how-to-make-product\/\">produktas<\/a> ir c'mon - jei jis veikia, jo nereikia testuoti, ar ne?<\/p>\n\n\n\n<p>Ties\u0105 sakant, turiu patirties <strong><a href=\"https:\/\/thecodest.co\/contact\">program\u0117li\u0173 k\u016brimas nuo nulio<\/a><\/strong>, net ir nenaudojant geriausios praktikos. Kai kurios verslo aplinkyb\u0117s privert\u0117 mane ie\u0161koti kompromiso tarp investuotojo biud\u017eeto plan\u0173 ir k\u016br\u0117jo \u201egra\u017ei\u0173\u201d dalyk\u0173 s\u0105ra\u0161o. Laimei, jei naudojat\u0117s \"GitHub\", daugum\u0105 da\u017eniausiai pasitaikan\u010di\u0173 su kodo kokybe susijusi\u0173 problem\u0173 galima i\u0161spr\u0119sti per kelias minutes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>\u0160iame straipsnyje parodysiu, kaip Node.js aplinkoje naudoti \"GitHub\" darbo eig\u0105 ir standartizuoti savo kod\u0173 baz\u0119.<\/strong><\/h2>\n\n\n\n<p>Kelios prielaidos prie\u0161 pradedant:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Esate susipa\u017ein\u0119s su NPM ir \"Linux\" konsole.<\/li>\n\n\n\n<li>Turite patirties su stiliaus preprocesoriais, moduli\u0173 \u012fkrovikliais, paketais ir kt.<\/li>\n\n\n\n<li>\u017dinote, kam skirti linteriai, ir tikrai norite juos naudoti savo projektuose.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. Tipin\u0117 JavaScript projekto strukt\u016bra<\/strong><\/h2>\n\n\n\n<p>Jei kada nors naudojote <a href=\"https:\/\/thecodest.co\/lt\/blog\/javascript-tools-in-action\/\">JS<\/a> sistemos, pvz. <a href=\"https:\/\/thecodest.co\/lt\/blog\/hire-vue-js-developers\/\">Vue<\/a> arba <a href=\"https:\/\/thecodest.co\/lt\/blog\/conditional-component-visibility-in-react\/\">React<\/a>, nesunkiai pasteb\u0117site kai kuriuos bendrus dalykus, pvz:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>\/src<\/em> katalog\u0105 su visa j\u016bs\u0173 JS logika ir komponentais,<\/li>\n\n\n\n<li><em>\/testas<\/em> katalogas, skirtas vienetiniams ir e2e testams,<\/li>\n\n\n\n<li><em>\/turtas<\/em> katalogas, kuriame yra stili\u0173, paveiksl\u0117li\u0173 ir kt.<\/li>\n<\/ul>\n\n\n\n<p>Net jei kalbame apie <a href=\"https:\/\/thecodest.co\/lt\/blog\/hire-javascript-developer\/\">JavaScript<\/a> projekt\u0105, mes dirbame <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/what-is-node-js-used-for\/\">Mazgas<\/a> aplinka, tod\u0117l akivaizdu, kad taip pat tur\u0117t\u0173 b\u016bti kai kurie \"Node\" dalykai, pvz. <em>package.json<\/em>, <em>package-lock.json<\/em> ir <em>\/node_modules<\/em> katalog\u0105 m\u016bs\u0173 \u0161akniniame kataloge.<\/p>\n\n\n\n<p>Visi \u0161ie dalykai yra savo vietose - tai vadiname <strong>konvencija<\/strong>. Karkasai yra sukurti tam, kad b\u016bt\u0173 numatytos tam tikros pagr\u012fstos konvencijos, tod\u0117l paprastai mums net nereikia r\u016bpintis pradiniu projektavimo \u0161ablonu. Kadangi \u0161iame pavyzdyje noriu paai\u0161kinti kai kuriuos metodus, netaikysiu joki\u0173 gatav\u0173 sprendim\u0173, pavyzd\u017eiui, Vue CLI.<\/p>\n\n\n\n<p><strong>Laikas suprasti, kas slypi po visais \u0161iais stebuklingais lint scenarijais!<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Tipinio \"Node\" projekto i\u0161pl\u0117timas<\/strong><\/h2>\n\n\n\n<p>Norint pateikti auk\u0161tos kokyb\u0117s sprendimus, kuriant nauj\u0105 projekt\u0105 pirmiausia reik\u0117t\u0173 prad\u0117ti nuo linteri\u0173. Sutelkime d\u0117mes\u012f \u012f du linterius - stili\u0173 linter\u012f Stylelint (<em>*.scss<\/em>) ir \"ESLint\" \u0161altinio failams (<em>*.js<\/em>). Abu \u0161ie linteriai yra prieinami NPM ir juos gana lengva konfig\u016bruoti. Naudojant linters reikia pereiti diegimo proces\u0105, prid\u0117ti konfig\u016bracijos failus ir apibr\u0117\u017eti projekto scenarijus. Atlikime tai \u017eingsnis po \u017eingsnio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Stiliaus \"Stylelint\" prid\u0117jimas<\/strong><\/h2>\n\n\n\n<p>\u012ediegti \"Stylelint\" \"Node\" aplinkoje labai paprasta. Pagal <a href=\"https:\/\/stylelint.io\/user-guide\/get-started\">oficial\u016bs dokumentai<\/a>, jums tereikia paleisti:<\/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>ir palaukite, kol jis bus baigtas.<\/p>\n\n\n\n<p><em>stylelint-config-standard<\/em> pateikia numatytuosius tinklinimo taisykli\u0173 rinkinius ir gali b\u016bti pakeistas bet kuriuo paketu, kuris geriau atitinka j\u016bs\u0173 poreikius (pvz. <a href=\"https:\/\/www.npmjs.com\/package\/stylelint-config-airbnb\">Airbnb stilius<\/a>). Tada sukurkite nauj\u0105 pasl\u0117pt\u0105 fail\u0105 <em>.stylelintrc.json<\/em>, kuris yra \"Stylelint\" konfig\u016bracijos failas, atsakingas u\u017e i\u0161 anksto nustatyt\u0173 taisykli\u0173 \u012fk\u0117lim\u0105:<\/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>Dabar tr\u016bksta tik vieno dalyko - paketo.json faile deklaruoto NPM scenarijaus (arba scenarij\u0173), kad b\u016bt\u0173 galima prad\u0117ti lintinguoti SCSS failus. \u0160tai mano pasi\u016blymas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">\"scenarijai\": {\n    \"lint:scss\": \"stylelint '**\/*.scss' --syntax scss -f verbose --color\",\n    \"lint:scss:fix\": \"stylelint '**\/*.scss' --syntax scss --fix -f verbose -color\": \"stylelint '**\/*.scss' --syntax scss --fix -f verbose -color\"\n}<\/code><\/pre>\n\n\n\n<p>Kaip matote, deklaravau scenarij\u0173, kuriame yra <strong>-fiksas<\/strong> parinkt\u012f - j\u0105 reikia naudoti prie\u0161 perkeliant pakeitimus \u012f saugykl\u0105.<\/p>\n\n\n\n<p><strong>Atminkite, kad bloga praktika yra naudoti <em>-fiksas<\/em> CI sraute, nes tada kodas, kur\u012f perduodate \u012f gamyb\u0105, saugykloje n\u0117ra tinkamai stilizuojamas.<\/strong> Tod\u0117l mums reikia abiej\u0173 scenarij\u0173.<\/p>\n\n\n\n<p>I\u0161bandykime savo linter\u012f sukurdami fail\u0105 <em>\/assets\/scss\/styles.scss<\/em> su tam tikru turiniu, pvz:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"css\" class=\"language-css\">k\u016bnas {\n                    fono spalva: #fff;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">npm paleisti lint:scss<\/code><\/pre>\n\n\n\n<p>Konsol\u0117je tur\u0117tum\u0117te matyti \u0161tai tok\u012f vaizd\u0105:<\/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 Laukiama 2 tarp\u0173 \u012ftraukos \u012ftraukos\n\nPatikrintas 1 \u0161altinis\n\n~\/Codest\/Projects\/github-workflow-demo\/assets\/scss\/styles.scss\n\nRasta 1 problema\n\nsunkumo lygis \"klaida\": 1\n\n\u012estri\u017eain\u0117: 1\n\nnpm ERR! kodas 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! I\u0161\u0117jimo b\u016bsena 2<\/code><\/pre>\n\n\n\n<p>Tai i\u0161 tikr\u0173j\u0173 rei\u0161kia, kad m\u016bs\u0173 linteris veikia!<\/p>\n\n\n\n<p>I\u0161vestyje tiksliai parodoma, kurioje eilut\u0117je \u012fvyko klaida, ir apra\u0161oma problema, kuri\u0105 reikia i\u0161spr\u0119sti. Kai kuri\u0173 problem\u0173 negalima i\u0161spr\u0119sti automati\u0161kai, nes reikia k\u016br\u0117jo sprendimo, ta\u010diau daugeliu atvej\u0173 tereikia paleisti t\u0105 pa\u010di\u0105 komand\u0105 su <strong>-fiksas<\/strong> parinkt\u012f, tod\u0117l paleiskime j\u0105.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">npm paleisti lint:scss:fix<\/code><\/pre>\n\n\n\n<p>Dabar tur\u0117tum\u0117te matyti \u017eali\u0105 i\u0161vest\u012f be rast\u0173 klaid\u0173:<\/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\nPatikrintas 1 \u0161altinis\n\n\/Users\/wojciechbak\/Codest\/Projects\/github-workflow-demo\/assets\/scss\/styles.scss\n\nRasta 0 problem\u0173<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. ESLint prid\u0117jimas<\/strong><\/h2>\n\n\n\n<p>\u0160is \u017eingsnis yra beveik toks pat kaip ir ankstesnis. \u012ediegsime \"ESLint\", apibr\u0117\u0161ime numatyt\u0105j\u012f taisykli\u0173 rinkin\u012f ir deklaruosime du NPM skriptus - vien\u0105 CI, kit\u0105 \"pre-push\". Pereikime per tai!<\/p>\n\n\n\n<p>Jei kasdieniame darbe naudojate NPM, galb\u016bt nor\u0117tum\u0117te \u012fdiegti \"ESLint\" visame pasaulyje. Jei ne, per\u017ei\u016br\u0117kite diegimo instrukcijas <a href=\"https:\/\/eslint.org\/docs\/user-guide\/getting-started\">oficial\u016bs dokumentai<\/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>Kai j\u016bs\u0173 kompiuteryje yra eslint komanda, tiesiog paleiskite j\u0105 savo projekte:<\/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>Laikydamiesi tolesni\u0173 terminale rodom\u0173 instrukcij\u0173, tiesiog priimkite kelis projekto sprendimus, pvz:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Javascript arba <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/typescript-developer\/\">TypeScript<\/a><\/li>\n\n\n\n<li>\"Airbnb\" ar \"Google\" stilius<\/li>\n\n\n\n<li>konfig\u016bracijos tip\u0105 (JSON failas, JS failas arba eilut\u0117je <em>package.json<\/em>)<\/li>\n\n\n\n<li>ES moduliai (<em>importas\/eksportas<\/em>) arba <em>reikalauti<\/em> sintaks\u0117<\/li>\n<\/ul>\n\n\n\n<p>\u0160ioje vietoje verta para\u0161yti kelet\u0105 \u017eod\u017ei\u0173 apie kodo formatavimo priemon\u0119 Prettier. Jis visi\u0161kai standartizuotas ir suderinamas su daugeliu kodo redaktori\u0173 (pvz., VS Code). Prettier pateikia daugyb\u0119 i\u0161 anksto nustatyt\u0173 kodo stilizavimo taisykli\u0173 rinkini\u0173, bendradarbiauja su linteriais ir gali b\u016bti puiki pagalba siekiant auk\u0161\u010diausios kodo kokyb\u0117s. Nor\u0117dami suprasti, kas tiksliai yra Prettier, apsilankykite \u0161ioje svetain\u0117je <a href=\"https:\/\/prettier.io\/docs\/en\/comparison.html\">palyginimas<\/a> i\u0161 oficiali\u0173 dokument\u0173.<\/p>\n\n\n\n<p>Jei tai padaryta, ESlint konfig\u016bracijos failas (pvz. <em>.eslintrc.json<\/em>, (priklausomai nuo to, k\u0105 pasirinkote anks\u010diau), tur\u0117t\u0173 atsirasti j\u016bs\u0173 \u0161akniniame kataloge, kur nors \u0161alia <em>.stylelintrc.json<\/em> sukurta anks\u010diau.<\/p>\n\n\n\n<p>Dabar turime apibr\u0117\u017eti scenarijus <em>package.json<\/em> fail\u0105, kaip ir SCSS failus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">\"scenarijai\": {\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>Sveikiname! \"ESLint\" jau galima naudoti. Patikrinkime, ar ji veikia teisingai. Sukurti <em>\/src\/index.js<\/em> fail\u0105 su tam tikru turiniu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">console.log(\"ka\u017ekas\");<\/code><\/pre>\n\n\n\n<p>Paleiskite linter\u012f:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">npm paleisti lint:js<\/code><\/pre>\n\n\n\n<p><code><br><\/code>I\u0161vestis tur\u0117t\u0173 atrodyti taip:<\/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 \u012fsp\u0117jimas Netik\u0117tas konsol\u0117s teiginys no-console\n\n\u2716 1 problema (0 klaid\u0173, 1 \u012fsp\u0117jimas)<\/code><\/pre>\n\n\n\n<p>\u0160is \u012fsp\u0117jimas nei\u0161nyks, jei naudosite <em>-fiksas<\/em> parinkt\u012f, nes <strong>linteriai neturi \u012ftakos potencialiai reik\u0161mingam kodui. Jie skirti tik kodo stilizacijai<\/strong>, \u012fskaitant baltuosius tarpus, nauj\u0105sias eilutes, kabutes, kabliata\u0161kius, kabutes ir t. t.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. \"GitHub\" darbo eigos apibr\u0117\u017eimas<\/strong><\/h2>\n\n\n\n<p><a href=\"https:\/\/help.github.com\/en\/actions\/configuring-and-managing-workflows\/configuring-a-workflow\">\"GitHub\" darbo eigos<\/a> yra gana gerai dokumentuotas dalykas. Kvie\u010diame gilintis \u012f tai, bet kol kas \u012fgyvendinsiu paprast\u0105 darbo eig\u0105, skirt\u0105 m\u016bs\u0173 kodui po i\u0161siuntimo \u012f nuotolin\u0119 saugykl\u0105 (ai\u0161ku, talpinam\u0105 GitHub).<\/p>\n\n\n\n<p>Sukurti <em>\/.github\/workflows<\/em> katalog\u0105 ir nauj\u0105 <em>code-quality-workflow.yml<\/em> fail\u0105, nes \"GitHub\" darbo eigos turi b\u016bti apibr\u0117\u017etos naudojant YAML failus.<\/p>\n\n\n\n<p>Nor\u0117dami paleisti tinkam\u0105 darbo eig\u0105, turime atsakyti \u012f kelet\u0105 klausim\u0173:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kada norime paleisti savo darbo eig\u0105 (siun\u010diant, i\u0161traukiant u\u017eklaus\u0105, sujungiant ir t. t.)?<\/li>\n\n\n\n<li>Ar norime i\u0161skirti kai kuriuos atvejus (pvz., perk\u0117lim\u0105 \u012f pagrindin\u0119 \u0161ak\u0105)?<\/li>\n\n\n\n<li>Koki\u0105 aplink\u0105 turime nustatyti, kad teisingai paleistume komandas (\u0161iame pavyzdyje - \"Node\")?<\/li>\n\n\n\n<li>Ar reikia \u012fdiegti priklausomybes? Jei taip, kaip tur\u0117tume tai padaryti?<\/li>\n\n\n\n<li>Kokius veiksmus turime atlikti, kad u\u017ebaigtume patikrinim\u0105?<\/li>\n<\/ul>\n\n\n\n<p>Po tam tikr\u0173 svarstym\u0173 ir keli\u0173 valand\u0173 darbo su dokumentais pavyzdys <em>.yml<\/em> failas gali atrodyti taip:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">pavadinimas: Kodas kokyb\u0117\n\non: 'push\n\ndarbo vietos:\n  code-quality:\n    vardas: Lint source code\n    runs-on: ubuntu-latest\n    steps:\n    - Naudoja: actions\/checkout@v1\n\n    - pavadinimas: Setup Node\n      uses: actions\/setup-node@v1\n      su:\n        node-version: '12.1'\n\n    - pavadinimas: Cache dependencies\n      uses: actions\/cache@v1\n      with:\n        su: kelias: .\/node_modules\n        raktas: $((( runner.OS ))-dependencies-$((( hashFiles('<strong>**\/package-lock.json')<\/strong> ))\n        restore-keys: |\n          $(( runner.OS ))-priklausomyb\u0117s-$(( env.cache-name ))-\n          $(( runner.OS ))-priklausomyb\u0117s-\n          $(( runner.OS ))-\n\n    - pavadinimas: \u012ediegti priklausomybes\n      paleisti: |\n        npm install\n\n    - vardas: Lint failai\n      paleisti: |\n        npm run lint<\/code><\/pre>\n\n\n\n<p>\"GitHub\" teikia vis\u0105 mums reikaling\u0105 aplinkos med\u017eiag\u0105. Paskutin\u0117je eilut\u0117je paleid\u017eiame komand\u0105 <strong><em>npm paleisti lint<\/em><\/strong> kuris anks\u010diau nebuvo apibr\u0117\u017etas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">\"scenarijai\": {\n    \"lint\": \"npm run lint:js &amp;&amp; npm run lint:scss\"\n}<\/code><\/pre>\n\n\n\n<p>Atkreipkite d\u0117mes\u012f, kad m\u016bs\u0173 darbo eigoje nenaudoju <strong>:fix<\/strong> komand\u0173.<\/p>\n\n\n\n<p>Atlik\u0119 visus \u0161iuos veiksmus, prie\u0161 suliedami savo \"Pull Request\" u\u017eklaus\u0105 gal\u0117site m\u0117gautis \u0161ia gra\u017eia \"GitHub\" i\u0161vestimi: <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>Kodo kokyb\u0117 yra labai svarbi k\u016brimo proceso dalis, ypa\u010d kai norite efektyviai dirbti ilg\u0105 laik\u0105. Yra daugyb\u0117 metod\u0173 ir geriausios praktikos pavyzd\u017ei\u0173, \u012fskaitant visas judri\u0105sias metodikas, ta\u010diau dauguma j\u0173 susij\u0119 su dideliu \u012fmon\u0117s projektu, kur\u012f vykdo ma\u017eiausiai 6 \u017emon\u0117s.<\/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\/lt\/tinklarastis\/kokybe-pirmieji-5-paprasti-zingsniai-kaip-javascript-projekte-su-github-darbo-eigomis-perbraizyti-koda\/\" \/>\n<meta property=\"og:locale\" content=\"lt_LT\" \/>\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\/lt\/tinklarastis\/kokybe-pirmieji-5-paprasti-zingsniai-kaip-javascript-projekte-su-github-darbo-eigomis-perbraizyti-koda\/\" \/>\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 minut\u0117s\" \/>\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\":\"lt-LT\",\"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\":\"lt-LT\",\"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\":\"lt-LT\",\"@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\":\"lt-LT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lt-LT\",\"@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\":\"lt-LT\",\"@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\\\/lt\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Pirmiausia kokyb\u0117! 5 paprasti \u017eingsniai, kaip i\u0161valyti kod\u0105 naudojant \"GitHub\" darbo eig\u0105 JavaScript projekte - 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\/lt\/tinklarastis\/kokybe-pirmieji-5-paprasti-zingsniai-kaip-javascript-projekte-su-github-darbo-eigomis-perbraizyti-koda\/","og_locale":"lt_LT","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\/lt\/tinklarastis\/kokybe-pirmieji-5-paprasti-zingsniai-kaip-javascript-projekte-su-github-darbo-eigomis-perbraizyti-koda\/","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 minut\u0117s"},"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":"lt-LT","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":"Pirmiausia kokyb\u0117! 5 paprasti \u017eingsniai, kaip i\u0161valyti kod\u0105 naudojant \"GitHub\" darbo eig\u0105 JavaScript projekte - 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":"lt-LT","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":"lt-LT","@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":"lt-LT"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"lt-LT","@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":"lt-LT","@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\/lt\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts\/3524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/comments?post=3524"}],"version-history":[{"count":9,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts\/3524\/revisions"}],"predecessor-version":[{"id":8622,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts\/3524\/revisions\/8622"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/media\/3525"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/media?parent=3524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/categories?post=3524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/tags?post=3524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}