Add feature flags to seed script (#16385)

Joseph T. Lyons created

Release Notes:

- N/A

Change summary

crates/collab/src/seed.rs | 51 ++++++++++++++++++++++++++++++++--------
1 file changed, 40 insertions(+), 11 deletions(-)

Detailed changes

crates/collab/src/seed.rs 🔗

@@ -44,6 +44,17 @@ pub async fn seed(config: &Config, db: &Database, force: bool) -> anyhow::Result
     let mut first_user = None;
     let mut others = vec![];
 
+    let flag_names = ["remoting", "language-models"];
+    let mut flags = Vec::new();
+
+    for flag_name in flag_names {
+        let flag = db
+            .create_user_flag(flag_name, false)
+            .await
+            .unwrap_or_else(|_| panic!("failed to create flag: '{flag_name}'"));
+        flags.push(flag);
+    }
+
     for admin_login in seed_config.admins {
         let user = fetch_github::<GitHubUser>(
             &client,
@@ -66,6 +77,15 @@ pub async fn seed(config: &Config, db: &Database, force: bool) -> anyhow::Result
         } else {
             others.push(user.user_id)
         }
+
+        for flag in &flags {
+            db.add_user_flag(user.user_id, *flag)
+                .await
+                .context(format!(
+                    "Unable to enable flag '{}' for user '{}'",
+                    flag, user.user_id
+                ))?;
+        }
     }
 
     for channel in seed_config.channels {
@@ -86,6 +106,7 @@ pub async fn seed(config: &Config, db: &Database, force: bool) -> anyhow::Result
         }
     }
 
+    // TODO: Fix this later
     if let Some(number_of_users) = seed_config.number_of_users {
         // Fetch 100 other random users from GitHub and insert them into the database
         // (for testing autocompleters, etc.)
@@ -105,15 +126,23 @@ pub async fn seed(config: &Config, db: &Database, force: bool) -> anyhow::Result
             for github_user in users {
                 last_user_id = Some(github_user.id);
                 user_count += 1;
-                db.get_or_create_user_by_github_account(
-                    &github_user.login,
-                    Some(github_user.id),
-                    github_user.email.as_deref(),
-                    Some(github_user.created_at),
-                    None,
-                )
-                .await
-                .expect("failed to insert user");
+                let user = db
+                    .get_or_create_user_by_github_account(
+                        &github_user.login,
+                        Some(github_user.id),
+                        github_user.email.as_deref(),
+                        Some(github_user.created_at),
+                        None,
+                    )
+                    .await
+                    .expect("failed to insert user");
+
+                for flag in &flags {
+                    db.add_user_flag(user.id, *flag).await.context(format!(
+                        "Unable to enable flag '{}' for user '{}'",
+                        flag, user.id
+                    ))?;
+                }
             }
         }
     }
@@ -132,9 +161,9 @@ async fn fetch_github<T: DeserializeOwned>(client: &reqwest::Client, url: &str)
         .header("user-agent", "zed")
         .send()
         .await
-        .unwrap_or_else(|_| panic!("failed to fetch '{}'", url));
+        .unwrap_or_else(|_| panic!("failed to fetch '{url}'"));
     response
         .json()
         .await
-        .unwrap_or_else(|_| panic!("failed to deserialize github user from '{}'", url))
+        .unwrap_or_else(|_| panic!("failed to deserialize github user from '{url}'"))
 }