Skip to main content

Overview

Upload test coverage reports to CodeAnt AI for comprehensive analysis, visualization, and tracking of your code coverage metrics. Reference Repository: codeant-coverage

Features

  • 📊 Upload coverage reports in XML format (Cobertura XML, JaCoCo XML)
  • 🔍 Automatic coverage analysis and insights
  • 📈 Track coverage trends over time
  • 🎯 Integration with pull requests
  • 🚀 Easy setup with minimal configuration
  • 🏢 Support for self-hosted/enterprise instances

Setup

1. Create a CodeAnt Token

In CodeAnt AI, open the user menu (click your email at the bottom-left) and select API Tokens, click Create token, and copy the generated token (it starts with cdt_ and is shown only once). See API Tokens for the full walkthrough. This single token authenticates the upload - you don’t need a Bitbucket access token or app password.

2. Configure Repository Variables

Before using the pipe, configure this repository variable in Repository Settings → Pipelines → Repository variables:
  • CODEANT_TOKEN - Your CodeAnt token (cdt_…)

Basic Usage

Example 1: Basic Coverage Upload

Example 2: Pull Request Coverage Analysis

Example 3: Advanced Configuration with Debug Mode

Configuration Variables

Supported Coverage Formats

Important: Only XML format is supported for coverage reports.
  • Cobertura XML (.xml)
  • JaCoCo XML

Language-Specific Examples

Python with pytest

JavaScript with Jest

Java with Maven

Go with go-cover

Multiple Coverage Files (Monorepo)

When a single commit produces several coverage reports - for example one per service in a monorepo - give each upload its own MODULE and MODULE_PATH. CodeAnt AI keeps the reports separate so each module is tracked, displayed, and gated independently. Without MODULE, every upload writes to the same key and later steps overwrite earlier ones.
  • MODULE is the logical name shown in the UI (e.g. backend, frontend).
  • MODULE_PATH is the directory used to resolve source files referenced in the coverage XML (e.g. services/backend). If your XML’s filename attributes are relative to the module root, set MODULE_PATH to that root.
Bitbucket Pipelines doesn’t have a matrix directive, but parallel lets each module upload run concurrently in its own step. Adding a new module is one new step in the parallel block.

Alternative: sequential uploads in one step

If you’d rather upload every module inside a single step (e.g. to avoid extra step minutes), call the pipe multiple times in the same script: block:

Coverage Configuration

Python Coverage Configuration

Create a .coveragerc file in your project’s root folder to include all source files in the test coverage calculation:
When you assign source to ., it checks for every Python file in the root folder and its subdirectories. You can omit directories by placing them in the omit section.

How It Works

  1. The pipe fetches the latest coverage upload script from CodeAnt AI
  2. Automatically decodes and prepares the script for execution
  3. Uploads your coverage report along with commit and repository information
  4. CodeAnt AI processes the report and provides analysis on your pull requests
  5. Lines executed by your tests are marked as “covered”
  6. Coverage percentage is calculated and status checks are performed on every push

Troubleshooting

Enable Debug Mode

Set DEBUG: 'true' to see detailed logs:

Coverage File Not Found

Issue: Coverage file not found error Solution: Ensure the coverage file is generated before upload and verify the COVERAGE_FILE path is correct. Use artifacts to pass files between steps if needed.

Upload Fails But Pipeline Continues

Issue: Upload fails but pipeline continues Solution: Set FAIL_ON_ERROR: 'false' to continue the pipeline even if upload fails (default is true).

Authentication Errors

Issue: Authentication errors during upload Solution: Verify your CODEANT_TOKEN holds a valid CodeAnt token (cdt_…) that hasn’t been revoked, belongs to the same organization as the repository, and is marked as secured in Repository Variables. You can re-issue tokens under API Tokens (in the user menu - your email at the bottom-left) in CodeAnt AI - see API Tokens.

Low Coverage Reporting

Issue: Coverage reporting is lower than expected Solution: Check your coverage configuration file (e.g., .coveragerc), ensure all source files are included, and verify omit patterns aren’t excluding too much code.

Support

License

MIT License - see LICENSE file for details## Token permission This pipeline authenticates with a CodeAnt API token (cdt_…). If the token is scoped, give it the Codeant CI/CD role - it covers scans, quality gates, and test-coverage upload - scoped to the repositories this pipeline runs on (or All repositories). A token missing the required permission is rejected with an HTTP 403 token_scope_forbidden error that names the permission it needs. See API token permissions.