Git Product home page Git Product logo

deps.rs's Introduction

Deps.rs - Dependency status at a glance

dependency status GitHub license

A screenshot showing the deps.rs status of the libc crate

Deps.rs is a service that shows you at a glance if any of your dependencies are out of date or insecure. This works by comparing the dependencies in a project's Cargo.toml to the latest versions in the crates.io database. For security-related information, we query the RustSec Security Advisory Database.

We currently support projects and crates hosted on crates.io, Github, Gitlab, Bitbucket, and SourceHut. To analyze the state of your dependencies you can use the following URLs:

  • for projects on crates.io: https://deps.rs/crate/<NAME>
  • for projects on Github, Gitlab, Bitbucket, SourceHut, Codeberg, or Gitea: https://deps.rs/repo/<HOSTER>/<USER>/<REPO> (where <HOSTER> is either github, gitlab, bitbucket, sourcehut, codeberg, or gitea/<DOMAIN>)

Badges

On the analysis page, you will also find the markdown code to include a fancy badge in your project README so visitors (and you) can see at a glance if your dependencies are still up to date!

Badges have a few style options, specified with query parameters, that match the styles from shields.io:

  • ?style=flat (default)
  • ?style=flat-square
  • ?style=for-the-badge

Contributing

We are always looking for help from the community! Feel like a feature is missing? Found a bug? Open an issue!

Do you want to contribute? Then browse the list of open issues and ask if you can take care of it.

Building the project

To get started on the project simply clone the repository and run the build:

git clone https://github.com/deps-rs/deps.rs
cd deps.rs
cargo run

The started development server will listen on port 8080 on localhost, so you just have to point your browser to http://localhost:8080 to see if it works.

Copyright and License

Copyright 2018 Sam Rijs and Contributors

Licensed under the Apache License, Version 2.0 (the "License"). You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

deps.rs's People

Contributors

alpha-tango-kilo avatar cecton avatar dependabot[bot] avatar enet4 avatar feliix42 avatar h3nill avatar jamiebrynes7 avatar kid avatar mglolenstine avatar nitn3lav avatar palfrey avatar paolobarbolini avatar robinst avatar robjtede avatar sgued avatar silamon avatar srijs avatar tsdh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

deps.rs's Issues

add button to update dependencies

When viewing a repo that has outdated dependencies, display a button to to update the dependencies.

If the user is not logged in, the button should prompt the user to log in.

When logged in, clicking the button should prompt the user to select the dependencies they wish to update. Confirming this prompt, we should then draft a PR for the user to submit which updates the selected dependencies.

Failed to analyze repository

Not sure when it started, but since some time, it's showing a "dependencies unknown" badge and if you visit the site, you are getting a "Failed to analyze repository" error. I can observe it on all of my own projects I've tried and it seems that this repo's deps.rs badge is affected too.

Screenshot_20200402_123952

Screenshot_20200402_124014

If a given crate has a repository in its meta-data, then generate a link to it on `deps.rs`

I've seen that deps.rs also supports repository URL's in addition to published crates. However at the moment on a crate's dashboard there isn't a link to repository status (and vice-versa).

For example I have the following published crate and related repository:

It would be nice to have on each of these dashboards a link to:

  • the latest published crate dashboard;
  • the repository dashboard;
  • a list of previous releases dashboards; (if one needs an older version of a crate an wants to asses its dependencies;)

Show Cargo.toml parse errors in the badge

Currently we return an dependencies: unknown badge for all sorts of errors. I think it would be nice to make the errors more transparent such as dependencies: parse error or at least just dependencies: error to differentiate between internal errors (which are our fault) and external errors (which are the users fault).

I'm just not sure how the error badge should look like right now.

CI/CD

We've had a good experience with actix-web using GitHub Actions but I see there's a travis config here already.

Lets spec out the goals for the CI, talking points:

  • security audit
  • tests
  • deployments (stagings/prod)
  • other

Handling of outdated build dependencies

What should happen to outdated build dependencies? Should they be excluded from the badge?
@Enet4 correctly noted that issues with the build-time dependencies could in the worst case lead to secret credentials being leaked during the CI/CD workflow, so they may be relevant to some people.

As @robjtede suggested, we could make the inclusion of build dependencies in the badge opt-in, but the question would be how. You could use a GET parameter in the URL to enable/disable this but that would require some explanation from our end and may not be very intuitive to use. Example for this:

https://deps.rs/repo/github/deps-rs/deps.rs?build_deps=false

What do you guys think? How could a good solution work?

Fixed Rust Toolchain version?

As we just discussed in #44, the project is currently running on a Nightly toolchain. There's nothing wrong with that, but to avoid having a broken build out of nowhere we should either lock on a specific nightly version that is guaranteed to work or look into whether we can somehow move to stable easily.

I'm going to take a look and see how extensive the use of nightly-only features is.

Add support for transitive dependency checking

It would be extremely useful to be able to view also the status of transitive dependencies (i.e. dependencies of dependencies, and so on...) (Perhaps this would be a second dashboard with more data pertaining to the "freshness" of a crates whole dependency tree.)


Because at the moment the "green" status of a crate might give the "false" impression of "up-to-date" status, especially with regard to security implications.

For example it might happen that a direct dependency of my crate was abandoned, thus receiving no updates. Moreover it might happen that the depenency in question depends itself on other crates which have been updated in the interim. However my dashboard is green, although if taken on the whole I depend (transitively) on an "ancient" crate.


Moreover, still on this subject, perhaps another "freshness" metric could be determined by taking into account the "age" of a crates direct and transitive dependencies, like for example the 25% percentile of longest ages (stating that 25% of the dependencies are older than that), or the reverse the 75% percentile (stating that 75% of the dependencies are newer than that).

Perhaps taking into account how many open issues (or even better closed issues) a given crate has taking into account direct and transitive dependencies.

Local registry index cache

For now, we get latest version of crate via HTTP call, each crate cost a HTTP call, which might be expensive.

If we keep a full index local cache, and timing sync it, that might be cheaper and faster.

Here are my ideas:

  1. Download github archive file every 5 mins and load everything in memory, for now, crates.io-index archive file is 35MB.
  2. Clone and read via git2 crate, incremental synchronization every 1 min.
  3. Download archive file when first launch, incremental synchronization via github api

Do not show outdated dev dependencies

Would it make sense to not show outdated dev-dependencies on the badge?

It makes the crate seem to be outdated even if it is only for dependencies used to generate tests/benchmarks.

caching strategy

Related to #66 but covers overall caching policies instead of details about just cargo index caching.

We need to consider what our stale-ness tolerance is, especially for the SVG badges (worst case), since I gather than plan will be running a caching CDN in-front of the service. The maximum staleness time will always be the sum of all cache TTLs.

I think ideally, it should be no longer than 1 minute from the time the live crates index is updated to the time a badge is updated.

An sample proposal:

Cargo index cache update time:          20 seconds
Crate query (from cached index) TTL:	10 seconds
SVG Max-Age / CDN TTL:                  30 seconds
==================================================
Total (worst case update time):         60 seconds

Check Cargo.lock for Bin Crates

I've got a two year old repo that shows as up to date:

Crate Required Latest Status
gtk ^0 0.3.0 up to date
hyper ^0 0.11.19 up to date

This is because the deps are specified like:

[dependencies]
gtk = "^0"
hyper = "^0"

But the lockfile shows the deps are actually locked to much older versions:

dependencies = [
 "gtk 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
 "hyper 0.9.7 (registry+https://github.com/rust-lang/crates.io-index)",
]

Re-introduce caching

Needs a re-think. The remnants of the old method (which is incompatible with modern futures system) are left commented for reference.

See #53 (comment).

Allow to retrieve badge for latest version of crate

For example https://deps.rs/crate/yukikaze would get me latest crate version
While https://deps.rs/crate/yukikaze/status.svg would get me nowhere so user would need to always point to particular version which may not be convenient

branch selector

  • UI component on details page to select branches of the repository
  • query param option for the status endpoints to select branch

To move or not to move deps.rs to deps.rm.rs (decide before 27/01/2021)

As everybody knows already from #40, the project will now be maintained by everybody who wants.

I proposed myself to host it on deps.rm.rs but we could also take deps.rs. Please note that the price will be around $34. I don't personally want to pay for it by myself but I would agree on sharing the cost.

Please leave a comment if you prefer to keep deps.rs and pay for it or if it is okay to move it to deps.rm.rs.

(rm.rs is owned by myself. I started recently using it for https://yewprint.rm.rs)

Status of this project

Hey there!

First of all I want to thank you for the enormous work you did for the community with this project! I love deps.rs and am using it quite often as a dashboard to visualize the dependency states of my or other projects.

But I came to notice that this project seems to be somewhat unmaintained right now - which is totally fine, everybody shifts their attention at one point or another to a new project or is unable to find the time to take care of the maintenance! But it would be a bummer to leave this out in the wild to rot. Would you consider opening the project up to the community or a volunteer - should one be found - to take this over?

I'm not saying that this specific person should be me (I'm not sure if I have the time required at hand) but it would be cool if the project would live on.

better support for "glob" members in workspace

A workspace can have "glob" members, like in this example from servo:

[workspace]
members = [
    "ports/servo",
    "tests/unit/*",

    "ports/geckolib",
    "ports/geckolib/tests",
]

Currently paths ending in * are filtered out (see b0c77b4), but ideally we'd find a better way to support those.

Internal communication

Now that a new team is forming to maintain the project I was wondering if we want to use some external service for communication to have a platform to discuss possible changes or ideas. What do you think about this? Would that make sense or do you think communication using issues & PRs is enough?

As for possible communication channels I can think of (in the order I prefer them):

  • Matrix (easy to use and thanks to federation you probably don't need to make an account specifically for this if you already have one)
  • Discord
  • gitter.im (kind of dated by now but still preferred by some people)
  • Mailing lists (just don't please)

Stable toolchain

Continued from #48.

We are waiting for a release of maud which does not require a nightly toolchain. This may happen soon, according to lambda-fairy/maud#219. Alternatively, we could fetch the upstream version directly from the repository.

Link to RustSec CVEs for insecure crates

At the moment when an insecure crate is listed there's no easy way of knowing what's the security vulnerability and which versions are effected.

This could be implemented by making the screenshot.png button into a link.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.