๐ 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: 0input inCheckoutstep. 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๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค