hyper icon indicating copy to clipboard operation
hyper copied to clipboard

Set up CI to audit for public dependency types

Open seanmonstar opened this issue 3 years ago • 3 comments

We want strict control over what types from dependencies we expose, and there is a tool that can help us check that in CI: cargo api-linter.

We should start by adding a new CI job to .github/workflows/CI.yml to use it. Any questions about what goes in the config file can be clarified here or in a PR.

seanmonstar avatar Jul 26 '22 16:07 seanmonstar

Looks like that has been refactored into cargo-check-external-types. I'll pick up this up.

ethanburrell avatar Aug 22 '22 07:08 ethanburrell

I ran this tool against the master branch (982e6a51385). Any objections to these types being exposed and added to the allowlist, @seanmonstar? The http crate seems to be the only one listed that isn't stable/on a path towards stabilization.

  • bytes::buf::buf_impl::Buf
  • bytes::bytes::Bytes
  • http::header
  • http::header::map::HeaderMap
  • http::method::Method
  • http::request::Request
  • http::response::Response
  • http::status::StatusCode
  • http::uri::Uri
  • http::version::Version
  • http_body::Body
  • http_body::frame::Frame
  • http_body::size_hint::SizeHint
  • tokio::io::async_read::AsyncRead
  • tokio::io::async_write::AsyncWrite
Full `cargo-check-external-types` output
Crate Type Used In
bytes bytes::buf::buf_impl::Buf src/body/mod.rs:17:16
bytes bytes::bytes::Bytes src/body/incoming.rs:155:4
bytes bytes::bytes::Bytes src/body/mod.rs:17:21
bytes bytes::bytes::Bytes src/client/conn/http1.rs:46:4
bytes bytes::bytes::Bytes src/ext/h1_reason_phrase.rs:110:0
bytes bytes::bytes::Bytes src/ext/h1_reason_phrase.rs:57:4
bytes bytes::bytes::Bytes src/ext/h1_reason_phrase.rs:98:0
bytes bytes::bytes::Bytes src/server/conn/http1.rs:65:4
bytes bytes::bytes::Bytes src/upgrade.rs:92:4
http http::header src/lib.rs:61:22
http http::header::map::HeaderMap src/lib.rs:64:0
http http::method::Method src/lib.rs:61:30
http http::request::Request src/client/conn/http1.rs:188:4
http http::request::Request src/client/conn/http2.rs:133:4
http http::request::Request src/lib.rs:61:38
http http::request::Request src/service/util.rs:30:0
http http::response::Response src/client/conn/http1.rs:188:4
http http::response::Response src/client/conn/http2.rs:133:4
http http::response::Response src/lib.rs:61:47
http http::status::StatusCode src/lib.rs:61:57
http http::uri::Uri src/lib.rs:61:69
http http::version::Version src/lib.rs:61:74
http_body http_body::Body src/body/incoming.rs:154:0
http_body http_body::Body src/body/mod.rs:18:0
http_body http_body::Body src/client/conn/http1.rs:121:0
http_body http_body::Body src/client/conn/http1.rs:121:0
http_body http_body::Body src/client/conn/http1.rs:168:0
http_body http_body::Body src/client/conn/http1.rs:248:0
http_body http_body::Body src/client/conn/http1.rs:258:0
http_body http_body::Body src/client/conn/http1.rs:258:0
http_body http_body::Body src/client/conn/http1.rs:505:4
http_body http_body::Body src/client/conn/http1.rs:505:4
http_body http_body::Body src/client/conn/http1.rs:55:0
http_body http_body::Body src/client/conn/http1.rs:55:0
http_body http_body::Body src/client/conn/http1.rs:63:0
http_body http_body::Body src/client/conn/http1.rs:63:0
http_body http_body::Body src/client/conn/http2.rs:113:0
http_body http_body::Body src/client/conn/http2.rs:193:0
http_body http_body::Body src/client/conn/http2.rs:193:0
http_body http_body::Body src/client/conn/http2.rs:214:0
http_body http_body::Body src/client/conn/http2.rs:224:0
http_body http_body::Body src/client/conn/http2.rs:224:0
http_body http_body::Body src/client/conn/http2.rs:38:0
http_body http_body::Body src/client/conn/http2.rs:38:0
http_body http_body::Body src/client/conn/http2.rs:402:4
http_body http_body::Body src/client/conn/http2.rs:402:4
http_body http_body::Body src/client/conn/http2.rs:60:0
http_body http_body::Body src/client/conn/http2.rs:60:0
http_body http_body::Body src/server/conn/http1.rs:172:0
http_body http_body::Body src/server/conn/http1.rs:172:0
http_body http_body::Body src/server/conn/http1.rs:21:0
http_body http_body::Body src/server/conn/http1.rs:358:4
http_body http_body::Body src/server/conn/http1.rs:82:0
http_body http_body::Body src/server/conn/http1.rs:82:0
http_body http_body::Body src/server/conn/http2.rs:18:0
http_body http_body::Body src/server/conn/http2.rs:255:4
http_body http_body::Body src/server/conn/http2.rs:255:4
http_body http_body::Body src/server/conn/http2.rs:50:0
http_body http_body::Body src/server/conn/http2.rs:50:0
http_body http_body::Body src/server/conn/http2.rs:74:0
http_body http_body::Body src/server/conn/http2.rs:74:0
http_body http_body::frame::Frame src/body/mod.rs:19:0
http_body http_body::size_hint::SizeHint src/body/mod.rs:20:0
tokio tokio::io::async_read::AsyncRead src/client/conn/http1.rs:121:0
tokio tokio::io::async_read::AsyncRead src/client/conn/http1.rs:248:0
tokio tokio::io::async_read::AsyncRead src/client/conn/http1.rs:258:0
tokio tokio::io::async_read::AsyncRead src/client/conn/http1.rs:505:4
tokio tokio::io::async_read::AsyncRead src/client/conn/http1.rs:55:0
tokio tokio::io::async_read::AsyncRead src/client/conn/http1.rs:63:0
tokio tokio::io::async_read::AsyncRead src/client/conn/http2.rs:193:0
tokio tokio::io::async_read::AsyncRead src/client/conn/http2.rs:214:0
tokio tokio::io::async_read::AsyncRead src/client/conn/http2.rs:224:0
tokio tokio::io::async_read::AsyncRead src/client/conn/http2.rs:38:0
tokio tokio::io::async_read::AsyncRead src/client/conn/http2.rs:402:4
tokio tokio::io::async_read::AsyncRead src/client/conn/http2.rs:60:0
tokio tokio::io::async_read::AsyncRead src/server/conn/http1.rs:172:0
tokio tokio::io::async_read::AsyncRead src/server/conn/http1.rs:358:4
tokio tokio::io::async_read::AsyncRead src/server/conn/http1.rs:82:0
tokio tokio::io::async_read::AsyncRead src/server/conn/http2.rs:255:4
tokio tokio::io::async_read::AsyncRead src/server/conn/http2.rs:50:0
tokio tokio::io::async_read::AsyncRead src/server/conn/http2.rs:74:0
tokio tokio::io::async_read::AsyncRead src/upgrade.rs:136:4
tokio tokio::io::async_read::AsyncRead src/upgrade.rs:151:0
tokio tokio::io::async_write::AsyncWrite src/client/conn/http1.rs:121:0
tokio tokio::io::async_write::AsyncWrite src/client/conn/http1.rs:248:0
tokio tokio::io::async_write::AsyncWrite src/client/conn/http1.rs:258:0
tokio tokio::io::async_write::AsyncWrite src/client/conn/http1.rs:505:4
tokio tokio::io::async_write::AsyncWrite src/client/conn/http1.rs:55:0
tokio tokio::io::async_write::AsyncWrite src/client/conn/http1.rs:63:0
tokio tokio::io::async_write::AsyncWrite src/client/conn/http2.rs:193:0
tokio tokio::io::async_write::AsyncWrite src/client/conn/http2.rs:214:0
tokio tokio::io::async_write::AsyncWrite src/client/conn/http2.rs:224:0
tokio tokio::io::async_write::AsyncWrite src/client/conn/http2.rs:38:0
tokio tokio::io::async_write::AsyncWrite src/client/conn/http2.rs:402:4
tokio tokio::io::async_write::AsyncWrite src/client/conn/http2.rs:60:0
tokio tokio::io::async_write::AsyncWrite src/server/conn/http1.rs:172:0
tokio tokio::io::async_write::AsyncWrite src/server/conn/http1.rs:358:4
tokio tokio::io::async_write::AsyncWrite src/server/conn/http1.rs:82:0
tokio tokio::io::async_write::AsyncWrite src/server/conn/http2.rs:255:4
tokio tokio::io::async_write::AsyncWrite src/server/conn/http2.rs:50:0
tokio tokio::io::async_write::AsyncWrite src/server/conn/http2.rs:74:0
tokio tokio::io::async_write::AsyncWrite src/upgrade.rs:136:4
tokio tokio::io::async_write::AsyncWrite src/upgrade.rs:161:0

oliviacrain avatar Dec 22 '22 06:12 oliviacrain

Those are purposefully exposed, so yea, let's add em to the allowlist :)

seanmonstar avatar Dec 22 '22 16:12 seanmonstar