Expose extensions API from api.zed.dev (#8307)

This avoids the need to pay for bandwidth

Co-Authored-By: Marshall <marshall@zed.dev>



Release Notes:

- N/A

Co-authored-by: Marshall <marshall@zed.dev>
This commit is contained in:
Conrad Irwin 2024-02-23 14:08:14 -07:00 committed by GitHub
parent 41949d7b6c
commit 351e6a5de2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 27 additions and 22 deletions

View file

@ -1,5 +1,5 @@
pub mod events;
mod extensions;
pub mod extensions;
use crate::{
auth,
@ -33,7 +33,6 @@ pub fn routes(rpc_server: Option<Arc<rpc::Server>>, state: Arc<AppState>) -> Rou
.route("/rpc_server_snapshot", get(get_rpc_server_snapshot))
.route("/contributors", get(get_contributors).post(add_contributor))
.route("/contributor", get(check_is_contributor))
.merge(extensions::router())
.layer(
ServiceBuilder::new()
.layer(Extension(state))

View file

@ -40,7 +40,16 @@ async fn main() -> Result<()> {
run_migrations().await?;
}
Some("serve") => {
let is_api_only = args.next().is_some_and(|arg| arg == "api");
let (is_api, is_collab) = if let Some(next) = args.next() {
(next == "api", next == "collab")
} else {
(true, true)
};
if !is_api && !is_collab {
Err(anyhow!(
"usage: collab <version | migrate | serve [api|collab]>"
))?;
}
let config = envy::from_env::<Config>().expect("error loading config");
init_tracing(&config);
@ -52,7 +61,7 @@ async fn main() -> Result<()> {
let listener = TcpListener::bind(&format!("0.0.0.0:{}", state.config.http_port))
.expect("failed to bind TCP listener");
let rpc_server = if !is_api_only {
let rpc_server = if is_collab {
let epoch = state
.db
.create_server(&state.config.zed_environment)
@ -66,8 +75,7 @@ async fn main() -> Result<()> {
None
};
// TODO: Once we move the extensions endpoints to run inside `api` service, move the background task as well.
if !is_api_only {
if is_api {
fetch_extensions_from_blob_store_periodically(state.clone(), Executor::Production);
}
@ -80,6 +88,7 @@ async fn main() -> Result<()> {
Router::new()
.route("/", get(handle_root))
.route("/healthz", get(handle_liveness_probe))
.merge(collab::api::extensions::router())
.merge(collab::api::events::router())
.layer(Extension(state.clone())),
)
@ -120,7 +129,9 @@ async fn main() -> Result<()> {
.await?;
}
_ => {
Err(anyhow!("usage: collab <version | migrate | serve>"))?;
Err(anyhow!(
"usage: collab <version | migrate | serve [api|collab]>"
))?;
}
}
Ok(())