회사에서 ci 작업을 진행하던 중 issue label을 적용시켜야 하는 상황이 생겨서 label을 적용하는 스크립트와 내용을 공유하고자 한다.
github 조직에서 관리자 권한은 issue label 을 한 번에 적용시킬 수 있을 거라 생각해서 찾아보니 처음 repository를 생성할 때 적용시키는 것만 있었다.
Set the labels that will be included when a new repository is created in this organization.
그래서 더 찾아보니 cmd로 api를 날려서 label을 적용 할 수 있는 github-label-sync
라는걸 찾았다!
필요한건 3가지 정도가 필요하고 위에서 말한 github-label-sync
는 단일 repository만 적용 가능하길래 모든 repository에 적용할 수 있도록 쉘 스크립트를 작성했다.
1. github-label-sync
는 npx로 구동되기 때문에 npx가 설치되어 있어야 한다.
2. public 은 상관없지만 private repository를 가져오려면 github token이 필요하다.
3. label 정보가 담겨있는 json 파일이 필요하다.
위에서 말한 3가지가 준비되면 내가 적용하고자 하는 repository에 모두 적용할 수 있다.
1. label 정보가 담겨있는 json 파일을 작성하기
[
{
"name": "resolved",
"color": "008672",
"description": "이슈 해결"
},
{
"name": "bug",
"color": "d73a4a",
"description": "버그 수정"
},
{
"name": "enhancement",
"color": "a2eeef",
"description": "기능 추가 및 개선"
},
{
"name": "test",
"color": "cfd3d7",
"description": "테스트 및 테스트 코드 작성"
},
{
"name": "release",
"color": "e4e669",
"description": "Released Product"
},
{
"name": "staging",
"color": "5319e7",
"description": "staging server"
}
]
위와 같이 적용하고자 하는 label 이름과 설명, 색상등을 입력하고 저장해 둔다.
2. Repository list 받아오기
50개가 넘어가는 repository를 다 한 번씩 적용하기에는 무리인 듯싶어서 repository list를 받아서 처리하기로 했다.
아래 api를 사용하면 repository 목록을 받아올 수 있다.
curl -u username:{github_token} https://api.github.com/orgs/{organization_name}/repos\?per_page\=500 | jq '.[].name' | sort >> repositories_name.txt
해당 organization에 권한이 있는 repository들을 불러와서 파일로 생성해 준다.
api 뒤에 per_page를 넣지 않으면 default 값인 30으로 들어가서 30개까지만 나온다.
위 명령어로 실행하면 큰따옴표가 포함된 텍스트파일이 만들어지는데 해당 파일을 열고 큰따옴표들을 없애준다.
3. 스크립트 실행하기
위에서 만들어진 파일 2개를 한 경로에 두고 아래 스크립트를 만들어서 실행한다.
#!/bin/bash
for repo in `cat ./repositories_name.txt`
do
npx github-label-sync --access-token {github_token} --labels ./labels.json {organization_name}/$repo
echo "$repo label create complated!"
done
label이 적용하기까지 좀 시간이 걸려서(1초 정도?) 기다리다 보면 다 적용이 된 걸 볼 수 있다.
'Git' 카테고리의 다른 글
[git/이클립스] github에서 이클립스 프로젝트 import하기 (0) | 2021.05.11 |
---|---|
[git/이클립스] github 저장소에 프로젝트 올리기 (0) | 2021.05.11 |