📚요약
지난 시간에는 실제 오픈 소스에 기여해 보는 방법들을 배웠습니다. 이번 시간에는 직접 오픈 소스 프로젝트를 만들어 보겠습니다.
📖오픈소스 프로젝트 만들어 보기
📄주제선정
오픈소스 프로젝트의 주제는 어렵게 생각할 필요 없이 개발 과정 중 필요한 부분을 오픈 소스로 만드는 것입니다. 예를 들어, lodash.js, immer.js처럼 복잡한 구동과정 없이 결과를 확인할 수 있고, 확장성이 보장된다면 좋은 주제입니다.
📄레포지토리 생성 및 설정
📑organization
레포지토리는 일반적인 레포지토리로 생성할 수 있지만, github의 organization 기능을 이용해서 생성해 보겠습니다. Organization을 통해 생성하면 비슷한 레포지토리끼리 모아서 작성할 수 있기 때문에 좀 더 편리하게 사용할 수 있습니다.
📑브랜치 protection rule 설정
오픈 소스의 경우 마음대로 merge를 했다가 오류가 발생하면 큰 문제가 발생할 수 있기 때문에 organization에 소속되어 있더라도 한 번 더 확인할 수 있도록 protection rule을 추가하는 것이 좋습니다. 이 외에도 다양한 방법들이 있으니 protection rule도 자세하게 살펴보시면 좋습니다.
📑템플릿 추가
지난 시간에 배웠던 github의 issue와 pull request에 대한 템플릿을 추가해 보겠습니다.
📑README 작성
readme도 단순하게 제목만 올라가 있는 빈 파일이 아닌 프로젝트에 대한 간단한 설명, 특징, 설치, 사용법, 기여 방법 등 다른 오픈 소스에 나와 있는 것처럼 작성해 보겠습니다.
📄Github Actions 설정
github에서 자동화를 위해서 제공하는 action 기능을 활용해서 pull request에 대한 검사를 진행해 보겠습니다.
📑yml 작성
action 기능을 동작시키기 위한 yml 문서를 작성해 보겠습니다.
name: Pull Request Check # 워크플로우 이름
on: # 워크플로우 실행 트리거
pull_request: # pull request 실행 시 동작
types: [opened, synchronize] # PR 생성 또는 업데이트 시 동
jobs: # 작업정의
check:
runs-on: ubuntu-lastest
permissions: #권한 설정
pull-requests: write # PR 쓰기 권한 설정
steps: # 작업 단계
- uses: actions/github-script@7
with:
script: | # 스크립트 시작
async function run() {
const pull_request = context.payload.pull_request; # pull_request 객체 가져오기
if(pull_request === undefined) {
console.log("This is not a pull request"); # console 출력
return; # 종료
}
const body = pull_request.body;
if(!body) {
// PR에 코멘트 추가
await github.rest.issues.createComment({ // PR에 코멘트 추가
owner: context.repo.owner, // 저장소 소유자
repo: context.repo.repo, // 저장소 이름
issue_number: pull_request.number, // PR 번호
body: "해당 PR은 가이드라인을 준수하지 않았기 때문에 PR을 닫습니다. 가이드라인을 준수해서 다시 PR 해주세요", // 코멘트 내용
});
// PR 닫기
await github.rest.pulls.update({ // PR 닫
owner: context.repo.owner, // 저장소 소유자
repo: context.repo.repo, // 저장소 이름
pull_number: pull_request.number, // PR 번호
state: "closed", // 상태 변경
});
}
}
run();
뭔가 오류가 발생해서 진행이 안 되는데 왜 그런지 모르겠다.
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() {
const pull_request = context.payload.pull_request; // pull_request 객체 가져오기
if (!pull_request) {
console.log("This is not a pull request"); // console 출력
return; // 종료
}
const body = pull_request.body;
if (!body) {
// PR에 코멘트 추가
await github.rest.issues.createComment({
owner: context.repo.owner, // 저장소 소유자
repo: context.repo.repo, // 저장소 이름
issue_number: pull_request.number, // PR 번호
body: "해당 PR은 가이드라인을 준수하지 않았기 때문에 PR을 닫습니다. 가이드라인을 준수해서 다시 PR 해주세요", // 코멘트 내용
});
// PR 닫기
await github.rest.pulls.update({
owner: context.repo.owner, // 저장소 소유자
repo: context.repo.repo, // 저장소 이름
pull_number: pull_request.number, // PR 번호
state: "closed", // 상태 변경
});
}
}
run();
문제가 없는 yml 코드
🍯tip! 스팸성 PR 같은 경우 쌓이게 되면 오픈 소스 입장에서 굉장히 곤란하기 때문에 yml 문서에서 미리 조건을 추가해 바로 PR을 닫아 주는 것이 중요합니다.
🍯tip! LGTM(look good to me) 해당 표현은 코드나 PR에 대한 리뷰를 작성할 때 사용되는 표현으로 보기 좋다는 의미를 가진다. 이 외에도 다양한 표현들이 있으니 찾아보면 좋다.
다음 시간에 계속...
출처 & 참고
강사님의 강의
'개발 > 프로그래머스 데브코스' 카테고리의 다른 글
| 프로그래머스 데브코스 93일차 with. TS 웹 풀스택 (0) | 2024.08.14 |
|---|---|
| 프로그래머스 데브코스 92일차 with. TS 웹 풀스택 (0) | 2024.08.13 |
| 프로그래머스 데브코스 90일차 with. TS 웹 풀스택 (0) | 2024.08.09 |
| 프로그래머스 데브코스 18주차 회고 with. TS 웹 풀스택 (0) | 2024.08.08 |
| 프로그래머스 데브코스 89일차 with. TS 웹 풀스택 (0) | 2024.08.08 |