Skip to content

Commit

Permalink
refactor: find code to wrap legacy runtime
Browse files Browse the repository at this point in the history
  • Loading branch information
chesedo committed Mar 3, 2023
1 parent d191d66 commit 00b8563
Show file tree
Hide file tree
Showing 11 changed files with 189 additions and 168 deletions.
3 changes: 2 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 1 addition & 8 deletions proto/runtime.proto
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,6 @@ message LoadResponse {
message StartRequest {
// Id to associate with the deployment being started
bytes deployment_id = 1;
// Name of service to start
string service_name = 2;
// Address and port to start the service on
string ip = 3;
}
Expand All @@ -47,12 +45,7 @@ message StartResponse {
bool success = 1;
}

message StopRequest {
// Id to associate with the deployment being stopped
bytes deployment_id = 1;
// Name of service to stop
string service_name = 2;
}
message StopRequest {}

message StopResponse {
// Was the stop successful
Expand Down
1 change: 0 additions & 1 deletion resources/secrets/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,3 @@ keywords = ["shuttle-service", "secrets"]
[dependencies]
async-trait = "0.1.56"
shuttle-service = { path = "../../service", version = "0.8.0", default-features = false }
tokio = { version = "1.19.2", features = ["rt"] }
7 changes: 1 addition & 6 deletions resources/secrets/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ use std::collections::BTreeMap;
use async_trait::async_trait;

use shuttle_service::{Error, Factory, ResourceBuilder};
use tokio::runtime::Runtime;

pub struct Secrets;

Expand All @@ -14,11 +13,7 @@ impl ResourceBuilder<SecretStore> for Secrets {
Self {}
}

async fn build(
self,
factory: &mut dyn Factory,
_runtime: &Runtime,
) -> Result<SecretStore, Error> {
async fn build(self, factory: &mut dyn Factory) -> Result<SecretStore, Error> {
let secrets = factory.get_secrets().await?;

Ok(SecretStore { secrets })
Expand Down
10 changes: 9 additions & 1 deletion runtime/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ license.workspace = true
publish = false
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[[bin]]
name = "rocket"

[dependencies]
anyhow = { workspace = true }
async-trait = { workspace = true }
Expand All @@ -25,6 +28,11 @@ wasmtime = "4.0.0"
wasmtime-wasi = "4.0.0"
futures = "0.3.25"

# For rocket.rs
# TODO: remove
shuttle-secrets = { path = "../resources/secrets" }
rocket = "0.5.0-rc.2"

[dependencies.shuttle-common]
workspace = true
features = ["wasm"]
Expand All @@ -34,4 +42,4 @@ workspace = true

[dependencies.shuttle-service]
workspace = true
features = ["loader"]
features = ["loader", "web-rocket"] # TODO: remove web-rocket
11 changes: 2 additions & 9 deletions runtime/src/axum/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ use shuttle_proto::runtime::{
self, LoadRequest, LoadResponse, StartRequest, StartResponse, StopRequest, StopResponse,
SubscribeLogsRequest,
};
use shuttle_service::ServiceName;
use tokio::sync::mpsc::{Receiver, Sender};
use tokio::sync::{mpsc, oneshot};
use tokio_stream::wrappers::ReceiverStream;
Expand Down Expand Up @@ -149,18 +148,12 @@ impl Runtime for AxumWasm {
&self,
request: tonic::Request<StopRequest>,
) -> Result<tonic::Response<StopResponse>, Status> {
let request = request.into_inner();

let service_name = ServiceName::from_str(request.service_name.as_str())
.map_err(|err| Status::from_error(Box::new(err)))?;
let _request = request.into_inner();

let kill_tx = self.kill_tx.lock().unwrap().deref_mut().take();

if let Some(kill_tx) = kill_tx {
if kill_tx
.send(format!("stopping deployment: {}", &service_name))
.is_err()
{
if kill_tx.send(format!("stopping deployment")).is_err() {
error!("the receiver dropped");
return Err(Status::internal("failed to stop deployment"));
}
Expand Down
50 changes: 50 additions & 0 deletions runtime/src/bin/rocket.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// The few line below is what we should now codegen for legacy
#[tokio::main]
async fn main() {
shuttle_runtime::start(loader).await;
}

async fn loader<S: shuttle_common::storage_manager::StorageManager>(
mut factory: shuttle_runtime::ProvisionerFactory<S>,
) -> shuttle_service::ShuttleRocket {
use shuttle_service::ResourceBuilder;

let secrets = shuttle_secrets::Secrets::new().build(&mut factory).await?;

rocket(secrets).await
}

// Everything below this is the usual code a user will write
use anyhow::anyhow;
use rocket::response::status::BadRequest;
use rocket::State;
use shuttle_secrets::SecretStore;

#[rocket::get("/secret")]
async fn secret(state: &State<MyState>) -> Result<String, BadRequest<String>> {
Ok(state.secret.clone())
}

struct MyState {
secret: String,
}

// #[shuttle_service::main]
pub async fn rocket(
// #[shuttle_secrets::Secrets] secret_store: SecretStore,
secret_store: SecretStore,
) -> shuttle_service::ShuttleRocket {
// get secret defined in `Secrets.toml` file.
let secret = if let Some(secret) = secret_store.get("MY_API_KEY") {
secret
} else {
return Err(anyhow!("secret was not found").into());
};

let state = MyState { secret };
let rocket = rocket::build()
.mount("/", rocket::routes![secret])
.manage(state);

Ok(rocket)
}
14 changes: 0 additions & 14 deletions runtime/src/legacy/error.rs

This file was deleted.

Loading

0 comments on commit 00b8563

Please sign in to comment.