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
230
Introdução ao GoReleaser
caarlos0
0
970
Intro to GoReleaser
caarlos0
0
920
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.3k
Go 1.10 Release Party @ Joinville Go Meetup
caarlos0
0
1.9k
Monitoring @ ContaAzul
caarlos0
0
2.1k
Other Decks in Technology
See All in Technology
組み込みLinuxの時系列
puhitaku
4
1.1k
ジョブマッチングサービスにおける相互推薦システムの応用事例と課題
hakubishin3
3
650
開発生産性を上げながらビジネスも30倍成長させてきたチームの姿
kamina_zzz
1
740
TinyGoを使ったVSCode拡張機能実装
askua
2
210
Terraform CI/CD パイプラインにおける AWS CodeCommit の代替手段
hiyanger
1
190
【Pycon mini 東海 2024】Google Colaboratoryで試すVLM
kazuhitotakahashi
2
240
dev 補講: プロダクトセキュリティ / Product security overview
wa6sn
0
1.8k
20241108_CS_LLMMT
shigashiyama
0
260
Team Dynamicsを目指すウイングアーク1stのQAチーム
sadonosake
1
290
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
120
エンジニアが一生困らない ドキュメント作成の基本
naohiro_nakata
2
160
Amazon CloudWatch Network Monitor のススメ
yuki_ink
0
160
Featured
See All Featured
Faster Mobile Websites
deanohume
305
30k
Typedesign – Prime Four
hannesfritz
40
2.4k
Building Applications with DynamoDB
mza
90
6.1k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Documentation Writing (for coders)
carmenintech
65
4.4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
400
Music & Morning Musume
bryan
46
6.2k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Producing Creativity
orderedlist
PRO
341
39k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
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