Skip to content

CodeStates-Engineering/eslint-config-codestates

Repository files navigation

eslint-config-codestates CI

CodeStatesμ—μ„œ μž‘μ„±ν•˜λŠ” 곡톡 린트 κ·œμΉ™ λͺ¨μŒμž…λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ ꡬ쑰

.github
β”œβ”€β”€ workflows
β”‚   └── *.yaml
β”œβ”€β”€ CODEOWNERS
rules (개발자 μ»€μŠ€ν…€ λ£° κ·œμΉ™ λͺ¨μŒ)
β”œβ”€β”€ typescript (νƒ€μž…μŠ€ν¬λ¦½νŠΈ λ£°)
β”‚   └── *.js
β”œβ”€β”€ base.js (eslint κΈ°λ³Έ λ£°)
β”œβ”€β”€ import.js (λͺ¨λ“ˆ import/export κ΄€λ ¨ λ£°)
β”œβ”€β”€ jsx-a11y.js (μ ‘κ·Όμ„± κ΄€λ ¨ λ£°)
β”œβ”€β”€ prettier.js (prettier κ΄€λ ¨ λ£°)
β”œβ”€β”€ promise.js (promise κ΄€λ ¨ λ£°)
β”œβ”€β”€ react-hooks.js (react hooks κ΄€λ ¨ λ£°)
β”œβ”€β”€ react.js (react κ΄€λ ¨ λ£°)
scripts (슀크립트)
β”œβ”€β”€ canary-publish.sh (μΉ΄λ‚˜λ¦¬ 배포 슀크립트)
test (린트 ν…ŒμŠ€νŠΈ λͺ¨μŒ)
└── * (각 ν™˜κ²½λ³„ ν…ŒμŠ€νŠΈ 디렉토리)
    β”œβ”€β”€ .eslintrc
    └── *.{js,ts,tsx}
frontend.js (ν”„λ‘ νŠΈμ—”λ“œ μ „μš© 린트 λͺ¨λ“ˆ)
index.js (린트 λͺ¨λ“ˆ)
prettierrc.js (프리티어 λͺ¨λ“ˆ)
stylelint.js (μŠ€νƒ€μΌλ¦°νŠΈ λͺ¨λ“ˆ)
tsconfig.json

μ„€μΉ˜

.npmrc

  1. ν”„λ‘œμ νŠΈ λ£¨νŠΈμ— .npmrc νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.
  2. μƒμ„±ν•œ νŒŒμΌμ— μ•„λž˜μ™€ 같이 μž…λ ₯ν•©λ‹ˆλ‹€.
//npm.pkg.github.com/:_authToken=${CSE_NPM_TOKEN}
@codestates-engineering:registry=https://npm.pkg.github.com/
  1. 각 νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €λ₯Ό 톡해 μ„€μΉ˜ν•©λ‹ˆλ‹€.

npm

npm install --save-dev @codestates-engineering/eslint-config-codestates

yarn

yarn add -D @codestates-engineering/eslint-config-codestates

μ‚¬μš© 방법

ESLint

  1. μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ νŠΈμ˜ package.json scripts 속성에 μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
{
  "lint": "eslint './src/**/*.{js,ts,tsx}'",
  "lint:fix": "npm run lint -- --fix"
}
  1. ν”„λ‘œμ νŠΈ λ£¨νŠΈμ— .eslintrc νŒŒμΌμ„ λ§Œλ“€κ³  μΆ”κ°€ν•œ 린트 μ˜μ‘΄μ„±μ„ μž‘μ„±ν•©λ‹ˆλ‹€.

λ§Œμ•½ μΆ”κ°€, ν™•μž₯ν•  섀정이 μžˆλ‹€λ©΄ 주석 뢀뢄에 μΆ”κ°€ν•©λ‹ˆλ‹€.

{
  "extends": [
    "@codestates-engineering/eslint-config-codestates"
    // ν™•μž₯ν•  κ·œμΉ™ μž‘μ„±
  ],
  "rules": {
    // μΆ”κ°€ν•  κ·œμΉ™ μž‘μ„±
  }
}

frontend

React 기반의 ν”„λ‘ νŠΈμ—”λ“œ ν”„λ‘œμ νŠΈλΌλ©΄ μ•„λž˜μ™€ 같이 .eslintrc νŒŒμΌμ„ μž‘μ„±ν•©λ‹ˆλ‹€.

{
  "extends": ["@codestates-engineering/eslint-config-codestates/frontend"]
}

Prettier

  1. μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ νŠΈμ˜ package.json scripts 속성에 μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
{
  "prettier": "prettier './src/*.{json,yaml,md,js,ts,tsx}' --check",
  "prettier:fix": "prettier './src/*.{json,yaml,md,js,ts,tsx}' --write"
}
  1. ν”„λ‘œμ νŠΈ λ£¨νŠΈμ— .prettierrc νŒŒμΌμ„ λ§Œλ“€κ³  μΆ”κ°€ν•œ μ˜μ‘΄μ„±μ„ μž‘μ„±ν•©λ‹ˆλ‹€.
'@codestates-engineering/eslint-config-codestates/prettierrc';

Stylelint

  1. μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ νŠΈμ˜ package.json scripts 속성에 μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.
{
  "lint:style": "stylelint './src/**/*.{js,ts,tsx}'",
  "lint:style:fix": "stylelint './src/**/*.{js,ts,tsx}' --fix"
}
  1. ν”„λ‘œμ νŠΈ λ£¨νŠΈμ— .stylelintrc νŒŒμΌμ„ λ§Œλ“€κ³  μΆ”κ°€ν•œ μ˜μ‘΄μ„±μ„ μž‘μ„±ν•©λ‹ˆλ‹€.
{
  "extends": ["@codestates-engineering/eslint-config-codestates/stylelint"]
}

Versioning

Semantic Versioning을 μ‚¬μš©ν•©λ‹ˆλ‹€.

  1. MAJOR 이전 버전과 ν˜Έν™˜λ˜μ§€ μ•Šμ€ λ°©μ‹μœΌλ‘œ μˆ˜μ •λ  경우
  2. MINOR 이전 버전과 ν˜Έν™˜λ˜λŠ” λ°©μ‹μœΌλ‘œ κΈ°λŠ₯을 μΆ”κ°€ν•˜λŠ” 경우
  3. PATCH 이전 버전과 ν˜Έν™˜λ˜λŠ” λ°©μ‹μœΌλ‘œ 버그λ₯Ό μˆ˜μ •ν•  경우

CI/CD

Github Actionsλ₯Ό 톡해 CI/CDλ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

  • 정식 Release와 ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ Canaryκ°€ μžˆμŠ΅λ‹ˆλ‹€.
  • feature/** 브랜치λ₯Ό push ν•˜λ©΄ μžλ™μœΌλ‘œ Canary 배포λ₯Ό μ§„ν–‰ν•©λ‹ˆλ‹€.
  • feature/** λΈŒλžœμΉ˜μ—μ„œ Commit Message μž‘μ„±μ‹œ skip canary λ¬Έμž₯을 ν¬ν•¨μ‹œν‚€λ©΄ Canary 배포λ₯Ό μƒλž΅ν•©λ‹ˆλ‹€.
  • main λΈŒλžœμΉ˜μ— pushν•˜λ©΄ μžλ™μœΌλ‘œ 정식 버전이 λ°°ν¬λ©λ‹ˆλ‹€.

Git Workflow

Git-flowλ₯Ό 기반으둜 μž‘μ—…ν•©λ‹ˆλ‹€.

Branch

  • main: λ°°ν¬κΉŒμ§€ λ§ˆλ¬΄λ¦¬κ°€ 된 μ΅œμ’… μ½”λ“œκ°€ μžˆλŠ” 브랜치
  • develop: main을 κΈ°μ€€μœΌλ‘œ μ΅œμ‹ ν™”λœ λ‹€μŒ 버전을 κ°œλ°œν•  브랜치
  • feature: κΈ°λŠ₯ 개발 브랜치
  • release/**: κΈ°λŠ₯ κ°œλ°œμ„ μ™„λ£Œν•˜κ³  배포할 브랜치

develop

  1. μ΅œμ‹ ν™”λœ develop 브랜치λ₯Ό κΈ°μ€€μœΌλ‘œ feature/** 브랜치λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  2. κΈ°λŠ₯ 개발 및 κ°œλ°œμ— λŒ€ν•œ CHANGELOGλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.
  3. 개발이 μ™„λ£Œλœ feature 브랜치λ₯Ό pushν•©λ‹ˆλ‹€.
  4. target branchλ₯Ό develop 브랜치둜 μ„€μ •ν•˜κ³  PR을 μš”μ²­ν•©λ‹ˆλ‹€.
    • 이 λ•Œ κ°œλ°œν•œ κΈ°λŠ₯에 λŒ€ν•΄μ„œ μžλ™μœΌλ‘œ Canary 배포가 μ‹€ν–‰λ©λ‹ˆλ‹€.
    • λ§Œμ•½, Canary 배포가 ν•„μš”ν•˜μ§€ μ•Šλ‹€λ©΄ 컀밋 λ©”μ‹œμ§€μ— skip canaryλ₯Ό ν¬ν•¨μ‹œν‚΅λ‹ˆλ‹€.
    • 이 λ•Œ Canary 배포의 νšŸμˆ˜λŠ” λͺ‡ λ²ˆμ΄λ“  상관 μ—†μŠ΅λ‹ˆλ‹€.
  5. 배포된 Canary 버전을 톡해 ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ ν›„ λ¬Έμ œκ°€ μ—†κ³  리뷰가 μ™„λ£Œλ˜μ—ˆλ‹€λ©΄ develop λΈŒλžœμΉ˜μ— λ³‘ν•©ν•©λ‹ˆλ‹€.
  6. Local develop 브랜치λ₯Ό μ΅œμ‹ ν™”ν•©λ‹ˆλ‹€.

release/**

  1. κΈ°λŠ₯ 개발이 μ™„λ£Œλœ develop λΈŒλžœμΉ˜κ°€ μ΅œμ‹ ν™” λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
  2. developλΈŒλžœμΉ˜μ—μ„œ 배포할 λ²„μ „μ˜ release/v${배포할_버전} 브랜치λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  3. 배포할 버전에 맞게 버전을 μƒμ„±ν•©λ‹ˆλ‹€.
    • MAJOR npm version major
    • MINOR npm version minor
    • PATCH npm version patch
  4. PR을 μš”μ²­ν•˜κ³  target branchλ₯Ό main 브랜치둜 μ„€μ •ν•©λ‹ˆλ‹€.
  5. CIκ°€ μ§„ν–‰λ˜κ³  이상이 μ—†λ‹€λ©΄ main λΈŒλžœμΉ˜μ— λ³‘ν•©ν•©λ‹ˆλ‹€.
  6. λ³‘ν•©μ‹œ μžλ™μœΌλ‘œ CDκ°€ μ§„ν–‰λ©λ‹ˆλ‹€.
  7. CD μ§„ν–‰ 이후 μžλ™μœΌλ‘œ Release Tagκ°€ μƒμ„±λ˜λ©° μƒμ„±λœ Tag에 배포된 λ²„μ „μ˜ 변경사항을 μž‘μ„±ν•©λ‹ˆλ‹€.
  8. CD 이후 develop 브랜치λ₯Ό μ΅œμ‹ ν™”ν•©λ‹ˆλ‹€.

Trouble shooting

vscode ν™˜κ²½μ—μ„œ 파일 μ €μž₯μ‹œ AutoFixκ°€ λ™μž‘ν•˜μ§€ μ•ŠλŠ” 경우 settings.json에 μ•„λž˜μ˜ μ½”λ“œλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€.

"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
  "source.fixAll.stylelint": true,
  "source.fixAll.eslint": true
},
"stylelint.validate": [
  "css",
  "scss",
  "less",
  "postcss",
  "typescriptreact",
  "typescript",
  "javascript",
  "javascriptreact"
],
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[javascript]": {
  "editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
  "editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascriptreact]": {
  "editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
  "editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
  "editor.defaultFormatter": "esbenp.prettier-vscode"
},

About

πŸ—‚οΈ ESLint, Prettier, Stylelint configuration for CodeStates-Engineering

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •