[好書分享] 創意競擇 - 蘋果前iPhone首席軟體工程師獨家告白

創意競擇 - 從賈伯斯黃金年代的軟體設計機密流程,窺見蘋果的創意方法、本質與卓越關鍵
Creative Selection: Inside Apple's Design Process During the Golden Age of Steve Jobs
作者: 肯.科辛達  
原文作者: Ken Kocienda  
譯者: 洪慧芳  
出版社:臉譜 
出版日期:2021/01/26 

買書推薦網址:

前言:

這一本是今年所讀完的第四本書。 當初也是聽到 「「現在開始你們都是鍵盤工程師!」iPhone 鍵盤的誕生與賈伯斯時代的蘋果軟體設計流程」的結果馬上就買了這一本書的電子版(週日買),作天晚上(週三)就看完了。 為什麼會這麼想要看這本呢? 我的理由如下:

  • 這是第一本由 「蘋果首席iPhone軟體開發工程師」(註解: Principle iPhone Software Engineer,通常在外商科技公司中, Principle Software Engineer 通常就是非管理職的最高職位)所寫的書籍。
  • 這也是一本講解有賈伯斯在的時候蘋果所產生出來的氛圍,還有一個好的功能是如何挑選出來的。

蠻推薦給大家看的,有興趣可以買來看。

內容簡介與心得:

──蘋果前iPhone首席軟體工程師獨家告白──
──Steve Jobs賈伯斯黃金時代蘋果創意法則全紀錄!──

蘋果產品全球有近二十億使用者,但催生、實現這些創意的所有工作流程,
由於內部嚴格的「保密條款」限制,始終成謎。
天才們究竟是如何孕育出iPhone、iPad、Safari……?
蘋果前首席軟體工程師,首度揭露賈伯斯黃金時代的蘋果設計開發流程,以及成就Apple的關鍵要素

章節條列

  • Introduction前言
  • The Demo演示
  • The Crystal Ball水晶球
  • The Black Slab黑色方碑
  • One Simple Rule大道至簡
  • The Hardest Problem最難的問題
  • The Keyboard Derby鍵盤大賽
  • QWERTY英打鍵盤QWERTY
  • Convergence聚合
  • The Intersection交會點
  • At This Point此時此刻
  • Epilogue後記

整本書從一個 iPad 的鍵盤設計展示開始(也是作者最後一次在公司看到賈伯斯),慢慢回想到作者如何被找來蘋果開發軟體。 如何協助開發 Mac 上面的瀏覽器,也是因為瀏覽器的開發讓作者第一次感受到十倍工程師的能力。裡面的小故事是: 一開始作者想透過 Mozila 的原始碼修改移植到 Mac OS 上面。但是因為 Mozilla 實在太龐大了,所以導致作者花了六個禮拜還不能讓 Mozilla 在 Mac OS 上面正確的執行(應該說連編譯 compile 都不行)。 但是新成員查理的加入,他用了兩天的時間就就透過自己寫的一層 Shim 讓 Mac OS 能跑 KDE 上面的瀏覽器(Shim 是一層欺騙層,一方面騙 KDE 瀏覽器正在 KDE 上面,一方面騙 Mac OS 他跑的是 Mac 軟體。 (類似 Kubernetes 裡面的 Dockershim )

這也是一個很特別的故事分享(原來強者可以兩天內寫好一個 shim 啊啊啊啊啊)

完成了 Mac OS 上面的瀏覽器(也就是我們後來熟知的 Safari ),作者有機會能高升為 iCloud (當時還是網路儲存),但是因為自己的不適應,竟然用跳槽威脅老闆們要當回工程師。(這也是很有趣的例子,原來真的有人願意單純當工程師)。 然後作者也加入了後來的 Purple 團隊(也就是蘋果最偉大的產品 iPhone)的團隊。 也是這個機會讓後來作者能有機會能夠在賈伯斯面前 demo 新功能「鍵盤的功能」。 現在 iPhone 上面的鍵盤就是作者參與製作的功能,並且也是作者打造出的自動拼字的功能,也是他打造出手指調整。也就是按鈕按下去得時候,往往使用者以為是指尖按到,但是往往會是指腹會先碰到螢幕。造成使用者以為不精準(其實是自己先碰到),連這個都能改善,真的是蘋果啊!!

心得:

蘋果的許多展新功能不是透過許多人的腦力激盪,而是透過許多不同的展示。許多有天賦的工程師透過高效率的樣品與展示,讓賈伯斯與許多高層能夠透過展示的成果決定那些功能是不是蘋果需要的功能。 這些段落在書中有詳細的敘述,也是很值得看的段落。身為工程師能了解如何做高效地展示,並且如何在展示的途中思索如何讓許多人能接受自己的展示。都是很重要的能力。

想要快速了解書內容,可以聽聽 Podcast 。但是身為工程師的話,建議一定要看本書。

參考文章

[學習心得][Golang] 簡單介紹幾個 Golang 1.16 的新功能

前言:

這篇文章拖得有點久(再不寫完 1.17 就要出了)

整理一下 Go 1.16 最新的幾個重要功能,其中最重要就是 Retract 跟 Embed Package 。大家趕快來試試看。

TL;DR

本篇文將要介紹:

如何安裝嚐鮮版本的 golang 1.16

如果你想要嘗試一下,還沒有在 Homebrew 上有支援的 Golang 版本,就目前 (2021/02/19) 狀況由於許多相關套件還沒有更新好,造就 HomeBrew 遲遲無法 Merge ,大家可以參考一下這個 PR

那如何在本地端安裝一下測試版本的 Go1.16 呢? 就如同本文開場圖片的敘述一下:

go get golang.org/dl/go1.16
go1.16 download

如此一來,就會在本地端安裝一個編譯好的檔案。 go1.16 如果需要相關的測試可以直接跑 go1.16 build 或是 go1.16 test 來跑。

1.16 新功能主要列表

Apple Sillicon (也就是目前的 Apple M1 Chip) support

這個版本正式支援 apple Silicon 誒就是 64-bit ARM 架構。(a.k.a. Apple M1 chip) 。 可以透過 compiler 參數:

  • GOOS=darwin,
  • GOARCH=arm64

來設定,而原先的 iPhone binary 設定則改為:

  • GOOS=darwin,
  • GOARCH=ios/arm64

可以透過指令 env GOOS=darwin GOARCH=arm64 go build 來編譯出給 Apple M1 的 binary 。

Go Module Retract

這部分可以參考我的另外一篇詳細文章。 [學習心得][Golang] Go 1.16 新功能的「版本撤回(下架)」(Go Modules retraction)

Embedding Files (把靜態檔案包含在專案中)

以往是無法將靜態檔案,包在 Golang 的專案之中。幾個方式只有:

  • 如果要載入的檔案是 json ,將它弄成變數。
  • 如果是 html 的 template 檔案,需要跟 binary 放在一起
  • 或是可以看一下 go-bindata 的專案(相似的還有 packrpkger ),透過這個方式將 static file 放在專案中變成 resource 。

但是在 1.16 之後,可以正式支援了。

假設檔案結構為:

.
├── go.mod
├── main.go
├── static
│ └── css
│ └── main.css
├── templates
│ └── index.html.tmpl
└── title.txt

透過以下方式,可以將檔案打包到專案中:

以後要打包整個網站,不用在擔心 docker 打包的時候會忘記把 template 跟 image 資源檔案忘記打包。

相關資料

相關文章:

[學習心得][Golang] Go 1.16 新功能的「版本撤回(下架)」(Go Modules retraction)

前言:

Go Module 在 1.11 的版本正式導入了 Golang Modules 讓許多套件可以使用 Go Module 來管理相依 (Dependency) 的套件。並且在 Go 1.16 版本也預設開啟了 Go Modules 的選項。但是在開發套件 (Package) 的時候可能會發生以下的問題:

  • 忽然發現某個的套件有重大的問題,希望其他人不要使用到這個套件。
  • 不小心進版號進太多了,而且有一些人也使用到這些版本。 (e.g 本來要跑 v0.4.0 ,結果不小心寫成 v1.0.0 )

以上兩個問題,如果在套件還沒有散佈出去的話,其實都是沒有問題的。但是如果套件也散布出去的話,就需要透過套件的撤回(Retract) ,來讓使用套件的開發者能了解相關的問題,也讓之後使用的人不會再用到這個版號。

本篇文章將會介紹 Go 1.16 裡面一個比較沒有被重點宣傳的功能(大部分人注意的是 Apple M1 支援),並且透過官方給的線上範例也給版本撤回的實作。

TL;DR

本篇文將要介紹:

什麼是 Retraction ?

顧名思義就是版本的撤回,也就是將「有問題」的版本將以撤回。

為何需要 Retraction ?

通常有兩類的問題:

  • 「已經發佈」的版本中,有某個版本發現致命的錯誤需要撤回。
    • 其中「已經發佈」代表已經公開發佈在 github (或其他 repository) ,並且有人使用。
  • 不小心將版本號碼打錯了,比如說 0.4.0 的版本,後來不小心打成 1.0.0 但是又被人拿去使用。

以前要如合作撤回版本的方式

由於以往並沒有提供 Go Module Retraction ,所以發生以上情形,只能在 README 上面註解。 並沒有方式在 go get 同時獲得足夠的資訊。

如何使用 Go modules Retraction

這裡透過線上 Go Dev Playground,直接一步步講解主要的問題解決方式。 詳細的程式碼,可以到裡面去查看。

問題 1: 發現有某個版本出現了重大問題怎麼辦?

假設你管理套件 gopher.live/ue0ddd4a99c02/proverb ,目前已經發佈到了 0.2.0 的版本出去。但是發現你這個版本有重大的問題。需要把這個版本撤回(或是下架),那麼你可以在套件的 repo 中輸入以下的指令:

go mod edit -retract=v0.2.0

這樣一來,就會發現 go.mod 檔案變成以下的內容

module gopher.live/ue0ddd4a99c02/proverb

go 1.16

// Go proverb was totally wrong
retract v0.2.0

這時候,我們可以加上一些註解在 go.mod 檔案內,這樣一來其他人要使用的時候,也會出現相關註解。

git add -A
$ git commit -q -m "Fix severe error in Go proverb"
$ git push -q origin main
remote: . Processing 1 references        
remote: Processed 1 references in total        
$ git tag v0.3.0
$ git push -q origin v0.3.0

透過以上方式,可以將版號推進一號。也已經把正確的內容修正好了。

如果其他人想要拉下有問題的版本,就會出現相關警告。

go get gopher.live/ue0ddd4a99c02/[email protected]
go: warning: gopher.live/ue0ddd4a99c02/[email protected]: retracted by module author: Go proverb was totally wrong
go: to switch to the latest unretracted version, run:
	go get gopher.live/ue0ddd4a99c02/proverb@latestgo get: downgraded gopher.live/ue0ddd4a99c02/proverb v0.3.0 => v0.2.0

這樣的方式,就可以透過這個方式來達到撤回版本的流程。

相關疑問:

  • 如果沒有執行 go get 來連接查詢,是不是沒有辦法取得版本撤回的資訊?
    • 沒有錯,目前依舊需要透過 go get 或是 go list 來取得資料。

相關學習資源

[好書分享] 訂閱經濟-如何用最強商業模式,開啟全新服務商機(Subscribed)

訂閱經濟 - 如何用最強商業模式,開啟全新服務商機 (Subscribed)

原文作者: Tien Tzuo、Gabe Weisert  
譯者: 吳凱琳  
出版社:天下雜誌出版 

買書推薦網址:

前言:

這一本是今年所讀完的第三本書。 Netflix , Spotify 許多訂閱服務已經存在在你我的生活之中。你否有思考過,你一個月需要繳交多少的訂閱服務呢? 但是訂閱服務的商業模式是否是每一個產業都可以採用的? 如果真的要將產品的販售模式改成訂閱模式,會經過那一些痛苦的轉換呢? 購買訂閱模式的客戶,有哪一些需要改變的流程呢?

這一本書由全球最大訂閱管理平台祖睿(Zuora)執行長暨共同創辦人所分享的經驗談,談到了他之前在 Salesforce 與他自己創辦的 Zuora 後,對於訂閱服務的一個看法,並且分享產業轉換到訂閱產品服務可能會遇到的過程。

內容簡介與心得:

百年一遇的商業大變革,萬物皆可訂閱的時代已經來臨。
史丹佛最新熱門課程、全球最大訂閱管理平台執行長
教你掌握下個十年最重要商業趨勢——
萬物被連結,數據被秒解,競爭關鍵在服務。
最潮也最強的新商業模式,企業必懂、消費者必看!

章節條列

第一部 最強也最潮的商業創新

一開始作者開始介紹訂閱服務的整體重點,還有訂閱服務如何改變這個世界。 Netflix 透過訂閱服務改變了影音出租行業,讓曾經獨佔龍頭的百視達也只能落寞下場。 甚至是Microsoft 與 Adobe 這些曾經是商業軟體銷售龍頭,如何改變產品銷售策略,來將其產品改變為訂閱服務。

舊的產品思維是:

  • 做一個好產品
  • 透過通路與業務,賣給客戶
  • 透過行銷方式讓客戶來購買。
  • 收取利潤,開發下一個產品(回到一開始成為循環)

但是隨著時代的變遷,用戶開始對於產品的要求越來越多。功能需求開發量也越來越大,如何界定新的產品服務變成一個很困難的問題。而訂閱服務的流程很明顯的不同:

  • 打造一個好服務
  • 免費(或是極低代價)吸引用戶來試用
  • 透過訂閱獲得完整(更優秀)的功能
  • 獲得訂閱的利潤。
  • 透過定期得少量更新來讓產品更加優秀,吸引新的用戶或是取得向上銷售(upsale)的機會。

這樣的數位轉型,形成了新一波的典範轉移。這一個章節也提到了報社,航空公司,火車行業如何透過訂閱方式來轉移。

產品銷售模式的轉換 - 魚形曲線

如果要將產品銷售模式的從舊有的販賣方式改變成訂閱模式,可能會經歷一個利潤下降,但是成本上升的時段。主要原因是因為客戶轉換到訂閱模式後,造成當下的現金流減少。並且需要相關系統轉換的成本與人員的訓練。 這一系列的變換,被稱為「The Fish Model 」。

大家可以參考一下由微軟執行長曾經在某次演講上提到的相關內容 - The Secret to Satya Nadella’s Success is a Fish-Shaped Curve。 這也是許多人經常提到的,企業轉型重點在能不能吃得下那一條「魚」。

第二部 顧客導向,成為訂閱新贏家

假設經過了內部的討論後,公司內部也決定要將產品的銷售方式轉換到訂閱模式的話。那麼有那些地方需要變動呢? 這一個部分在書上也有許多的著墨的地方。並且透過系統面,人事面,心理層面有許多相當實際的討論。

首先是產品的開發流程,由於產品的銷售方式變成訂閱後。 並不是收到相關的費用來支持下一次的開發,必須要讓功能的開發更有系統化,更敏捷的方式來跟你的客戶溝通。

接下來行銷在銷售產品的流程上也會有巨大的變動,改換成訂閱模式後並不代表不需要行銷。但是以往的行銷是在於新產品發售後需要一個檔次的相關廣告來行銷。 對於舊有產品用戶的轉換宣傳,如何讓他們願意順利的轉換到新的付費機制上。都是行銷需要考量的層面。首先可以思考的是從以往出走的客戶群來下手,會出走的客戶群往往都是因為「費用」,「功能」等等因為而轉往競爭者。 透過消費模式的轉換,可以再次接近舊有的出走客戶來給予新的提案。

最後這本書也提到一個很有趣的點「資訊系統的配合」,一開始我還看不太懂。原來指的是銷售系統需要改變成「訂閱的模式』。如何透過訂閱模式來計算公司的收入模型,並且如何透過訂閱模式來開相關的政府單位需要的支出文件(發票或是明細)。 都是資訊系統需要的(當然這似乎也是作者從事的部分 XD )。

參考文章

心得:

其實在十年前,在我第一份工作上有機會在幫公司的產品加上訂閱相關的功能(雖然搞得快死)。 那時候對於訂閱模式也沒有感覺,直到近幾年才覺得訂閱經濟已經慢滿的改變你我的生活。那時候主要還是弄加上訂閱機制,才知道有許多相關加密與訂閱流程。並且針對功能的開啟與解鎖都需要相關的控制。

近年來針對許多產業都將產品的銷售流程改成訂閱模式,從影片,甚至到了最多人爭議的音樂 CD 。進階的也造成了音樂產業的轉型。現在的藝人無法透過完整專輯的銷量帶來大量的收入,反而需要透過許多的廣告代言,宣傳代言,出席相關的場合所帶來的收入。

我想許多的產品也會是如此,資訊產品更是。許多的單一功能的產品也透過訂閱方式來讓使用者付費。 雖然一年內,可以完整費用是變少的,但是隨著年份的增加也是有相關的支出會產生。 加上訂閱費用往往在使用這這邊是不容易管理的。

這本書有許多實際上的演練與系統上的討論(當然也因為作者要賣東西?),但是相關討論事實上也是需要先注意到的。蠻適合非資訊人員與技術人員都應該要看一下的。

[好書分享] Instagram崛起的內幕與代價 - 以及它如何改變了文化、商業、科技、媒體,與我們每一個人

Instagram崛起的內幕與代價-以及它如何改變了文化、商業、科技、媒體,與我們每一個人
(No Filter : The Inside Story of Instagram)
原文作者: Sarah Frier  
譯者: 余韋達  
出版社:臉譜 
出版日期:2020/11/26 語言:

買書推薦網址:

前言:

這一本是今年所讀完的第二本書。 會讀這本書主要是因為聽「星箭傳播」的Podcast 節目第八十七集(不能再多?)的節目介紹到這本書。雖然有一個多小時的 Podcast 介紹這本書,但是還是讓人欲罷不能,很想買來好好的閱讀。

這本書主要是介紹 Instagram 的崛起,到了 2012 被臉書以十億美金的收購價格收購。一開始雖然承諾會讓 Instagram 以獨立的方式來發展,但是隨著臉書的使用者逐漸地轉移到了 Instagram ,也讓臉書的人做了許多相關的干涉,最後導致創辦人 Kevin Systrom 離開了臉書。 裡面有許多詳細的描述,也讓人更了解臉書是如何併購一家公司。

參考節目:

內容簡介與心得:

創立於2010年的Instagram,在短短數年內崛起,為目前全球互動率第二高的社群媒體平台,僅次於臉書。每個月全球有超過十億人使用Instagram,日活躍用戶高達五億,每天上傳的照片與影片超過一億則。2019年,它的年廣告營收高達兩百億美金,表現大勝 YouTube的五十億。

究竟非典型的矽谷創業家凱文.斯特羅姆與出身巴西的工程師麥克.克里格,是如何在一片紅海中以「反直覺」的決策打造出Instagram,並帶領它在短短十八個月內從不被看好到一夕爆紅,吸引臉書(Facebook)CEO馬克.祖克柏斥資十億美金天價收購,進一步獲得今日商業上的成功?在傳奇性成功的背後,Instagram以及所有使用者,又付出了哪些代價?

章節條列

  1. 第一章 代號:計畫
  2. 第二章 成功的混亂
  3. 第三章 一場驚喜
  4. 第四章 充滿不確定性的夏天
  5. 第五章 快速移動,打破成規
  6. 第六章 全面宰制
  7. 第七章 新名人階級
  8. 第八章 追尋Instagram的價值
  9. 第九章 Snapchat危機
  10. 第十章 自相殘殺
  11. 第十一章 另一則假新聞
  12. 第十二章 執行長
  13. 結語 收購的代價

2010 年所開始的服務 Instagram ,一開始主打的就是簡單的相片分享服務與相片濾鏡服務。靠著分享到臉書與推特的功能,開始讓更多的人來加入使用。走著跟臉書不同的路線,主打著攝影分享,讓使用者可以快速分享,以使用者為主的概念。很快速地獲得許多的人加入。 但是也被競爭對手(?)臉書看上,在 2012 併購,本書也介紹了整起併購案的整個經過(當然是透過新聞與許多其他人的採訪得知)。

雖然進入了臉書,一開始也是維持得獨立的方式來經營。一反臉書主要以廣告平台的經營方式, Instagram 透過主動與廣告主主動聯繫,並且提供許多的建議與專屬的優惠。讓許多的廣告商(甚至本來不喜歡臉書的廣告商)也會來投放 Instagram 的廣告。也透過使用者為主的經驗,並且沒讓人(明顯)感受到臉書擁有 Instagram 的狀況下。 也加入許多功能加入讓臉書可以一舉打敗許多競爭對手(Snapchat) , 並且也在 2019 年讓使用者增長到十億,並且收入也高達臉書整體收入的四分之一。 最恐怖的是,當許多年輕人都在笑臉書使用者老派的時候而跳去使用 Instagram ,卻沒有人感受到其實他也是臉書的使用者之一。

但是世界上並沒有那麼美好, Instagram 的快速成長令一方面也讓臉書的使用者成長遲緩了。 於是臉書的高層(Growth Hacking team?) 也做了許多研究,並且開始阻礙許多來自於臉術轉換到 Instagram 的流量方式。當初「獨立發展」看起來也並沒有完全的實現,也導致創始人在 2019 年離開臉書。 本書基本上有大概百分之二十的部分都在講解著他們成功所帶來的「犧牲」與「掙扎」。還有當初答應臉書購併所帶來的「代價」。

心得:

我想所有的新創公司的人,許多人都希望在成長得時候能夠順利地被大公司所收購。但是沒有人想過,許多好的服務都是避免被坐大才被對手「防禦性收購」的方式所購買下來。 雖然臉書收購了 Instagram 之後,沒有馬上將它下架並且並為己有。 也讓 Instagram 成長到超過十億的使用戶。 但是由於許多的人就是不喜歡臉書而逃避到 Instagram 想不到還是在臉書的旗下。 也難怪許多人會說臉書收購 Instagram 可以說是近十年最值得的併購案。

本書也清楚的交代了一家公司被併購後,並不是馬上所有人都能夠雞犬升天,馬上就坐擁千萬的財產。許多的併購案往往都只有讓工程人員得以併入母公司,雖然可能獲得便宜的換股機會,但是也並非所有人能夠用漂亮的股價直接轉換成現金。並且併購發生後往往會有母公司與子公司的資源分配問題,與「功高震主」的機會。就像是本書的 Instagram 一樣,遇到許多來自於母公司的審核與干涉。這些真實世界的內幕,在這本書很難得敘述得相當清楚。很推薦新創產業的從業人員好好看一看這本書。

[TIL][Golang] 使用 GoReleaser 打包你用 Golang 寫的 CLI (Command Line Tool),並且搭配 Github Actions 準備 Changelogs

前言:

使用 Golang 來開發小工具最方便的方式,就是可以很快速將程式碼託管在 github.com 。 並且透過 Golang 的跨平台編譯的工具,可以快速打包出各種平台(Windows, Linux 跟 Mac 平台)的執行檔。

那麼有沒有方式可以直接在 github.com 發行新的版本後,直接就打包好所有執行檔變且幫你把 Changelog 都打好呢?

TL;DR

本篇文將要介紹:

以前要如何打包你的 Golang CLI ?

在以前的時候,曾經有出過一個很方便可以快速打包所有平台執行檔案的小工具。 Gox 就是一個很方便的小工具:

GOX 快速快平台打包工具(以前)

https://github.com/mitchellh/gox

$ go get github.com/mitchellh/gox
...
$ gox -h
...

就這麼簡單,就可以快速編譯跨平台的工具。 其實因為 Golang 從 1.5 之後就支援跨平台編譯。 其實跨平台編譯透過

env GOOS=linux GOARCH=arm go build -v github.com/constabulary/gb/cmd/gb

透過這個方式就可以快速的打包你的工具,所以其實後來 gox 就也比較沒人在用。

需要注意地方:

  • AMD 64 只能編譯 AMD64
  • 如果要編輯 ARM 就需要使用到 ARM 版本的處理好才可以。

關於跨平台打包(編譯)更多的文章:

關於跨平台編譯更多的詳細敘述,可以參考這篇 Dave Cheney 的文章。

GoReleaser 一個好用的打包發佈的工具

後來我也看到 https://github.com/kkdai/youtube 一起在打造的夥伴們有導入 GoReleaser 。 看了一下,發現還真的蠻好用的。

這裡簡單介紹一下, GoReleaser 有做哪些事情:

  • 幫助你一次透過多平台打包套件
  • 可以深度整合 Github 跟 Gitlab 讓你直接發佈整個產品提供下載
  • 可以幫忙整理出 ChangeLog 可以幫忙整理出 ChangeLog 可以幫忙整理出 ChangeLog (懶人福星)
  • 整合 Docker 相關功能(打包 Docker Image)

GoReleaser 的安裝方式

  • brew install goreleaser/tap/goreleaser
  • curl -sfL https://install.goreleaser.com/github.com/goreleaser/goreleaser.sh | sh

如何使用 GoReleaser

參考 GoReleaser QuickStar

  • goreleaser init 來產生 .goreleaser.yml 的樣板檔案

  • 來測試一下打包 goreleaser --snapshot --skip-publish --rm-dist

  • 設定環境變數,讓你可以跟 Github 整合 export GITHUB_TOKEN="YOUR_GH_TOKEN"

  • 如果需要發布新版本,依照以下兩個步驟:

    • git tag -a v0.1.0 -m "First release"
      git push origin v0.1.0
      
    • goreleaser release
  • 就會在 Github release 直接產生一個 Release ,並且把 ChangeLog 都包進去

是不是很方便?

可能會有的問題

第一次使用 GoReleaser 可能會遇到以下問題:

  • 確認 Github Token 有確切的當成環境變數

  • 每一次要 Release 前,需要手動將 git tag 打好 Push

  • 沒有出現 ChangeLog?

    • 記得不要打任何 Description 在你的 release
    • 記得不要打任何 Description 在你的 release
    • 記得不要打任何 Description 在你的 release

整合進 github action

Github Action 可以讓你更方便的,更直覺的來發布你的專案。而 GoReleaser 的 Github Actions 專案只需要透過以下方式:

  • 建立一個檔案在 .github/workflows/release_project.yml (檔名可換)
  • 內容參考官方範例
  • 記得加入專案的 Secrets
    • [Settings] -> [Secrets] -> (右上角) [New repository secre]
    • 名稱: GITHUB_TOKEN Token 就照之前申請的
  • 由於設定 yaml 檔裡面有設定是
push:
    tags:
      - "*" 

這樣就會每次有打 Tag 才會執行。

  • 接下來只要在 github 上頁上的 Release -> [Draft a new release] 就可以了。

想找一個打包好的樣板,試試看? Github Command-line Template Repo

https://github.com/kkdai/go-cli-template

相關文章: