๐ GitHub Action์ ๊ฐ๋ฅํ ํ ๋น ๋ฅด๊ณ ์ฝ๊ฒ Go ํ๋ก์ ํธ๋ฅผ ๊ฒ์ํฉ๋๋ค.
์๊ฐ
์๋ ํ์ธ์, DEV World!๐ ์ด ์๋ฆฌ์ฆ๋ฅผ ๊ณ์ํ์ฌ ์ฐ์ํ CI/CD ๋๊ตฌ์ธ GitHub ์์ ์๋ํ ๋ฃจํด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค.
์์ฉ ํ๋ก๊ทธ๋จ์ด ์คํ ์ค์ ์๋์ผ๋ก ๋ฐํ๋ ๋๊ฐ ๋์์ต๋๋ค!
๐ ์นดํ๋ก๊ทธ
What will we automate?
Time to release!
๐ค ์ฐ๋ฆฌ๋ ๋ฌด์์ ์๋ํํ ๊ฒ์ ๋๊น?
๋ง์ฝ ๋น์ ์ด ์๋ก ๋ค๋ฅธ ํ๋ซํผ/์ด์์ฒด์ ๋ฅผ ์ํด Go์ ์ ํ ํ๋ก์ ํธ๋ฅผ ๋ฐํํ๋ ๋์ ์ ์ง๋ฉดํ ์ ์ด ์๋ค๋ฉด, ๋น์ ์ ์ด๋ค ๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ๋ ์ง ์ด๋ฏธ ์๊ณ ์์ต๋๋ค.๋ง์ฝ ์๋ค๋ฉด, ๋๋ ์ฝ๊ฐ์ ๊ฒ์ ๊ฐ์ง๊ณ ์ฌ ๊ฒ์ด๋ค.
CHANGELOG
์ ์ ๋ฒ์ ์ผ๋ก ๋ง๋ค์ด์ผ ํฉ๋๋ค.๋๋ด์ด ์๋์์.
GoReleaser
GitHub ์กฐ์์ผ๋ก ์ด ๋ชจ๋ ๊ฒ์ ์์ฑํ ์ ์์ต๋๋ค.๐goreleaser ํ์ฌ / goreleaser ๋์
: octocat: GoReleaser์ GitHub ์์
GoReleaser ๋์
GoReleaser GitHub Action
Usage
Customizing
ํ์ฉ๋จ์ด์ฐธ์กฐ
์ํฌํ๋ก์ฐ
name: goreleaser on: pull_request: push: jobs: goreleaser: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 with: fetch-depth: 0 - name: Set up Go uses: actions/setup-go@v2 with: go-version: 1.15 - name: Run GoReleaser uses: goreleaser/goreleaser-action@v2 with: # either 'goreleaser' (default) or 'goreleaser-pro' distribution: goreleaser version: latest args: release --rm-dist env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Your GoReleaser Pro key, if you are using the 'goreleaser-pro' distribution # GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}
IMPORTANT: note the
fetch-depth: 0
input inCheckout
step. It is required for the changelog to work correctly.
์ ํญ์์ ์คํ
If you want to run GoReleaser onlyโฆ
๐ ์ ์ฅ์ ๊ตฌ์กฐ
For a short, project will be contain very simple function:
package main
import "fmt"
func main() {
fmt.Println("Hi, DEV World! ๐")
}
์ด๋ ๊ฒ ๊ฐ๋จํ ์ ์ฅ์ ๊ตฌ์กฐ:.
โโโ .github
โ โโโ workflows
โ โโโ release_build.yml # <-- GitHub Action
โโโ main.go # <-- main function
โ Table of contents๐ค GitHub ์์ ๊ตฌ์ฑ
์ฐ๋ฆฌ ๊ณ์ ์ด์ผ๊ธฐํ ์ฃผ์ธ๊ณต.ํ์ผ
release_build.yml
์ ๋ชฉ๋ก์ ๋ณด์ญ์์ค. ์ด๋ฏธ ์ต์ํ ์์๊ฐ ๋ง์ต๋๋ค. (GitHub ์์
์ ๊ดํ ๋์ ๊ธ์ ์ฝ์๋ค๋ฉด)๐):name: Release Go project
on:
push:
tags:
- "*" # triggers only if push new tag version, like `0.8.4` or else
jobs:
build:
name: GoReleaser build
runs-on: ubuntu-latest
steps:
- name: Check out code into the Go module directory
uses: actions/checkout@v2
with:
fetch-depth: 0 # See: https://goreleaser.com/ci/actions/
- name: Set up Go 1.14
uses: actions/setup-go@v2
with:
go-version: 1.14
id: go
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@master
with:
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.GO_RELEASER_GITHUB_TOKEN }}
์. GitHub๋ ์ํฌํ๋ก์ฐ์์ ์ฌ์ฉํ GITHUB_TOKEN
์ํธ๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ง๋ง repo
์ญํ ์์ญ here์ ์ฌ์ฉํ์ฌ ์์ ์ ํ ํฐ์ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค.์ด์ ์ GitHub secret์ ๋ง๋ญ๋๋ค(์:
GO_RELEASER_GITHUB_TOKEN
).โ Table of contents
โ ๋ฌธ์ ํด๊ฒฐ
main()
ํจ์๋ฅผ ๊ฐ์ง ํ์ผ์ด ์ ์ฅ์์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์ ์์ผ๋ฉด GoReleaser์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.๋ฐ๋ผ์ ๋จ๊ณ ์ค์ ์์ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฐ๋ฅธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค.# ...
steps:
# ...
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@master
with:
version: latest
args: release --rm-dist
workdir: ./cmd/myapp # <-- path to directory with main() func
env:
GITHUB_TOKEN: ${{ secrets.GO_RELEASER_GITHUB_TOKEN }}
โ Table of contents๐ ๋ฐํํด์ผ ๋ผ!
๋ ์ด๋ธ์ด ์๋ ์ ๋ฒ์ ์ ๋ง๋ค๊ณ (์:
0.8.4
) ์์
ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.์์ ์ ์ฑ๊ณต์ ์ผ๋ก ๋ง์น ํ ๋ฐํ ํ์ด์ง๋ก ์ด๋ํ์ฌ ๊ฒฝ์ธ์ค๋ฌ์ด ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ญ์์ค.
CHANGELOG
, ๋ชจ๋ ์ ์ถ(๋ ๋ฒ์ ์ฌ์ด), checksums.txt
ํ์ผ๊ณผ ์
๋ก๋๋ ํ์ผ, ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ํ๋ซํผ์ ์ปดํ์ผ ์์ฉ ํ๋ก๊ทธ๋จ์ ํฌํจํฉ๋๋ค!๊ทธ๋ ์ต๋๋ค!์ด๋ ๊ฒ!๐
โ Table of contents
๐ฏ ์ค์ ์ํ์ ์
๋ง์ฝ ์์ ์บก์ฒ๊ฐ ๋ถ์กฑํ๋ค๋ฉด, ๋๋ ๋์๊ฒ ๋์ ํ๋ก์ ํธ๋ฅผ ๋ณด์ฌ ๋ฌ๋ผ๊ณ ์ด๋ํ๋ค. ๊ฑฐ๊ธฐ์์ ๋๋ ํ์ค ์ํ์์
GoReleaser
๋์์ ์ฌ์ฉํ๋ค.go ์์ฉ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ / cli
โจ CLI ๋ช ๋ น์ ์คํํ์ฌ ๋ฐฑ์๋, ํ๋ฐํธ์๋ ๋ฐ ๋ฐฐํฌ ์๋ํ๋ฅผ ๊ฐ์ถ ์๋ก์ด ํ๋ก๋์ ์ค๋น ํ๋ก์ ํธ๋ฅผ ๋ง๋ญ๋๋ค!
Go App CLI ์์ฑ
CLI ๋ช
๋ น์ ์คํํ์ฌ ๋ฐฑ์๋(Golang), ํ๋ฐํธ์๋(JavaScript, TypeScript) ๋ฐ ๋ฐฐํฌ ์๋ํ(Ansible, Docker)๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ก๋์
์ค๋น ํ๋ก์ ํธ๋ฅผ ๋ง๋ญ๋๋ค.์ฝ๋ ์์ฑ๊ณผ ์
๋ฌด ๋
ผ๋ฆฌ์ ์ ๋
ํ์ธ์!CLI๊ฐ ๋๋จธ์ง ๋ถ๋ถ์ ์ฒ๋ฆฌํฉ๋๋ค.
ย ย ย
โก๏ธ ๋น ๋ฅธ ์์
๋จผ์ download์ ์ค์นํ๊ณ Go๋ฅผ ์ค์นํฉ๋๋ค.1.17
์ด์์ ๋ฒ์ ์ด ํ์ํฉ๋๋ค.
If you're looking for the Create Go App CLI for Go 1.16
, you can find it here.
go install
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ค์น๋ฅผ ์๋ฃํ๊ณ $GOPATH/bin
์ ์ค์น๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ์ด๋ฆ์ ๋ฐ๊ฟ๋๋ค.
github๋ฅผ ์ค์นํ๋ฌ ๊ฐ์ธ์.com/create-go-app/cli/v3/cmd/cgapp@latest
๋ํ macOS ๋ฐ GNU/Linux ์ฌ์ฉ์๋ Homebrew์ ํตํด ์ค์นํ ์ ์์ต๋๋ค.
# ์ ๊ณต์์ ํด๋ฆญ:
brew ํด๋ฆญcreate go app/cli
# ์ค์น:
brew ์ค์นcreate go app/cli/cgapp
๋ํํ ์ฝ์ UI(CUI)๋ฅผ ํตํด ํ์ฌ ํด๋์ ์ ํญ๋ชฉ์ ๋ง๋ญ๋๋ค.
cgapp ๋ง๋ค๊ธฐ
๋ค์์ ์์ฑ๋ Ansible ๋ชฉ๋ก ํ์ผ(hosts.ini
)์ ์ด๊ณ ...
View on GitHub
โ Table of contents
๐ฌ ๋ ์ ์ดํด๋๋ ๋ฌธ์
If you're looking for the Create Go App CLI for Go 1.16
, you can find it here.
fetch-depth: 0
์กฐ์์ actions/checkout
์ ์ ์ํด์ผ ํฉ๋๊น?-rm-dist
๋งค๊ฐ ๋ณ์๋ Run GoReleaser
๋จ๊ณ์์ ๋ฌด์์ ์๋ฏธํฉ๋๊น?โ๏ธ ๊ฐ๋ณ ์คํ ์ฐ์ต
์ฌ์ง / ์ด๋ฏธ์ง ์์ฑ์
๋ถ์ ๋๋ค.
๋ ๋ง์ ๊ฒ์ ์๊ณ ์ถ์ผ๋ฉด ์๋์ ํ๋ก ์ ํ๋ ์ฐ์๊ณ ๋ฐ๋ผ์ค์ธ์.๊ฐ์ฌํฉ๋๋ค.๐
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ GitHub Action์ ๊ฐ๋ฅํ ํ ๋น ๋ฅด๊ณ ์ฝ๊ฒ Go ํ๋ก์ ํธ๋ฅผ ๊ฒ์ํฉ๋๋ค.), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/koddr/github-action-for-release-your-go-projects-as-fast-and-easily-as-possible-20a2ํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค