Skip to content

Commit ce4c50e

Browse files
committed
Merge remote-tracking branch 'origin/jdetter/use-github-large-runner' into jdetter/parallel-smoketests
2 parents aaa725e + 045c547 commit ce4c50e

File tree

27 files changed

+604
-399
lines changed

27 files changed

+604
-399
lines changed

.github/workflows/ci.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ name: CI
99
jobs:
1010
docker_smoketests:
1111
name: Smoketests
12-
runs-on: ubuntu-latest
12+
runs-on: spacetimedb-runner
1313
steps:
1414
- name: Checkout sources
1515
uses: actions/checkout@v3
@@ -23,7 +23,7 @@ jobs:
2323

2424
test:
2525
name: Test Suite
26-
runs-on: ubuntu-latest
26+
runs-on: spacetimedb-runner
2727
steps:
2828
- name: Checkout sources
2929
uses: actions/checkout@v3
@@ -40,7 +40,7 @@ jobs:
4040

4141
lints:
4242
name: Lints
43-
runs-on: ubuntu-latest
43+
runs-on: spacetimedb-runner
4444
steps:
4545
- name: Checkout sources
4646
uses: actions/checkout@v3
@@ -56,7 +56,7 @@ jobs:
5656

5757
wasm_bindings:
5858
name: Build and test wasm bindings
59-
runs-on: ubuntu-latest
59+
runs-on: spacetimedb-runner
6060
steps:
6161
- uses: actions/checkout@v3
6262

Cargo.lock

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/bench/src/spacetime.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use spacetimedb::db::relational_db::{open_db, RelationalDB};
55
use spacetimedb_lib::sats::product;
66
use spacetimedb_lib::{AlgebraicType, AlgebraicValue, ProductType};
77

8-
type DbResult = (RelationalDB, u32);
8+
type DbResult = (RelationalDB, TempDir, u32);
99

1010
fn init_db() -> ResultBench<(TempDir, u32)> {
1111
let tmp_dir = TempDir::new("stdb_test")?;
@@ -26,7 +26,7 @@ fn init_db() -> ResultBench<(TempDir, u32)> {
2626
fn build_db() -> ResultBench<DbResult> {
2727
let (tmp_dir, table_id) = init_db()?;
2828
let stdb = open_db(&tmp_dir)?;
29-
Ok((stdb, table_id))
29+
Ok((stdb, tmp_dir, table_id))
3030
}
3131

3232
fn insert_row(db: &RelationalDB, tx: &mut MutTxId, table_id: u32, run: Runs) -> ResultBench<()> {
@@ -60,7 +60,7 @@ impl BuildDb for DbResult {
6060
}
6161

6262
pub fn prefill_data(db: &DbResult, run: Runs) -> ResultBench<()> {
63-
let (conn, table_id) = db;
63+
let (conn, _tmp_dir, table_id) = db;
6464

6565
let mut tx = conn.begin_tx();
6666
insert_row(conn, &mut tx, *table_id, run)?;
@@ -70,8 +70,8 @@ pub fn prefill_data(db: &DbResult, run: Runs) -> ResultBench<()> {
7070
}
7171

7272
pub fn insert_tx_per_row(pool: &mut Pool<DbResult>, run: Runs) -> ResultBench<()> {
73-
let (conn, table_id) = pool.next()?;
74-
//let mut log = log.lock().unwrap();
73+
let (conn, _tmp_dir, table_id) = pool.next()?;
74+
7575
for row in run.data() {
7676
let mut tx = conn.begin_tx();
7777

@@ -96,7 +96,7 @@ pub fn insert_tx(pool: &mut Pool<DbResult>, _run: Runs) -> ResultBench<()> {
9696
}
9797

9898
pub fn select_no_index(pool: &mut Pool<DbResult>, run: Runs) -> ResultBench<()> {
99-
let (conn, table_id) = pool.next()?;
99+
let (conn, _tmp_dir, table_id) = pool.next()?;
100100

101101
let tx = conn.begin_tx();
102102

crates/cli/src/subcommands/generate/csharp.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -615,12 +615,18 @@ fn autogen_csharp_product_table_common(
615615
AlgebraicType::Sum(sum) => {
616616
if is_option_type(sum) {
617617
writeln!(output, "[SpacetimeDB.Some]").unwrap();
618-
} else if is_enum(sum) {
619-
writeln!(
620-
output,
621-
"[Newtonsoft.Json.JsonConverter(typeof(SpacetimeDB.EnumConverter))]"
622-
)
623-
.unwrap();
618+
} else {
619+
unimplemented!()
620+
}
621+
}
622+
AlgebraicType::Ref(type_ref) => {
623+
let ref_type = &ctx.typespace.types[type_ref.idx()];
624+
if let AlgebraicType::Sum(sum_type) = ref_type {
625+
if is_enum(sum_type) {
626+
writeln!(output, "[SpacetimeDB.Enum]").unwrap();
627+
} else {
628+
unimplemented!()
629+
}
624630
}
625631
}
626632
_ => {}

crates/cli/src/subcommands/generate/mod.rs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use std::path::{Path, PathBuf};
44
use clap::Arg;
55
use clap::ArgAction::SetTrue;
66
use convert_case::{Case, Casing};
7+
use duct::cmd;
78
use spacetimedb_lib::sats::{AlgebraicType, Typespace};
89
use spacetimedb_lib::{bsatn, MiscModuleExport, ModuleDef, ReducerDef, TableDef, TypeAlias};
910
use wasmtime::{AsContext, Caller, ExternType};
@@ -110,10 +111,15 @@ Failed to compile module {:?}. See cargo errors above for more details.",
110111
));
111112
}
112113

114+
let mut paths = vec![];
113115
for (fname, code) in generate(&wasm_file, lang, namespace.as_str())?.into_iter() {
114-
fs::write(out_dir.join(fname), code)?;
116+
let path = out_dir.join(fname);
117+
paths.push(path.clone());
118+
fs::write(path, code)?;
115119
}
116120

121+
format_files(paths, lang)?;
122+
117123
println!("Generate finished successfully.");
118124
Ok(())
119125
}
@@ -433,3 +439,19 @@ impl Memory {
433439
.get(..len as usize)
434440
}
435441
}
442+
443+
fn format_files(generated_files: Vec<PathBuf>, lang: Language) -> anyhow::Result<()> {
444+
match lang {
445+
Language::Rust => {
446+
cmd!("rustup", "component", "add", "rustfmt").run()?;
447+
for path in generated_files {
448+
cmd!("rustfmt", path.to_str().unwrap()).run()?;
449+
}
450+
}
451+
Language::Csharp => {}
452+
Language::TypeScript => {}
453+
Language::Python => {}
454+
}
455+
456+
Ok(())
457+
}

crates/cli/src/subcommands/generate/python.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ fn autogen_python_product_table_common(
224224
writeln!(output).unwrap();
225225
writeln!(
226226
output,
227-
"from spacetimedb_python_sdk.spacetimedb_client import SpacetimeDBClient"
227+
"from spacetimedb_sdk.spacetimedb_client import SpacetimeDBClient"
228228
)
229229
.unwrap();
230230
} else {
@@ -545,7 +545,7 @@ pub fn autogen_python_reducer(ctx: &GenCtx, reducer: &ReducerDef) -> String {
545545

546546
writeln!(
547547
output,
548-
"from spacetimedb_python_sdk.spacetimedb_client import SpacetimeDBClient"
548+
"from spacetimedb_sdk.spacetimedb_client import SpacetimeDBClient"
549549
)
550550
.unwrap();
551551
writeln!(output).unwrap();

crates/cli/src/subcommands/generate/rust.rs

Lines changed: 55 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -535,12 +535,32 @@ fn print_table_filter_methods(
535535
)
536536
}
537537

538+
fn reducer_type_name(reducer: &ReducerDef) -> String {
539+
let mut name = reducer.name.to_case(Case::Pascal);
540+
name.push_str("Args");
541+
name
542+
}
543+
544+
fn reducer_variant_name(reducer: &ReducerDef) -> String {
545+
reducer.name.to_case(Case::Pascal)
546+
}
547+
548+
fn reducer_module_name(reducer: &ReducerDef) -> String {
549+
let mut name = reducer.name.to_case(Case::Snake);
550+
name.push_str("_reducer");
551+
name
552+
}
553+
554+
fn reducer_function_name(reducer: &ReducerDef) -> String {
555+
reducer.name.to_case(Case::Snake)
556+
}
557+
538558
/// Generate a file which defines a struct corresponding to the `reducer`'s arguments,
539559
/// implements `spacetimedb_sdk::table::Reducer` for it, and defines a helper
540560
/// function which invokes the reducer.
541561
pub fn autogen_rust_reducer(ctx: &GenCtx, reducer: &ReducerDef) -> String {
542-
let func_name = reducer.name.to_case(Case::Snake);
543-
let type_name = reducer.name.to_case(Case::Pascal);
562+
let func_name = reducer_function_name(reducer);
563+
let type_name = reducer_type_name(reducer);
544564

545565
let mut output = CodeIndenter::new(String::new());
546566
let out = &mut output;
@@ -610,9 +630,9 @@ pub fn autogen_rust_reducer(ctx: &GenCtx, reducer: &ReducerDef) -> String {
610630
///
611631
/// The `mod.rs` contains several things:
612632
///
613-
/// 1. `pub mod` declarations for all the other files generated. Without these, either the
614-
/// other files wouldn't get compiled, or users would have to `mod`-declare each file
615-
/// manually.
633+
/// 1. `pub mod` and `pub use` declarations for all the other files generated.
634+
/// Without these, either the other files wouldn't get compiled,
635+
/// or users would have to `mod`-declare each file manually.
616636
///
617637
/// 2. `enum ReducerEvent`, which has variants for each reducer in the module.
618638
/// Row callbacks are passed an optional `ReducerEvent` as an additional argument,
@@ -659,6 +679,11 @@ pub fn autogen_rust_globals(ctx: &GenCtx, items: &[GenItem]) -> Vec<(String, Str
659679

660680
out.newline();
661681

682+
// Re-export all the modules for the generated files.
683+
print_module_reexports(out, items);
684+
685+
out.newline();
686+
662687
// Define `enum ReducerEvent`.
663688
print_reducer_event_defn(out, items);
664689

@@ -723,21 +748,25 @@ fn iter_table_items(items: &[GenItem]) -> impl Iterator<Item = &TableDef> {
723748
})
724749
}
725750

751+
fn iter_module_names(items: &[GenItem]) -> impl Iterator<Item = String> + '_ {
752+
items.iter().filter_map(|item| match item {
753+
GenItem::Table(table) => Some(table.name.to_case(Case::Snake)),
754+
GenItem::TypeAlias(ty) => Some(ty.name.to_case(Case::Snake)),
755+
GenItem::Reducer(reducer) => (!is_init(reducer)).then_some(reducer_module_name(reducer)),
756+
})
757+
}
758+
726759
/// Print `pub mod` declarations for all the files that will be generated for `items`.
727760
fn print_module_decls(out: &mut Indenter, items: &[GenItem]) {
728-
for item in items {
729-
let (name, suffix) = match item {
730-
GenItem::Table(table) => (&table.name, ""),
731-
GenItem::TypeAlias(ty) => (&ty.name, ""),
732-
GenItem::Reducer(reducer) => {
733-
if is_init(reducer) {
734-
continue;
735-
}
736-
(&reducer.name, "_reducer")
737-
}
738-
};
739-
let module_name = name.to_case(Case::Snake);
740-
writeln!(out, "pub mod {}{};", module_name, suffix).unwrap();
761+
for module_name in iter_module_names(items) {
762+
writeln!(out, "pub mod {};", module_name).unwrap();
763+
}
764+
}
765+
766+
/// Print `pub use *` declarations for all the files that will be generated for `items`.
767+
fn print_module_reexports(out: &mut Indenter, items: &[GenItem]) {
768+
for module_name in iter_module_names(items) {
769+
writeln!(out, "pub use {}::*;", module_name).unwrap();
741770
}
742771
}
743772

@@ -856,14 +885,13 @@ fn print_handle_event_defn(out: &mut Indenter, items: &[GenItem]) {
856885
"match &function_call.reducer[..] {",
857886
|out| {
858887
for reducer in iter_reducer_items(items) {
859-
let type_or_variant_name = reducer.name.to_case(Case::Pascal);
860888
writeln!(
861889
out,
862-
"{:?} => reducer_callbacks.handle_event_of_type::<{}_reducer::{}, ReducerEvent>(event, state, ReducerEvent::{}),",
890+
"{:?} => reducer_callbacks.handle_event_of_type::<{}::{}, ReducerEvent>(event, state, ReducerEvent::{}),",
863891
reducer.name,
864-
reducer.name.to_case(Case::Snake),
865-
type_or_variant_name,
866-
type_or_variant_name,
892+
reducer_module_name(reducer),
893+
reducer_type_name(reducer),
894+
reducer_variant_name(reducer),
867895
).unwrap();
868896
}
869897
writeln!(
@@ -925,13 +953,12 @@ fn print_reducer_event_defn(out: &mut Indenter, items: &[GenItem]) {
925953
for item in items {
926954
if let GenItem::Reducer(reducer) = item {
927955
if !is_init(reducer) {
928-
let type_name = reducer.name.to_case(Case::Pascal);
929956
writeln!(
930957
out,
931-
"{}({}_reducer::{}),",
932-
type_name,
933-
reducer.name.to_case(Case::Snake),
934-
type_name,
958+
"{}({}::{}),",
959+
reducer_variant_name(reducer),
960+
reducer_module_name(reducer),
961+
reducer_type_name(reducer),
935962
)
936963
.unwrap();
937964
}

crates/cli/src/subcommands/generate/typescript.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -720,7 +720,7 @@ fn autogen_typescript_product_table_common(
720720
.as_ref()
721721
.expect("autogen'd tuples should have field names")
722722
.replace("r#", "");
723-
format!("\"{}\"", field_name)
723+
format!("\"{}\"", field_name.to_case(Case::Camel))
724724
})
725725
{
726726
writeln!(

0 commit comments

Comments
 (0)