WARNING: This crate makes it very easy to do dumb things with your access tokens, like put them in CI scripts. Be careful.
cargo-sideload
downloads crates from an alternative registry and stores them in your Cargo cache
as if they were downloaded by Cargo directly.
cargo-sideload
makes a simple GET
request with whatever headers you tell it to use. The primary use case is
downloading crates from an authenticated endpoint, a feature that Cargo does not currently support.
It is meant to be a temporary workaround until this feature is added to Cargo.
Cargo's documentation has lots of useful information about working with alternative registries.
cargo install cargo-sideload
~/.cargo/config.toml
.
toml
[registries]
test_registry = { index = "https://github.com/picklenerd/test_registry" }
registry = "[registry-name]"
to any dependencies that use the registry.
toml
my_lib = { version = "1.0", registry = "test_registry" }
cargo update
to let cargo sort out your dependencies and update your Cargo.lock
file.cargo sideload --registry=[registry-name]
in your crate's root.
--headers
argument if your download endpoint requires authentication or other headers. [Header-Name]: [Header Value]
.cargo
will use the local copies
rather than attempt to download them.cargo update -p [crate-names]
to update your Cargo.lock
file.cargo sideload --registry=[registry-name]
to download updated dependencies.cargo sideload --help
Create the file ~/.config/cargo-sideload/config.toml
.
The config file can be used to set a default registry and to associate headers with specific registries.
This allows you to run the command as cargo sideload
without providing --registry
and --headers
arguments.
``` defaultregistry = "testregistry"
[registries.test_registry] headers = [ "Authorization: Blah abcd1234" ]
[registries.other_registry] headers = [ "PRIVATE-KEY: abcdef", "Some-Other-Header: And its value", ] ```
cargo-sideload
does not (currently) validate the crates that it downloads. If you type your
authentication header wrong, you might end up in a situation where your downloaded .crate
file
is actually the HTML for a login page, or some similar situation.
cargo-sideload
doesn't download crates that are already in the cache, even if those crates are corrupt.
If you find yourself in a situation where you want to force a new download, you can use the --force
option.
This will delete the existing file and download a new copy.
If you try to run a normal Cargo command with a corrupt or otherwise invalid crate,
you'll get an error message something like the one below. If that happens, you most likely need to troubleshoot
your download endpoint. Using cargo sideload --debug --force
makes troubleshooting easier.
``
error: failed to download
my_lib v0.1.0 (registry https://github.com/picklenerd/test_registry
)`
Caused by: unable to get packages from source
Caused by:
failed to unpack package my_lib v0.1.0 (registry
https://github.com/picklenerd/test_registry)
Caused by: failed to iterate over archive
Caused by: failed to fill whole buffer ```
cargo update
for registry dependencies that are in Cargo.toml
but not Cargo.lock
.git
, along with cargo-sideload
and cargo-index
.