{"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":"kvaliteediga-esimene-5-lihtsat-sammu-et-oma-koodi-githubi-toovoogude-abil-javascript-projektis-lintida","status":"publish","type":"post","link":"https:\/\/thecodest.co\/et\/blog\/quality-first-5-easy-steps-to-lint-your-code-with-github-workflows-in-javascript-project\/","title":{"rendered":"Kvaliteet k\u00f5igepealt! 5 lihtsat sammu oma koodi lintimiseks GitHubi t\u00f6\u00f6voogude abil JavaScript projektis"},"content":{"rendered":"<p>Mida me peaksime tegema, kui <a href=\"https:\/\/thecodest.co\/et\/dictionary\/why-do-projects-fail\/\">projekt<\/a> on v\u00e4ike v\u00f5i ei tea klient ikka veel, kas tasub rohkem investeerida? Ilmselt on <strong><a href=\"https:\/\/thecodest.co\/blog\/product-building-with-mvp-why-is-this-worth-implementing\/\">Projekti MVP etapp<\/a><\/strong>, <a href=\"https:\/\/thecodest.co\/et\/dictionary\/what-is-code-refactoring\/\">kood<\/a> stiili- v\u00f5i \u00fchiktestid ei ole esmat\u00e4htis. Investorid tahavad tavaliselt head <a href=\"https:\/\/thecodest.co\/et\/dictionary\/how-to-make-product\/\">toode<\/a> ja kuule - kui see t\u00f6\u00f6tab, siis ei ole vaja katsetada, eks ole?<\/p>\n\n\n\n<p>Tegelikult on mul m\u00f5ningaid kogemusi <strong><a href=\"https:\/\/thecodest.co\/contact\">rakenduste loomine nullist<\/a><\/strong>, isegi ilma parimate tavade kasutamiseta. M\u00f5ned \u00e4rilised asjaolud sundisid mind otsima kompromissi investori eelarveplaanide ja arendaja \"nice-to-have\" nimekirja vahel. \u00d5nneks, kui kasutate GitHubi, saab enamiku koodi kvaliteediga seotud tavap\u00e4rastest probleemidest lahendada m\u00f5ne minutiga.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Selles artiklis n\u00e4itan teile, kuidas kasutada GitHubi t\u00f6\u00f6vooge Node.js keskkonnas oma koodibaasi standardiseerimiseks.<\/strong><\/h2>\n\n\n\n<p>M\u00f5ned eeldused enne alustamist:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Te olete tuttav NPM-i ja Linuxi konsooliga.<\/li>\n\n\n\n<li>Teil on m\u00f5ningane kogemus stiilipreprotsessorite, moodulite laadijate, bundlerite jne kasutamisega.<\/li>\n\n\n\n<li>Te teate, milleks on linterid ja tahate neid oma projektides t\u00f5esti kasutada.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. T\u00fc\u00fcpiline JavaScript projekti struktuur<\/strong><\/h2>\n\n\n\n<p>Kui te olete kunagi kasutanud m\u00f5nda <a href=\"https:\/\/thecodest.co\/et\/blog\/javascript-tools-in-action\/\">JS<\/a> raamistikud nagu <a href=\"https:\/\/thecodest.co\/et\/blog\/hire-vue-js-developers\/\">Vue<\/a> v\u00f5i <a href=\"https:\/\/thecodest.co\/et\/blog\/conditional-component-visibility-in-react\/\">React<\/a>, v\u00f5ite h\u00f5lpsasti m\u00e4rgata m\u00f5ningaid \u00fchiseid asju nende vahel, nt:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>\/src<\/em> kataloogi kogu teie JS-loogika ja komponentidega,<\/li>\n\n\n\n<li><em>\/test<\/em> kataloogi \u00fcksuse ja e2e testide jaoks,<\/li>\n\n\n\n<li><em>\/varad<\/em> kataloogi stiilide, piltide jne jaoks.<\/li>\n<\/ul>\n\n\n\n<p>Isegi kui me r\u00e4\u00e4gime <a href=\"https:\/\/thecodest.co\/et\/blog\/hire-javascript-developer\/\">JavaScript<\/a> projekt, me t\u00f6\u00f6tame <a href=\"https:\/\/thecodest.co\/et\/dictionary\/what-is-node-js-used-for\/\">S\u00f5lme<\/a> keskkonda, nii et ilmselt peaks olema ka m\u00f5ned Node'i asjad nagu <em>package.json<\/em>, <em>package-lock.json<\/em> ja <em>\/node_modules<\/em> kataloogi meie juurkataloogis.<\/p>\n\n\n\n<p>K\u00f5ik need asjad on oma koha peal - seda me nimetame <strong>konventsioon<\/strong>. Raamistikud on leiutatud selleks, et pakkuda m\u00f5ningaid m\u00f5istlikke konventsioone, nii et tavaliselt ei ole meil vaja isegi hoolida esialgsest disainimustrist. Kuna selles n\u00e4ites tahan selgitada m\u00f5ningaid l\u00e4henemisviise, ei hakka ma rakendama mingeid valmis lahendusi nagu Vue CLI.<\/p>\n\n\n\n<p><strong>Aeg on aru saada, mis peitub k\u00f5igi nende maagiliste lintide all!<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. T\u00fc\u00fcpilise Node projekti laiendamine<\/strong><\/h2>\n\n\n\n<p>Kvaliteetsete lahenduste pakkumiseks on linterid esimene asi, millest me peaksime uue projekti loomisel alustama. Keskendume kahele linterile - Stylelint stiilide jaoks (<em>*.scss<\/em>) ja ESLint l\u00e4htefailide jaoks (<em>*.js<\/em>). M\u00f5lemad linterid on saadaval NPM-is ja neid on \u00fcsna lihtne konfigureerida. Linterite kasutamine n\u00f5uab paigaldusprotsessi l\u00e4bimist, konfigfailide lisamist ja projekti skriptide m\u00e4\u00e4ratlemist. Teeme seda samm-sammult.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Stylelindi lisamine<\/strong><\/h2>\n\n\n\n<p>Stylelint'i paigaldamine Node'i keskkonda on v\u00e4ga lihtne. Vastavalt <a href=\"https:\/\/stylelint.io\/user-guide\/get-started\">ametlikud dokumendid<\/a>, peate lihtsalt jooksma:<\/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>ja oodake, kuni see on valmis.<\/p>\n\n\n\n<p><em>stylelint-config-standard<\/em> pakub vaikimisi lintingu reegleid ja selle v\u00f5ib asendada mis tahes paketiga, mis sobib teie vajadustele paremini (nt. <a href=\"https:\/\/www.npmjs.com\/package\/stylelint-config-airbnb\">Airbnb stiilis<\/a>). Seej\u00e4rel looge uus peidetud fail <em>.stylelintrc.json<\/em>, mis on Stylelint'i konfiguratsioonifail, mis vastutab meie eelnevalt m\u00e4\u00e4ratletud reeglite laadimise eest:<\/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>Praegu on ainus puuduv asi m\u00f5ni NPM skript (v\u00f5i skriptid), mis on deklareeritud package.json failis, et alustada meie SCSS-failide lintingut. Siin on minu ettepanek:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">\"skriptid\": {\n    \"lint:scss\": scss' --syntax scss -f verbose --color\": \"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>Nagu n\u00e4ete, olen deklareerinud skripti, mis sisaldab <strong>-fix<\/strong> valik - seda tuleb kasutada enne muudatuste saatmist repositooriumi.<\/p>\n\n\n\n<p><strong>Pidage meeles - on halb tava kasutada <em>-fix<\/em> teie CI-voolus, sest siis ei ole kood, mille te tootmisse edastate, repositooriumis \u00f5igesti kujundatud.<\/strong> Seep\u00e4rast ongi meil vaja m\u00f5lemat skripti.<\/p>\n\n\n\n<p>Testime oma linterit, luues faili <em>\/assets\/scss\/styles.scss<\/em> mingi sisuga, nagu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"css\" class=\"language-css\">body {\n                    background-color: #fff;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">npm run lint:scss<\/code><\/pre>\n\n\n\n<p>Teie konsoolis peaks olema n\u00e4ha midagi sellist:<\/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 Oodatud taandumine 2 t\u00fchikut taandumine\n\n1 allikas kontrollitud\n\n~\/Codest\/Projektid\/github-workflow-demo\/assets\/scss\/styles.scss\n\n1 probleem leitud\n\nraskusaste \"error\": 1\n\ntaandumine: 1\n\nnpm ERR! kood 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! V\u00e4ljalangemise staatus 2<\/code><\/pre>\n\n\n\n<p>See t\u00e4hendab tegelikult, et meie linter t\u00f6\u00f6tab!<\/p>\n\n\n\n<p>V\u00e4ljund n\u00e4itab t\u00e4pselt, milline rida p\u00f5hjustab vea ja kirjeldab probleemi lahendamist. M\u00f5ned probleemid ei ole automaatselt parandatavad, sest need vajavad arendaja otsust, kuid enamikul juhtudel tuleb lihtsalt k\u00e4ivitada sama k\u00e4sk koos j\u00e4rgmisega <strong>-fix<\/strong> v\u00f5imalus, nii et k\u00e4ivitame selle.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">npm run lint:scss:fix<\/code><\/pre>\n\n\n\n<p>N\u00fc\u00fcd peaksite n\u00e4gema rohelist v\u00e4ljundit, kus vigu ei ole leitud:<\/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 kontrollitud allikas\n\n\/Users\/wojciechbak\/Codest\/Projektid\/github-workflow-demo\/assets\/scss\/styles.scss\n\n0 leitud probleemi<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. ESLint lisamine<\/strong><\/h2>\n\n\n\n<p>See samm on peaaegu sama, mis eelmine. Installeerime ESLint'i, defineerime m\u00f5ned vaikimisi reeglid ja deklareerime kaks kutsutavat NPM skripti - \u00fche CI jaoks ja \u00fche pre-push'i jaoks. K\u00e4ime selle l\u00e4bi!<\/p>\n\n\n\n<p>Kui kasutate NPM-i oma igap\u00e4evat\u00f6\u00f6s, siis v\u00f5ib-olla soovite ESLint'i globaalselt paigaldada. Kui te seda ei tee, vaadake palun paigaldusjuhiseid dokumendis <a href=\"https:\/\/eslint.org\/docs\/user-guide\/getting-started\">ametlikud dokumendid<\/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>Kui eslint k\u00e4sk on teie masinas saadaval, k\u00e4ivitage see lihtsalt oma projektis:<\/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>J\u00e4rgides edasisi juhiseid, mis kuvatakse teie terminalis, tehke lihtsalt m\u00f5ned projektiotsused, nagu:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Javascript v\u00f5i <a href=\"https:\/\/thecodest.co\/et\/dictionary\/typescript-developer\/\">TypeScript<\/a><\/li>\n\n\n\n<li>Airbnb stiilis v\u00f5i Google'i stiilis<\/li>\n\n\n\n<li>konfiguratsioonit\u00fc\u00fcp (JSON-fail, JS-fail v\u00f5i inline in <em>package.json<\/em>)<\/li>\n\n\n\n<li>ES-moodulid (<em>import\/eksport<\/em>) v\u00f5i <em>n\u00f5uda<\/em> s\u00fcntaks<\/li>\n<\/ul>\n\n\n\n<p>Siinkohal tasub kirjutada paar s\u00f5na koodi vormindajast nimega Prettier. See on t\u00e4ielikult standardiseeritud ja \u00fchildub enamiku koodiredaktoritega (nt VS Code). Prettier pakub palju eeldefineeritud koodi kujundamise reegleid, teeb koost\u00f6\u00f6d linteritega ja v\u00f5ib olla suureks toeks koodi tippkvaliteedi tagaajamisel. Selleks, et m\u00f5ista, mis Prettier t\u00e4pselt on, k\u00fclastage seda. <a href=\"https:\/\/prettier.io\/docs\/en\/comparison.html\">v\u00f5rdlus<\/a> ametlikest dokumentidest.<\/p>\n\n\n\n<p>Kui see on tehtud, siis ESlint config faili (nt. <em>.eslintrc.json<\/em>, s\u00f5ltuvalt sellest, mida te varem valisite) peaks ilmuma teie juurkataloogi, kusagil k\u00f5rval oleva <em>.stylelintrc.json<\/em> loodud enne.<\/p>\n\n\n\n<p>N\u00fc\u00fcd peame defineerima skriptid <em>package.json<\/em> faili, nagu SCSS-failide puhul:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">\"skriptid\": {\n    \"lint:js\": *.js' --ignore-pattern node_modules\/\": \"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>Palju \u00f5nne! ESLint on kohe kasutusvalmis. Kontrollime, kas see t\u00f6\u00f6tab \u00f5igesti. Looge <em>\/src\/index.js<\/em> faili mingi sisuga:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">console.log(\"midagi\");<\/code><\/pre>\n\n\n\n<p>K\u00e4ivita linter:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">npm run lint:js<\/code><\/pre>\n\n\n\n<p><code><br><\/code>V\u00e4ljund peaks v\u00e4lja n\u00e4gema selline:<\/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\/Projektid\/github-workflow-demo\/src\/index.js\n\n1:1 hoiatus Ootamatu konsooli avaldis no-console\n\n\u2716 1 probleem (0 viga, 1 hoiatus)<\/code><\/pre>\n\n\n\n<p>See hoiatus ei kao p\u00e4rast kasutamist <em>-fix<\/em> v\u00f5imalus, sest <strong>linterid ei m\u00f5juta potentsiaalselt m\u00f5ttekat koodi. Need on ainult koodi kujundamiseks.<\/strong>, sealhulgas t\u00fchikud, read, semikoolonid, jutum\u00e4rgid jne.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. GitHubi t\u00f6\u00f6voogude m\u00e4\u00e4ratlemine<\/strong><\/h2>\n\n\n\n<p><a href=\"https:\/\/help.github.com\/en\/actions\/configuring-and-managing-workflows\/configuring-a-workflow\">GitHubi t\u00f6\u00f6vood<\/a> on \u00fcsna h\u00e4sti dokumenteeritud asi. V\u00f5ite vabalt s\u00fcveneda sellesse, kuid praegu rakendan ma lihtsa t\u00f6\u00f6voo, et meie koodi p\u00e4rast push'i kaugrepositooriumi (ilmselt GitHubis majutatud) lint'ile viia.<\/p>\n\n\n\n<p>Loo <em>\/.github\/workflows<\/em> kataloogi ja uue <em>code-quality-workflow.yml<\/em> faili, kuna GitHubi t\u00f6\u00f6vood tuleb defineerida YAML-failide abil.<\/p>\n\n\n\n<p>Korraliku t\u00f6\u00f6voo k\u00e4ivitamiseks peame vastama m\u00f5nele k\u00fcsimusele:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Millal me tahame oma t\u00f6\u00f6voogu k\u00e4ivitada (push, pull request, merge jne)?<\/li>\n\n\n\n<li>Kas me tahame v\u00e4listada m\u00f5ned olukorrad (n\u00e4iteks push to branch master)?<\/li>\n\n\n\n<li>Millise keskkonna me peame seadistama, et meie k\u00e4ske \u00f5igesti k\u00e4ivitada (antud n\u00e4ites - Node)?<\/li>\n\n\n\n<li>Kas meil on vaja paigaldada s\u00f5ltuvusi? Kui jah, siis kuidas peaksime seda vahem\u00e4llu salvestama?<\/li>\n\n\n\n<li>Milliseid samme peame kontrolli l\u00f5puleviimiseks tegema?<\/li>\n<\/ul>\n\n\n\n<p>P\u00e4rast m\u00f5ningaid kaalutlusi ja paar tundi t\u00f6\u00f6d dokumentidega n\u00e4iteks <em>.yml<\/em> fail v\u00f5ib v\u00e4lja n\u00e4ha selline:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"yaml\" class=\"language-yaml\">nimi: Koodikvaliteet\n\non: 'push'\n\nt\u00f6\u00f6d:\n  koodikvaliteet:\n    name: Lint source code\n    t\u00f6\u00f6tab: ubuntu-latest\n    sammud:\n    - kasutab: actions\/checkout@v1\n\n    - nimi: Setup Node\n      kasutab: actions\/setup-node@v1\n      with:\n        node-version: '12.1'\n\n    - name: Cache dependencies\n      kasutab: actions\/cache@v1\n      with:\n        path: .\/node_modules\n        key: $(( runner.OS ))-dependencies-$(( hashFiles('<strong>**\/package-lock.json')<\/strong> ))\n        restore-keys: |\n          $(( runner.OS ))-dependencies-$(( env.cache-name ))-\n          $(( runner.OS ))-dependencies-\n          $(( runner.OS ))-\n\n    - name: Paigaldada s\u00f5ltuvused\n      run: |\n        npm install\n\n    - nimi: Lint-failid\n      run: |\n        npm run lint<\/code><\/pre>\n\n\n\n<p>GitHub pakub k\u00f5iki vajalikke keskkonnaalaseid asju. Viimases reas k\u00e4ivitame k\u00e4su <strong><em>npm run lint<\/em><\/strong> mida varem ei olnud m\u00e4\u00e4ratletud:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">\"skriptid\": {\n    \"lint\": \"npm run lint:js &amp;&amp; npm run lint:scss\"\n}<\/code><\/pre>\n\n\n\n<p>Pange t\u00e4hele, et meie t\u00f6\u00f6voos ma ei kasuta <strong>:fix<\/strong> k\u00e4sud.<\/p>\n\n\n\n<p>Kui k\u00f5ik need sammud on tehtud, saate nautida seda ilusat v\u00e4ljundit GitHubist enne Pull Request'i \u00fchendamist: <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>Koodikvaliteet on arendusprotsessi oluline osa, eriti kui soovite t\u00f6\u00f6tada t\u00f5husalt ja pikaajaliselt. On palju l\u00e4henemisviise ja parimaid tavasid, sealhulgas kogu agiilsete metoodikate v\u00e4rk, kuid enamik neist on seotud m\u00f5ne suure, v\u00e4hemalt 6 inimese poolt l\u00e4biviidava ettev\u00f5tte projektiga.<\/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\/et\/blogi\/kvaliteediga-esimene-5-lihtsat-sammu-et-oma-koodi-githubi-toovoogude-abil-javascript-projektis-lintida\/\" \/>\n<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/blogi\/kvaliteediga-esimene-5-lihtsat-sammu-et-oma-koodi-githubi-toovoogude-abil-javascript-projektis-lintida\/\" \/>\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 minutit\" \/>\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\":\"et\",\"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\":\"et\",\"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\":\"et\",\"@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\":\"et\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"et\",\"@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\":\"et\",\"@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\\\/et\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kvaliteet k\u00f5igepealt! 5 lihtsat sammu, kuidas oma koodi GitHubi t\u00f6\u00f6voogude abil JavaScript projektis lintida - 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\/et\/blogi\/kvaliteediga-esimene-5-lihtsat-sammu-et-oma-koodi-githubi-toovoogude-abil-javascript-projektis-lintida\/","og_locale":"et_EE","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\/et\/blogi\/kvaliteediga-esimene-5-lihtsat-sammu-et-oma-koodi-githubi-toovoogude-abil-javascript-projektis-lintida\/","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 minutit"},"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":"et","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":"Kvaliteet k\u00f5igepealt! 5 lihtsat sammu, kuidas oma koodi GitHubi t\u00f6\u00f6voogude abil JavaScript projektis lintida - 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":"et","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":"et","@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":"et"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"et","@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":"et","@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\/et\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/posts\/3524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/comments?post=3524"}],"version-history":[{"count":9,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/posts\/3524\/revisions"}],"predecessor-version":[{"id":8622,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/posts\/3524\/revisions\/8622"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/media\/3525"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/media?parent=3524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/categories?post=3524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/et\/wp-json\/wp\/v2\/tags?post=3524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}