Skip to content

CI: Include submodules in the release source archive #3445

Open

Description

@leofang

Since cuda-core 1.3.0, building cuda_core from source requires the CCCL submodule at cuda_core/third_party/cccl: _get_cccl_include_dirs() treats a missing submodule as a build error, by design. The source archive attached to each release is a plain git archive (release-upload.yml), which leaves submodules empty, so that archive alone can no longer build cuda-core.

Downstream packagers now have to fetch CCCL separately and hard-code the submodule commit, as the conda-forge recipe does in conda-forge/cuda-core-feedstock#34. That pin has to be kept in sync by hand: the conda-forge bot bumps the version and re-hashes the sources, but the CCCL URL doesn't depend on the version, so its version-bump PRs would keep building against the old CCCL commit.

Proposal: check out with submodules: true and append each submodule to the tarball, e.g.:

export OUT="${PWD}/release"
git archive --format=tar --prefix="${ARCHIVE_NAME}/" -o "${OUT}/${ARCHIVE_NAME}.tar" "${GIT_TAG}"
git submodule foreach --quiet --recursive '
  git archive --format=tar --prefix="${ARCHIVE_NAME}/${displaypath}/" -o "${OUT}/sub.tar" HEAD
  tar -Af "${OUT}/${ARCHIVE_NAME}.tar" "${OUT}/sub.tar" && rm "${OUT}/sub.tar"'
gzip -n "${OUT}/${ARCHIVE_NAME}.tar"

The result is byte-for-byte reproducible. At cuda-core-v1.3.0, the archive grows from 6.0 MB to 19.0 MB, or to 7.4 MB if only libcudacxx/include and the licenses are included. The 1.3.0 asset stays as is; once a release ships the submodule, the feedstock can go back to a single source.

Related: #2715

-- Leo's bot

Activity

  1. added
    CI/CDCI/CD infrastructure
    packagingAnything related to wheels or Conda packages
    cuda.coreEverything related to the cuda.core module
    on Nov 11, 2026
  2. added this to the cuda.core next milestone on Nov 11, 2026
  3. taechasith commented on Nov 13, 2026

    @taechasith

    Hi @leofang and maintainers!

    I'm Tae, an undergraduate student and recently appointed PMO of AGENTHRO, a human–AI interaction research initiative. I'm looking to contribute to open-source projects and create more opportunities for my lab.

    I'd love to help with #3445!

    After reviewing the release workflow, here's my proposed approach:

    1. Enable recursive submodule checkout for the tagged release source.
    2. Include the pinned CCCL submodule contents in the generated archive.
    3. Preserve the existing archive naming and SHA-256 checksum workflow.
    4. Add validation for archive completeness and reproducibility.

    Would this approach work for the team? I'd be happy to take this on if the issue is available for assignment.

    Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    CI/CDCI/CD infrastructurecuda.coreEverything related to the cuda.core modulepackagingAnything related to wheels or Conda packages

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions