準備 AWS CDK Pull Request 所需的環境

(圖說:遊艇上的主廚正為客人們逐一準備沙拉,這次準備 CDK PR 所需環境的過程中,需要對每個套件逐一 yarn build。圖片來源:by wreindl。)

一邊看 Pahud 的影片【EP26 - 創建你的第一個AWS CDK pull request(4K 2160p)】,一邊做筆記備用。筆記時的環境是 macOS Catalina (10.15.6),已安裝 homebrew, zsh, nvm, docker。



貢獻指引

環境準備

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 library Cfn*

翻找 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.tsinteg. 開頭,代表 integration test。(不一定每次都要建立一個新的,視當次新增或修改的範圍大小。)
    • 看到 test.xxx-xxx.tstest. 開頭,代表 unit test。
  • import 自己的 lib/ 可用相對路徑即可。
    • e.g. import * as ecs from '../../lib;'
  • 開發時,可另開第二個 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 先看 diff
    • cdk --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 來執行。
    • 最後使用 yarn test 檢查所有 unit test 和 integ test。(未來 Pahud 會再錄一集講解 unit test。)

提交

  • 同平常的 PR 流程,略。(可參考延伸閱讀 c9s 的【Getting merged】)。
  • 記得發 PR 時的內容描述要依照格式、及提及 Issue number,多寫一點有助於 reviewer 理解。

延伸閱讀

Loading comments…