Trong bài viết này mình xin chia sẻ cách mình cấu hình tự động Linting và Formatting code.
Thông thường, mỗi khi code xong bạn sẽ tiến hành review, chạy test trước khi có thể commit và push lên git. Nhưng đôi khi bạn có thể sẽ quên làm việc này push luôn lên git.
Pre-commit
pre-commit hooks là một cơ chế của hệ thống điều khiển phiên bản git. Họ cho phép bạn thực thi lệnh ngay trước khi commit. Có một gói Python được gọi là pre-commit cho phép bạn tạo và sử dụng các pre-commit hook với giao diện đơn giản hơn. Gói Python có một hệ thống plugin để tự động tạo các pre-commit hook. Nó không chỉ dành cho các dự án Python mà còn cho bất kỳ dự án nào.
Trong bài viết này, mình sẻ sử dụng nó với cloudformation, môt tools IaC của aws (mình hay đùa là IaT – text), trước khi mình commit code lên git thì mình sẽ chạy lệnh
cfn-lint templatetemplate.yaml
sudo apt install python-pip
Đối với macOS
.
sudo easy_install pip
sudo pip install --upgrade pip
Cài đặt pre-commit
pip install pre-commit
Tạo file cấu hình
Trog thư mục dự án, mình tạo file .pre-commit-config.yaml với nội dung như sau
# .pre-commit-config.yaml
repos:
- repo: https://github.com/awslabs/cfn-python-lint
rev: v0.59.0 # The version of cfn-lint to use
hooks:
- id: cfn-python-lint
files: .*\.(yml|yaml)$
exclude: .pre-commit-config.yaml
Files: là đường dẫn dẫn đến nơi chứa template.yaml, nếu bạn để trong một sub floder.
exclude: file mà bạn không muốn thực thi pre-commit.
sau đó chạy lệnh
❯ pre-commit install
pre-commit installed at .git/hooks/pre-commit
❯ git commit -m 'add pre-commit'
[WARNING] Unstaged files detected.
[INFO] Stashing unstaged files to /Users/quannhm/.cache/pre-commit/patch1649924519-95086.
[INFO] Initializing environment for https://github.com/awslabs/cfn-python-lint.
[INFO] Installing environment for https://github.com/awslabs/cfn-python-lint.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
Sau đó mình sẻ test bằng cách tạo một thay đôi trong file template, sau đó commit nó lên
❯ git add .
❯ git commit -m 'update db, add cloudwathc cpu, ram'
AWS CloudFormation Linter................................................Passed
[quannhm 55ac073] update db, add cloudwathc cpu, ram
2 files changed, 108 insertions(+), 4 deletions(-)
create mode 100644 .pre-commit-config.yaml
Hook đã được thục thi.
Tùy vào ngôn ngữ mà bạn đang code, mà bạn sẽ cấu hình file .pre-commit-config.yaml cho phù hợp, dưới đây là file mẫu cho Terraform.
repos:
- repo: https://github.com/antonbabenko/pre-commit-terraform
rev: v1.64.0
hooks:
- id: terraform_fmt
- id: terraform_validate