(圖說:遊艇上的主廚正為客人們逐一準備沙拉,這次準備 CDK PR 所需環境的過程中,需要對每個套件逐一 yarn build。圖片來源:by wreindl。)
一邊看 Pahud 的影片【EP26 - 創建你的第一個AWS CDK pull request(4K 2160p)】,一邊做筆記備用。筆記時的環境是 macOS Catalina (10.15.6),已安裝 homebrew, zsh, nvm, docker。
內容大綱
貢獻指引
- aws/aws-cdk/CONTRIBUTING.md
環境準備
fork aws-cdk
Fork 一份 aws/aws-cdk。然後 git clone 到自己要開發的機器上。
install yarn & yarn install
安裝 yarn 在 mac 上。因為我的環境已經有 nvm,所以使用
curl -o- -L https://yarnpkg.com/install.sh | bash
切換到剛才 git clone fork 的專案目錄,執行
yarn install
yarn build
與 Pahud 相同採用 docker 方式進行 yarn build
,但與影片中環境不同,這裡使用 zsh:
docker run -it -e HOME=/tmp -u $(id -u) -w /app \
-v $PWD:/app \
-v /etc/passwd:/etc/passwd \
-v /var/run/docker.sock:/var/run/docker.sock \
--entrypoint='' jsii/superchain ./build.sh --skip-test
若使用 bash 可將上述 $(id -u)
改回與影片相同 ${id -u}
。
接下來等一陣子。過程中五顏六色的也滿漂亮的。我是放著 build 就去睡個覺起床再繼續了 XD
CDK L1 Construct
*.generated
是透過 CloudFormation spec 生成 CDK L1 Construct libraryCfn*
。
翻找 Issues/PR
- 回到 aws/aws-cdk 用關鍵字在 GitHub Repo Issues 裡頭尋找自己有興趣的題目。例如
ecs capacity provider
。找看看有沒有已經存在的 issue。 - 格式、規範要看一下。
feat()
= feature = 功能chore()
= 瑣事fix()
= 修(裡面寫 L2 construct name,但略掉開頭的 aws-)
開工
以下都先用 Pahud 影片中舉的例子做筆記,剛好也是我很喜歡的 ECS Capacity Provider 題目。
想要做的事情都記得從 master branch 開一個新的 branch 出去。舉例:
git checkout ecs-capacity-provider-l2
進到 @aws-cdk/aws-ecs
或自己想要動手的目錄。
主要要用到 lib/
和 test/
兩個目錄。
- 先寫 integration test,開發的過程中再去
lib/
裡面新增或修改。- 看到
integ.xxx-xxx.ts
的integ.
開頭,代表 integration test。(不一定每次都要建立一個新的,視當次新增或修改的範圍大小。) - 看到
test.xxx-xxx.ts
的test.
開頭,代表 unit test。
- 看到
- import 自己的
lib/
可用相對路徑即可。- e.g.
import * as ecs from '../../lib;'
- e.g.
- 開發時,可另開第二個 terminal。
cd packages/@aws-cdk/aws-ecs
npm runwatch
- 目標,最後一行顯示
Found 0 errors
。
- 部署測試,在第一個 terminal。
cd packages/@aws-cdk/aws-ecs
cdk --app 'test/xxx/integ.xxx-xxx.js' diff
先看 diffcdk --app 'test/xxx/integ.xxx-xxx.js' deploy
部署進去實際看結果
- 驗證測試
- 產生
integ.xxx-xxx.expected.json
檔案。 - 這個
integ.xxx-xxx.expected.json
檔案產生的方法是yarn integ xxx/integ.xxx-xxx.js
- 舉例:一開始輸入時可用 tab 快速完成
yarn integ test/ec2/integ.capacity-provider.js
然後刪除掉test/
留下yarn integ ec2/integ.capacity-provider.js
來執行。
- 舉例:一開始輸入時可用 tab 快速完成
- 最後使用
yarn test
檢查所有 unit test 和 integ test。(未來 Pahud 會再錄一集講解 unit test。)
- 產生
提交
- 同平常的 PR 流程,略。(可參考延伸閱讀 c9s 的【Getting merged】)。
- 記得發 PR 時的內容描述要依照格式、及提及 Issue number,多寫一點有助於 reviewer 理解。