Add facets_tools_2n 3.0.0 container - #65
Open
price0416 wants to merge 1 commit into
Open
Conversation
FACETS copy number suite for the unmatched-normal (2N) workflow, the counterpart to the existing facets_tools image: facets-suite-2n 3.0.0 (5-fit run-facets-wrapper.R, --MandUnormal) facets2n 0.4.1 (unmatched-normal reference selection) facets 0.5.14 + pctGCdata 0.3.0 htslib 1.5 / snp-pileup + ppflag-fixer 0.1.1 facets-preview 2.2 Built on ghcr.io/mskcc-omics-workflows/r_tidyverse:3.6.3 and structured as multi-stage, matching containers/facets_tools. The base already provides every R package this suite needs except plyr, diptest, DT and reshape2. data.table is additionally pinned forward to 1.17.4, the version the 2N pipeline was validated against, rather than inheriting the 1.14.6 in the base snapshot. facets2n, facets-suite-2n and facets-preview have no release tags at these versions, so each is pinned to an explicit commit rather than a branch tip to keep rebuilds reproducible. The final stage verifies exact package versions, that snp-pileup and ppflag-fixer run, that the wrapper scripts expose the 2N-specific flags (so a build that silently resolved stock facets-suite fails rather than shipping), and that the pinned facets2n carries the flat-genome dipLogR guard in findDiploidLogR. Verified: hadolint clean against .hadolint.yml; linux/amd64 and linux/arm64 both build end to end and pass the verification stage; the --help output of all three facets-suite-2n wrappers is byte-identical across both architectures, and matches a reference build of the same software except for one argparse header line that changed with Python 3.10. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds
containers/facets_tools_2n/3.0.0/Dockerfile— the FACETS copy number suite for the unmatched-normal (2N) workflow. This is the counterpart to the existingcontainers/facets_tools, which packages stock facets-suite; the 2N path needs a different suite (facets-suite-2n) and a different engine (facets2n), so it ships as a separate image rather than a variant tag.Used by the 2N subworkflow in CADENCE (
nf_impact), which currently points at a personal Docker Hub image.Contents
d66ad19499181b1f8c557619e5b7e0652c94ea5c34016dcbbfdc8dc5583388a782bd442a545a683ca78fe1708665c17223893c63084805bb2639217dfacets2n,facets-suite-2nandfacets-previewhave no release tags at these versions, so each is pinned to an explicit commit rather than a branch tip. Recipes for this stack have historically cloned branch tips, which meant the same image tag could mean different code on different build days.The
facets2npin specifically carries a fix for afindDiploidLogRcrash on allelically-flat genomes (common in heme samples), so it is not interchangeable with an arbitrary master.Design notes
Base is
ghcr.io/mskcc-omics-workflows/r_tidyverse:3.6.3, and the file is multi-stage, matchingcontainers/facets_tools. The original recipe this was ported from usedrocker/tidyverse:3.6.3-ubuntu18.04, which is amd64-only — buildx does not hard-fail on that, it downgrades to anInvalidBaseImagePlatformwarning and produces amd64 content tagged arm64, which would then be pushed and folded into the multi-arch manifest. Rebasing onr_tidyversefixes that and drops a set of Ubuntu 18.04 apt-mirror workarounds.Only four R packages are installed on top of the base —
plyr,diptest,DT,reshape2. Everything else the suite needs is already inr_tidyverse.reshape2is not in any of the three packages' DESCRIPTIONs, but facets-preview ships a top-levelarranging_facets.Rthat callslibrary(reshape2), and that script is copied into the image.data.tableis pinned forward to 1.17.4, above the base snapshot's 1.14.6. facets-suite-2n only declares>= 1.11.8, but it leans on data.table heavily and 1.17.4 is the version the 2N pipeline was validated against.Verification
The final stage fails the build unless all of the following hold, so a bad resolve cannot ship silently:
data.table,pctGCdata,facets,facetsSuite; presence forplyr,diptest,DT,reshape2,rtracklayer,facets2n,facetsPreviewsnp-pileupandppflag-fixerexecuterun-facets-wrapper.Rexposes--facets2n-lib-pathand--MandUnormal, andsnp-pileup-wrapper.Rexposes--unmatched-normal-BAMS— i.e. a build that silently resolved stock facets-suite fails rather than shippingfacets2ncontains the flat-genome dipLogR guard, so a stale pin is caughtLocally, ahead of this PR:
hadolintclean against the repo's.hadolint.ymllinux/amd64andlinux/arm64both build end to end and pass the verification stage--helpfor all three facets-suite-2n wrappers exits 0 and is byte-identical across both architecturesNot yet done
This image has not been run on real 2N data. Verification here is structural — versions, CLI surface, load tests. The R stack differs from the previously validated one (Ubuntu 22.04 vs 18.04, different CRAN snapshot), so a run through the 2N subworkflow on a known pair is warranted before anything depends on it in production.
🤖 Generated with Claude Code