Merge pull request #75 from aimingmed/feature/test-coverage-report

try coverage
This commit is contained in:
Hong Kai LEE 2025-04-21 15:15:55 +08:00 committed by GitHub
commit aaaf0f4242
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 112 additions and 7 deletions

View File

@ -1,13 +1,10 @@
name: Build + CI
name: Unittest and Build + CI
# Triggers: Equivalent to ADO trigger block
on:
pull_request:
branches:
- develop
# paths:
# - 'app/**'
# - '.github/workflows/**'
# Concurrency control: Ensures only one run per branch at a time, Equivalent to batch: true
concurrency:
@ -15,8 +12,23 @@ concurrency:
cancel-in-progress: true
jobs:
run_backend_unittests:
name: Run Backend unit tests
permissions:
checks: write
secrets: inherit # Inherit secrets from the parent workflow
# Call the reusable workflow for unit tests
uses: ./.github/workflows/template_unit_pytest.yml
# Pass parameters as inputs to the reusable workflow
with:
projectName: Backend # Value defined in original variables
workingDir: app/backend
testsFolderName: tests
# secrets: inherit # Inherit secrets from the parent workflow
# This job defines the matrix and calls the reusable workflow for each image build
build:
needs: run_backend_unittests
name: Build ${{ matrix.image_config.IMAGE_NAME }}
# Define necessary permissions if needed (e.g., for GitHub Packages)
permissions:

View File

@ -1,4 +1,4 @@
name: Reusable Test Workflow
name: Reusable Integration Test Template
on:
workflow_call:

View File

@ -0,0 +1,93 @@
name: Reusable Unit Test with Pytest Template
on:
workflow_call:
inputs:
projectName:
description: 'Name of the project'
required: true
type: string
workingDir:
description: 'Working directory for the component'
required: true
type: string
testsFolderName:
description: 'Tests folder name'
required: true
type: string
jobs:
build_and_test:
name: Build and Test ${{ inputs.projectName }}
runs-on: ubuntu-latest
timeout-minutes: 120
# Define environment variables based on inputs, similar to Azure variables
env:
SRC_PATH: ${{ github.workspace }}/${{ inputs.workingDir }}
TESTS_PATH: ${{ github.workspace }}/${{ inputs.workingDir }}/${{ inputs.testsFolderName }}
TESTS_RESULTS_PATH: ${{ github.workspace }}/${{ inputs.workingDir }}/results.xml
TESTS_COVERAGE_REPORT_PATH: ${{ github.workspace }}/${{ inputs.workingDir }}/coverage.xml
# Use the working directory input for commands that need it
WORKING_DIR: ${{ inputs.workingDir }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python 3.11
uses: actions/setup-python@v5 # Use latest stable version
with:
python-version: '3.11'
- name: Install build dependencies
run: |
python -m pip install --upgrade pip
pip install pipenv
- name: Install environment including dev dependencies
working-directory: ${{ env.WORKING_DIR }}
run: |
echo "Current directory:"
pwd
echo "Listing files:"
ls -al
echo "Pipfile content:"
cat Pipfile
pipenv sync -d
- name: Run tests with pytest
working-directory: ${{ env.WORKING_DIR }}
run: |
pipenv run pytest --version
# Use the environment variables defined above for paths
pipenv run pytest -v -s -o log_cli=true --junitxml=results.xml --cov=${{ env.SRC_PATH }} --cov-report=xml:${{ env.TESTS_COVERAGE_REPORT_PATH }} ${{ env.TESTS_PATH }}
echo "Listing results in working directory:"
ls -al ${{ github.workspace }}/${{ env.WORKING_DIR }}
# Use a popular action for publishing test results for better GitHub integration
- name: Publish Test Report
uses: dorny/test-reporter@v1
if: success() || failure() # always run even if tests fail
with:
name: ${{ inputs.projectName }} Test Results
path: ${{ env.TESTS_RESULTS_PATH }}
reporter: java-junit # Specify JUnit format
# Upload coverage report as an artifact
- name: Upload coverage report artifact
uses: actions/upload-artifact@v4
if: success() || failure() # always run
with:
name: ${{ inputs.projectName }}-coverage-report
path: ${{ env.TESTS_COVERAGE_REPORT_PATH }}
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ${{ env.TESTS_COVERAGE_REPORT_PATH }}
fail_ci_if_error: true

View File

@ -1,4 +1,4 @@
[![Build + CI](https://github.com/aimingmed/aimingmed-ai/actions/workflows/build.yml/badge.svg)](https://github.com/aimingmed/aimingmed-ai/actions/workflows/build.yml)
[![Unittest and Build + CI](https://github.com/aimingmed/aimingmed-ai/actions/workflows/build.yml/badge.svg)](https://github.com/aimingmed/aimingmed-ai/actions/workflows/build.yml)
## Important note:

View File

@ -7,7 +7,7 @@ export default defineConfig({
server: {
host: true,
strictPort: true,
port: 5173
port:
},
test: {
globals: true,