diff --git a/.codecov.yml b/.codecov.yml
new file mode 100644
index 000000000..44ca360a8
--- /dev/null
+++ b/.codecov.yml
@@ -0,0 +1,56 @@
+coverage:
+ status:
+ project:
+ default:
+ target: auto
+ threshold: 2%
+ patch:
+ default:
+ target: auto
+ threshold: 2%
+
+
+comment:
+ layout: "diff, flags, files"
+ behavior: default
+ require_changes: true
+ show_carryforward_flags: true
+
+flag_management:
+ default_rules:
+ carryforward: true
+
+flags:
+ dashcore:
+ paths: [dash/src/]
+ dashcore_hashes:
+ paths: [hashes/src/]
+ dashcore-private:
+ paths: [internals/src/]
+ dash-network:
+ paths: [dash-network/src/]
+ dash-spv:
+ paths: [dash-spv/src/]
+ key-wallet:
+ paths: [key-wallet/src/]
+ key-wallet-manager:
+ paths: [key-wallet-manager/src/]
+ dash-network-ffi:
+ paths: [dash-network-ffi/src/]
+ dash-spv-ffi:
+ paths: [dash-spv-ffi/src/]
+ key-wallet-ffi:
+ paths: [key-wallet-ffi/src/]
+ dashcore-rpc:
+ paths: [rpc-client/src/]
+ dashcore-rpc-json:
+ paths: [rpc-json/src/]
+
+ignore:
+ - "**/tests/**"
+ - "**/tests.rs"
+ - "**/test_utils/**"
+ - "**/test_utils.rs"
+ - "**/examples/**"
+ - "fuzz/**"
+ - "contrib/**"
diff --git a/.github/scripts/ci_config.py b/.github/scripts/ci_config.py
index 64e0e8e1d..c29495420 100755
--- a/.github/scripts/ci_config.py
+++ b/.github/scripts/ci_config.py
@@ -173,6 +173,10 @@ def run_group_tests(args):
crates = groups[args.group] or []
failed = []
+ coverage = getattr(args, "coverage", False)
+
+ if coverage:
+ github_output("crate_flags", ",".join(crates))
for crate in crates:
# Skip dash-fuzz on Windows
@@ -182,7 +186,10 @@ def run_group_tests(args):
github_group_start(f"Testing {crate}")
- cmd = ["cargo", "test", "-p", crate, "--all-features"]
+ if coverage:
+ cmd = ["cargo", "llvm-cov", "--no-report", "-p", crate, "--all-features"]
+ else:
+ cmd = ["cargo", "test", "-p", crate, "--all-features"]
result = subprocess.run(cmd)
github_group_end()
@@ -225,6 +232,11 @@ def main():
run_group_parser = subparsers.add_parser("run-group", help="Run tests for a group")
run_group_parser.add_argument("group", help="Group name")
run_group_parser.add_argument("--os", default="ubuntu-latest", help="OS name")
+ run_group_parser.add_argument(
+ "--coverage",
+ action="store_true",
+ help="Use cargo-llvm-cov for coverage collection",
+ )
args = parser.parse_args()
diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml
index 08025a441..cfb2604f8 100644
--- a/.github/workflows/build-and-test.yml
+++ b/.github/workflows/build-and-test.yml
@@ -9,6 +9,10 @@ on:
groups:
required: true
type: string
+ coverage:
+ required: false
+ type: boolean
+ default: false
permissions:
contents: read
@@ -26,9 +30,33 @@ jobs:
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
+ with:
+ components: ${{ inputs.coverage && 'llvm-tools' || '' }}
- uses: Swatinem/rust-cache@v2
with:
shared-key: "test-${{ inputs.os }}-${{ matrix.group }}"
+
+ - name: Install cargo-llvm-cov
+ if: inputs.coverage
+ uses: taiki-e/install-action@cargo-llvm-cov
+
- run: pip install pyyaml
- name: Run tests
- run: python .github/scripts/ci_config.py run-group ${{ matrix.group }} --os ${{ inputs.os }}
+ id: tests
+ run: >
+ python .github/scripts/ci_config.py run-group ${{ matrix.group }}
+ --os ${{ inputs.os }}
+ ${{ inputs.coverage && '--coverage' || '' }}
+
+ - name: Generate coverage report
+ if: inputs.coverage
+ run: cargo llvm-cov report --lcov --output-path lcov.info
+
+ - name: Upload coverage to Codecov
+ if: inputs.coverage
+ uses: codecov/codecov-action@v5
+ with:
+ files: lcov.info
+ flags: ${{ steps.tests.outputs.crate_flags }}
+ token: ${{ secrets.CODECOV_TOKEN }}
+ fail_ci_if_error: true
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index fea9d9efa..c903b7099 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -64,6 +64,8 @@ jobs:
with:
os: ubuntu-latest
groups: ${{ needs.verify-execution.outputs.groups }}
+ coverage: true
+ secrets: inherit
test-ubuntu-arm:
name: Ubuntu ARM
diff --git a/README.md b/README.md
index f6a19356f..d6a00ab9b 100644
--- a/README.md
+++ b/README.md
@@ -11,12 +11,34 @@
+
+