Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add an immutable tarball link to archive download headers for Nix #31139

Merged
merged 1 commit into from
May 28, 2024

Commits on May 28, 2024

  1. Add an immutable tarball link to archive download headers for Nix

    This allows `nix flake metadata` and nix in general to lock a *branch*
    tarball link in a manner that causes it to fetch the correct commit even
    if the branch is updated with a newer version.
    
    For further context, Nix flakes are a feature that, among other things,
    allows for "inputs" that are "github:someuser/somerepo",
    "https://some-tarball-service/some-tarball.tar.gz",
    "sourcehut:~meow/nya" or similar. This feature allows our users to fetch
    tarballs of git-based inputs to their builds rather than using git to
    fetch them, saving significant download time.
    
    There is presently no gitea or forgejo specific fetcher in Nix, and we
    don't particularly wish to have one. Ideally (as a developer on a Nix
    implementation myself) we could just use the generic tarball fetcher and
    not add specific forgejo support, but to do so, we need additional
    metadata to know which commit a given *branch* tarball represents, which
    is the purpose of the Link header added here.
    
    The result of this patch is that a Nix user can specify `inputs.something.url =
    "https://forgejo-host/some/project/archive/main.tar.gz"` in flake.nix
    and get a link to some concrete tarball for the actual commit in the
    lock file, then when they run `nix flake update` in the future, they
    will get the latest commit in that branch.
    
    Example of it working locally:
    
     » nix flake metadata --refresh 'http://localhost:3000/api/v1/repos/jade/cats/archive/main.tar.gz?dir=configs/nix'
    Resolved URL:  http://localhost:3000/api/v1/repos/jade/cats/archive/main.tar.gz?dir=configs/nix
    Locked URL:    http://localhost:3000/api/v1/repos/jade/cats/archive/804ede182b6b66469b23ea4d21eece52766b7a06.tar.gz?dir=configs
    /nix&narHash=sha256-yP7KkDVfuixZzs0fsqhSETXFC0y8m6nmPLw2GrAMxKQ%3D
    Description:   Computers with the nixos
    Path:          /nix/store/s856c6yqghyan4v0zy6jj19ksv0q22nx-source
    Revision:      804ede182b6b66469b23ea4d21eece52766b7a06
    Last modified: 2024-05-02 00:48:32
    
    For details on the header value, see:
    https://github.com/nixos/nix/blob/56763ff918eb308db23080e560ed2ea3e00c80a7/doc/manual/src/protocols/tarball-fetcher.md
    
    Update routers/api/v1/repo/file.go
    
    Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
    
    Update routers/web/repo/repo.go
    
    Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
    
    Update tests/integration/api_repo_archive_test.go
    
    Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
    2 people authored and Mic92 committed May 28, 2024
    Configuration menu
    Copy the full SHA
    8af632b View commit details
    Browse the repository at this point in the history