Overview /

EIC containers

github.com/eic/containers infrastructurecore · pass 2026-10-12 · commit a5bead855571 · assessor claude-opus-5-5

The repository has no license file or citation metadata, no named maintainers or governance document, one author wrote 69.7% of commits in 24 months, and the documented quick start pulls an image tag (latest) that does not exist. Every PR and the default branch build all image flavors for amd64 and arm64 under a ruleset that requires one approval and the eicweb pipeline, which runs npsim/EICrecon end-to-end jobs and the detector and physics benchmarks on both default and nightly images (96% of default-branch runs succeed). Tagged CalVer images are published every month and are the eic-shell environment used across EIC CI and production.

1.8overall, of 3

Action plan

The smallest steps that raise each criterion to its next level, in priority order. Download as Markdown ·

PriorityEffortCriterionAction
highS com.bus-factor (1) Add .github/CODEOWNERS with two owners per directory and document the release-tagging and backport procedure in docs/releasing.md.
highS com.conduct (1) Add CODE_OF_CONDUCT.md to eic/.github (or link the collaboration code) with a reporting contact.
highS com.governance (0) Add GOVERNANCE.md naming the maintainers, the owning ePIC body, how package additions are decided, and how to become a maintainer.
highS doc.user (1) Replace :latest with :nightly and a <version>-stable example in docs/README.md and in the fallback of scripts/build-eic.sh.
highS via.citation (0) Add CITATION.cff and enable the Zenodo-GitHub integration so each -stable release gets a DOI.
highS via.license (0) Add a LICENSE file with the GPL-3.0-or-later text that the image label already declares (or another chosen OSI license) so GitHub detects it.
highS via.support (1) State in README.md the ePIC computing body that owns eic-shell, the maintainers' institutions and any funding acknowledgement.
mediumS com.contributors (1) Invite package requests as PRs to spack-environment/ from ePIC working groups and document how in CONTRIBUTING.md.
mediumS com.responsiveness (1) Apply the existing bug/enhancement/question labels to every new issue and document the triage practice in CONTRIBUTING.md.
mediumS dist.dependencies (2) Add SECURITY.md naming a private vulnerability reporting route and enable GitHub private vulnerability reporting.
mediumS dist.releases (1) Document the version scheme, release branches and backport labels in README.md.
mediumS doc.contributing (2) Add CONTRIBUTING.md (linked from README.md) with the review expectations, how to propose new packages or flavors, and the local build workflow.
mediumS doc.developer (2) Update the buildcache references and image table in docs/ and add a page describing the eicweb GitLab pipeline and benchmark triggers.
mediumS doc.user (1) Add a "Using the images" section to README.md linking the docs site and listing the image flavors and tag scheme.
mediumS eic.currency (2) Bump npsim to 1.9.0 in spack-environment/packages.yaml and record the reason for the ACTS 46.8.1 pin in a comment next to it.
mediumS eng.change-control (2) Change the bypass team in the "Default" ruleset to pull_request bypass mode so that all changes go through PRs.
mediumS eng.change-control (2) Add .github/CODEOWNERS naming at least two owners for spack-environment/, containers/ and .github/workflows/.
mediumS eng.modularity (2) Document the image runtime interface (tags, environment variables, /etc/eic_info, profile.d hooks) in docs/image-interface.md.
mediumS eng.static-quality (2) Add pre-commit.ci - pr to the required status checks of the "Default" ruleset.
mediumS eng.static-quality (2) Add a CI step that runs docker buildx build --check on both main Dockerfiles, replacing the skipped hadolint hook.
mediumS eng.testing (1) Add a smoke-test job per image flavor that runs eic-info and imports key Python modules (ROOT, podio, edm4eic, acts) inside each pipeline-tagged image.
mediumS eng.testing (1) Add the eic_xl image to the npsim/EICrecon job matrix in .github/workflows/build-push.yml.
lowS com.responsiveness (1) Close or rebase the 16 PRs older than 90 days.
lowS doc.contributing (2) Label at least three open issues (for example
lowM eng.modularity (2) Move the duplicated npsim/EICrecon job steps in build-push.yml into one reusable workflow.

Assessment by criterion

Code health & engineering practices 2.0

2

Change control & code review eng.change-control

Established · confidence medium

89.6% of first-parent commits in 12 months came from PRs and 93.3% of merged PRs were reviewed, under an active ruleset requiring one approval, with the eic organization PR template applying; about 37 commits were pushed directly through the ruleset's always-bypass team, so not nearly all changes arrive through PRs.

Evidence (4)

Gaps to the next level

  • The "Default" ruleset gives one team always-bypass, and about 10% of default-branch commits in 12 months bypassed PRs.
  • No CODEOWNERS file.

Actions

  • medium S Change the bypass team in the "Default" ruleset to pull_request bypass mode so that all changes go through PRs.
  • medium S Add .github/CODEOWNERS naming at least two owners for spack-environment/, containers/ and .github/workflows/.
3

Continuous integration eng.ci

Sustained · confidence medium

build-push.yml builds the base, eic_ci and eic_xl images for amd64, amd64_v3 and arm64 on every PR and push and runs npsim/EICrecon jobs in the built image, the eicweb pipeline builds every other flavor (cuda, tf, dbg, jl, prod, cvmfs) and triggers the detector and physics benchmarks, and the ruleset requires the eicweb status and the four manifest jobs; 96% of default-branch runs succeeded.

Evidence (6)
1

Testing eng.testing

Initial · confidence medium

Tests are end-to-end only: npsim/EICrecon runs, a user Spack environment build and the benchmarks, all against the eic_ci image; the eic_xl, cuda, tf, dbg, jl and prod images are only built, and the build scripts have no tests.

Evidence (4)

Gaps to the next level

  • No test exercises the eic_xl image that eic-shell installs by default, or the cuda, tf, dbg, jl and prod images.
  • The capybara comparisons with the previous master artifacts are reported in a PR comment but never fail the job.
  • scripts/build-*.sh, scripts/resolve_git_ref and scripts/check_image_size have no tests.

Actions

  • medium S Add a smoke-test job per image flavor that runs eic-info and imports key Python modules (ROOT, podio, edm4eic, acts) inside each pipeline-tagged image.
  • medium S Add the eic_xl image to the npsim/EICrecon job matrix in .github/workflows/build-push.yml.
2

Static analysis & consistency eng.static-quality

Established · confidence medium

pre-commit.ci runs whitespace and end-of-file fixers, check-yaml, actionlint and shellcheck (--severity=warning) on every PR, and all Dockerfiles set #check=error=true; hadolint is skipped on pre-commit.ci and excludes both main Dockerfiles, and pre-commit.ci is not a required check.

Evidence (3)

Gaps to the next level

  • hadolint never runs in CI and excludes containers/debian/Dockerfile and containers/eic/Dockerfile.
  • containers/debian/bashrc is excluded from shellcheck, and pre-commit.ci is not a required status check.

Actions

  • medium S Add pre-commit.ci - pr to the required status checks of the "Default" ruleset.
  • medium S Add a CI step that runs docker buildx build --check on both main Dockerfiles, replacing the skipped hadolint hook.
2

Architecture & language standards eng.modularity

Established · confidence medium

Images are built from multi-stage Dockerfiles through scripts/build-base.sh and scripts/build-eic.sh, with versions and variants kept in Spack environment files and pinned version scripts; the GitHub Actions and GitLab pipelines duplicate job logic, and version overrides are applied with sed on marker comments.

Evidence (3)

Gaps to the next level

  • Build logic is maintained twice (build-push.yml and .gitlab-ci.yml), and the npsim/EICrecon jobs are copy-pasted four times.
  • The image runtime interface (environment variables, profile.d scripts, eic-info, tag scheme) is not documented as a stable interface.

Actions

  • medium S Document the image runtime interface (tags, environment variables, /etc/eic_info, profile.d hooks) in docs/image-interface.md.
  • low M Move the duplicated npsim/EICrecon job steps in build-push.yml into one reusable workflow.

Documentation & usability 1.7

1

User onboarding doc.user

Initial · confidence high

The README only links eic-shell; the hosted docs give prerequisites, local build commands, build options and troubleshooting, but the quick start pulls ghcr.io/eic/eic_xl:latest and build-eic.sh falls back to :latest, a tag that does not exist on ghcr.io.

Evidence (4)

Gaps to the next level

  • docker pull ghcr.io/eic/eic_xl:latest fails: ghcr.io has nightly, master and <version>-stable tags but no latest.
  • The README itself has no usage or build instructions, and the docs list 3 of the 12 image flavors.

Actions

  • high S Replace :latest with :nightly and a <version>-stable example in docs/README.md and in the fallback of scripts/build-eic.sh.
  • medium S Add a "Using the images" section to README.md linking the docs site and listing the image flavors and tag scheme.
2

Developer & API documentation doc.developer

Established · confidence medium

docs/architecture.md, docs/build-pipeline.md and docs/spack-environment.md describe the build tracks, caches and environments with diagrams, build-script options and build arguments are documented, and the Docsify site is deployed by CI; parts are stale.

Evidence (4)

Gaps to the next level

  • docs/architecture.md and docs/building-locally.md name buildcache spack-v2025.07.0; the pinned spack-packages is v2026.06.0.
  • The GitLab pipeline, which builds most flavors and runs the benchmarks, is described only in AGENTS.md.

Actions

  • medium S Update the buildcache references and image table in docs/ and add a page describing the eicweb GitLab pipeline and benchmark triggers.
2

Contribution guidelines doc.contributing

Established · confidence medium

There is no CONTRIBUTING.md, but AGENTS.md (addressed to coding agents) covers local builds, coding conventions, validation steps, commit format and PR rules, and the eic organization PR and issue templates apply; review expectations are one line and no newcomer issues are labeled.

Evidence (3)

Gaps to the next level

  • Contributor guidance is in a file addressed to Copilot agents and is not linked from README.md.
  • No issue carries the good first issue label; no devcontainer or documented ready-made development environment.

Actions

  • medium S Add CONTRIBUTING.md (linked from README.md) with the review expectations, how to propose new packages or flavors, and the local build workflow.
  • low S Label at least three open issues (for example

Community & governance 0.8

1

Issue & PR responsiveness com.responsiveness

Initial · confidence medium

Median first response is 1.84 days and 1 of 7 open issues is older than a year, but no issue opened in 12 months was labeled, there are no milestones, and 26.1% of new issues received no response.

Evidence (4)
  • issues.median_first_response_days_12m = 1.84
  • issues.labeled_fraction_12m = 0.0
  • issues.unanswered_fraction_12m = 0.261
  • prs.open_older_90d = 16

Gaps to the next level

  • No issue triage; 0% of new issues labeled, no milestones or project board.
  • 16 of 30 open PRs are older than 90 days.

Actions

  • medium S Apply the existing bug/enhancement/question labels to every new issue and document the triage practice in CONTRIBUTING.md.
  • low S Close or rebase the 16 PRs older than 90 days.
1

Contributor base com.contributors

Initial · confidence medium

10 authors from 4 e-mail domains committed in 24 months with 5 new authors in 12 months, but no merged PR in 12 months came from outside the maintainer group.

Evidence (4)
  • git.authors_24m = 10
  • git.email_domains_24m = 4
  • git.new_authors_12m = 5
  • prs.external_fraction_12m = 0.0

Gaps to the next level

  • No external PRs merged in 12 months.

Actions

  • medium S Invite package requests as PRs to spack-environment/ from ePIC working groups and document how in CONTRIBUTING.md.
1

Knowledge concentration (bus factor) com.bus-factor

Initial · confidence high

One author wrote 69.7% of commits in 24 months (bus factor 1), while 8 people reviewed and 3 merged PRs in 12 months; no CODEOWNERS or maintainer list exists.

Evidence (5)
  • git.bus_factor_50_24m = 1
  • git.top_author_share_24m = 0.697
  • prs.distinct_reviewers_12m = 8
  • prs.distinct_mergers_12m = 3
  • releases.authors_24m = 2

Gaps to the next level

  • Bus factor (50%) is 1.
  • No CODEOWNERS or maintainer list.

Actions

  • high S Add .github/CODEOWNERS with two owners per directory and document the release-tagging and backport procedure in docs/releasing.md.
0

Governance & roadmap com.governance

Absent · confidence medium

Changes are discussed in public PRs, but neither the README, the docs nor a CODEOWNERS file names maintainers, and there is no decision process, roadmap or milestone.

Evidence (2)

Gaps to the next level

  • No maintainers named and no decision process or path to maintainership.
  • Requirements for which packages ship in eic-shell are not documented.

Actions

  • high S Add GOVERNANCE.md naming the maintainers, the owning ePIC body, how package additions are decided, and how to become a maintainer.
1

Code of conduct & user support com.conduct

Initial · confidence high

The eic organization issue-template configuration links the ePIC Mattermost and weekly Indico meetings and the docs point to GitHub issues, but no code of conduct applies at repository or organization level.

Evidence (2)

Gaps to the next level

  • No code of conduct with a reporting contact.

Actions

  • high S Add CODE_OF_CONDUCT.md to eic/.github (or link the collaboration code) with a reporting contact.

Infrastructure & distribution 2.4

3

Packaging & installability dist.packaging

Sustained · confidence medium

The project's product is the eic-shell image set: every release tag is built and published as OCI images (Docker Hub eicweb/eic_xl:26.10.0-stable, ghcr.io) and distributed through OSG CVMFS, which the eic-shell installer uses; there is no package recipe, which does not apply to an image build.

Evidence (4)
1

Releases & versioning dist.releases

Initial · confidence high

42 tags in 24 months follow vYY.MM.P-stable, and the 15 GitHub releases since January 2026 have generated notes, but the version scheme is not documented, the 2025 tags have no release notes, and there is no changelog.

Evidence (3)

Gaps to the next level

  • The CalVer scheme (vYY.MM.P-stable, release branches vYY.MM-stable) is not documented.
  • Tags before 2026 have no release notes; no changelog flags breaking changes.

Actions

  • medium S Document the version scheme, release branches and backport labels in README.md.
2

Dependency management & supply chain dist.dependencies

Established · confidence medium

Spack, spack-packages, key4hep-spack and eic-spack are pinned to tags or SHAs, packages.yaml pins versions with require, Dependabot covers GitHub Actions and literal Docker FROM lines, and a nightly workflow opens eic-spack bump PRs; there is no SECURITY.md.

Evidence (4)

Gaps to the next level

  • No SECURITY.md or vulnerability reporting route for images used across EIC.
  • Base images set in CI configuration (debian:trixie-slim, nvidia/cuda) are not monitored by Dependabot.

Actions

  • medium S Add SECURITY.md naming a private vulnerability reporting route and enable GitHub private vulnerability reporting.
3

Reproducibility & environments dist.reproducibility

Sustained · confidence medium

The environment is defined by pinned Spack environments and Dockerfiles, each release tag yields immutable tagged images, CI runs npsim/EICrecon with fixed seeds inside the pipeline-built image, and each image records the Spack report and full package/variant list in /etc/eic_info.

Evidence (3)
3

Portability & heterogeneous computing dist.portability

Sustained · confidence medium

CI builds amd64, amd64_v3 and arm64 images and runs npsim/EICrecon on amd64 and arm64 with cross-architecture capybara comparisons, the base image ships GCC and Clang, CUDA images are built, and the images run unmodified from OSG CVMFS through eic-shell and eic/run-cvmfs-osg-eic-shell.

Evidence (5)

EIC ecosystem integration 2.7

–

Data formats & interoperability eic.data-model

Not applicable · confidence high

Not applicable: The project builds container images and reads or writes no physics or detector data itself; its CI only runs other components (npsim, EICrecon).

Build and distribution infrastructure with no physics I/O of its own.

3

EIC environment compatibility eic.environment

Sustained · confidence medium

The project builds the eic-shell images and every PR tests the pipeline-built images: npsim/EICrecon jobs on the default build and the detector and physics benchmarks on both the default (pinned versions) and nightly builds; using the images is documented.

Evidence (3)
2

Currency with the EIC stack eic.currency

Established · confidence medium

The pins in packages.yaml define the current eic-shell (EICrecon 1.42.0, epic 26.10.0, DD4hep 1.38, ROOT 6.40.04) and eic-spack is bumped nightly, but npsim 1.9.0 (2026-09-08) was not adopted in v26.10.0-stable and ACTS stays at 46.8.1 after 47.0.0 (2026-07-14) and 48.0.0.

Evidence (4)

Gaps to the next level

  • npsim 1.9.0 was not adopted within one monthly release cycle.
  • ACTS is pinned two major versions behind upstream with no documented reason.

Actions

  • medium S Bump npsim to 1.9.0 in spack-environment/packages.yaml and record the reason for the ACTS 46.8.1 pin in a comment next to it.

Impact & long-term viability 1.0

0

Licensing via.license

Absent · confidence medium

The repository has no LICENSE file and GitHub detects no license; only an OCI image label in containers/debian/Dockerfile declares GPL-3.0-or-later.

Evidence (2)

Gaps to the next level

  • No license file grants rights to the repository content.

Actions

  • high S Add a LICENSE file with the GPL-3.0-or-later text that the image label already declares (or another chosen OSI license) so GitHub detects it.
0

Citation & attribution via.citation

Absent · confidence high

No CITATION.cff, .zenodo.json, codemeta or DOI exists.

Evidence (1)
  • files.citation_cff = []

Gaps to the next level

  • No citation information.

Actions

  • high S Add CITATION.cff and enable the Zenodo-GitHub integration so each -stable release gets a DOI.
1

Institutional backing & continuity via.support

Initial · confidence medium

The image label names "Electron-Ion Collider Software Working Groups" with a mailing-list contact as authors and the docs link the organization for support, but no document assigns maintenance to a named ePIC body or acknowledges institutional support.

Evidence (2)

Gaps to the next level

  • No owning ePIC body, maintainer institutions or funding stated in README or docs.

Actions

  • high S State in README.md the ePIC computing body that owns eic-shell, the maintainers' institutions and any funding acknowledgement.

Key metrics

Collected automatically at the assessed commit. People are counted, never named. Full data: metrics.json.

Commits, 12 months317git.commits_12m
Active authors, 12 months8git.authors_12m
Active authors, 24 months10git.authors_24m
New authors, 12 months5git.new_authors_12m
Bus factor (50% of commits, 24 months)1git.bus_factor_50_24m
Top author share of commits, 24 months70%git.top_author_share_24m
Institutional e-mail domains, 24 months4git.email_domains_24m
Default-branch changes via PR, 12 months90%git.first_parent_pr_fraction_12m
PRs merged, 12 months283prs.merged_12m
Merged PRs reviewed by non-author93%prs.reviewed_fraction_12m
Median days to merge1.2prs.median_days_to_merge_12m
Merged PRs touching tests0%prs.test_touching_fraction_12m
Distinct reviewers, 12 months8prs.distinct_reviewers_12m
Issues opened, 12 months23issues.created_12m
Median days to first response1.8issues.median_first_response_days_12m
Issues without response26%issues.unanswered_fraction_12m
Open issues older than 1 year1issues.open_older_365d
Releases, 24 months15releases.count_24m
Latest releasev26.10.0-stablereleases.latest_tag
Default-branch CI success rate96%ci.default_branch_success_rate
CI runs in eic-shellyesci.uses_eic_shell
License (SPDX)–repo.license_spdx
Ships in eic-shellnopackaging.in_eic_shell
eic-shell version–packaging.eic_shell_version
Source lines (excluding vendored)0code.source_lines
Test files0code.test_files