Test CI v2.1.38
Some checks failed
Go CI Pipeline / Run Tests (push) Failing after 1m38s
Go CI Pipeline / Lint Code (push) Successful in 4m48s
DNS & Network Test / network-test (push) Failing after 4s
Go CI Pipeline / Security Scan (SCA - govulncheck) (push) Successful in 5m12s
Go CI Pipeline / Build Application (push) Has been skipped

This commit is contained in:
phattt2901 2025-05-05 14:37:50 +07:00
parent 7d6d907de9
commit fa073c1f7d

View File

@ -1,90 +1,142 @@
# File: .gitea/workflows/ci.yml
# File: .gitea/workflows/ci.yml (Phiên bản cải thiện)
name: Go CI Pipeline # Tên của workflow
name: Go CI Pipeline
on: # Các sự kiện kích hoạt workflow
# Step 1: Thêm trigger pull_request
on:
push:
branches:
- master # Chạy khi push lên nhánh master
branches: [ master ] # Hoặc main
jobs:
# ---- Job: Lint Code ----
lint:
name: Lint Code # Tên hiển thị của job
runs-on: ubuntu-latest # Hoặc runner tự host có label tương ứng
name: Lint Code
# Step 3: Chuẩn hóa runs-on
runs-on: ubuntu-latest
steps:
# Step 2: Cập nhật action versions
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v4
# Step 2: Cập nhật action versions
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
go-version: '1.23' # Đặt phiên bản Go của bạn
cache-dependency-path: go.sum # Bật cache cho Go modules
- name: Run golangci-lint
uses: golangci/golangci-lint-action@v6
with:
args: --timeout=5m
# version: v1.59 # Chỉ định phiên bản nếu muốn, hoặc dùng latest
# args: --verbose # Thêm tham số nếu cần
# ---- Job: Security Scan (SCA) ----
security-scan:
name: Security Scan (SCA)
runs-on: ubuntu-latest
# needs: [lint] # Bỏ comment nếu muốn chạy sau khi lint xong, nếu không nó sẽ chạy song song với lint và test
steps:
- name: Checkout code
uses: actions/checkout@v4
version: latest # Hoặc phiên bản cụ thể
args: --timeout=5m # Giữ timeout
# Gợi ý: Tạo file .golangci.yml trong repo để cấu hình chi tiết,
# bao gồm bật các linter bảo mật như 'gosec' để có SAST cơ bản.
# cache: true # Cân nhắc bật cache của golangci-lint nếu cần
- name: Install Trivy
run: |
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh
sudo mv trivy /usr/local/bin/
- name: Scan source with Trivy
run: |
trivy fs --exit-code 1 --scanners vuln,secret --no-progress .
# ---- Job: Run Tests ----
test:
name: Run Tests
# Step 3: Chuẩn hóa runs-on
runs-on: ubuntu-latest
# needs: [lint] # Bỏ comment nếu muốn chạy sau khi lint xong
# needs: [lint] # Có thể chạy song song với lint
steps:
# Step 2: Cập nhật action versions
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4
# Step 2: Cập nhật action versions
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23' # Đặt phiên bản Go bạn đang dùng
cache-dependency-path: go.sum # Đường dẫn tới file quản lý dependency để cache
go-version: '1.23'
cache-dependency-path: go.sum
- name: Run Go Test & Coverage
# Step 7: Cài đặt tool tạo report JUnit
- name: Install go-junit-report
run: go install github.com/jstemmer/go-junit-report@latest
# Step 7: Chạy test, tạo coverage và report JUnit
- name: Run Go Test, Coverage and Generate JUnit Report
run: |
go test -v -race -coverprofile=coverage.out ./...
# Chạy test với -v để go-junit-report có input, lưu output vào file log
go test -v -race -coverprofile=coverage.out ./... | tee test-output.log
# Tạo report JUnit từ output log
cat test-output.log | ~/go/bin/go-junit-report -set-exit-code > report.xml
# Tạo report coverage dạng text (tùy chọn)
go tool cover -func=coverage.out
# Step 7: Upload Test Results (JUnit XML)
- name: Upload JUnit Test Report
# Chạy step này ngay cả khi test thất bại để luôn có report
if: always()
uses: actions/upload-artifact@v4
with:
name: test-report-junit
path: report.xml
# Step 7: Upload Coverage Report
- name: Upload Coverage Report
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage.out
# ---- Job: Security Scan (SCA - govulncheck) ----
sca_scan:
name: Security Scan (SCA - govulncheck)
# Step 3: Chuẩn hóa runs-on
runs-on: ubuntu-latest
# needs: [lint, test] # Có thể chạy song song với test và lint
steps:
# Step 2: Cập nhật action versions
- name: Checkout code
uses: actions/checkout@v4
# Step 2: Cập nhật action versions
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
cache-dependency-path: go.sum
# Step 5: Thay Trivy bằng govulncheck action
- name: Run Go Vulnerability Check (govulncheck)
uses: golang/govulncheck-action@v1
# govulncheck sẽ tự động fail job nếu tìm thấy lỗ hổng có thể bị ảnh hưởng
# ---- Job: Build ----
build:
name: Build Application
runs-on: linux-amd64
# Quan trọng: Job này chỉ chạy sau khi các job kiểm tra thành công
needs: [lint, security-scan, test]
# Step 3: Chuẩn hóa runs-on
runs-on: ubuntu-latest
# Quan trọng: needs phải bao gồm tất cả các job kiểm tra trước đó
needs: [lint, test, sca_scan]
steps:
# Step 2: Cập nhật action versions
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v4
# Step 2: Cập nhật action versions
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23' # Đặt phiên bản Go bạn đang dùng
go-version: '1.23'
cache-dependency-path: go.sum
# Step 6: Build với các cờ tối ưu và version info
- name: Build Go Application
run: go build -v -o ./bin/server ./cmd/server # Đường dẫn tới code main của bạn
run: |
# Lấy thông tin version (ví dụ: tên tag hoặc tên nhánh + SHA ngắn)
# Lưu ý: Biến context của Gitea có thể là gitea.* thay vì github.*
APP_VERSION="${{ gitea.ref_name }}-${{ format('{0}', gitea.sha) }}"
# Thay main.version bằng đường dẫn thực tế đến biến version trong code của bạn
go build -v -ldflags="-s -w -X main.version=${APP_VERSION}" -o ./bin/server ./cmd/server
# (Optional) Bạn có thể thêm bước Upload Artifact ở đây nếu muốn lưu trữ file binary build ra
# - name: Upload build artifact
# uses: actions/upload-artifact@v3
# with:
# name: server-binary-${{ github.sha }}
# path: ./bin/server
# Step 6: Upload artifact binary
# Step 2: Cập nhật action versions
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: server-binary # Tên artifact rõ ràng hơn
path: ./bin/server # Đường dẫn tới file binary