diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b8c3183..27b98d1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,9 +41,11 @@ jobs: working-directory: src/${{ matrix.directory }} run: uv sync --locked --all-extras --dev - - name: Test + - name: Test and Coverage working-directory: src/${{ matrix.directory }} - run: uv run pytest + run: uv run pytest --cov=. --cov-branch --cov-report=html:htmlcov/${{ matrix.directory }} --cov-report=term-missing + env: + COVERAGE_FILE: .coverage.${{ matrix.directory }} - name: Build working-directory: src/${{ matrix.directory }} @@ -53,6 +55,15 @@ jobs: working-directory: src/${{ matrix.directory }} run: uv pip install . + - name: Upload coverage report + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.directory }}-coverage-report + path: | + src/${{ matrix.directory }}/htmlcov/* + src/${{ matrix.directory }}/.coverage.${{ matrix.directory }} + include-hidden-files: true + get-directories: runs-on: ubuntu-latest outputs: @@ -66,3 +77,38 @@ jobs: run: | directories=$(ls src | grep -v dbtools-mcp-server | grep -v mysql-mcp-server | grep -v oci-pricing-mcp-server | grep -v oracle-db-doc-mcp-server | jq -R -s -c 'split("\n")[:-1]') echo "directories=$directories" >> $GITHUB_OUTPUT + + combined-coverage: + runs-on: ubuntu-latest + needs: build + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install requirements + run: pip install -r requirements-dev.txt + + - name: Download Artifacts + uses: actions/download-artifact@v4 + with: + pattern: '*-coverage-report' # Downloads all artifacts starting with 'my-artifact-' + merge-multiple: true # Merges the contents of multiple artifacts into a single directory + + - name: Combine Coverage reports + run: | + make combine-coverage + + - name: Upload combined reports + uses: actions/upload-artifact@v4 + with: + name: all-in-one-coverage-report + path: | + oracle-mcp-coverage-report/* + .coverage + include-hidden-files: true + diff --git a/Makefile b/Makefile index b353e4b..802b05b 100644 --- a/Makefile +++ b/Makefile @@ -55,6 +55,9 @@ test: cd ../..; \ fi \ done + $(MAKE) combine-coverage + +combine-coverage: uv run coverage combine uv run coverage html uv run coverage report --fail-under=70 diff --git a/src/oci-api-mcp-server/pyproject.toml b/src/oci-api-mcp-server/pyproject.toml index 1681d99..bc38b36 100644 --- a/src/oci-api-mcp-server/pyproject.toml +++ b/src/oci-api-mcp-server/pyproject.toml @@ -46,3 +46,8 @@ omit = [ ".venv/*", ] +[tool.coverage.report] +precision = 2 +fail_under = 91.81 + + diff --git a/src/oci-compute-instance-agent-mcp-server/pyproject.toml b/src/oci-compute-instance-agent-mcp-server/pyproject.toml index 9bcef50..658595d 100644 --- a/src/oci-compute-instance-agent-mcp-server/pyproject.toml +++ b/src/oci-compute-instance-agent-mcp-server/pyproject.toml @@ -46,3 +46,7 @@ omit = [ ".venv/*", ] +[tool.coverage.report] +precision = 2 +fail_under = 42.5 + diff --git a/src/oci-compute-mcp-server/pyproject.toml b/src/oci-compute-mcp-server/pyproject.toml index c103882..5e6e455 100644 --- a/src/oci-compute-mcp-server/pyproject.toml +++ b/src/oci-compute-mcp-server/pyproject.toml @@ -45,4 +45,8 @@ omit = [ "**/tests/*", "dist/*", ".venv/*", -] \ No newline at end of file +] + +[tool.coverage.report] +precision = 2 +fail_under = 69.64 diff --git a/src/oci-identity-mcp-server/pyproject.toml b/src/oci-identity-mcp-server/pyproject.toml index e0109de..2618edb 100644 --- a/src/oci-identity-mcp-server/pyproject.toml +++ b/src/oci-identity-mcp-server/pyproject.toml @@ -46,3 +46,7 @@ omit = [ ".venv/*", ] +[tool.coverage.report] +precision = 2 +fail_under = 58 + diff --git a/src/oci-logging-mcp-server/pyproject.toml b/src/oci-logging-mcp-server/pyproject.toml index 0ec7710..e520290 100644 --- a/src/oci-logging-mcp-server/pyproject.toml +++ b/src/oci-logging-mcp-server/pyproject.toml @@ -44,3 +44,8 @@ omit = [ ".venv/*", ] +[tool.coverage.report] +precision = 2 +fail_under = 76.92 + + diff --git a/src/oci-migration-mcp-server/pyproject.toml b/src/oci-migration-mcp-server/pyproject.toml index fc3716d..1706a10 100644 --- a/src/oci-migration-mcp-server/pyproject.toml +++ b/src/oci-migration-mcp-server/pyproject.toml @@ -46,3 +46,8 @@ omit = [ ".venv/*", ] +[tool.coverage.report] +precision = 2 +fail_under = 53.84 + + diff --git a/src/oci-monitoring-mcp-server/pyproject.toml b/src/oci-monitoring-mcp-server/pyproject.toml index 51e04f8..6936fd4 100644 --- a/src/oci-monitoring-mcp-server/pyproject.toml +++ b/src/oci-monitoring-mcp-server/pyproject.toml @@ -46,3 +46,8 @@ omit = [ ".venv/*", ] +[tool.coverage.report] +precision = 2 +fail_under = 75 + + diff --git a/src/oci-network-load-balancer-mcp-server/pyproject.toml b/src/oci-network-load-balancer-mcp-server/pyproject.toml index 1c8c4d8..f981945 100644 --- a/src/oci-network-load-balancer-mcp-server/pyproject.toml +++ b/src/oci-network-load-balancer-mcp-server/pyproject.toml @@ -46,3 +46,8 @@ omit = [ ".venv/*", ] +[tool.coverage.report] +precision = 2 +fail_under = 66.66 + + diff --git a/src/oci-networking-mcp-server/pyproject.toml b/src/oci-networking-mcp-server/pyproject.toml index d95b335..308f048 100644 --- a/src/oci-networking-mcp-server/pyproject.toml +++ b/src/oci-networking-mcp-server/pyproject.toml @@ -46,3 +46,8 @@ omit = [ ".venv/*", ] +[tool.coverage.report] +precision = 2 +fail_under = 65.78 + + diff --git a/src/oci-object-storage-mcp-server/pyproject.toml b/src/oci-object-storage-mcp-server/pyproject.toml index e71be5a..1f45887 100644 --- a/src/oci-object-storage-mcp-server/pyproject.toml +++ b/src/oci-object-storage-mcp-server/pyproject.toml @@ -44,3 +44,7 @@ omit = [ ".venv/*", ] +[tool.coverage.report] +precision = 2 +fail_under = 85.78 + diff --git a/src/oci-registry-mcp-server/pyproject.toml b/src/oci-registry-mcp-server/pyproject.toml index 9e478cc..963c3b0 100644 --- a/src/oci-registry-mcp-server/pyproject.toml +++ b/src/oci-registry-mcp-server/pyproject.toml @@ -46,3 +46,6 @@ omit = [ ".venv/*", ] +[tool.coverage.report] +precision = 2 +fail_under = 53 diff --git a/src/oci-resource-search-mcp-server/pyproject.toml b/src/oci-resource-search-mcp-server/pyproject.toml index 9530baa..8305ec0 100644 --- a/src/oci-resource-search-mcp-server/pyproject.toml +++ b/src/oci-resource-search-mcp-server/pyproject.toml @@ -46,3 +46,8 @@ omit = [ ".venv/*", ] +[tool.coverage.report] +precision = 2 +fail_under = 67 + + diff --git a/src/oci-usage-mcp-server/pyproject.toml b/src/oci-usage-mcp-server/pyproject.toml index a16d7a6..9a42761 100644 --- a/src/oci-usage-mcp-server/pyproject.toml +++ b/src/oci-usage-mcp-server/pyproject.toml @@ -46,3 +46,8 @@ omit = [ ".venv/*", ] +[tool.coverage.report] +precision = 2 +fail_under = 58.81 + +