본문 바로가기
Tools/Git

[Git] GitHub 릴리즈 기능 간편하게 사용하기 - 'github-release/github-release' 사용법

by A6K 2021. 2. 16.

깃허브에서는 소프트웨어의 소스코드 뿐만 아니라 소프트웨어를 빌드한 결과물을 배포할 수 있는 기능까지 제공하고 있다. '릴리즈(Release)'라는 기능이다.

깃허브의 릴리즈 기능

깃허브 페이지의 오른쪽 탭에 보면 'Release' 항목을 찾아 볼 수 있다. 'Create a new release' 버튼을 눌러서 새로운 릴리즈를 작성할 수 있다.

깃허브의 릴리즈 기능

master 브랜치에 달려있는 태그와 함께 릴리즈 제목, 릴리즈 노트 그리고 소스코드를 빌드한 바이너리를 첨부할 수 있다. 별도의 배포 웹 서버나 웹 페이지, FTP 서버를 운영하지 않아도 간단하게 바이너리를 배포할 수 있다.

하지만 웹 페이지를 통해 매번 릴리즈 생성 버튼을 누르고, 파일을 업로드 하는 행위는 매우 귀찮다. 우리는 게으르기 위해서 부지런해지는 개발자이므로 release.sh 스크립트를 만들어 젠킨스 같은 CI 툴을 통해 자동으로 빌드 & 테스트, 릴리즈까지 해주는 시스템을 만들고 싶어진다.

이럴 때 사용하면 좋은게 'github-release/github-release' 프로젝트다.

github-release

깃허브에 공개되어 있는 'aktau/github-release'는 CLI 환경을 이용해 깃허브 릴리즈를 쉽게 할 수 있도록 해준다. CLI 환경에서 사용가능하므로 자동화된 스크립트를 만들기도 좋다.

'github-release' 명령을 통해서 깃허브 릴리즈 페이지에 파일을 업로드하고, 릴리즈 노트를 수정할 수도 있다. 아마도 github에서 제공하는 API를 이용해 만들어진것 같다. (시간이 되면 소스코드 분석해도 재밌을 것 같다)

github-release 설치

aktau/github-release 프로젝트는 go 언어를 이용해 만들어졌다. 따라서 이 기능을 사요하기 위해서는 go 언어 실행환경이 설치되어 있어야한다. go 언어의 실행환경은 구글링을 해보면 잘 나와있으니 패스하겠다.

go 언어 실행환경이 세팅되었으면 다음 명령을 실행한다.

$ go get github.com/github-release/github-release

go 언어의 가장 큰 장점은 손쉬운 라이브러리 설치다. 이 명령하나면 github-release가 설치된다.

bash에서 github-release --help를 실행해보자. (MacOS 환경에서는 $PATH가 설정되지 않아서 실행이 안되는 경우가 있다. 이 경우 ~go/bin에 바이너리가 있으니 $GOPATH를 $PATH 환경변수에 포함시켜주자)

github-release 설치 - GITHUB_API 환경변수

깃허브 엔터프라이즈를 사용하는 경우 별도의 API URL이 있을 것이다. 이 API URL을 GITHUB_API 환경변수로 설정해준다. (엔터프라이즈 버전이 아닌 그냥 github 사용자들은 사용할 필요가 없다)

export GITHUB_API=http://github.your-company.com/api/v3

github-release 설치 - GITHUB_TOKEN 환경변수

깃허브의 API를 사용하기 위해서는 Personal AccessToken을 받아와야 한다. 일종의 비밀번호 같은 것으로 깃허브에 아무나 릴리즈를 올리거나 삭제하면 안되기 때문에 사용한다.

깃허브의 토큰을 생성하기 위해서는 우선 깃허브 개발자 설정 페이지로 가야한다. (링크 : 깃허브 개발자 설정 페이지)

개발자 설정 페이지에서 'Personal access tokens' 탭을 선택한다. 우측 상단에 'Generate new token' 버튼을 눌러서 새로운 토큰을 생성한다.

새로 생성될 토큰으로 접근하는 사용자가 어떤 권한을 갖게 될 것인지 설정할 수 있다. 대충 repo 권한을 주면 되는 것 같다.

생성을 완료하면 토큰에 해당하는 해시값이 나온다. 이 값은 다시 볼 수 없으므로 잘 기억해둬야한다. (보안상 문제때문인것 같다)

export GITHUB_TOKEN=?????

이 값을 GITHUB_TOKEN 환경변수에 설정해준다.

github-release 사용법

github-release의 --help 옵션으로 사용할 수 있는 옵션을 알아볼 수 있다.

$ ./github-release --help
Usage: github-release [global options] <verb> [verb options]

Global options:
        -h, --help           Show this help
        -v, --verbose        Be verbose
        -q, --quiet          Do not print anything, even errors (except if --verbose is specified)
            --version        Print version

Verbs:
    delete:
        -s, --security-token Github token (required if $GITHUB_TOKEN not set)
        -u, --user           Github repo user or organisation (required if $GITHUB_USER not set)
        -r, --repo           Github repo (required if $GITHUB_REPO not set)
        -t, --tag            Git tag of release to delete (*)
    download:
        -s, --security-token Github token ($GITHUB_TOKEN if set). required if repo is private.
        -u, --user           Github repo user or organisation (required if $GITHUB_USER not set)
        -r, --repo           Github repo (required if $GITHUB_REPO not set)
        -l, --latest         Download latest release (required if tag is not specified)
        -t, --tag            Git tag to download from (required if latest is not specified) (*)
        -n, --name           Name of the file (*)
    edit:
        -s, --security-token Github token (required if $GITHUB_TOKEN not set)
        -u, --user           Github repo user or organisation (required if $GITHUB_USER not set)
        -r, --repo           Github repo (required if $GITHUB_REPO not set)
        -t, --tag            Git tag to edit the release of (*)
        -n, --name           New name of the release (defaults to tag)
        -d, --description    New release description, use - for reading a description from stdin (defaults to tag)
            --draft          The release is a draft
        -p, --pre-release    The release is a pre-release
    info:
        -s, --security-token Github token ($GITHUB_TOKEN if set). required if repo is private.
        -u, --user           Github repo user or organisation (required if $GITHUB_USER not set)
        -r, --repo           Github repo (required if $GITHUB_REPO not set)
        -t, --tag            Git tag to query (optional)
        -j, --json           Emit info as JSON instead of text
    release:
        -s, --security-token Github token (required if $GITHUB_TOKEN not set)
        -u, --user           Github repo user or organisation (required if $GITHUB_USER not set)
        -r, --repo           Github repo (required if $GITHUB_REPO not set)
        -t, --tag            Git tag to create a release from (*)
        -n, --name           Name of the release (defaults to tag)
        -d, --description    Release description, use - for reading a description from stdin (defaults to tag)
        -c, --target         Commit SHA or branch to create release of (defaults to the repository default branch)
            --draft          The release is a draft
        -p, --pre-release    The release is a pre-release
    upload:
        -s, --security-token Github token (required if $GITHUB_TOKEN not set)
        -u, --user           Github repo user or organisation (required if $GITHUB_USER not set)
        -r, --repo           Github repo (required if $GITHUB_REPO not set)
        -t, --tag            Git tag to upload to (*)
        -n, --name           Name of the file (*)
        -l, --label          Label (description) of the file
        -f, --file           File to upload (use - for stdin) (*)
        -R, --replace        Replace asset with same name if it already exists (WARNING: not atomic, failure to upload will remove the original asset too)

사용법은 대충 위와 같은데, 예제를 통해서 알아보도록 하겠다.

github-release 사용예 - 릴리즈 정보 확인

info 명령을 이용해 릴리즈 정보를 확인할 수 있다.

github-release info --user ${USER_NAME} --repo ${REPO_NAME} --tag ${TAG_NAME}

${USER_NAME}에는 깃허브 사용자 이름 혹은 Organization 이름을 입력하면 된다. ${REPO_NAME}에는 리파지토리 이름을 입력하면 되고, ${TAG_NAME}에는 릴리즈 된 릴리즈 번호 혹은 태그 이름을 입력하면 된다.

릴리즈에 태그를 연결시키기 위해서는 우선 태그를 만들어야 한다.

git tag ${TAG_NAME} && git push --tags

태그를 만들고 원격 저장소에 푸쉬한다.

github-release 사용예 - 릴리즈 작성

release 명령을 이용해 릴리즈를 작성할 수 있다.

github-release release \
    --user ${USER_NAME} \
    --repo ${REPO_NAME} \
    --tag ${TAG} \
    --name "Release Name" \
    --description "Release description(Release note)" \
    --draft

--draft 옵션을 주면 릴리즈가 초안(Draft) 형식으로 만들어진다.

github-release 사용예 - 릴리즈 수정

edit 명령을 이용해서 이미 만들어져 있는 릴리즈 내용을 수정할 수도 있다.

github-release edit \
    --user ${USER_NAME} \
    --repo ${REPO_NAME} \
    --tag ${TAG} \
    --name "${RELEASE_NAME}" \
    --description "${RELEASE_DESCRIPTION}"

github-release 사용예 - 파일 업로드

upload 명령을 이용해서 첨부 파일을 포함시킬 수도 있다. 이 명령을 이용해 소스코드를 빌드하고, 테스트한 다음 바이너리를 릴리즈 노트와함께 업로드할 수 있다.

github-release upload \
    --user ${USER_NAME} \
    --repo ${REPO_NAME} \
    --tag ${TAG} \
    --name "${FILE_NAME}" \
    --file ${FILE_PATH}

github-release 사용예 - 릴리즈 삭제

delete 명령을 이용해서 릴리즈를 삭제할 수도 있다.

github-release delete \
    --user ${USER_NAME} \
    --repo ${REPO_NAME} \
    --tag ${TAG}

댓글