Change summary
crates/collab/src/api/contributors.rs | 40 ++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
Detailed changes
@@ -54,6 +54,16 @@ async fn check_is_contributor(
) -> Result<Json<CheckIsContributorResponse>> {
let params = params.into_contributor_selector()?;
+ if Dependabot::is_dependabot(¶ms) {
+ return Ok(Json(CheckIsContributorResponse {
+ signed_at: Some(
+ Dependabot::created_at()
+ .and_utc()
+ .to_rfc3339_opts(SecondsFormat::Millis, true),
+ ),
+ }));
+ }
+
if RenovateBot::is_renovate_bot(¶ms) {
return Ok(Json(CheckIsContributorResponse {
signed_at: Some(
@@ -83,6 +93,36 @@ async fn check_is_contributor(
}))
}
+/// The Dependabot bot GitHub user (`dependabot[bot]`).
+///
+/// https://api.github.com/users/dependabot[bot]
+struct Dependabot;
+
+impl Dependabot {
+ const LOGIN: &'static str = "dependabot[bot]";
+ const USER_ID: i32 = 49699333;
+
+ /// Returns the `created_at` timestamp for the Dependabot bot user.
+ fn created_at() -> &'static NaiveDateTime {
+ static CREATED_AT: OnceLock<NaiveDateTime> = OnceLock::new();
+ CREATED_AT.get_or_init(|| {
+ chrono::DateTime::parse_from_rfc3339("2019-04-16T22:34:25Z")
+ .expect("failed to parse 'created_at' for 'dependabot[bot]'")
+ .naive_utc()
+ })
+ }
+
+ /// Returns whether the given contributor selector corresponds to the Dependabot bot user.
+ fn is_dependabot(contributor: &ContributorSelector) -> bool {
+ match contributor {
+ ContributorSelector::GitHubLogin { github_login } => github_login == Self::LOGIN,
+ ContributorSelector::GitHubUserId { github_user_id } => {
+ github_user_id == &Self::USER_ID
+ }
+ }
+ }
+}
+
/// The Renovate bot GitHub user (`renovate[bot]`).
///
/// https://api.github.com/users/renovate[bot]