Skip to main content

CodeQL ์ž‘์—… ์˜์—ญ ์ •๋ณด

CodeQL ์ž‘์—… ์˜์—ญ์„ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋กœ ์˜์กดํ•˜๋Š” CodeQL ํŒฉ ๊ทธ๋ฃน์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

CodeQL์€(๋Š”) ๋‹ค์Œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์œ ํ˜•์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • GitHub Code Security๋ฅผ ์ง€์›ํ•˜๋Š” ์กฐ์ง ์†Œ์œ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ

CodeQL ์ž‘์—… ์˜์—ญ ์ •๋ณด

์ฐธ๊ณ  ํ•ญ๋ชฉ

์ด ๋ฌธ์„œ์—์„œ๋Š” ์ด GitHub Enterprise Server ๋ฒ„์ „์˜ ์ดˆ๊ธฐ ๋ฆด๋ฆฌ์Šค์— ํฌํ•จ๋œ CodeQL ์ž‘์—…๊ณผ ๊ด€๋ จ CodeQL CLI ๋ฒˆ๋“ค์˜ ๋ฒ„์ „์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ์—์„œ ๋” ์ตœ์‹  ๋ฒ„์ „์˜ CodeQL ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์ตœ์‹  ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ๋ฌธ์„œ์˜GitHub Enterprise Cloud ๋ฒ„์ „์„ ์ฐธ์กฐํ•˜์„ธ์š”. ์ตœ์‹  ๋ฒ„์ „ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์–ดํ”Œ๋ผ์ด์–ธ์Šค์— ๋Œ€ํ•œ ์ฝ”๋“œ ๊ฒ€์‚ฌ ๊ตฌ์„ฑ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์—ฌ๋Ÿฌ CodeQL ํŒฉ์„ ํ•จ๊ป˜ ๊ทธ๋ฃนํ™”ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ CodeQL ์ž‘์—… ์˜์—ญ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. CodeQL ์ž‘์—… ์˜์—ญ์˜ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ƒํ˜ธ ์ข…์†๋œ CodeQL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ์ฟผ๋ฆฌ ํŒฉ ์ง‘ํ•ฉ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. CodeQL์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋Š” CodeQL ํŒฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„์„ ์‚ฌ์šฉ์ž ์ง€์ •์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

CodeQL ์ž‘์—… ์˜์—ญ์˜ ์ฃผ์š” ์ด์ ์€ ์—ฌ๋Ÿฌ CodeQL ํŒฉ์„ ๋” ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. CodeQL ์ž‘์—… ์˜์—ญ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ฟผ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๋Š” CodeQL ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ์ž‘์—… ์˜์—ญ์˜ ๋ชจ๋“  CodeQL ํŒฉ์„ ์„œ๋กœ์— ๋Œ€ํ•œ _์›๋ณธ ์ข…์†์„ฑ_์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ CodeQL ํŒฉ์„ ๋” ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœ, ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ CodeQL ์ž‘์—… ์˜์—ญ๊ณผ CodeQL ํŒฉ์„ ํ•˜๋‚˜์˜ git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด CodeQL ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋” ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

codeql-workspace.yml ํŒŒ์ผ

CodeQL ์ž‘์—… ์˜์—ญ์€ codeql-workspace.yml yaml ํŒŒ์ผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์—๋Š” provide ๋ธ”๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ์„ ํƒ์ ์œผ๋กœ ignore ๋ฐ registries ๋ธ”๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • provide ๋ธ”๋ก์—๋Š” ์ž‘์—… ์˜์—ญ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” CodeQL ํŒฉ์„ ์ •์˜ํ•˜๋Š” GLOB ํŒจํ„ด ๋ชฉ๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ignore ๋ธ”๋ก์—๋Š” ์ž‘์—… ์˜์—ญ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” CodeQL ํŒฉ์„ ์ •์˜ํ•˜๋Š” GLOB ํŒจํ„ด ๋ชฉ๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • registries ๋ธ”๋ก์—๋Š” CodeQL ํŒฉ์„ ๊ฒŒ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์ œ์–ดํ•˜๋Š” GHES URL ๋ฐ ํŒจํ‚ค์ง€ ํŒจํ„ด ๋ชฉ๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ํŒฉ ๊ฒŒ์‹œ ๋ฐ ์‚ฌ์šฉ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

provide ๋˜๋Š” ignore ์„น์…˜์˜ ๊ฐ ํ•ญ๋ชฉ์€ qlpack.yml ํŒŒ์ผ์˜ ์œ„์น˜์— ๋งคํ•‘๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  GLOB ํŒจํ„ด์€ ์ž‘์—… ์˜์—ญ ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์— ํ—ˆ์šฉ๋˜๋Š” ํŒจํ„ด ๋ชฉ๋ก์€ @actions/glob ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ codeql-workspace.yml ํŒŒ์ผ์€ experimental ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒฉ์„ ์ œ์™ธํ•˜๊ณ  codeql-packs ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์žฌ๊ท€์ ์œผ๋กœ ์ฐพ์€ ๋ชจ๋“  CodeQL ํŒฉ์„ ํฌํ•จํ•˜๋Š” ์ž‘์—… ์˜์—ญ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. registries ๋ธ”๋ก์€ GitHub์˜ ๊ธฐ๋ณธ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์ธ https://ghcr.io/v2/์—์„œ codeql/\* ํŒฉ์„ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ํŒฉ์€ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ GHE_HOSTNAME์˜ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๊ฒŒ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

provide:
  - "*/codeql-packs/**/qlpack.yml"
ignore:
  - "*/codeql-packs/**/experimental/**/qlpack.yml"

registries:
 - packages: 'codeql/*'
   url: https://ghcr.io/v2/

 - packages: '*'
   url: https://containers.GHE_HOSTNAME/v2/

codeql-workspace.yml ํŒŒ์ผ์— ์˜ˆ์ƒํ•œ CodeQL ํŒฉ์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ์ž‘์—… ์˜์—ญ๊ณผ ๋™์ผํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ codeql pack ls ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์˜ ๊ฒฐ๊ณผ๋Š” ์ž‘์—… ์˜์—ญ์˜ ๋ชจ๋“  CodeQL ํŒฉ์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

์›๋ณธ ์ข…์†์„ฑ

์›๋ณธ ์ข…์†์„ฑ์€ CodeQL ํŒจํ‚ค์ง€ ์บ์‹œ ์™ธ๋ถ€์˜ ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ํ™•์ธ๋œ CodeQL ํŒฉ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ข…์†์„ฑ์€ ๋™์ผํ•œ CodeQL ์ž‘์—… ์˜์—ญ์— ์žˆ๊ฑฐ๋‚˜ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ --additional-packs ๊ฒฝ๋กœ ์˜ต์…˜์œผ๋กœ ์ง€์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์›๋ณธ ์ข…์†์„ฑ์€ CodeQL ํŒจํ‚ค์ง€ ์บ์‹œ์— ์žˆ๋Š” ๋ชจ๋“  ์ข…์†์„ฑ๊ณผ qlpack.yml์— ์ •์˜๋œ ๋ฒ„์ „ ์ œ์•ฝ ์กฐ๊ฑด์„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ž‘์—… ์˜์—ญ์˜ CodeQL ํŒฉ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ฐธ์กฐ๋Š” ์›๋ณธ ์ข…์†์„ฑ์œผ๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.

์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์‹คํ–‰ ์ค‘์ธ ์ฟผ๋ฆฌ ํŒฉ์˜ ์ข…์†์„ฑ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์•„์ง ๊ฒŒ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์›๋ณธ์—์„œ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ํ•ด๋‹น ํŒฉ์„ ์ฐธ์กฐํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • ์—ฌ๋Ÿฌ ํŒฉ์„ ๋™์‹œ์— ๋ณ€๊ฒฝํ•˜๊ณ  ํ•จ๊ป˜ ํ…Œ์ŠคํŠธํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์›๋ณธ์—์„œ ํ™•์ธํ•˜๋ฉด ํŒฉ์˜ ๋ฒ„์ „์„ ๋ณ€๊ฒฝ ๋‚ด์šฉ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CodeQL ์ž‘์—… ์˜์—ญ ๋ฐ ์ฟผ๋ฆฌ ํ™•์ธ

์ฟผ๋ฆฌ ๋˜๋Š” ํŒฉ์„ ํ™•์ธํ•˜๋Š” CodeQL ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ์ž‘์—… ์˜์—ญ์˜ ๋ชจ๋“  CodeQL ํŒฉ์„ ์„œ๋กœ์— ๋Œ€ํ•œ ์›๋ณธ ์ข…์†์„ฑ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž‘์—… ์˜์—ญ์˜ ํŒฉ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ codeql pack install์„ ์‹คํ–‰ํ•˜๋ฉด ํ•ด๋‹น ์ข…์†์„ฑ์„ ํŒจํ‚ค์ง€ ์บ์‹œ์— ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  codeql-pack.lock.yml ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ์ž‘์—… ์˜์—ญ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ข…์†์„ฑ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ํŒฉ ๋งŒ๋“ค๊ธฐ ๋ฐ ์ž‘์—…์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ codeql pack publish๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CodeQL ์ฟผ๋ฆฌ ํŒฉ์„ GitHub ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๊ฒŒ์‹œํ•˜๋ฉด ๋ช…๋ น์€ ๋กœ์ปฌ ํŒจํ‚ค์ง€ ์บ์‹œ์— ์žˆ๋Š” ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ํ•ญ์ƒ ์ž‘์—… ์˜์—ญ์˜ ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ข…์†์„ฑ์—์„œ ์ฟผ๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๋กœ์ปฌ ๋ณ€๊ฒฝ ๋‚ด์šฉ์ด ํ•ด๋‹น ์ž‘์—… ์˜์—ญ์—์„œ ๊ฒŒ์‹œํ•˜๋Š” ๋ชจ๋“  ์ฟผ๋ฆฌ ํŒฉ์— ์ž๋™์œผ๋กœ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

๋‹ค์Œ codeql-workspace.yml ํŒŒ์ผ์„ ์‚ดํŽด๋ณด์„ธ์š”.

provide:
  - "**/qlpack.yml"

๋‹ค์Œ CodeQL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ qlpack.yml ํŒŒ์ผ์€ ์ž‘์—… ์˜์—ญ์— ์žˆ์Šต๋‹ˆ๋‹ค.

name: my-company/my-library
library: true
version: 1.0.0

๋‹ค์Œ CodeQL ์ฟผ๋ฆฌ ํŒฉ qlpack.yml ํŒŒ์ผ์€ ์ž‘์—… ์˜์—ญ์— ์žˆ์Šต๋‹ˆ๋‹ค.

name: my-company/my-queries
version: 1.0.0
dependencies:
  my-company/my-library: "*"
  codeql/cpp-all: ~0.2.0

CodeQL ์ฟผ๋ฆฌ ํŒฉ์˜ dependencies ๋ธ”๋ก์ธ my-company/my-queries๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ์˜ ๋ฒ„์ „์œผ๋กœ "*"๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ์€ ์ด๋ฏธ codeql-workspace.yml์— ์›๋ณธ ์ข…์†์„ฑ์œผ๋กœ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ์˜ ์ฝ˜ํ…์ธ ๋Š” ํ•ญ์ƒ ์ž‘์—… ์˜์—ญ ๋‚ด์—์„œ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ •์˜ํ•œ ๋ชจ๋“  ๋ฒ„์ „ ์ œ์•ฝ ์กฐ๊ฑด์ด ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „์ด ์ž‘์—… ์˜์—ญ์—์„œ ์ƒ์†๋จ์„ ๋ถ„๋ช…ํžˆ ํ•˜๋ ค๋ฉด ์›๋ณธ ์ข…์†์„ฑ์— "*"๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ํŒฉ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ codeql pack install์„ ์‹คํ–‰ํ•˜๋ฉด ์ ์ ˆํ•œ ๋ฒ„์ „์˜ codeql/cpp-all์ด ๋กœ์ปฌ ํŒจํ‚ค์ง€ ์บ์‹œ์— ๋‹ค์šด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ codeql/cpp-all์˜ ํ™•์ธ๋œ ๋ฒ„์ „์„ ํฌํ•จํ•˜๋Š” codeql-pack.lock.yml ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ž ๊ธˆ ํŒŒ์ผ์€ ์›๋ณธ ์ข…์†์„ฑ์—์„œ ํ™•์ธ๋˜๋ฏ€๋กœ my-company/my-library์˜ ํ•ญ๋ชฉ์ด ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. codeql-pack.lock.yml ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

dependencies:
  codeql/cpp-all:
    version: 0.2.2

์ฟผ๋ฆฌ ํŒฉ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ codeql pack publish๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํŒจํ‚ค์ง€ ์บ์‹œ์˜ codeql/cpp-all ์ข…์†์„ฑ๊ณผ ์ž‘์—… ์˜์—ญ์˜ my-company/my-library๊ฐ€ my-company/my-queries์™€ ํ•จ๊ป˜ ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๊ณ  GitHub ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ง€์ŠคํŠธ๋ฆฌ์— ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค.

qlpack.yml ํŒŒ์ผ์—์„œ ๋ฒ„์ „ ๋ฒ”์œ„๋กœ ${workspace} ์‚ฌ์šฉ

์ž‘์—… ์˜์—ญ์˜ CodeQL ํŒฉ์€ ํŠน์ˆ˜ ${workspace}, ~${workspace} ๋ฐ ^${workspace} ๋ฒ„์ „ ๋ฒ”์œ„ ์ž๋ฆฌ ํ‘œ์‹œ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž๋ฆฌ ํ‘œ์‹œ์ž๋Š” ์ด ํŒฉ์ด ํ˜„์žฌ ์ž‘์—… ์˜์—ญ์— ์žˆ๋Š” ์ง€์ •๋œ ํŒฉ์˜ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด ์ž๋ฆฌ ํ‘œ์‹œ์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ ๋‚ด์˜ ์ข…์†์„ฑ์— ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ฒŒ์‹œ๋  ๋•Œ qlpack.yml ํŒŒ์ผ์˜ ์ข…์†์„ฑ์ด ๊ฒŒ์‹œ๋  ๋‹น์‹œ์˜ ์ž‘์—… ์˜์—ญ ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

๋™์ผํ•œ ์ž‘์—… ์˜์—ญ์— ์žˆ๋Š” ๋‹ค์Œ ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

name: my-company/my-library
library: true
version: 1.2.3
dependencies:
  my-company/my-library2: ${workspace}
name: my-company/my-library2
library: true
version: 4.5.6

my-company/my-library๊ฐ€ GitHub ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๊ฒŒ์‹œ๋˜๋ฉด, ๊ฒŒ์‹œ๋œ qlpack.yml ํŒŒ์ผ์˜ my-company/my-library2 ์ข…์†์„ฑ ๋ฒ„์ „์ด 4.5.6์œผ๋กœ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์†Œ์Šค ํŒฉ์˜ ์ข…์†์„ฑ์ด my-company/my-library2: ^${workspace}์ด๊ณ  ํŒฉ์ด ๊ฒŒ์‹œ๋˜๋ฉด ๊ฒŒ์‹œ๋œ qlpack.yml ํŒŒ์ผ์˜ my-company/my-library2 ์ข…์†์„ฑ ๋ฒ„์ „์€ ^4.5.6์œผ๋กœ ์ž‘์„ฑ๋˜์–ด >= 4.5.6 ๋ฐ < 5.0.0 ๋ฒ„์ „์ด ๋ชจ๋‘ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ๊ณผ ํ˜ธํ™˜๋จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์†Œ์Šค ํŒฉ์˜ ์ข…์†์„ฑ์ด my-company/my-library2: ~${workspace}์ด๊ณ  ํŒฉ์ด ๊ฒŒ์‹œ๋˜๋ฉด ๊ฒŒ์‹œ๋œ qlpack.yml ํŒŒ์ผ์˜ my-company/my-library2 ์ข…์†์„ฑ ๋ฒ„์ „์€ ~4.5.6์œผ๋กœ ์ž‘์„ฑ๋˜์–ด >= 4.5.6 ๋ฐ < 4.6.0 ๋ฒ„์ „์ด ๋ชจ๋‘ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ๊ณผ ํ˜ธํ™˜๋จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.