Free tools Windows power users keep installed
One-click scans. No signup required.
Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
Set up coverage by running tests with an instrumented coverage tool, generating a report format your CI platform accepts, and publishing that report against the same commit the platform is reviewing. Coverage and static analysis are separate signals: coverage records which code ran during tests; static analysis reports potential code issues. Showing both in a pull request does not make coverage an input to the analyzer or prove the tests are effective.
Decide what the report needs to show
Before changing a build, identify the destination and the view you want. A percentage, changed-line annotations, a browsable HTML artifact, and a historical trend may require different outputs or settings. Coverage metrics also differ: line, statement, and branch coverage are not interchangeable. Check which metric the tool produces and which one the destination displays.
| # | Preview | Product | Price | |
|---|---|---|---|---|
| 1 |
|
GameStop Physical Gift Card | $25.00 | Buy on Amazon |
| 2 |
|
Xbox Physical Gift Card | $25.00 | Buy on Amazon |
| 3 |
|
$100 XBOX Gift Card [Digital Code] | $100.00 | Buy on Amazon |
| 4 |
|
Fortnite Physical Gift Card | $50.00 | Buy on Amazon |
| 5 |
|
$25 PlayStation Store Gift Card [Digital Code] | $25.00 | Buy on Amazon |
- Choose the destination first. Its accepted formats determine whether the test tool can write a compatible report directly or whether conversion is needed.
- Choose the report format. Cobertura XML is used in the documented Python and pull-request examples below; JaCoCo XML is common for Java; LCOV is supported by some tools. Do not assume one destination accepts every format. GitLab lists Cobertura and JaCoCo XML for coverage reports, while GitHub’s documented coverage setup uses Cobertura XML.
- Choose the display. Decide whether you need a total percentage, file or changed-line detail, a downloadable artifact, or trend history. Some destinations require separate configuration for these views.
- Choose what counts. Review exclusions for generated, vendor, or otherwise out-of-scope files, and keep the same rules for the baseline and proposed changes.
- Plan for untrusted pull requests. Decide how uploads will work when a workflow from a fork cannot access repository write credentials.
Build the CI flow in the right order
A coverage collector generally has to observe tests as they run. Creating a report later from saved coverage data is not a substitute for collecting that data. The basic sequence is:
- Check out the source revision being tested and reviewed.
- Install the project and its coverage dependencies.
- Run tests with coverage collection enabled.
- Generate the machine-readable report in the format the destination expects.
- Publish the report or retain it as an artifact, using the destination’s own upload mechanism.
- Confirm that the report is associated with the intended branch or commit and that its file paths match the repository.
Static-analysis results need their own reporting path. For example, GitHub documents SARIF upload for code-scanning results; a coverage XML file does not replace it. See GitHub’s SARIF upload guide.
#1 Best Overall
- Redeemable at US GameStop, EB Games, Babbage's, Electronic Boutique, EBX, Planet X, and Software Etc. stores. Also redeemable online at and GameStop.com and EBGames.com.
- Over 6,100 stores located throughout the United States.
- GameStop. Power to the Players.
- Redemption: Instore and Online
- No returns and no refunds on gift cards.
Example: generate Python coverage as Cobertura XML
With pytest and pytest-cov installed, a common command is:
pytest --cov=your_package --cov-report=xml
This runs the tests while collecting coverage and writes an XML report, commonly named coverage.xml. GitHub’s documented Python example uses this pattern and expects Cobertura XML for its pull-request coverage upload. Replace your_package with the code you intend to measure; the correct package and test setup depend on the project.
Rank #2
- XBOX GIFT CARD: Buy full digital game downloads, game add-ons, in-game currency, memberships, devices, apps, movies, TV shows, and more.
- DIGITAL GAMES: Choose from hundreds of games, from AAA to indie options. Start playing the moment your most anticipated game is available when you pre-order and pre-download it.
- GAME AD-ONS: Extend the experience of your favorite games with add-ons and in-game currency.
- MOVIES & TV SHOWS: Rent or buy new and popular movies and TV shows from a massive library.
- PERFECT GIFT: Great as a gift for a friend or yourself. Xbox Gift Cards are easy to use, never expire, and give the freedom to pick the gift they want. Enjoy more ways to play without a credit card attached to your Microsoft account.
Coverage.py can also write XML after collection, or produce HTML, JSON, and LCOV reports. Its XML output is Cobertura-compatible and defaults to coverage.xml; an explicit output path can be set with -o. For example:
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchcoverage xml -o coverage.xml
See Coverage.py’s XML command documentation and its reporting command reference. An HTML report is useful for people to browse, but it does not satisfy a machine-readable upload requirement unless the destination explicitly accepts that output.
Rank #3
- THE PERFECT GAMING GIFT — Buy an XBOX Gift Card for yourself or a friend and let them choose the games, add‑ons, subscriptions, and accessories they want most.
- USE FOR GAMES & CONTENT — Redeem for thousands of digital XBOX games, from backward compatible classics to the latest new releases, plus DLC and in‑game currency.
- GAME PASS READY — Apply your balance toward XBOX Game Pass Ultimate to play new titles on day one* and access a library of hundreds of high‑quality console games.
- PRE‑ORDER & PRE‑INSTALL GAMES — Use your balance to pre‑order and pre‑download upcoming titles so you’re ready to play the moment they launch.
- NO FEES OR EXPIRATION — XBOX Gift Cards never expire and have no service fees, so your balance is ready whenever you are.
Publish coverage in GitHub pull requests
As documented on September 24, 2026, GitHub’s repository Code Quality coverage setup uses Cobertura XML, GitHub Actions, and the repository’s Code Quality feature. The workflow needs code-quality: write; the guide recommends running on pushes to the default branch as well as pull requests so GitHub has a baseline and a proposed-change result to compare. It also checks out the pull request head SHA so coverage line positions map to the diff.
A Python workflow based on GitHub’s documented example looks like this:
Rank #4
- An Epic Games account is required to redeem an Epic Games Store Card code
- If playing on a console platform (PlayStation Network, Xbox Live, Nintendo Switch or Mobile) you need to link your Epic Games account to that gaming platform (one time) to redeem your gift card code
- The 16 digit code on the back of the card WILL NOT work if redeemed directly through your gaming platform (PlayStation Network, Xbox Live, Nintendo Switch, Mobile, etc.)
- Note: Nintendo devices do not support Fortnite Shared Wallet, so V-Bucks purchased using your account balance will not show up on your Nintendo device. However, if you purchase items in the web Item Shop — or another platform where you play Fortnite — those items will be available in your Locker across all platforms.
- Redemption: Online
permissions:
contents: read
code-quality: write
steps:
- uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- name: Run tests with coverage
run: pytest --cov=. --cov-report=xml
- name: Upload coverage report
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
uses: actions/upload-code-coverage@v1
with:
file: coverage.xml
language: Python
label: code-coverage/pytest
The conditional skips the upload for pull requests from forks. That avoids asking an untrusted workflow to use a write credential it may not have. GitHub’s guide says the action can upload Cobertura reports from any language, but the test command and language value must match the project. The documented result can include a pull-request summary and per-file breakdown. Follow GitHub’s setup guide for current prerequisites and workflow details.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →GitHub announced this coverage feature in public preview on May 26, 2026. At that announcement, Code Quality was available for GitHub Enterprise Cloud and Team, was not yet available on GitHub Enterprise Server, and was free during preview. Availability and pricing can change; check GitHub’s announcement and current setup documentation before relying on those plan details.
Best Value
- Redeem for anything on PlayStationStore: games, add-ons, PlayStationPlus and more.
- Everything you want to play. Choose from the largest library of PlayStation content.
- Use gift card funds to contribute towards PlayStationPlus memberships.
Adapt the report to Java and JaCoCo
JaCoCo’s Maven plugin attaches its agent to tests and provides report goals including report, report-integration, and report-aggregate. A typical build invocation is mvn test when the plugin is configured in the project. Confirm that an XML report is generated if the recipient requires machine-readable coverage; producing only HTML, such as target/site/jacoco/index.html, is not enough for an XML upload.
For line-number information, JaCoCo requires target classes compiled with debug information. Its documentation also warns against Maven Surefire/Failsafe settings forkCount 0 or forkMode never: tests then run without the configured Java agent, so coverage is not recorded. For multi-module builds, configure aggregation deliberately rather than treating separate module reports as one repository-wide result. See the JaCoCo Maven plugin documentation. GitLab’s coverage visualization accepts JaCoCo XML; format support is destination-specific.
GitLab: percentage and changed-line annotations are separate
GitLab has two distinct coverage mechanisms. The job-level coverage keyword parses a percentage from job logs using a regular expression. The artifacts:reports:coverage_report setting ingests Cobertura or JaCoCo XML for changed-line visualization. Configure both if you want both views; one does not imply the other.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
test:
script:
- ./run-tests-with-coverage
coverage: '/TOTAL.*? ([0-9]+(?:\.[0-9]+)?%)/'
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
This example assumes the script writes the named XML report and prints a line matched by the illustrative regular expression. Replace the command, format, path, and expression to match the real job output. GitLab’s examples cover many tools, but output can change, so validate the expression against actual logs. Its report processing happens after the pipeline completes, and annotations are limited to changed files in the merge request. GitLab can combine multiple matching reports with wildcard paths. Consult the current coverage reporting documentation and CI/CD artifact report types.
Diagnose missing or misleading results
- No report file: Check that the test command enables collection, that report generation runs after tests, and that the configured output path is the same path the publishing step expects.
- Empty report or zero coverage: Confirm tests actually ran under the collector. For JaCoCo Maven builds, check that test forking has not been disabled and that the agent is attached.
- Report exists but no annotations: Inspect the XML file paths and compare them with repository paths. Absolute container paths, a different checkout directory, or a report generated from another revision can prevent matching. On GitLab, annotations apply only to changed files and processing is asynchronous after pipeline completion.
- Wrong lines or no pull-request comparison: Ensure the report and analysis refer to the intended commit. GitHub’s documented workflow checks out the pull request head SHA; a different source revision can misalign line positions.
- Percentage differs across tools: Compare the metric, measured files, exclusions, and aggregation rules. Line coverage and branch coverage can yield different percentages, and module reports do not necessarily use the same denominator as a whole-repository report.
- Fork upload is skipped: Check whether the workflow intentionally excludes fork pull requests because write permissions or secrets are unavailable. Do not expose upload credentials to untrusted code; verify the destination’s current safe authentication options.
- Percentage is missing but annotations work, or vice versa: Configure the destination’s percentage parser and report ingestion independently where required, and validate each output separately.
Use coverage as context, not a quality verdict
Coverage helps identify code that tests did not execute and can guide reviewers toward less-exercised areas when considering analysis findings. It does not show that assertions are meaningful, that edge cases are tested, or that a reported issue is safe or false. A threshold is a project policy and can serve as a regression guard, but no universal percentage establishes quality. Keep the chosen metric and exclusions visible to the people interpreting the result.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

