rhalbersma / rhalbersma/cpp-ci

coverage.yml is the most logic-dense workflow here and the only one with no test

Open
#38 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
No language data
Stars
1
Forks
0
Avg merge
2h 13m
Merged PRs (30d)
45

Description

Priority: medium-high. It is the workflow most likely to break silently, and the one nothing checks.

What

self-check.yml runs exactly two legs — actionlint and codeql. Neither executes a workflow; they lint YAML and analyse it statically.

That is fine for most of this repository, where a stub is a thin uses: plus inputs. It is not fine for coverage.yml, which carries by far the most logic of anything here:

  • a read -ra split of the exclude input into --exclude flags, with a comment explaining why an unquoted expansion breaks
  • five --exclude-lines-by-pattern / --exclude-branches-by-pattern regexes
  • --merge-lines, --fail-under-line, --fail-under-branch
  • three consumers of the report files: the step summary, the Codecov upload, the artifact upload

Every one of those can break in a way actionlint and CodeQL cannot see. A wrong exclude pattern silently changes what 100% means — it does not fail, it just measures something else.

This is not hypothetical: #37 changes where gcovr writes its reports and touches all three consumers, and merges on green CI that never once ran the workflow.

Shape of a fix

A minimal C++ fixture in this repository — one header, one Boost.Test file that covers it fully — and a self-check leg calling coverage.yml against it. Then the assertions worth having:

  • it reaches 100% on the fixture and the job is green
  • deleting the test, or adding an uncovered branch, makes it fail — the gate is the point, and a threshold that never fires is the bug we would be trying to catch
  • the exclude input actually excludes: a deliberately uncovered file under an excluded path keeps the run green
  • the report files land where the downstream steps look for them

Item 2 matters most. Everything else here can be wrong in a way that still shows green.

Cost

A fixture plus one Ubuntu leg, at the cadence self-check already runs (push, PR, weekly cron). It also gives the other ladder workflows somewhere to point when they want the same treatment.

Related

  • #26 item 5 proposes self-check.yml querying the packagers for ladder freshness. Same instinct — cpp-ci owning the checking of its own claims — applied to the table rather than the workflows.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Read coverage.yml and self-check.yml first, then trace the three report consumers and the existing self-check cadence. Add the minimal C++ fixture and an Ubuntu self-check leg; done means the fixture reaches 100%, uncovered code fails the gate, excluded files stay excluded, and reports land where downstream steps expect them.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, github-actions
Domain
ci-cd, testing-qa
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.