Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: setup sun ci #1

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

quynt-1571
Copy link

@quynt-1571 quynt-1571 commented Oct 4, 2024

Luồng hoạt động

Biểu đồ không có tiêu đề drawio

  • Các Stage thì chạy lần lượt => stage build chạy xong thì stage check mới được chạy
  • Các jobs trong stage thì được chạy song song => tách nhỏ các job ko liên quan đến nhau để tăng tốc

image

Chi tiết

Chỉ định:

default:
  workspace: shared

workspace: shared để share files/folder cho tất cả các jobs. Điều này có nghĩa là tất cả các jobs sẽ chia sẻ cùng một thư mục làm việc. Ở đây, khi job build chạy, nó sẽ chạy các bước cần thiết như tạo file .env, cài đặt composer dependencies,... do dùng chung thư mục làm việc nên các jobs ở stage check chạy sau sẽ không cần chạy lại các bước trên.

1. Job Build Laravel

  • Thuộc stage build nên được chạy đầu tiên của quá trình CI
  • Chạy trên image Docker ghcr.io/avengerscodelovers/php:8.2-ci. Image Docker này chứa môi trường PHP 8.2 cần thiết để chạy ứng dụng Laravel.
  • Khởi tạo một dịch vụ MySQL chạy trên image Docker mysql:8.0, phục vụ cho việc chạy test với database.
  • Thiết lập các biến môi trường APP_ENV, COMPOSER_MEMORY_LIMIT, và COMPOSER_ALLOW_SUPERUSER.
    • APP_ENV được đặt là testing để chỉ định rằng ứng dụng đang chạy trong môi trường testing.
    • COMPOSER_MEMORY_LIMIT được đặt là 2G để giới hạn bộ nhớ mà Composer có thể sử dụng.
    • COMPOSER_ALLOW_SUPERUSER được đặt là 1 để cho phép Composer chạy với quyền superuser do chạy composer bên trong docker container
  • Sử dụng cache cho thư mục vendor với key là composer_vendor_$CI_BRANCH. Thư mục vendor chứa các thư viện PHP mà ứng dụng Laravel cần để chạy. Việc sử dụng cache giúp tăng tốc độ build bằng cách tái sử dụng các thư viện đã được tải về từ lần build trước.
  • Thực hiện các lệnh script sau:
    • Sao chép file .env.testing.example thành file .env.
    • Chạy composer install để cài đặt các dependencies.
    • Chạy php artisan key:generate để tạo key cho ứng dụng. Cần generate key để support chạy test.
    • Chạy php artisan migrate để thực hiện các migration cho cơ sở dữ liệu.
    • Chạy php artisan route:cache để cache các route của ứng dụng. Việc này giúp tăng tốc độ xử lý request của ứng dụng, cũng như đảm bảo việc cache route hoạt động mà không xảy ra lỗi gì (ví dụ nếu có 2 route trùng route name thì sẽ có lỗi khi chạy route:cache).

Sau khi công việc Build Laravel hoàn thành, quy trình CI sẽ tiếp tục với các công việc khác trong stage check

Tiếp theo các job thuộc stage check sẽ chạy song song: Check GKC Hashcode, Static Code Analysis, PHP Coding Convention, PHP Test Coverage and Codecov

2. Job Static Code Analysis

  • Sử dụng PHPStan thực hiện phân tích mã nguồn để tìm ra các lỗi tiềm ẩn, các lỗi thường gặp mà không phải chạy mã nguồn đó, ngăn các lỗi xảy xa khi deploy.
  • Đặt thời gian timeout cho quá trình Composer là 600 giây, vì lệnh này thường chạy lâu.

3. PHP Coding Convention

  • Được dùng để tìm ra những lỗi sai coding convention.

4. Job PHP Test Coverage and Codecov

  • Thuộc stage check.
  • Được dùng để chạy testtạo coverage, tạo coverage lên Sun*CodeCov (Athena)

5. Job check GKC Hashcode

  • Nếu dự án dùng GKC, thì có thể có thêm job check để đảm bảo GKC hashcode đã được thêm vào tất cả các file.
  • workspace: false : Job check GKC này không sử dụng workspace chung đã được định nghĩa ở default do job chỉ thực hiện một tác vụ độc lập là kiểm tra GKC hashcode và không cần đến bất kỳ dữ liệu nào từ các job khác.
  • Script gkc_util_hashcode_script.sh cài đặt tại https://github.com/framgia/gkc_utils/pull/19.
  • Job này chỉ được thực hiện đối với Pull Request, không cần chạy khi merge pull.

@quynt-1571 quynt-1571 force-pushed the setup_sun_ci branch 16 times, most recently from 55efaff to 0aee2bc Compare October 9, 2024 00:01
Copy link

Welcome to Codecov 🎉

Once you merge this PR into your default branch, you're all set! Codecov will compare coverage reports and display results in all future pull requests.

Thanks for integrating Codecov - We've got you covered ☂️

@tuanpt-0634 tuanpt-0634 added the be-contribute Notify to channel BE to request someone to contribute label Oct 9, 2024
@quynt-1571 quynt-1571 marked this pull request as ready for review October 9, 2024 01:58
.sun-ci.yml Outdated
COMPOSER_ALLOW_SUPERUSER: "1"
script:
- php artisan migrate
- XDEBUG_MODE=coverage php -dzend_extension=xdebug.so ./vendor/bin/pest --coverage-clover ./coverage.xml --ci
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Để tăng tốc thì chỗ này nên dùng Parallel Testing, tức là chạy các test cases song song
https://pestphp.com/docs/optimizing-tests#content-parallel-testing
https://laravel.com/docs/11.x/testing#running-tests-in-parallel

E thử apply xem được ko?

@@ -0,0 +1,12 @@
APP_NAME="App in testing"
APP_ENV=local

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

để value ở đây là testing được ko nhỉ?

- composer install
- php artisan key:generate
- php artisan migrate
- php artisan route:cache

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

chơi hẳn lệnh optimize đi cho máu :v

Suggested change
- php artisan route:cache
- php artisan optimize

paths:
- vendor
script:
- cp .env.testing.example .env

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

trên định nghĩa APP_ENV: testing rồi thì ở đây dùng file .env.testing cho khớp nhờ

Suggested change
- cp .env.testing.example .env
- cp .env.testing.example .env.testing

.sun-ci.yml Outdated
- name: Build Laravel
stage: build
image: ghcr.io/avengerscodelovers/php:8.2-ci
services:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
services:
services: &commonServices

Thử xem có tận dụng lại được block giống nhau bên trong file yml xem seo
https://gist.github.com/vitaLee/7803420

.sun-ci.yml Outdated
Comment on lines 72 to 78
- image: mysql:8.0
name: mysql
environment:
MYSQL_DATABASE: app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: root

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- image: mysql:8.0
name: mysql
environment:
MYSQL_DATABASE: app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: root
<<: *commonServices

Thử xem có tận dụng lại được block giống nhau bên trong file yml xem seo
https://gist.github.com/vitaLee/7803420

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@quynt-1571 quynt-1571 force-pushed the setup_sun_ci branch 6 times, most recently from 41620fc to 432102a Compare October 13, 2024 02:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
be-contribute Notify to channel BE to request someone to contribute
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants