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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Carlos Alexandro Becker
September 21, 2017
Technology
1
2.4k
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
Building GoReleaser - from shell script to paid product
caarlos0
0
4.1k
Serving TUIs over SSH with Go
caarlos0
0
2k
construindo uma carreira com opensource
caarlos0
0
480
Introdução ao GoReleaser
caarlos0
0
1.2k
Intro to GoReleaser
caarlos0
0
1.2k
Intro to GoReleaser
caarlos0
0
1.6k
Gerenciando Projetos OpenSource
caarlos0
0
1.6k
GoReleaser: Lessons Learned (hacktoberfest)
caarlos0
0
2k
GoReleaser: Lessons Learned
caarlos0
0
2.8k
Other Decks in Technology
See All in Technology
Databricksアシスタントが自分で考えて動く時代に! エージェントモード体験もくもく会
taka_aki
0
330
自動テストが巻き起こした開発プロセス・チームの変化 / Impact of Automated Testing on Development Cycles and Team Dynamics
codmoninc
1
1.1k
us-east-1 に障害が起きた時に、 ap-northeast-1 にどんな影響があるか 説明できるようになろう!
miu_crescent
PRO
9
3.2k
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
1.6k
「ヒットする」+「近い」を同時にかなえるスマートサジェストの作り方.pdf
nakasho
0
130
モブプログラミング再入門 ー 基本から見直す、AI時代のチーム開発の選択肢 ー / A Re-introduction of Mob Programming
takaking22
1
180
チームメンバー迷わないIaC設計
hayama17
5
3.9k
LLM のプロダクト導入における開発の裏側と技術的挑戦
recruitengineers
PRO
1
110
OpenClawで回す組織運営
jacopen
3
580
EMからICへ、二周目人材としてAI全振りのプロダクト開発で見つけた武器
yug1224
4
440
生成AIの利用とセキュリティ /gen-ai-and-security
mizutani
1
1.3k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.4k
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
1.1k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
330
The Cult of Friendly URLs
andyhume
79
6.8k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
200
The Cost Of JavaScript in 2023
addyosmani
55
9.7k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
810
SEO for Brand Visibility & Recognition
aleyda
0
4.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Thoughts on Productivity
jonyablonski
75
5.1k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
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