
π― open source workflowλ₯Ό μμ±νλ λ°©λ²μ μ 리ν©λλ€.
GitHubλ₯Ό νμ©ν μ€ν μμ€ νλ‘μ νΈλ₯Ό μ€μ νκ³ , μ΄λ₯Ό κ΄λ¦¬νλ λ° νμν λ¬Έμμ μλν μμ μ μΆκ°νλ μ€μ΅μ ν©λλ€.
λ¨Όμ GitHubμμ μ€ν μμ€ νλ‘μ νΈλ₯Ό μμνλ €λ©΄, μ μ μ₯μλ₯Ό μμ±ν΄μΌ ν©λλ€. μ΄λ²μ Organizationμ μ΄μ©νμ¬ μλ‘μ΄ μ μ₯μλ₯Ό λ§λ€κ² μ΅λλ€.
New Organization λ²νΌμ ν΄λ¦ν©λλ€.

New Repositoryλ₯Ό ν΄λ¦ν΄ μ μ₯μλ₯Ό μμ±ν©λλ€.
main λΈλμΉλ₯Ό λ³΄νΈ μ€μ ν©λλ€.
main λΈλμΉμ λν Rulesetμ μ§μ νκ³ λ³΄νΈ μ΅μ
μ μ€μ ν©λλ€.

Require a pull request before merging : λ°λμ PRμ ν΅ν΄μλ§ main λΈλμΉμ λ³ν©μ΄ κ°λ₯ν©λλ€.
Dismiss stale pull request approvals when new commits are pushed : PRμ λν μΉμΈμ΄ μλ£λ ν μλ‘μ΄ μ»€λ°μ΄ μΆκ°λλ©΄ κΈ°μ‘΄ μΉμΈμ 무ν¨νν©λλ€.
Require approval of the most recent reviewable push : λ§μ§λ§μΌλ‘ νΈμλ 컀λ°μ΄ νμΈμ μΉμΈμ λ°λμ λ°μμΌ λ³ν©μ΄ κ°λ₯ν©λλ€.
Require conversation resolution before merging : PRμ μμ±λ λͺ¨λ μ½λ©νΈ λν(Conversation)κ° ν΄κ²°λμ΄μΌ λ³ν©ν μ μμ΅λλ€.
MINIDASH/
βββ π .github/
β βββ π ISSUE_TEMPLATE/
β β βββ π bug_report.md
β β βββ π feature_request.md
β βββ π workflows/
β βββ π workflow.yml
βββ π src/
β βββ π capitalize.js
β βββ π checkArr.js
β βββ π findEvenNums.js
β βββ π findOddNums.js
βββ π index.js
βββ π README.md
βββ π CONTRIBUTING.md
βββ π CODE_OF_CONDUCT.md
βββ π LICENSE
βββ π package.json
GitHub Actionsλ₯Ό μ¬μ©νλ©΄ CI/CDλ₯Ό μλνν μ μμ΅λλ€. μ½λκ° νΈμλ λλ§λ€ ν μ€νΈλ₯Ό μλμΌλ‘ μ€ννκ±°λ, λ°°ν¬ μμ μ μλνν μ μμ΅λλ€.
GitHub Actionsλ₯Ό μ€μ νλ €λ©΄, μ μ₯μ λ΄μ .github/workflows ν΄λλ₯Ό λ§λ€κ³ κ·Έ μμ .yml νμ₯μλ₯Ό κ°μ§ μν¬νλ‘μ° νμΌμ μμ±νλ©΄ λ©λλ€.
μ΄ μν¬νλ‘μ° νμΌμ μμ±νλ κ² μμ²΄κ° GitHub Actions μ€μ μ μμμ΄λ©°, ν΄λΉ νμΌμ ν΅ν΄ μ΄λ€ μ΄λ²€νΈμ μ΄λ€ μμ μ μλμΌλ‘ μ€νν μ§ μ μν μ μμ΅λλ€.
π€ GitHub Actionsλ?
GitHub Actionsλ GitHubμμ μ 곡νλ μλν λꡬλ‘, μ μ₯μ λ΄μμ CI/CD(μ§μμ ν΅ν© λ° μ§μμ λ°°ν¬) νμ΄νλΌμΈμ μ€μ ν μ μμ΅λλ€.μ½λκ° λ³κ²½λλ©΄ μλμΌλ‘ ν μ€νΈ, λΉλ, λ°°ν¬ λ±μ μμ μ μ€ννμ¬ κ°λ° ν¨μ¨μ±κ³Ό μ½λ νμ§μ λμΌ μ μμ΅λλ€.
workflow.ymlPull Requestμ λ³Έλ¬Έμ΄ λΉμ΄ μλμ§ μλμΌλ‘ κ²μ¬νκ³ , λΉμ΄ μμ κ²½μ° μλ΄ λ©μμ§λ₯Ό λ¨κΈ°κ³ PRμ μλμΌλ‘ λ«λ μν¬νλ‘μ° μμμ λλ€.
name: Pull Request Check
on:
pull_request:
types: [opened, synchronize]
jobs:
check:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/github-script@v7
with:
script: |
async function run() {
try {
const pull_request = context.payload.pull_request;
if (!pull_request) {
console.log("This is not a pull request.");
return;
}
const body = pull_request.body;
if (!body || body.trim() === "") {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pull_request.number,
body: "ν΄λΉ PRμ κ°μ΄λλΌμΈμ μ€μνμ§ μμμ΅λλ€. λλ¬Έμ PRμ λ«λλ‘ νκ² μ΅λλ€. κ°μ΄λλΌμΈμ μ€μν΄μ λ€μ PRμ μμ²ν΄μ£ΌμΈμ. π"
});
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pull_request.number,
state: "closed"
});
}
} catch (error) {
console.error("β μν¬νλ‘μ° μ€ν μ€ μ€λ₯ λ°μ:", error.message);
}
}
run();
on : μ΄ μΉμ
μ μν¬νλ‘μ°κ° μ€νλ νΈλ¦¬κ±°λ₯Ό μ μνλ λΆλΆμ
λλ€. push λλ pull_request μ΄λ²€νΈκ° λ°μνμ λ μν¬νλ‘μ°κ° μ€νλλλ‘ μ€μ ν μ μμ΅λλ€. ( λ§μ½ λΈλμΉλ₯Ό λ°λ‘ μ§μ νμ§ μμΌλ©΄, λͺ¨λ λΈλμΉμμ ν΄λΉ μ΄λ²€νΈκ° λ°μνμ λ μν¬νλ‘μ°κ° μ€νλ©λλ€. )
jobs : μν¬νλ‘μ° μμμ μ€μ λ‘ μ€νλλ μμ
λ¨μμ
λλ€. νλμ μν¬νλ‘μ°λ μ¬λ¬ κ°μ jobμ κ°μ§ μ μκ³ , κ° jobμ λ
립μ μΌλ‘ μ€νλκ±°λ μμλ₯Ό μ§μ ν μ μμ΅λλ€.
check : jobs μμ μ μλ νλμ μμ
(job) μ΄λ¦μ
λλ€. μ΄ μ΄λ¦μ μμ λ‘κ² λ³κ²½ν μ μμΌλ©°, μν¬νλ‘μ° λ΄λΆμμ μ΄ jobμ μλ³ν λ μ¬μ©λ©λλ€.
runs-on : jobμ μ€νν λ μ¬μ©ν κ°μ νκ²½μ μ§μ ν©λλ€.
permissions : μ΄ μν¬νλ‘μ°κ° GitHub APIμ μ΄λ€ κΆνμΌλ‘ μ κ·Όν μ μμμ§ μ€μ ν©λλ€. μλ₯Ό λ€μ΄ PRμ λκΈμ λ¬λ €λ©΄ pull-requests: write κΆνμ΄ νμν©λλ€.
steps : νλμ job μμμ μ€μ λ‘ μ€νλλ μμ
λ¨κ³λ€μ μμλλ‘ μ μν©λλ€. κ° stepμλ μΈλΆ μ‘μ
μ μ¬μ©νκ±°λ μ§μ λͺ
λ Ήμ΄λ₯Ό μ€ννλ λ΄μ©μ΄ λ€μ΄κ°λλ€.
uses : μΈλΆμμ λ§λ€μ΄μ§ GitHub Actionμ κ°μ Έμμ μ¬μ©νλ ꡬ문μ
λλ€. actions/github-script@v7 λ₯Ό μ¬μ©ν΄μ JavaScript μ½λλ₯Ό μ€νν©λλ€.
with : uses λ‘ κ°μ Έμ¨ Actionμ μ€μ κ°μ΄λ μ€ν¬λ¦½νΈ λ±μ λκ²¨μ€ λ μ¬μ©ν©λλ€.
script : github-script μ‘μ
μμ μ€νν μ€μ JavaScript μ½λμ
λλ€. PRμ λ³Έλ¬Έμ΄ λΉμ΄ μλμ§λ₯Ό κ²μ¬νκ³ , 쑰건μ λ§μ‘±νμ§ μμ κ²½μ° μλμΌλ‘ λκΈμ λ¬κ±°λ PRμ λ«λ λ±μ λ‘μ§μ ꡬνν μ μμ΅λλ€.νμ©λμ§ μμ PRμ΄ μμμ μ μ§κ° λλ κ²μ μ€μ΅νλ©΄μ μλνκ° μ€μ λ‘ νν΄μ§λ κ²μ 보λ μλνκ° μΌλ§λ μ€μν μ§ κΉ¨λ¬μ ν루μλ€.