์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

์ง€์†์  ํ†ตํ•ฉ(CI)

์ง€์†์  ํ†ตํ•ฉ(CI)์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ†ตํ•ฉํ•˜๊ณ  ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ํ•„์ˆ˜์ ์ธ ์ธก๋ฉด์ž…๋‹ˆ๋‹ค. CI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋ฌธ์ œ๋ฅผ ์กฐ๊ธฐ์— ์ž์ฃผ ๋ฐœ๊ฒฌํ•˜์—ฌ ๊ณ ํ’ˆ์งˆ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Ultralytics ์—์„œ๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ํ’ˆ์งˆ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ CI ํ…Œ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

CI ์•ก์…˜

๋‹ค์Œ์€ CI ํ™œ๋™์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค:

  • CI: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ, ๋ฆฐํŒ… ๊ฒ€์‚ฌ, ๋•Œ๋กœ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋”ฐ๋ผ ๋” ํฌ๊ด„์ ์ธ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋ณธ CI ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.
  • Docker ๋ฐฐํฌ: ์ด ํ…Œ์ŠคํŠธ๋Š” Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ๋ฐฐํฌ๋ฅผ ํ™•์ธํ•˜์—ฌ DockerํŒŒ์ผ ๋ฐ ๊ด€๋ จ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋Š์–ด์ง„ ๋งํฌ: ์ด ํ…Œ์ŠคํŠธ๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ markdown ๋˜๋Š” HTML ํŒŒ์ผ์— ๋Š์–ด์ง€๊ฑฐ๋‚˜ ์ฃฝ์€ ๋งํฌ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • CodeQL: CodeQL์€ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์˜๋ฏธ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ž ์žฌ์ ์ธ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์ฐพ์•„๋‚ด๊ณ  ๊ณ ํ’ˆ์งˆ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” GitHub์˜ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
  • PyPI ๊ฒŒ์‹œ: ์ด ํ…Œ์ŠคํŠธ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ํŒจํ‚ค์ง•ํ•˜๊ณ  ์˜ค๋ฅ˜ ์—†์ด PyPi์— ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

CI ๊ฒฐ๊ณผ

์•„๋ž˜๋Š” ์ฃผ์š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ด๋Ÿฌํ•œ CI ํ…Œ์ŠคํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ‘œ์ž…๋‹ˆ๋‹ค:

๋ฆฌํฌ์ง€ํ† ๋ฆฌ CI ๋„์ปค ๋ฐฐํฌ ๋Š์–ด์ง„ ๋งํฌ CodeQL PyPI ๋ฐ ๋ฌธ์„œ ๊ฒŒ์‹œ
yolov3 YOLOv3 CI Docker ์ด๋ฏธ์ง€ ๊ฒŒ์‹œ ๋Š์–ด์ง„ ๋งํฌ ํ™•์ธ CodeQL
yolov5 YOLOv5 CI Docker ์ด๋ฏธ์ง€ ๊ฒŒ์‹œ ๋Š์–ด์ง„ ๋งํฌ ํ™•์ธ CodeQL
ultralytics ultralytics CI Docker ์ด๋ฏธ์ง€ ๊ฒŒ์‹œ ๋Š์–ด์ง„ ๋งํฌ ํ™•์ธ CodeQL PyPI์— ๊ฒŒ์‹œ ๋ฐ ๋ฌธ์„œ ๋ฐฐํฌ
hub-sdk HUB-SDK CI ๋Š์–ด์ง„ ๋งํฌ ํ™•์ธ CodeQL PyPI์— ๊ฒŒ์‹œ
ํ—ˆ๋ธŒ HUB CI ๋Š์–ด์ง„ ๋งํฌ ํ™•์ธ
mkdocs Ultralytics ์ž‘์—… CodeQL PyPI์— ๊ฒŒ์‹œ
thop Ultralytics ์ž‘์—… CodeQL PyPI์— ๊ฒŒ์‹œ
์ž‘์—… Ultralytics ์ž‘์—… CodeQL PyPI์— ๊ฒŒ์‹œ
๋ฌธ์„œ Ultralytics ์ž‘์—… ๋Š์–ด์ง„ ๋งํฌ ํ™•์ธ๋„๋ฉ”์ธ ํ™•์ธ ํŽ˜์ด์ง€ ๋นŒ๋“œ ๋ฐฐํฌ
ํ•ธ๋“œ๋ถ Ultralytics ์ž‘์—… ๋Š์–ด์ง„ ๋งํฌ ํ™•์ธ ํŽ˜์ด์ง€ ๋นŒ๋“œ ๋ฐฐํฌ

๊ฐ ๋ฐฐ์ง€์—๋Š” ํ•ด๋‹น CI ํ…Œ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ์‹คํ–‰ ์ƒํƒœ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. main ๋ธŒ๋žœ์น˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•˜๋ฉด ๋ฐฐ์ง€์— '์‹คํŒจ' ์ƒํƒœ๊ฐ€ ํ‘œ์‹œ๋˜๊ณ , ํ†ต๊ณผํ•˜๋ฉด 'ํ•ฉ๊ฒฉ' ์ƒํƒœ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ํ•ด๋‹น ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ GitHub ์ด์Šˆ๋ฅผ ํ†ตํ•ด ๋ณด๊ณ ํ•ด ์ฃผ์‹œ๋ฉด ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„ฑ๊ณต์ ์ธ CI ํ…Œ์ŠคํŠธ๊ฐ€ ๋ชจ๋“  ๊ฒƒ์ด ์™„๋ฒฝํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „์— ํ•ญ์ƒ ์ฝ”๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๊ฒ€ํ† ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์ ์šฉ ๋ฒ”์œ„

์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋น„์œจ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”ํŠธ๋ฆญ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž˜ ์‹คํ–‰ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ๋น„์œจ์ด ๋†’์„์ˆ˜๋ก ๋ฒ„๊ทธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ๊ฒฐํ•จ์˜ ๋ถ€์žฌ๋ฅผ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ง€ ์ฝ”๋“œ์˜ ์–ด๋Š ๋ถ€๋ถ„์ด ํ…Œ์ŠคํŠธ์— ์˜ํ•ด ์‹คํ–‰๋˜์—ˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

codecov.io์™€ ํ†ตํ•ฉ

Ultralytics ์—์„œ ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ์ธก์ •ํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ธ๊ธฐ ์žˆ๋Š” ์˜จ๋ผ์ธ ํ”Œ๋žซํผ์ธ codecov.io์™€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. Codecov๋Š” ์ž์„ธํ•œ ์ธ์‚ฌ์ดํŠธ, ์ปค๋ฐ‹ ๊ฐ„์˜ ์ปค๋ฒ„๋ฆฌ์ง€ ๋น„๊ต, ์ฝ”๋“œ์— ์ง์ ‘ ์‹œ๊ฐ์  ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์–ด๋–ค ์ค„์ด ์ปค๋ฒ„๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

์ฝ”๋ฐ์ฝ”๋ธŒ์™€์˜ ํ†ตํ•ฉ์„ ํ†ตํ•ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•œ ์˜์—ญ์— ์ง‘์ค‘ํ•˜์—ฌ ์ฝ”๋“œ์˜ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๊ณ  ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

์ปค๋ฒ„๋ฆฌ์ง€ ๊ฒฐ๊ณผ

์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ์ƒํƒœ๋ฅผ ๋น ๋ฅด๊ฒŒ ํŒŒ์•…ํ•˜๋ ค๋ฉด ultralytics python ํŒจํ‚ค์ง€์—๋Š” ๋ฐฐ์ง€์™€ ์„ ๋ฒ„์ŠคํŠธ ๋น„์ฃผ์–ผ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ultralytics ์ปค๋ฒ„๋ฆฌ์ง€ ๊ฒฐ๊ณผ. ์ด ์ด๋ฏธ์ง€๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์ปค๋ฒ„ํ•˜๋Š” ์ฝ”๋“œ์˜ ๋น„์œจ์„ ๋ณด์—ฌ ์ฃผ๋ฉฐ, ํ…Œ์ŠคํŠธ ๋…ธ๋ ฅ์„ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€ํ‘œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”. https://codecov.io/github/ultralytics/ultralytics.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ฝ”๋“œ ์ ์šฉ ๋ฒ”์œ„
ultralytics ์ฝ”๋ฐ์ฝ”๋ธŒ

์•„๋ž˜ ํ•ด๋ฐ”๋ผ๊ธฐ ๊ทธ๋ž˜ํ”ฝ์—์„œ ๊ฐ€์žฅ ์•ˆ์ชฝ ์›์€ ์ „์ฒด ํ”„๋กœ์ ํŠธ์ด๊ณ , ๊ฐ€์šด๋ฐ์—์„œ ๋ฉ€์–ด์งˆ์ˆ˜๋ก ํด๋”, ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‹จ์ผ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๊ฐ ์Šฌ๋ผ์ด์Šค์˜ ํฌ๊ธฐ์™€ ์ƒ‰์ƒ์€ ๊ฐ๊ฐ ๋ช…๋ น๋ฌธ์˜ ์ˆ˜์™€ ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Ultralytics ์ฝ”๋ฑ ์ด๋ฏธ์ง€

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Ultralytics ์—์„œ ์ง€์†์  ํ†ตํ•ฉ(CI)์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

Ultralytics ์˜ ์ง€์†์  ํ†ตํ•ฉ(CI)์€ ๊ณ ํ’ˆ์งˆ ํ‘œ์ค€์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž๋™์œผ๋กœ ํ†ตํ•ฉํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ €ํฌ์˜ CI ์„ค์ •์—๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰ , ๋ฆฐํŒ… ๊ฒ€์‚ฌ, ์ข…ํ•ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, Docker ๋ฐฐํฌ, ๊นจ์ง„ ๋งํฌ ๊ฒ€์‚ฌ, ๋ณด์•ˆ ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ CodeQL ๋ถ„์„, ์†Œํ”„ํŠธ์›จ์–ด ํŒจํ‚ค์ง• ๋ฐ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ PyPI ํผ๋ธ”๋ฆฌ์‹ฑ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Ultralytics ๋Š” ํŠน์ • CI ์ž‘์—…์„ ์‚ฌ์šฉํ•˜์—ฌ markdown ๋ฐ HTML ํŒŒ์ผ ๋‚ด์—์„œ ๋Š์–ด์ง„ ๋งํฌ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฃฝ์€ ๋งํฌ๋‚˜ ๋Š์–ด์ง„ ๋งํฌ๋ฅผ ์Šค์บ”ํ•˜๊ณ  ์‹๋ณ„ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ญ์ƒ ์ •ํ™•ํ•œ ๋ผ์ด๋ธŒ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ์œผ๋กœ์จ ๋ฌธ์„œ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

CodeQL ๋ถ„์„์ด Ultralytics' ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ค‘์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

CodeQL ๋ถ„์„์€ ์‹œ๋งจํ‹ฑ ์ฝ”๋“œ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ž ์žฌ์ ์ธ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์ฐพ์•„๋‚ด๊ณ  ๊ณ ํ’ˆ์งˆ ํ‘œ์ค€์„ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Ultralytics ์— ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. CodeQL์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ์œ„ํ—˜์„ ์‚ฌ์ „์— ์‹๋ณ„ํ•˜๊ณ  ์™„ํ™”ํ•˜์—ฌ ๊ฐ•๋ ฅํ•˜๊ณ  ์•ˆ์ „ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ultralytics ๋ฐฐํฌ์— Docker๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋‚˜์š”?

Ultralytics ๋Š” ์ „์šฉ CI ์ž‘์—…์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ๋ฅผ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด Docker๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด DockerํŒŒ์ผ๊ณผ ๊ด€๋ จ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์•ˆ์ •์ ์ธ AI ์†”๋ฃจ์…˜์— ํ•„์ˆ˜์ ์ธ ์ผ๊ด€๋˜๊ณ  ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ultralytics ์—์„œ ์ž๋™ํ™”๋œ PyPI ํผ๋ธ”๋ฆฌ์‹ฑ์˜ ์—ญํ• ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์ž๋™ํ™”๋œ PyPI ๊ฒŒ์‹œ๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์˜ค๋ฅ˜ ์—†์ด ํŒจํ‚ค์ง•ํ•˜๊ณ  ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋Š” Ultralytics' Python ํŒจํ‚ค์ง€๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ด๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ Python ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค(PyPI)๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

Ultralytics ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ์ธก์ •ํ•˜๋ฉฐ ์™œ ์ค‘์š”ํ•œ๊ฐ€์š”?

Ultralytics ๋Š” Codecov์™€ ํ†ตํ•ฉํ•˜์—ฌ ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ์ธก์ •ํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์ค‘์— ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ์–ผ๋งˆ๋‚˜ ์‹คํ–‰๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€ ๋†’์œผ๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ์ž˜๋œ ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šด ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์€ ์˜์—ญ์„ ๋ฐœ๊ฒฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ๋ฉ”ํŠธ๋ฆญ์€ ์ฃผ์š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ํ‘œ์‹œ๋˜๋Š” ๋ฐฐ์ง€ ๋˜๋Š” Codecov์—์„œ ์ง์ ‘ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“…1 ๋…„ ์ „ ์ƒ์„ฑ๋จ โœ๏ธ 1๊ฐœ์›” ์ „ ์—…๋ฐ์ดํŠธ๋จ

๋Œ“๊ธ€