기록방

Github 이슈, PR 템플릿 및 label 간단 복사 방법 본문

CS/Git

Github 이슈, PR 템플릿 및 label 간단 복사 방법

Soom_1n 2023. 11. 28. 00:06
github에서 여러 리포지토리를 생성 할 때, 이슈/PR 템플릿 및 커스텀 label을 복사하는 방법을 정리하고자 한다.

 

우선 임시 리포지토리를 하나 만들고 이슈/PR 템플릿 생성, label 수정을 진행하자 


 

🔷 이슈 템플릿 생성

이슈 템플릿은 직접 리포지토리에 파일을 저장해두어야 하는데, 손쉽게 만들 수 있도록 github가 도와준다.

 

수동으로 만드려면 리포지토리의 './github/ISSUE_TEMPLATE/' 디렉터리 하위로 'bug-report.md' 같은 마크다운 파일을 만들면 된다. 자세한 내용은 Github Docs의 이슈 템플릿 설명을 참고하자.

 

여기서는 github가 제공해주는 양식에 따라 쉽게 만들자.

 

 

리포지토리의 setting - 바로 나오는 General에서 쭉 내려서 Features란에서 이슈의 [ Set up templates ]를 누른다.

 

 

이슈 템플릿을 바로 만들어 등록 할 수 있는데, Bug report와 Feature request 양식을 제공해준다.

템플릿은 그냥 MarkDown으로 작성하면 되므로, 크게 어려울 건 없다.

 

 

Bug Report 이슈 템플릿

---
name: Bug Report
about: 버그 발생 보고 및 해결 방안 기록
title: "[BUG] {로그인 후 리다이렉트 실패}"
labels: "\U0001F41E Bug"
assignees: ''

---

### 버그 현상 설명
{버그 현상을 설명해주세요.}

---

### 발생 과정
{ 버그를 발생 시키는 행동 과정을 적어주세요.
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
}

---

### 예상 대책
{예상되는 대책을 적어주세요. 없다면 없다고 적어주세요.}

---

### 스크린샷
{버그 발생 화면을 스크린샷으로 남겨주세요.}

---

### 개발 환경
{ 현재 환경을 적어주세요. 버그 재현시 필요한 부분은 필수로 자세히 적어주세요. }
| 속성 | 값 |
| :----: | :--: |
| OS | Window 10 |
| Tool | IntelliJ Ultimate |
| Framework | SpringBoot 3.0.13|


---

### 기타 주석
{끝으로 남기고 싶은 기타 주석을 적어주세요. 없다면 지워주세요.}

 

 

Feature request 이슈 템플릿

---
name: Feature request
about: 메인 기능 개발 Todo 리스트
title: "[Feat] {소셜 로그인 기능 추가}"
labels: "✨ Feat"
assignees: ''

---

### 구현 기능 설명
{현재 개발하고자 하는 기능의 배경 및 주 기능 간략 설명 (ex. 회원 관련 소셜 로그인 기능 구현) }

### 예상 소요 시간
{최소 2시간, 최대 3일로 명세}

 

 

템플릿 미리보기

bug-report.md
feature_request.md

 

 

이렇게 만들어 두면 이슈 생성 시 다음과 같이 나타난다.

 


 

🔷 PR 템플릿 생성

PR 템플릿은 이슈와 달리 직접 생성해줘야한다.

여기서는 간단히 생성 방법을 알아보고, 자세한 내용은 Github Docs의 PR 탬플릿 생성 설명을 참고하자.

 

리포지토리의 './github/' 디렉터리 바로 아래에 ' pull_request_template.md' 를 생성하자.

 

PR 템플릿 코드

## 코드 변경 이유  
- 객체들의 연관관계를 기준으로 엔티티를 초기 설계했습니다.
- 엔티티 설계 후 테이블 생성했을때 MySQL테이블과 동일한 형태를 얻고자 했습니다.  

<br>

## 구현 사항  
- 스크린 샷을 보면 이러이런 식으로 설계했습니다.
- 스크린샷
  - 자세히 설명하면 이러이러한 겁니다.  

<br>

## 발견 위험/장애  
- 잘 안 된 부분이 있었는데, 이런 이유였고 지금은 해결됐습니다.

<br>

## 테스트 완료 및 계획  
- 테스트는 이러이러한 부분을 진행했고, 추가로 무슨무슨 기능이 완성되면 통합 테스트 이슈를 생성할 예정입니다.  

<br>

## To Reviewers  
- MySQL 테이블과 비교하면서 검토하고 리뷰해주세요.
- 코드 구현이 깔끔했는지와 목적에 맞는지 확인해주세요.

 

PR 템플릿 미리보기

 


 

🔷 label 변경하기

github 이슈마다 label을 설정 할 수 있는데, 프로젝트에 맞게 커스텀 할 수 있다.

프로젝트 진행 시 필요 할 것 같은 것들로 수정하였다.

리포지토리 상단 탭에서 Issues - Labels 에서 확인 할 수 있다.

 

 


 

🔷 template repository 설정하기

 

리포지토리의 Settings에 가면 현재 리포지토리를 템플릿으로 만들 수 있다.

지금 만들어둔 설정을 그대로 복사해 기본 골자로 가져가게 되는데, 파일 구조 말고도 브렌치 구조 또한 복사 가능한 것 같다. 지금은 이슈/PR 템플릿과 label 수정을 마쳤으니 템플릿으로 만들고, 다른 파트의 리포지토리를 생성하자.

 

 

템플릿 리포지토리는 Use this template라는 버튼으로 변경되어서 나타난다.

 

 

Create a new repository를 선택하면 리포지토리 생성 페이지로 이동한다.

 

 

여기서 부터는 일반적인 리포지토리 생성 페이지와 같은데, Repository template에서 방금 변경한 템플릿 리포지토리가 나타난다.

 

 

리포지토리를 생성하면 다음과 같이 '.github' 디렉터리의 이슈/PR 템플릿들이 잘 복사된 것을 알 수 있다.

하지만 label 수정한 것들은 변경되지 않는다.

 

알아보니 label은 복사가 되지 않아서 직접 변경해줘야 한다고 한다.

다행히 npm에 변경해주는 라이브러리가 있다.

 


 

🔷 label 복사하기

라이브러리 설치

먼저 기존 리포지토리의 label 데이터를 JSON 파일로 만들어야 한다.

npm 라이브러리인 github-label-sync 를 사용 할 것이다.

npm i github-label-sync

 

label JSON 생성

 

github-label-sync 라이브러리를 설치하고, label.js 라는 이름으로 스크립트를 만든다.

const githubLabelSync = require('github-label-sync');

githubLabelSync({
  accessToken: '토큰',
  repo: '계정명/저장소이름',
  labels: [],
  dryRun: true,
}).then(diff => {
  console.log(diff);
});

 

본인의 github accessToken 을 발급받고 넣는다. 토큰 권한은 repo 전체 정도만 있으면 된다.

repo도 알맞게 수정한다. 계정명 대신 organization 이름을 넣어도 된다.

dryRun : true를 넣지 않으면 기존 리포지토리의 label이 날라갈 수 있다.

node label.js

 

다음 명령어로 스크립트를 실행하자. node가 설치되어 있어야 한다.

 

label.js 실행 결과

 

여기서 actual 에 있는 name, color, description 데이터만 사용한다.

다음은 변환한 label.json 파일이다.

 

[
  {
    "name": "☕ Chore",
    "color": "4D6A8B",
    "description": ".gitignore 처럼 외부 사용자가 관심없는 파일, 빌드 혹은 패키지 매니저 수정 사항"
  },
  {
    "name": "⚙ Setting",
    "color": "424242",
    "description": "환경 설정"
  },
  {
    "name": "✒ Docs",
    "color": "C5DEF5",
    "description": "문서 생성 및 수정"
  },
  {
    "name": "❗ Invalid",
    "color": "FEF2C0",
    "description": "잘못된 부분이 있어보임"
  },
  {
    "name": "✅ Test",
    "color": "FFFFFF",
    "description": "테스트 관련 수정, 빌드 업무 및 패키지 매니저 수정"
  },
  {
    "name": "✨ Feat",
    "color": "C2E0C6",
    "description": "새 기능 추가"
  },
  {
    "name": "🎨 Design",
    "color": "D0F5A9",
    "description": "CSS 등 사용자 UI, 디자인 변경"
  },
  {
    "name": "🏷 Rename",
    "color": "F5D0A9",
    "description": "파일/폴더 명 변경 혹은 이동 등 구조 변경"
  },
  {
    "name": "🐞 Bug",
    "color": "F9D0C4",
    "description": "버그 발생 보고 및 해결 기록"
  },
  {
    "name": "💡 Question",
    "color": "D4C5F9",
    "description": "질문"
  },
  {
    "name": "🗑 Remove",
    "color": "D8D8D8",
    "description": "파일삭제"
  },
  {
    "name": "🚀 Refactor",
    "color": "E2A9F3",
    "description": "기존 코드의 입출력 값은 일치, 코드 내부 성능 개선 및 클린업"
  },
  {
    "name": "🛠 Fix",
    "color": "CEF6D8",
    "description": "기능 수정"
  },
  {
    "name": "🧨 HotFix",
    "color": "FBCA04",
    "description": "급하게 치명적인 버그를 고쳐야 하는 경우"
  },
  {
    "name": "🧵 Style",
    "color": "A9F5A9",
    "description": "코드 포맷 변경, 세미콜론 누락 등 스타일과 관련된 코드 수정, 그러나 코드 수정은 없는 경우"
  }
]

 

label을 꾸미고싶어서 이모지을 사용했는데, console.log() 출력에서 깨지는 현상이 발생했다.

폰트를 바꾸면 된다고 하는데, 그냥 이모지 부분만 직접 수정해주었다.

 

리포지토리에 label 수정 적용

github-label-sync --access-token [액세스 토큰] --labels labels.json [계정명]/[저장소 이름]

 

계정명 대신 organization 이름을 적어도 된다.

위 명령어를 실행하면 다음과 같은 결과가 나타나야 성공이다.

 

해당 label이 없으면 생성 하고, json에 없는 label은 지워주는 것 같다.

repository를 변경해가며 설정해주면 된다.

 

 

🔶 기타 에러

1. 404 에러  : Not Found

access token을 누락하거나 경로를 잘못 기입해서 에러가 났다.

 

2. 401 에러  : Bad credentials

access token에 오타가 들어가서 에러가 났다. 토큰도 새로 만들고, 권한이 repo 모두 선택되어있는지도 확인하자.

728x90

'CS > Git' 카테고리의 다른 글

Github Organization 프로젝트 세팅하기  (2) 2023.11.28
GIT - git의 원리 [생활코딩]  (0) 2021.05.28
GIT - 버전관리의 본질[생활코딩]  (0) 2021.05.26
GIT - GIT1 입구수업[생활코딩]  (0) 2021.05.20