Skip to content

build(tools): serve the FastQC archive from this repository's releases - #54

Merged
hyperpolymath merged 1 commit into
mainfrom
build/vendor-fastqc-archive
Sep 22, 2026
Merged

hyperpolymath merged 1 commit into
mainfrom
build/vendor-fastqc-archive

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Refs #30, #51 — removes the dependency the gate fix could only make legible.

The problem, precisely

On 2026-09-22 CI went red on a commit that touched nothing near FastQC:
www.bioinformatics.babraham.ac.uk served an expired TLS certificate. #51 made that
retryable and self-describing, but it could not remove the dependency, because FastQC
publishes no GitHub release assets — all six of its releases carry none — so the
pinned URL could only ever point at that single host. A third party's certificate renewal
was able to stop our builds, and did.

The fix

The archive is vendored: same bytes, served from this repository's own releases —
tagged vendored/fastqc-v0.12.1, marked pre-release because it is a build input
rather than a version of this software.

config/defaults/tool_versions.yml now points at
https://github.com/hyperpolymath/MetaManifold-WebUI/releases/download/vendored/fastqc-v0.12.1/fastqc_v0.12.1.zip
with the checksum unchanged. CI installs FastQC over a connection to GitHub — the
same host that already serves vsearch and swarm — so the FastQC host leaves the critical
path for building and reproducing the pipeline.

Provenance, stated rather than glossed

The capture used curl --insecure, because upstream's certificate was already invalid
when the file was taken
. That is worth saying out loud, because it is the one detail a
reader should not have to infer.

Integrity does not rest on that transfer: the sha256 in the pin is unchanged from the
original upstream pin
, which was established while upstream was healthy, and the
captured file verifies against it. I also downloaded the published asset back over an
anonymous connection and confirmed it is byte-for-byte identical (cmp) to a fresh
upstream copy. Nothing changed except who serves the file.

Licence: the archive carries its own FastQC/LICENSE.txt (GPL v3) and is redistributed
unmodified.

Guarded, because the failure mode is silent

A URL that quietly points back at a third party still downloads and still verifies. The
new testset fails by name if the pin returns to its old host or stops being a release
of this repository, and asserts the vendored checksum so a future bump is a decision
rather than a drift. Mutation-tested: repointing the pin at babraham.ac.uk fails two
assertions by name; with the pin correct the file passes 126/126.

docs/compliance/vendored-archives.md records the rule — the checksum is the integrity
claim and never the transport; never re-checksum to make a download succeed; the licence
travels with the archive; repointing back at a third party is a decision
— with this
archive's entry (upstream URL, sha256, licence, capture date, why) and the procedure for
adding the next one. check-format, check-spdx and lint_source.jl are clean.

On 2026-09-22 CI went red on a commit that touched nothing near FastQC:
www.bioinformatics.babraham.ac.uk served an expired TLS certificate. The
gate fix in #51 made that legible and retryable, but it could not remove
the dependency, because FastQC publishes no GitHub release assets -- all
six of its GitHub releases carry none -- so the pinned URL could only ever
point at that one host. A third party's certificate renewal could stop our
builds, and did.

So the archive is vendored: same bytes, served from this repository's own
releases (tagged vendored/fastqc-v0.12.1, marked pre-release because it is
a build input rather than a version of this software). CI now installs it
over a connection to GitHub, the same host that already serves vsearch and
swarm, and the FastQC host leaves the critical path for building and
reproducing the pipeline.

The provenance is stated rather than glossed. The capture used
`curl --insecure`, because upstream's certificate was already invalid when
the file was taken. Integrity does not rest on that transfer: the sha256 in
the pin is UNCHANGED from the original upstream pin, established while
upstream was healthy, and the captured file verifies against it. Nothing
changed except who serves the file -- and that is checkable, because the
vendored download was verified byte-for-byte against a fresh upstream copy.

Guarded, because the failure mode is silent: a URL that quietly points back
at a third party still downloads and still verifies. The new testset fails
by name if the pin returns to its old host or stops being a release of this
repository (mutation-tested: repointing it at babraham.ac.uk fails two
assertions by name). The vendored checksum is asserted too, so a future
bump has to be a decision rather than a drift.

docs/compliance/vendored-archives.md records the rule -- the checksum is
the integrity claim and never the transport, never re-checksum to make a
download succeed, the licence travels with the archive, and repointing back
at a third party is a decision -- with the entry for this archive and the
procedure for adding the next one.

Refs #30, #51
@coderabbitai

coderabbitai Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 0e6d048e-a769-4c03-83d6-38016606f4d5

📥 Commits

Reviewing files that changed from the base of the PR and between 1a71048 and a47fcd8.

📒 Files selected for processing (3)
  • config/defaults/tool_versions.yml
  • docs/compliance/vendored-archives.md
  • test/unit/test_install_pins.jl

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
⏰ Context from checks skipped due to timeout. (2)
  • GitHub Check: Julia tests
  • GitHub Check: Repo hygiene (licence · format · lint · commit)
🧰 Additional context used
🪛 LanguageTool
docs/compliance/vendored-archives.md

[locale-violation] ~33-~33: LICENSE must be spelled with a “c” when used as a noun in British English. Use “licence”.
Context: ...cence | GNU GPL v3 (the archive carries FastQC/LICENSE.txt), redistributed unmodified | | Cap...

(LICENCE_LICENSE_NOUN_SINGULAR)


[formatting] ~39-~39: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...here was no way out through the pin file, because FastQC publishes **no GitHub release as...

(COMMA_BEFORE_BECAUSE)


[formatting] ~44-~44: If the ‘because’ clause is essential to the meaning, do not use a comma before the clause.
Context: ...bove. The capture used curl --insecure, because upstream's certificate was already inva...

(COMMA_BEFORE_BECAUSE)

🔇 Additional comments (3)
docs/compliance/vendored-archives.md (1)

1-62: LGTM!

config/defaults/tool_versions.yml (1)

69-91: LGTM!

test/unit/test_install_pins.jl (1)

96-121: LGTM!


📝 Summary

Summary by CodeRabbit

  • Bug Fixes

    • FastQC 0.12.1 is now retrieved from a vendored release archive, improving installation reliability when the upstream download host is unavailable.
    • The existing version and SHA-256 integrity check remain unchanged.
  • Documentation

    • Added guidance for managing vendored third-party archives, including integrity verification, licensing, and procedures for future additions.
  • Tests

    • Added coverage to ensure the FastQC archive remains served from the approved vendored source and retains its expected checksum.

Walkthrough

The FastQC 0.12.1 archive now uses a vendored GitHub release URL. The original version and SHA-256 remain unchanged. New documentation records the vendoring policy and archive details. A unit test checks the URL host and checksum.

Changes

FastQC vendoring

Layer / File(s) Summary
Vendored archive policy and record
docs/compliance/vendored-archives.md
Documents the checksum, licence, capture method, release format, FastQC entry, and procedure for future vendored archives.
FastQC archive pin
config/defaults/tool_versions.yml
Changes the FastQC archive URL to the repository's vendored GitHub release. The version, archive source, and SHA-256 remain unchanged.
FastQC pin guard
test/unit/test_install_pins.jl
Checks that the FastQC URL uses the repository release path, excludes babraham.ac.uk, and matches the pinned SHA-256.

Priority: ➖ Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to a47fc

FastQC now downloads from the repository’s vendored release while preserving checksum verification. No concrete merge-blocking risk remains, so this change is ready to merge.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the main change: serving the FastQC archive from this repository's releases. It is concise and specific.
Description check ✅ Passed The description provides a detailed summary, motivation, implementation details, provenance, licensing information, safeguards, and test results. It does not reproduce the template's explicit base and…
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

A rabbit checks the archive trail
The pinned hash stays strong and hale
The vendored release marks the way
A guard test watches night and day
FastQC hops safely into play

Comment @coderabbitai help to get the list of available commands.

@sonarqubecloud

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath merged commit c591fbb into main Sep 22, 2026
5 checks passed
@hyperpolymath
hyperpolymath deleted the build/vendor-fastqc-archive branch September 22, 2026 11:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant