Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Building and Releasing Golang binaries
Search
Carlos Alexandro Becker
September 21, 2017
Technology
1
2.2k
Building and Releasing Golang binaries
Carlos Alexandro Becker
September 21, 2017
Tweet
Share
More Decks by Carlos Alexandro Becker
See All by Carlos Alexandro Becker
construindo uma carreira com opensource
caarlos0
0
310
Introdução ao GoReleaser
caarlos0
0
1k
Intro to GoReleaser
caarlos0
0
960
Intro to GoReleaser
caarlos0
0
1.3k
Gerenciando Projetos OpenSource
caarlos0
0
1.4k
GoReleaser: Lessons Learned (hacktoberfest)
caarlos0
0
1.8k
GoReleaser: Lessons Learned
caarlos0
0
2.4k
Go 1.10 Release Party @ Joinville Go Meetup
caarlos0
0
2k
Monitoring @ ContaAzul
caarlos0
0
2.2k
Other Decks in Technology
See All in Technology
Redmineの意外と知らない便利機能 (Redmine 6.0対応版)
vividtone
0
190
ブロックチェーンR&D企業における SREの実態 / SRE Kaigi 2025
datachain
0
3.9k
Site Reliability Engineering on Kubernetes
nwiizo
6
4.4k
CloudWatch Container Insightsを使ったAmazon ECSのリソース監視
umekou
1
120
アーキテクチャわからん、の話
shirayanagiryuji
0
150
あなたはJVMの気持ちを理解できるか?
skrb
5
2k
Skip Skip Run Run Run ♫
temoki
0
360
Makuake*UPSIDER_LightningTalk
upsider_tech
0
190
例外処理を理解して、設計段階からエラーを「見つけやすく」「起こりにくく」する
kajitack
12
3.7k
教師なし学習の基礎
kanojikajino
4
350
さいきょうのアーキテクチャを生み出すセンスメイキング
jgeem
0
270
インシデントキーメトリクスによるインシデント対応の改善 / Improving Incident Response using Incident Key Metrics
nari_ex
0
3.9k
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
222
9.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.2k
Done Done
chrislema
182
16k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
51k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Scaling GitHub
holman
459
140k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
GitHub's CSS Performance
jonrohan
1030
460k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
Building an army of robots
kneath
302
45k
Transcript
BUILDING AND RELEASING GOLANG BINARIES #1 CHANGELOG
TEXT $ WHOAMI ▸ Site Reliability Engineer @ ContaAzul ▸
@caarlos0 on twitter, github, etc ▸ Writing stuff in Go since ~2015
BUILDING AND RELEASING GOLANG BINARIES #1 CHANGELOG
TEXT AGENDA ▸ Building ▸ Releasing ▸ Automation ▸ Questions
BUILDING
BUILDING CROSS-COMPILING GO ▸ Go can build from and to
basically any platform ▸ Statically linked binaries (no deps!!!) ▸ GOOS=windows GOARCH=amd64 go build -o blah_win64 GOOS=linux GOARCH=amd64 go build -o blah_linux64 GOOS=darwin GOARCH=amd64 go build -o blah_darwin64 ...
RELEASING
RELEASING LINUX PACKAGES ▸ DEB and RPM packages ▸ fpm
--a-thousand-params ▸ Snaps ▸ snapcraft --another-thousand-params config.yml
RELEASING HOMEBREW ▸ Homebrew core ▸ Harder to get things
in there: licensing, replicating dependencies into the recipe, etc ▸ brew install mytool ▸ Homebrew taps ▸ brew install caarlos0/tap/mytool
RELEASING DOCKER ▸ FROM scratch COPY mybin / ENTRYPOINT ["/mybin"]
▸ docker build -t user/img:tag . ▸ docker tag user/img:tag user/img:latest ▸ docker push user/img:tag ▸ docker push user/img:latest
RELEASING GITHUB RELEASES ▸ git tag && git push ▸
Upload artifacts ▸ Generate and upload checksums maybe ▸ Edit the release notes
"THE PROCESS"
TEXT RELEASING MY GO APP THE FIRST TIME: ▸ Tag
▸ Cross compile ▸ Checksums ▸ Release notes ▸ .deb, .rpm, .snap ▸ docker images ▸ Upload ▸ Update homebrew tap
HMM, THAT'S ACTUALLY NOT THAT BAD! Carlos Becker TEXT
TEXT RELEASING MY GO APP FOR THE 10TH TIME: ▸
Tag ▸ Cross compile ▸ Checksums ▸ Release notes ▸ .deb, .rpm, .snap ▸ docker images ▸ Upload ▸ Update homebrew tap
None
None
None
None
... Carlos Becker TEXT
None
None
AUTOMATION INTENSIFIES
TEXT ./RELEASE.SH ▸ Copy-paste all the commands in one file
▸ chmod +x ▸ ./release.sh
TEXT ./RELEASE.SH ▸ No parallelism ▸ Every repo has its
own release.sh ▸ GNU vs BSD coreutils aka "Works on my machine" ▸ Random deps or really hacky scripts
None
GORELEASER INTRODUCING
GORELEASER FEATURES ▸ Checks git state ▸ Changelog between tags
▸ Builds for several platforms ▸ Archiving (tar.gz, zip) ▸ FPM, Snapcraft and Docker integration ▸ Homebrew taps ▸ Checksums ▸ Snapshots ▸ Fairly customisable
GORELEASER INIT ▸ goreleaser init ▸ vim .goreleaser.yml ▸ git
add .goreleaser.yml ▸ git commit -m 'goreleaser setup!'
GORELEASER RELEASE PROCESS ▸ git tag x.y.z ▸ git push
x.y.z ▸ goreleaser
GORELEASER CI INTEGRATION ▸ after_success: test -n "$TRAVIS_TAG" && curl
-fsL https://git.io/goreleaser | bash ▸ Push the tag ▸ Drink some coffee
None
None
HOW IT WORKS
None
None
None
None
GORELEASER WHY BOTHER ▸ Easy release process ▸ More releases
▸ Smaller changes ▸ Reproducible releases ▸ Fewer and more traceable bugs ▸ Same process across multiple repos ▸ Focus on your code
STATS
"THATS NICE, BUT NO ONE WILL GIVE A CRAP ABOUT
IT ANYWAY..." Carlos Becker TEXT
Generated with caarlos0/starcharts
Generated with goreleaser/users
THANKS!
QUESTIONS?
GORELEASER LINKS ▸ https://goreleaser.com ▸ #goreleaser on https://gophers.slack.com ▸ https://github.com/goreleaser/goreleaser
▸ https://github.com/goreleaser/users ▸ https://github.com/caarlos0/starcharts ▸ https://brew.sh ▸ http://snapcraft.io ▸ https://github.com/jordansissel/fpm