From a1d7b5447952085a2fdbb86e38806d3b65b76d82 Mon Sep 17 00:00:00 2001 From: zxq5 Date: Sun, 22 Feb 2026 21:44:41 +0000 Subject: [PATCH] - created dsx and dsx_server in place of dsx-build - dsx replaces dsx-build and is a build tool/package manager for the DSA ecosystem - dsx_server is the repository/server for dsx packages. dsx is a WIP. --- Cargo.toml | 2 +- dsx-build/Cargo.toml | 10 - dsx-build/src/main.rs | 200 ---------- dsx_server/Cargo.toml | 31 ++ dsx_server/bacon.toml | 106 ++++++ dsx_server/data/repos/example/Package.toml | 1 + dsx_server/data/repos/example/repo/Dsx.toml | 1 + .../data/repos/example/repo/src/lib/maths.dsa | 105 +++++ .../data/repos/example/repo/src/lib/print.dsa | 332 ++++++++++++++++ .../data/repos/example/repo/src/main.dsa | 39 ++ dsx_server/doc/endpoints.md | 19 + dsx_server/doc/structure.md | 15 + dsx_server/src/client/client.rs | 53 +++ dsx_server/src/client/new.rs | 103 +++++ dsx_server/src/common/builder/mod.rs | 168 ++++++++ dsx_server/src/common/config.rs | 45 +++ dsx_server/src/common/mod.rs | 3 + .../src/common}/templates.rs | 0 dsx_server/src/lib.rs | 1 + dsx_server/src/server/error.rs | 38 ++ dsx_server/src/server/model.rs | 144 +++++++ dsx_server/src/server/server.rs | 270 +++++++++++++ dsx_server/static/placeholder.jpg | Bin 0 -> 206134 bytes .../templates/artifact_detail.html.tera | 360 ++++++++++++++++++ dsx_server/templates/artifact_list.html.tera | 189 +++++++++ dsx_server/templates/base.html.tera | 198 ++++++++++ .../templates/components/file.html.tera | 16 + .../templates/components/file_tree.html.tera | 35 ++ .../templates/components/sidebar.html.tera | 81 ++++ dsx_server/templates/package_home.html.tera | 204 ++++++++++ dsx_server/templates/packages.html.tera | 174 +++++++++ dsx_server/templates/repo_path.html.tera | 281 ++++++++++++++ dsx_server/templates/repo_search.html.tera | 161 ++++++++ 33 files changed, 3174 insertions(+), 211 deletions(-) delete mode 100644 dsx-build/Cargo.toml delete mode 100644 dsx-build/src/main.rs create mode 100644 dsx_server/Cargo.toml create mode 100644 dsx_server/bacon.toml create mode 100644 dsx_server/data/repos/example/Package.toml create mode 100644 dsx_server/data/repos/example/repo/Dsx.toml create mode 100644 dsx_server/data/repos/example/repo/src/lib/maths.dsa create mode 100644 dsx_server/data/repos/example/repo/src/lib/print.dsa create mode 100644 dsx_server/data/repos/example/repo/src/main.dsa create mode 100644 dsx_server/doc/endpoints.md create mode 100644 dsx_server/doc/structure.md create mode 100644 dsx_server/src/client/client.rs create mode 100644 dsx_server/src/client/new.rs create mode 100644 dsx_server/src/common/builder/mod.rs create mode 100644 dsx_server/src/common/config.rs create mode 100644 dsx_server/src/common/mod.rs rename {dsx-build/src => dsx_server/src/common}/templates.rs (100%) create mode 100644 dsx_server/src/lib.rs create mode 100644 dsx_server/src/server/error.rs create mode 100644 dsx_server/src/server/model.rs create mode 100644 dsx_server/src/server/server.rs create mode 100644 dsx_server/static/placeholder.jpg create mode 100644 dsx_server/templates/artifact_detail.html.tera create mode 100644 dsx_server/templates/artifact_list.html.tera create mode 100644 dsx_server/templates/base.html.tera create mode 100644 dsx_server/templates/components/file.html.tera create mode 100644 dsx_server/templates/components/file_tree.html.tera create mode 100644 dsx_server/templates/components/sidebar.html.tera create mode 100644 dsx_server/templates/package_home.html.tera create mode 100644 dsx_server/templates/packages.html.tera create mode 100644 dsx_server/templates/repo_path.html.tera create mode 100644 dsx_server/templates/repo_search.html.tera diff --git a/Cargo.toml b/Cargo.toml index f5ab526..b5efad1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ cargo-features = ["codegen-backend"] [workspace] -members = ["emulator", "common", "assembler", "dsa_editor", "compiler", "dsx-build"] +members = ["emulator", "common", "assembler", "dsa_editor", "compiler", "dsx_server"] resolver = "3" [workspace.package] diff --git a/dsx-build/Cargo.toml b/dsx-build/Cargo.toml deleted file mode 100644 index 3bce473..0000000 --- a/dsx-build/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "dsx-build" -version.workspace = true -edition.workspace = true -authors.workspace = true - -[dependencies] -compiler = { path = "../compiler" } -assembler = { path = "../assembler" } -chrono = "0.4.43" diff --git a/dsx-build/src/main.rs b/dsx-build/src/main.rs deleted file mode 100644 index 0f3fcdf..0000000 --- a/dsx-build/src/main.rs +++ /dev/null @@ -1,200 +0,0 @@ -use std::process::{Command, Stdio}; -use std::{ - env, fs, - path::{Path, PathBuf}, -}; - -use crate::templates::{Dsa, Dsc, Template}; - -mod templates; - -/// Run a command and exit on failure. -fn run(cmd: &mut Command) { - let status = cmd.status().expect("failed to execute command"); - if !status.success() { - std::process::exit(1); - } -} - -fn main() { - // Very small CLI – only three sub‑commands. - let args: Vec = env::args().collect(); - if args.len() < 2 { - eprintln!("Usage: dsx-build [options]"); - std::process::exit(1); - } - match args[1].as_str() { - "new" => cmd_new(&args[2..]), - "build" => cmd_build(), - "package" => todo!("Package manager stub – not implemented yet."), - _ => { - eprintln!("Unknown command: {}", args[1]); - std::process::exit(1); - } - } -} - -// ---------- new project ---------------------------------------------------- -fn cmd_new(args: &[String]) { - let mut lang = "dsa"; - for i in 0..args.len() { - if args[i] == "--lang" && i + 1 < args.len() { - lang = &args[i + 1]; - } - } - - let lib = args.contains(&"--lib".to_string()); - - // Determine project root: a subdirectory named after the supplied --name argument. - let mut name_opt = None; - for i in 0..args.len() { - if args[i] == "--name" && i + 1 < args.len() { - name_opt = Some(&args[i + 1]); - break; - } - } - - let project_name = match name_opt { - Some(name) => name.to_string(), - None => { - eprintln!("Error: --name argument required"); - std::process::exit(1); - } - }; - - let cwd = env::current_dir().unwrap(); - let src_path = cwd.join(&project_name).join("src"); - fs::create_dir_all(&src_path).expect("Failed to create project directory"); - - match lang { - "dsa" => { - // Minimal DSA binary template. - let path = src_path.join(format!("main.dsa")); - - let template = Dsa::create(&project_name, lib); - - fs::write(path, template).expect("Unable to write DSA file"); - } - "dsc" => { - let path = src_path.join(format!("main.dsc")); - - let template = Dsc::create(&project_name, lib); - - fs::write(path, template).expect("Unable to write DSC file"); - } - _ => { - eprintln!("Unsupported language: {}", lang); - std::process::exit(1); - } - } - - fs::create_dir_all(src_path.join("lib")).expect("Failed to create lib directory"); - fs::write( - src_path.join("lib/print.dsa"), - templates::create_print_lib(), - ) - .expect("Failed to create print.dsa"); - fs::write( - src_path.join("lib/maths.dsa"), - templates::create_maths_lib(), - ) - .expect("Failed to create maths.dsa"); - - println!( - "Created new {} project in {}.", - lang, - src_path.parent().unwrap().display() - ); -} - -// ---------- build ---------------------------------------------------------- -fn cmd_build() { - let cwd = env::current_dir().unwrap(); - - // Detect .dsc or .dsa files in current directory. - let mut has_dsc = false; - let mut has_dsa = false; - for entry in fs::read_dir(&cwd.join("src")).expect("unable to read dir") { - if let Ok(entry) = entry { - let path = entry.path(); - if path.extension().and_then(|s| s.to_str()) == Some("dsc") { - has_dsc = true; - } else if path.extension().and_then(|s| s.to_str()) == Some("dsa") { - has_dsa = true; - } - } - } - - if !has_dsc && !has_dsa { - eprintln!("No .dsc or .dsa source found in src directory."); - std::process::exit(1); - } - - // Assemble main.dsa to a dsb binary. - println!("Assembling Project to a DSB binary..."); - let build_dir = cwd.join("build"); - fs::create_dir_all(&build_dir).expect("Failed to create build directory"); - - // Copy everything from `cwd/src` to the build directory. - fn copy_recursively(src: &Path, dst: &Path) { - if src.is_file() { - fs::create_dir_all(dst.parent().unwrap()) - .expect("Failed to create parent directory"); - fs::copy(src, dst).expect("Failed to copy file"); - } else if src.is_dir() { - for entry in fs::read_dir(src).expect("Unable to read source dir") { - let entry = entry.expect("Failed to read entry"); - let child_src = entry.path(); - let child_dst = dst.join(entry.file_name()); - copy_recursively(&child_src, &child_dst); - } - } - } - - let src_dir = cwd.join("src"); - if src_dir.exists() { - copy_recursively(&src_dir, &build_dir); - } - - // Change current working directory to the build directory. - env::set_current_dir(&build_dir).expect("Failed to change to build directory"); - - if has_dsc { - println!("Compiling DSC to DSA..."); - fn compile_recursive(path: &Path) { - if path.is_dir() { - for entry in fs::read_dir(path).expect("unable to read dir") { - let entry = entry.expect("failed to read entry"); - compile_recursive(&entry.path()); - } - } else if path.extension().and_then(|s| s.to_str()) == Some("dsc") { - let input_path = path; - let output_path = path.with_extension("dsa"); - compiler::compile_file(&input_path, &output_path).unwrap_or_else(|e| { - eprintln!("Failed to compile {:?}: {}", input_path, e); - std::process::exit(1); - }); - } - } - compile_recursive(&build_dir); - } - - // Replace .dsc with .dsa only in include statements, recursively for each file. - let mut sed_cmd = Command::new("bash"); - sed_cmd.args(&[ - "-c", - &format!( - "find \"{}\" -type f -name '*.dsa' -exec sed -i '/^include/ s/\\.dsc/.dsa/g' {{}} +", - build_dir.display() - ), - ]); - run(&mut sed_cmd); - - fs::create_dir_all(&cwd.join("artifacts")).expect("Failed to create build directory"); - assembler::assemble_file("./main.dsa", "../artifacts/out.dsb").unwrap_or_else(|e| { - eprintln!("Failed to assemble {:?}: {}", "./main.dsa", e); - std::process::exit(1); - }); - - println!("Build finished. Binary at {}/main.dsb", build_dir.display()); -} diff --git a/dsx_server/Cargo.toml b/dsx_server/Cargo.toml new file mode 100644 index 0000000..535509f --- /dev/null +++ b/dsx_server/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "dsx" +version.workspace = true +edition.workspace = true +authors.workspace = true + +[[bin]] +name = "dsx_server" +path = "src/server/server.rs" + +[[bin]] +name = "dsx" +path = "src/client/client.rs" + +[dependencies] +compiler = { path = "../compiler" } +assembler = { path = "../assembler" } +common = { path = "../common" } + +anyhow = "1.0.102" +dotenv = "0.15.0" +rocket = { version = "0.5.1", features = ["json"] } +rocket_dyn_templates = { version = "0.2.0", features = ["tera"] } +serde = { version = "1.0.228", features = ["derive"] } +toml = "1.0.3" +tracing = "0.1.44" +tracing-subscriber = { version = "0.3.22", features = ["env-filter"] } +chrono = "0.4.43" +tar = "0.4.44" +flate2 = "1.1.9" +walkdir = "2.5.0" diff --git a/dsx_server/bacon.toml b/dsx_server/bacon.toml new file mode 100644 index 0000000..66d1030 --- /dev/null +++ b/dsx_server/bacon.toml @@ -0,0 +1,106 @@ +default_job = "check" +env.CARGO_TERM_COLOR = "always" + +[jobs.check] +command = ["cargo", "check"] +need_stdout = false + +[jobs.check-all] +command = ["cargo", "check", "--all-targets"] +need_stdout = false + +# Run clippy on the default target +[jobs.clippy] +command = ["cargo", "clippy"] +need_stdout = false + +[jobs.clippy-all] +command = ["cargo", "clippy", "--all-targets"] +need_stdout = false + +# Run clippy in pedantic mode +# The 'dismiss' feature may come handy +[jobs.pedantic] +command = [ + "cargo", "clippy", + "--", + "-W", "clippy::pedantic", +] +need_stdout = false + +# This job lets you run +# - all tests: bacon test +# - a specific test: bacon test -- config::test_default_files +# - the tests of a package: bacon test -- -- -p config +[jobs.test] +command = ["cargo", "test"] +need_stdout = true + +[jobs.nextest] +command = [ + "cargo", "nextest", "run", + "--hide-progress-bar", "--failure-output", "final" +] +need_stdout = true +analyzer = "nextest" + +[jobs.doc] +command = ["cargo", "doc", "--no-deps"] +need_stdout = false + +# If the doc compiles, then it opens in your browser and bacon switches +# to the previous job +[jobs.doc-open] +command = ["cargo", "doc", "--no-deps", "--open"] +need_stdout = false +on_success = "back" # so that we don't open the browser at each change + +# You can run your application and have the result displayed in bacon, +# if it makes sense for this crate. +[jobs.run] +command = [ + "cargo", "run", "--bin", "dsx_server" + # put launch parameters for your program behind a `--` separator +] +need_stdout = true +allow_warnings = true +background = true + +# Run your long-running application (eg server) and have the result displayed in bacon. +# For programs that never stop (eg a server), `background` is set to false +# to have the cargo run output immediately displayed instead of waiting for +# program's end. +# 'on_change_strategy' is set to `kill_then_restart` to have your program restart +# on every change (an alternative would be to use the 'F5' key manually in bacon). +# If you often use this job, it makes sense to override the 'r' key by adding +# a binding `r = job:run-long` at the end of this file . +# A custom kill command such as the one suggested below is frequently needed to kill +# long running programs (uncomment it if you need it) +[jobs.run-long] +command = [ + "cargo", "run", + # put launch parameters for your program behind a `--` separator +] +need_stdout = true +allow_warnings = true +background = false +on_change_strategy = "kill_then_restart" +# kill = ["pkill", "-TERM", "-P"] + +# This parameterized job runs the example of your choice, as soon +# as the code compiles. +# Call it as +# bacon ex -- my-example +[jobs.ex] +command = ["cargo", "run", "--example"] +need_stdout = true +allow_warnings = true + +# You may define here keybindings that would be specific to +# a project, for example a shortcut to launch a specific job. +# Shortcuts to internal functions (scrolling, toggling, etc.) +# should go in your personal global prefs.toml file instead. +[keybindings] +# alt-m = "job:my-job" +c = "job:clippy-all" # comment this to have 'c' run clippy on only the default target +p = "job:pedantic" diff --git a/dsx_server/data/repos/example/Package.toml b/dsx_server/data/repos/example/Package.toml new file mode 100644 index 0000000..a2727f9 --- /dev/null +++ b/dsx_server/data/repos/example/Package.toml @@ -0,0 +1 @@ +id="example" diff --git a/dsx_server/data/repos/example/repo/Dsx.toml b/dsx_server/data/repos/example/repo/Dsx.toml new file mode 100644 index 0000000..da5c772 --- /dev/null +++ b/dsx_server/data/repos/example/repo/Dsx.toml @@ -0,0 +1 @@ +name = "example" diff --git a/dsx_server/data/repos/example/repo/src/lib/maths.dsa b/dsx_server/data/repos/example/repo/src/lib/maths.dsa new file mode 100644 index 0000000..687ad5d --- /dev/null +++ b/dsx_server/data/repos/example/repo/src/lib/maths.dsa @@ -0,0 +1,105 @@ + +// multiply.dsa +// usage: +// +// include multiply "" +// +// usage for multiply: +// push (arg1) +// push (arg0) +// call multiply::multiply +// pop (arg0) +// pop (arg1) + +multiply: + push bpr + mov spr, bpr + + ldw bpr, rg0, 8 // load op 2 + ldw bpr, rg1, 12 // load op 1 + lwi 0, rg2 // initialise rg2 to zero + +_multiply_loop: + add rg2, rg0, rg2 + dec rg1 + + cmp rg1, zero + jgt _multiply_loop + +_multiply_end: + stw rg2, bpr, 8 + + mov bpr, spr + pop bpr + return + +divmod: + push bpr + mov spr, bpr + + ldw bpr, rg1, 8 // load op 2 + ldw bpr, rg0, 12 // load op 1 + + lli 0, rg3 + +_divmod_loop: + cmp rg0, rg1 + jlt _divmod_end + + sub rg0, rg1, rg0 + inc rg3 + + jmp _divmod_loop + +_divmod_end: + // store div in first arg + // store mod in second arg + stw rg3, bpr, 8 + stw rg0, bpr, 12 + + mov bpr, spr + pop bpr + return + +// multiply.dsa - improved version +// Multiplies two 32-bit numbers using shift-and-add +// +// Usage: +// push operand2 (multiplier) +// push operand1 (multiplicand) +// call multiply::multiply +// pop result +// pop zero (discard second argument) + +new_multiply: + push bpr + mov spr, bpr + + ldw bpr, rg0, 8 // rg0 = multiplicand + ldw bpr, rg1, 12 // rg1 = multiplier + + lli 0, rg2 // rg2 = result (accumulator) + lli 32, rg3 // rg3 = bit counter + +mult_loop: + // Check if lowest bit of multiplier is 1 + lli 1, acc + and rg1, acc, acc // acc = rg1 & 1 + cmp acc, zero + jeq skip_add // if (rg1 & 1) == 0, skip addition + + // Add multiplicand to result + add rg2, rg0, rg2 + +skip_add: + shl rg0, 1 // shift multiplicand left + shr rg1, 1 // shift multiplier right + + dec rg3 + cmp rg3, zero + jgt mult_loop + + stw rg2, bpr, 8 // store result + mov bpr, spr + pop bpr + return diff --git a/dsx_server/data/repos/example/repo/src/lib/print.dsa b/dsx_server/data/repos/example/repo/src/lib/print.dsa new file mode 100644 index 0000000..ead1d5c --- /dev/null +++ b/dsx_server/data/repos/example/repo/src/lib/print.dsa @@ -0,0 +1,332 @@ + +// lib: +// print.dsa + +// usage: +// +// include print """ +// +// usage for print: +// push (register containing address of string) +// push pcx +// jmp print::print +// +// usage for reset: +// push pcx +// jmp print::reset +// +// usage for clear: +// push pcx +// jmp print::clear +// +// usage for print_byte: +// push (register containing byte) +// push pcx +// jmp print::print_byte +// +// usage for print_word: +// push (register containing word) +// push pcx +// jmp print::print_word +// +// usage for print_num: +// push (register containing number to print in decimal) +// push pcx +// jmp print::print_num +// + +include maths "./maths.dsa" + +dw display: 0x20000 +dw current: 0x20000 + +// ------------------------------------------ +// prints the string at addr(arg[0]) to the screen. (no trailing whitespace unless explicitly provided) +print: + push bpr + mov spr, bpr + + ldw bpr, rg0, 8 + ldw current, rg1 + +_print_loop: + ldb rg0, acc + cmp acc, zero + jeq _end + stb acc, rg1 + + addi rg0, 1 + addi rg1, 1 + + jmp _print_loop + +// ------------------------------------------ +println: + push bpr + mov spr, bpr + + ldw bpr, rg0, 8 + ldw current, rg1 + +_println_loop: + ldb rg0, acc + cmp acc, zero + jeq _println_end + stb acc, rg1 + + addi rg0, 1 + addi rg1, 1 + + jmp _println_loop + +_println_end: + call print_newline + jmp _end + +// ------------------------------------------ +// prints the value of arg[0] to the screen. +print_word: + // initialise + push bpr + mov spr, bpr + + // load byte into acc + ldw bpr, rg0, 8 + ldw current, rg1 + + addi rg1, 3 + + stb rg0, rg1 + subi rg1, 1 + shr rg0, 8 + stb rg0, rg1 + subi rg1, 1 + shr rg0, 8 + stb rg0, rg1 + subi rg1, 1 + shr rg0, 8 + stb rg0, rg1 + + addi rg1, 4 + jmp _end + +// ------------------------------------------ +// prints the last byte of arg[0] to the screen. +print_byte: + push bpr + mov spr, bpr + + ldw bpr, rg0, 8 + ldw current, rg1 + + stb rg0, rg1 + addi rg1, 1 + jmp _end + +// ------------------------------------------ +// prints the value of arg[0] to the screen in hex. +print_hex_word: + push bpr + mov spr, bpr + + ldw current, rg1 + + ldb bpr, rg0, 8 + push rg0 + call _print_hex_byte + addi spr, 4 + + ldb bpr, rg0, 9 + push rg0 + call _print_hex_byte + addi spr, 4 + + ldb bpr, rg0, 10 + push rg0 + call _print_hex_byte + addi spr, 4 + + ldb bpr, rg0, 11 + push rg0 + call _print_hex_byte + addi spr, 4 + + jmp _end + +// ------------------------------------------ +// prints the last byte of arg[0] to the screen in hex. +print_hex_byte: + push bpr + mov spr, bpr + + ldw bpr, rg0, 8 + ldw current, rg1 + + call _print_hex_byte + jmp _end + +// function body +_print_hex_byte: + // mask to get lower nibble + lli 0xF, rg2 + // save rg0 state + push rg0 + + shr rg0, 4 + and rg0, rg2, rg0 + call _print_hex_nibble + pop rg0 + + and rg0, rg2, rg0 + call _print_hex_nibble + return + +// print a hex digit +_print_hex_nibble: + lli 10, rg3 + cmp rg0, rg3 + jlt _print_hex_nibble_number + addi rg0, 0x37, rg0 + stb rg0, rg1 + addi rg1, 1 + return + +// helper function. +_print_hex_nibble_number: + addi rg0, 0x30, rg0 + stb rg0, rg1 + addi rg1, 1 + return + +// ------------------------------------------ +// print whitespace +print_whitespace: + push bpr + mov spr, bpr + + ldw current, rg1 + lli 0x20, rg0 + stb rg0, rg1 + addi rg1, 1 + jmp _end + +// ------------------------------------------ +// print newline +print_newline: + push bpr + mov spr, bpr + + // load variables into registers + ldw display, rg0 + ldw current, rg1 + + // get the offset from the display base + sub rg1, rg0, rg0 + + lwi 80, rg2 + pusha 3 + push rg0 + push rg2 + call maths::divmod + pop zero // result + pop rg3 // remainder + popa 3 + + sub rg1, rg3, rg2 + addi rg2, 80, rg1 + + // _end saves the display state + jmp _end + +// ------------------------------------------ +// prints arg[0] as a decimal number to the screen. +print_num: + push bpr + mov spr, bpr + + ldw bpr, rg0, 8 // load number to print + lli 0, rg5 // rg5 = digit counter + + // check if number is zero + cmp rg0, zero + jne _print_num_extract_digits + + // special case: print '0' for zero + lli 0x30, rg6 + push rg6 // push digit to stack buffer + lli 1, rg5 // we have 1 digit + jmp _print_num_output + +_print_num_extract_digits: + // divide by 10 repeatedly to get digits + cmp rg0, zero + jeq _print_num_output + + // call divmod(rg0, 10) + push rg0 // dividend + lli 10, rg1 + push rg1 // divisor (10) + call maths::divmod + pop rg0 // quotient (continue dividing this) + pop rg1 // remainder (the digit) + + // convert digit to ASCII and push to stack buffer + addi rg1, 0x30, rg6 // convert to ASCII + push rg6 // push digit to stack + inc rg5 // increment digit counter + + jmp _print_num_extract_digits + +_print_num_output: + // now print digits (pop them off in reverse order) + ldw current, rg1 // get display pointer + +_print_num_output_loop: + // check if we've printed all digits + cmp rg5, zero + jeq _print_num_done + + // pop digit and print it + pop rg6 + stb rg6, rg1 + addi rg1, 1 + dec rg5 + + jmp _print_num_output_loop + +_print_num_done: + jmp _end + +// ------------------------------------------ +// resets the cursor position on the screen to 0x20000. (0,0) +reset: + push bpr + mov spr, bpr + ldw display, rg1 + jmp _end + +// ------------------------------------------ +// clears the screen +clear: + push bpr + mov spr, bpr + // display size = 2000 bytes / 500 words + lli 500 rg0 + ldw display, rg1 + +_clear_loop: + dec rg0 + stw zero, rg1 + addi rg1, 4 + cmp rg0, zero + jgt _clear_loop + jmp _end + +// ------------------------------------------ +// return +_end: + stw rg1, current + + mov bpr, spr + pop bpr + return diff --git a/dsx_server/data/repos/example/repo/src/main.dsa b/dsx_server/data/repos/example/repo/src/main.dsa new file mode 100644 index 0000000..9b60951 --- /dev/null +++ b/dsx_server/data/repos/example/repo/src/main.dsa @@ -0,0 +1,39 @@ + +// GENERATED BY DSX-BUILD +// Generated at: 2026-02-21 02:50:14 +// Project name: example + +// Imports +include print: "./lib/print.dsa" + +// Globals & Reserved Memory +dw stack: 0x10000 +db message: "Process Exited with code:" + +// Entry Point +_init: + ldw stack, bpr + mov bpr, spr + push zero + call main + call print::print_newline + lwi message, rg0 + push rg0 + call print::print + pop zero + call print::print_hex_word + pop zero + hlt + +main: + push bpr + mov spr, bpr + + // Your code goes here + + // Return zero + stw zero, bpr, 8 + + mov bpr, spr + pop bpr + return \ No newline at end of file diff --git a/dsx_server/doc/endpoints.md b/dsx_server/doc/endpoints.md new file mode 100644 index 0000000..efa1cbc --- /dev/null +++ b/dsx_server/doc/endpoints.md @@ -0,0 +1,19 @@ + +# Endpoints + +let n be the repo name. + +## Web view +GET /packages/ # home page listing packages - simple search bar. +GET /packages?q= # search for a package +GET /packages/ # main page for a repository, shows status, files, name etc. +GET /packages//~repo/ # path for a file within a repo +GET /packages//~repo?q= # search within a package's files +GET /packages//~artifact/ # page listing repo artifacts by date +GET /packages//~artifact/ # page for a specific artifact and status/logs + +POST /api/pkg # create repo +GET /api/pkg/ # repo status/metadata +POST /api/pkg//push # upload source tarball +GET /api/pkg//pull # download source tarball +GET /api/pkg//artifact # download compiled binary diff --git a/dsx_server/doc/structure.md b/dsx_server/doc/structure.md new file mode 100644 index 0000000..c6b9971 --- /dev/null +++ b/dsx_server/doc/structure.md @@ -0,0 +1,15 @@ +# Folder structure + +data/ + repos/ + / + repo/ + Dsx.toml + README.md + src/ + artifacts/ + .dsb + .dsb + docs/ + .md + index/ diff --git a/dsx_server/src/client/client.rs b/dsx_server/src/client/client.rs new file mode 100644 index 0000000..6dfdf7b --- /dev/null +++ b/dsx_server/src/client/client.rs @@ -0,0 +1,53 @@ +use std::process::{Command, Stdio}; +use std::{ + env, fs, + path::{Path, PathBuf}, +}; + +use dsx::common::builder; + +pub mod new; + +fn main() { + // Very small CLI – only three sub‑commands. + let args: Vec = env::args().collect(); + if args.len() < 2 { + eprintln!("Usage: dsx-build [options]"); + std::process::exit(1); + } + match args[1].as_str() { + "new" => new::new_project(&args[2..]), + "build" => { + if let Some(dir) = find_project_root() { + builder::build_project(&dir).expect("Build failed!"); + } else { + eprintln!("No Dsx.toml found"); + std::process::exit(1); + } + } + "package" => todo!("Package manager stub – not implemented yet."), + _ => { + eprintln!("Unknown command: {}", args[1]); + std::process::exit(1); + } + } +} + +fn find_project_root() -> Option { + // check if current dir has Dsx.toml otherwise check parent dir recursively + let mut cwd = env::current_dir().unwrap(); + loop { + let dsx_toml = cwd.join("Dsx.toml"); + if dsx_toml.exists() { + return Some(cwd); + } + + if let Some(parent) = cwd.parent() { + cwd = parent.to_path_buf(); + } else { + break; + } + } + + None +} diff --git a/dsx_server/src/client/new.rs b/dsx_server/src/client/new.rs new file mode 100644 index 0000000..abe265a --- /dev/null +++ b/dsx_server/src/client/new.rs @@ -0,0 +1,103 @@ +use std::{env, fmt, fs, path::PathBuf}; + +use dsx::common::{ + config::DsxConfig, + templates::{self, Dsa, Dsc, Template}, +}; + +// ---------- new project ---------------------------------------------------- +pub fn new_project(args: &[String]) { + // get project details from args. + let lang = Language::from_args(args); + let lib = args.contains(&"--lib".to_string()); + let name = project_name(args).unwrap_or_else(|| { + eprintln!("Error: --name argument required"); + std::process::exit(1); + }); + + let project_path = env::current_dir().unwrap().join(name); + let src_path = project_path.join("src"); + + fs::create_dir_all(&src_path).expect("Failed to create project directory"); + + let config_template = DsxConfig::new(name); + fs::write( + project_path.join("Dsx.toml"), + toml::to_string(&config_template).unwrap(), + ) + .expect("Unable to write default config"); + + let (path, template) = match lang { + Language::Unknown | Language::Dsa => { + (src_path.join("main.dsa"), Dsa::create(name, lib)) + } + Language::Dsc => (src_path.join("main.dsc"), Dsc::create(name, lib)), + }; + + fs::write(path, template).expect("Unable to write DSA file"); + + fs::create_dir_all(src_path.join("lib")).expect("Failed to create lib directory"); + fs::write( + src_path.join("lib/print.dsa"), + templates::create_print_lib(), + ) + .expect("Failed to create print.dsa"); + fs::write( + src_path.join("lib/maths.dsa"), + templates::create_maths_lib(), + ) + .expect("Failed to create maths.dsa"); + + println!( + "Created new {} project in {}.", + lang, + src_path.parent().unwrap().display() + ); +} + +// helpers + +enum Language { + Unknown, + Dsa, + Dsc, +} + +impl Language { + fn from_args(args: &[String]) -> Self { + let mut lang = Language::Unknown; + for i in 0..args.len() { + if args[i] == "--lang" && i + 1 < args.len() { + match args[i + 1].as_str() { + "dsa" => lang = Language::Dsa, + "dsc" => lang = Language::Dsc, + _ => { + eprintln!("Error: Invalid language argument"); + std::process::exit(1); + } + } + } + } + lang + } +} + +impl fmt::Display for Language { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Unknown => write!(f, "Unknown"), + Self::Dsa => write!(f, "Dsa"), + Self::Dsc => write!(f, "Dsc"), + } + } +} + +pub fn project_name(args: &[String]) -> Option<&str> { + for i in 0..args.len() { + if args[i] == "--name" && i + 1 < args.len() { + return Some(&args[i + 1]); + } + } + + None +} diff --git a/dsx_server/src/common/builder/mod.rs b/dsx_server/src/common/builder/mod.rs new file mode 100644 index 0000000..236b189 --- /dev/null +++ b/dsx_server/src/common/builder/mod.rs @@ -0,0 +1,168 @@ +use std::{ + env, fs, io, + path::{Path, PathBuf}, + process::Command, +}; + +use crate::common::config::DsxConfig; + +use assembler::prelude::Assembler; +use common::build::{BuildError, Builder}; +use compiler::Compiler; + +// ---------- build ---------------------------------------------------------- +pub fn build_project(cwd: &Path) -> Result<(), BuildError> { + let config: DsxConfig = toml::from_str(&fs::read_to_string(cwd.join("Dsx.toml"))?) + .map_err(|deser_err| { + io::Error::new(io::ErrorKind::InvalidData, deser_err.to_string()) + })?; + + let src_dir = cwd.join("src"); + if !src_dir.exists() { + return Err(BuildError::Generic(String::from( + "Source Directory does not exist", + ))); + } + + // make sure there's a main file to assemble later. + if !main_exists(&src_dir)? { + return Err(BuildError::Generic(String::from( + "No main.dsa or main.dsc file found in top level of src directory.", + ))); + } + + // check is redundant as we're already checking for main files. + // if !has_dsc && !has_dsa { + // return Err(io::Error::new( + // io::ErrorKind::NotFound, + // "No .dsc or .dsa source found in src directory.", + // )); + // } + + // detect src. + let (has_dsa, has_dsc) = detect_source_language(&src_dir); + + // create a build dir and copy all files across + let build_dir = cwd.join("build"); + fs::create_dir_all(&build_dir)?; + env::set_current_dir(&build_dir)?; + + copy_recursively(&src_dir, &build_dir)?; + + if has_dsc { + build_all_dsc(&build_dir)?; + } + + // Replace .dsc with .dsa only in include statements, recursively for each file. + let mut sed_cmd = Command::new("bash"); + sed_cmd.args([ + "-c", + &format!( + "find \"{}\" -type f -name '*.dsa' -exec sed -i '/^include/ s/\\.dsc/.dsa/g' {{}} +", + build_dir.display() + ), + ]); + run(&mut sed_cmd); + + // assemble result + { + fs::create_dir_all(cwd.join("artifacts"))?; + let mut asm = Assembler::new("./main.dsa"); + asm.start(); + asm.write_result("../artifacts/out.dsb")?; + } + + println!("Build finished. Binary at {}/main.dsb", build_dir.display()); + Ok(()) +} + +// ----- Helpers ------------------------------- + +struct BuildStep; +impl BuildStep { + pub fn compiling(path: &Path) { + println!("Compiling {}", path.display()); + } + + pub fn assembling(path: &Path) { + println!("Assembling {}", path.display()); + } +} + +/// Checks what source languages are used in the project. +fn detect_source_language(src_dir: &Path) -> (bool, bool) { + let mut contains_dsc = false; + let mut contains_dsa = false; + + for entry in walkdir::WalkDir::new(src_dir).into_iter().flatten() { + match entry.path().extension().and_then(|s| s.to_str()) { + Some("dsc") => contains_dsc = true, + Some("dsa") => contains_dsa = true, + _ => {} + } + } + (contains_dsa, contains_dsc) +} + +// Checks if either main.dsa or main.dsc exist in the source directory +fn main_exists(src_dir: &Path) -> Result { + for entry in fs::read_dir(src_dir).into_iter().flatten() { + match entry?.path().file_name().and_then(|s| s.to_str()) { + Some("main.dsc") => return Ok(true), + Some("main.dsa") => return Ok(true), + _ => {} + } + } + + Ok(false) +} + +// Copy contents of one directory to another +fn copy_recursively(src: &Path, dst: &Path) -> Result<(), std::io::Error> { + if src.is_file() { + fs::create_dir_all(dst.parent().unwrap())?; + fs::copy(src, dst)?; + return Ok(()); + } + + if src.is_dir() { + for entry in fs::read_dir(src)? { + let entry = entry?; + let child_src = entry.path(); + let child_dst = dst.join(entry.file_name()); + copy_recursively(&child_src, &child_dst)?; + } + } + + Ok(()) +} + +fn build_all_dsc(path: &Path) -> Result<(), BuildError> { + if path.is_dir() { + for entry in fs::read_dir(path)? { + let entry = entry?; + build_all_dsc(&entry.path())?; + } + + return Ok(()); + } + + if path.extension().and_then(|s| s.to_str()) == Some("dsc") { + let input_path = path; + let output_path = path.with_extension("dsa"); + + let mut compiler = Compiler::new(input_path); + compiler.start(); + compiler.write_result(output_path.clone())?; + } + + Ok(()) +} + +/// Run a command and exit on failure. +fn run(cmd: &mut Command) { + let status = cmd.status().expect("failed to execute command"); + if !status.success() { + std::process::exit(1); + } +} diff --git a/dsx_server/src/common/config.rs b/dsx_server/src/common/config.rs new file mode 100644 index 0000000..be5da62 --- /dev/null +++ b/dsx_server/src/common/config.rs @@ -0,0 +1,45 @@ +use rocket::serde; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct DsxConfig { + pub name: String, + + #[serde(default)] + pub description: Option, + + #[serde(default)] + pub remote_url: Option, + + #[serde(default)] + pub binaries: Vec, + // todo! + // #[serde(default)] + // pub libraries: Vec, +} + +impl DsxConfig { + pub fn new(name: &str) -> Self { + Self { + name: name.to_string(), + description: None, + remote_url: None, + binaries: Vec::new(), + } + } +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Binary { + pub name: String, + pub path: String, +} + +impl Binary { + pub fn new(name: &str, path: &str) -> Self { + Self { + name: name.to_string(), + path: path.to_string(), + } + } +} diff --git a/dsx_server/src/common/mod.rs b/dsx_server/src/common/mod.rs new file mode 100644 index 0000000..d3d7265 --- /dev/null +++ b/dsx_server/src/common/mod.rs @@ -0,0 +1,3 @@ +pub mod builder; +pub mod config; +pub mod templates; diff --git a/dsx-build/src/templates.rs b/dsx_server/src/common/templates.rs similarity index 100% rename from dsx-build/src/templates.rs rename to dsx_server/src/common/templates.rs diff --git a/dsx_server/src/lib.rs b/dsx_server/src/lib.rs new file mode 100644 index 0000000..34994bf --- /dev/null +++ b/dsx_server/src/lib.rs @@ -0,0 +1 @@ +pub mod common; diff --git a/dsx_server/src/server/error.rs b/dsx_server/src/server/error.rs new file mode 100644 index 0000000..356fcdd --- /dev/null +++ b/dsx_server/src/server/error.rs @@ -0,0 +1,38 @@ +use common::build::BuildError; +use rocket::{Response, http::Status, response::Responder}; +use serde::Serialize; + +#[derive(Debug, Serialize, Responder)] +pub enum ApiError { + #[response(status = 404)] + NotFound(String), + + #[response(status = 500)] + InternalServerError(()), + + #[response(status = 500)] + ServerError(String), + + #[response(status = 401)] + Unauthorized(String), + #[response(status = 403)] + Forbidden(String), + + #[response(status = 400)] + BadRequest(String), +} + +impl From for ApiError { + fn from(err: std::io::Error) -> Self { + ApiError::InternalServerError(()) + } +} + +impl From for ApiError { + fn from(err: BuildError) -> Self { + match err { + BuildError::IoError(err) => ApiError::ServerError(err.to_string()), + BuildError::Generic(err) => ApiError::ServerError(err), + } + } +} diff --git a/dsx_server/src/server/model.rs b/dsx_server/src/server/model.rs new file mode 100644 index 0000000..f152d14 --- /dev/null +++ b/dsx_server/src/server/model.rs @@ -0,0 +1,144 @@ +use std::fs; +use std::path::PathBuf; + +use dsx::common::config::DsxConfig; +use serde::{Deserialize, Serialize}; + +use crate::{DATA_DIR, error::ApiError}; + +// stored as a Config.toml above the repository root. +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct PackageMeta { + pub id: String, + + #[serde(default)] + pub latest_build_date: Option, + #[serde(default)] + pub latest_build_status: Option, + #[serde(default)] + pub latest_build_id: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Package { + pub config: DsxConfig, + pub meta: PackageMeta, + pub files: Vec, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct FileObj { + pub name: String, + pub path: String, + pub is_dir: bool, + pub size: u64, + pub extension: String, +} + +impl Package { + pub fn load(name: &str) -> Result { + let repo_path = DATA_DIR.join("repos").join(name); + + let config_contents = fs::read_to_string(repo_path.join("repo/Dsx.toml")) + .map_err(|e| { + warn!("unable to read config for repo, {e}"); + ApiError::InternalServerError(()) + })?; + + let config: DsxConfig = toml::from_str(&config_contents).map_err(|e| { + warn!("Invalid config file for repo! {e}"); + ApiError::InternalServerError(()) + })?; + + let meta_contents = + fs::read_to_string(repo_path.join("Package.toml")).map_err(|e| { + warn!("unable to read config for repo, {e}"); + ApiError::InternalServerError(()) + })?; + + let meta: PackageMeta = toml::from_str(&meta_contents).map_err(|e| { + warn!("Invalid meta file for repo! {e}"); + ApiError::InternalServerError(()) + })?; + + let dir = fs::read_dir(repo_path.join("repo")).map_err(|e| { + warn!("unable to read files for repo, {e}"); + ApiError::InternalServerError(()) + })?; + + let mut files = Vec::new(); + for entry in dir { + let entry = entry.map_err(|e| { + warn!("unable to read file entry for repo, {e}"); + ApiError::InternalServerError(()) + })?; + let path = entry.path(); + let metadata = fs::metadata(&path).map_err(|e| { + warn!("unable to read file metadata for repo, {e}"); + ApiError::InternalServerError(()) + })?; + let is_dir = metadata.is_dir(); + let size = metadata.len(); + let extension = path + .extension() + .map_or(String::new(), |ext| ext.to_string_lossy().to_string()); + files.push(FileObj { + path: path.to_string_lossy().to_string(), + name: path.file_name().unwrap().to_string_lossy().to_string(), + is_dir, + size, + extension, + }); + } + + Ok(Self { + config, + meta, + files, + }) + } + + pub fn unpack(archive: &std::path::Path) -> Result { + let repo_name = archive.file_name().unwrap().to_str().unwrap(); + let dest = DATA_DIR.join("repos").join(repo_name).join("repo"); + unpack_tarball(archive, &dest)?; + let package = Self::load(repo_name)?; + Ok(package) + } + + pub fn tarball(&self) -> Result, ApiError> { + let src_dir = self.path().join("repo"); + pack_tarball(&src_dir) + } + + pub fn path(&self) -> PathBuf { + DATA_DIR.join("repos").join(&self.meta.id) + } +} + +// ── Tar helpers ─────────────────────────────────────────────────────────────── + +use flate2::read::GzDecoder; +use flate2::{Compression, write::GzEncoder}; +use std::fs::File; +use tar::Builder; + +fn unpack_tarball( + archive: &std::path::Path, + dest: &std::path::Path, +) -> Result<(), ApiError> { + let file = File::open(archive)?; + let gz = GzDecoder::new(file); + let mut tar = tar::Archive::new(gz); + tar.unpack(dest)?; + Ok(()) +} + +fn pack_tarball(src_dir: &std::path::Path) -> Result, ApiError> { + let buf = Vec::new(); + let gz = GzEncoder::new(buf, Compression::default()); + let mut tar = Builder::new(gz); + tar.append_dir_all(".", src_dir)?; + let gz = tar.into_inner()?; + Ok(gz.finish()?) +} diff --git a/dsx_server/src/server/server.rs b/dsx_server/src/server/server.rs new file mode 100644 index 0000000..a42f35a --- /dev/null +++ b/dsx_server/src/server/server.rs @@ -0,0 +1,270 @@ +#[macro_use] +extern crate rocket; + +use std::fs; +use std::path::PathBuf; +use std::sync::LazyLock; + +use anyhow::anyhow; +use rocket::Data; +use rocket::data::ToByteUnit; +use rocket::serde::json::Json; +use rocket::{fs::FileServer, serde::Deserialize}; + +use rocket_dyn_templates::{Template, context}; + +use dotenv::dotenv; +use serde::Serialize; +use tracing::{info, warn}; + +use crate::error::ApiError; +use crate::model::{Package, PackageMeta}; +use dsx::common::config::DsxConfig; + +mod error; +mod model; + +static DATA_DIR: LazyLock = LazyLock::new(|| { + PathBuf::from(std::env::var("$DATA_DIR").unwrap_or("./data".to_string())) +}); + +// Search for a package +#[get("/?")] +fn search_packages(q: Option) -> Result { + #[derive(Serialize)] + struct Package { + name: String, + description: String, + updated_at: String, + } + + let mut packages = Vec::new(); + + let dir = match fs::read_dir(DATA_DIR.join("repos")) { + Ok(dir) => dir, + Err(e) => { + warn!("failed to read repos directory: {}", e); + return Err(ApiError::InternalServerError(())); + } + }; + + for entry in dir { + let entry = entry.map_err(|e| { + warn!("failed to read entry: {}", e); + ApiError::InternalServerError(()) + })?; + + let config_path = entry.path().join("repo").join("Dsx.toml"); + if config_path.exists() { + let text = fs::read_to_string(&config_path).map_err(|e| { + warn!("failed to read config file: {}", e); + ApiError::InternalServerError(()) + })?; + let config: DsxConfig = toml::from_str(&text).map_err(|e| { + warn!("failed to parse config file: {}", e); + ApiError::InternalServerError(()) + })?; + + error!("{}", config.description.clone().unwrap_or_default()); + + // skip repo if it doesnt match query params + if let Some(query) = &q + && !(config.name.contains(query) + || config + .description + .clone() + .unwrap_or_default() + .contains(query)) + { + continue; + } + + packages.push(Package { + name: config.name, + description: config.description.unwrap_or_default(), + updated_at: String::from("0:00"), + }) + } + } + + Ok(Template::render( + "packages", + context! { + packages, + query: q.clone().unwrap_or_default() + }, + )) +} + +// Main page for a repository, shows status, files, name etc. +#[get("/")] +fn package_main(name: &str) -> Result { + // get package info + let package = Package::load(name)?; + + println!("{}", package.config.name); + + Ok(Template::render( + "package_home", + context! { + parent_path: String::new(), + current_path: String::from("/"), + package: package, + }, + )) +} + +// Path for a file within a repo +#[get("//~repo/")] +fn repo_file(name: &str, path: std::path::PathBuf) -> Result { + let package = Package::load(name)?; + + Ok(Template::render( + "file", + context! { + package: package, + }, + )) +} + +// Search within a package's files +#[get("//~repo?")] +fn search_repo_files(name: &str, q: Option) -> String { + format!("Search within {} for {:?}", name, q) +} + +// Page listing repo artifacts by date +#[get("//artifacts")] +fn list_artifacts(name: &str) -> String { + format!("Artifacts for package {}", name) +} + +// Page for a specific artifact and status/logs +#[get("//artifacts/")] +fn artifact_detail(name: &str, id: u64) -> String { + format!("Artifact {} details for package {}", id, name) +} + +#[derive(Deserialize)] +#[serde(crate = "rocket::serde")] +struct NewRepo<'r> { + name: &'r str, +} + +// Create repo +#[post("/pkg", data = "")] +fn create_repo(repo: Json>) -> Result<(), &'static str> { + let path = DATA_DIR.join("repos").join(repo.name); + + if repo.name.is_empty() { + return Err("Repository name cannot be empty!"); + } + + if path.exists() { + tracing::info!( + "Attempt to create repository '{}' which already exists.", + repo.name + ); + return Err("This repository already exists!"); + } + + if let Err(e) = fs::create_dir_all(path) { + tracing::error!( + "Attempted to create package with name {} - Error: {e},", + repo.name + ); + return Err("Internal server error"); + } + + Ok(()) +} + +// Repo status/metadata +#[get("/pkg/")] +fn get_pkg(name: &str) -> Result, ApiError> { + let package = Package::load(name).map_err(|e| { + ApiError::NotFound(String::from("repo with name {name} does not exist")) + })?; + + Ok(Json((package.meta, package.config))) +} + +// Upload source tarball +#[post("/pkg//push", data = "")] +async fn push_tarball(name: &str, data: Data<'_>) -> Result<(), ApiError> { + let repo_dir = DATA_DIR.join("repos").join(name); + let tmp_path = repo_dir.join("upload.tar.gz"); + let stream = data + .open(256.mebibytes()) + .into_file(&tmp_path) + .await + .map_err(|e| ApiError::InternalServerError(()))?; + + if !stream.is_complete() { + return Err(ApiError::BadRequest("Incomplete upload".to_string())); + } + + // Unpack over the existing repo dir. + if repo_dir.exists() { + fs::remove_dir_all(&repo_dir).map_err(|e| ApiError::InternalServerError(()))?; + } + fs::create_dir_all(&repo_dir).map_err(|e| ApiError::InternalServerError(()))?; + + let _ = Package::unpack(&tmp_path)?; + fs::remove_file(&tmp_path).ok(); + Ok(()) +} + +// Download source tarball +#[get("/pkg//pull")] +fn pull_tarball( + name: &str, +) -> Result<(rocket::http::ContentType, Vec), Json> { + if let Ok(package) = Package::load(name) { + let tarball = package.tarball()?; + Ok(( + rocket::http::ContentType::new("application", "octet-stream"), + tarball, + )) + } else { + Err(Json(ApiError::NotFound(format!( + "repo with name {name} does not exist" + )))) + } +} + +// Download compiled binary +#[get("/pkg//artifact")] +fn download_artifact(name: &str) -> &'static str { + "Download artifact" +} + +#[launch] +fn rocket() -> _ { + dotenv().unwrap(); + + rocket::build() + .mount( + "/packages", + routes![ + search_packages, + package_main, + repo_file, + search_repo_files, + list_artifacts, + artifact_detail, + ], + ) + .mount( + "/api", + routes![ + create_repo, + get_pkg, + push_tarball, + pull_tarball, + download_artifact + ], + ) + .attach(Template::fairing()) + .mount("/static", FileServer::from("./static")) +} diff --git a/dsx_server/static/placeholder.jpg b/dsx_server/static/placeholder.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e562c5b18c8afed6efb9854a1e77e10cdcc2991c GIT binary patch literal 206134 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 g{(t!u_wV=4f9!nv|K|U^gXjOz_& + /* ── Artifact layout ────────────────────────── */ + .artifact-layout { + display: grid; + grid-template-columns: 1fr 220px; + gap: 24px; + align-items: start; + } + @media (max-width: 768px) { + .artifact-layout { grid-template-columns: 1fr; } + .artifact-sidebar { order: -1; } + } + + /* ── Artifact header ────────────────────────── */ + .artifact-header { + margin-bottom: 20px; + } + .artifact-header h1 { + font-family: var(--mono); + font-size: 20px; + font-weight: 500; + margin: 0 0 6px; + display: flex; + align-items: center; + gap: 10px; + flex-wrap: wrap; + } + .artifact-trigger-line { + font-size: 13px; + color: var(--text-dim); + } + + /* ── Steps list ─────────────────────────────── */ + .steps-list { + display: flex; + flex-direction: column; + gap: 8px; + } + + .step-card { overflow: hidden; } + + .step-header { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 14px; + cursor: pointer; + background: var(--surface); + border-radius: var(--radius); + transition: background .1s; + user-select: none; + } + .step-card.open .step-header { + border-radius: var(--radius) var(--radius) 0 0; + background: var(--surface2); + border-bottom: 1px solid var(--border); + } + .step-header:hover { background: var(--surface2); } + + .step-name { + flex: 1; + font-family: var(--mono); + font-size: 13px; + } + .step-duration { + font-family: var(--mono); + font-size: 11px; + color: var(--muted); + } + .step-chevron { + color: var(--muted); + transition: transform .2s; + flex-shrink: 0; + } + .step-card.open .step-chevron { transform: rotate(90deg); } + + /* ── Log output ─────────────────────────────── */ + .step-log { + display: none; + background: #080808; + border: 1px solid var(--border); + border-top: none; + border-radius: 0 0 var(--radius) var(--radius); + overflow: hidden; + } + .step-card.open .step-log { display: block; } + + .log-line { + display: flex; + gap: 0; + font-family: var(--mono); + font-size: 12px; + line-height: 1.7; + } + .log-line:hover { background: rgba(255,255,255,.03); } + .log-num { + min-width: 48px; + padding: 0 12px; + text-align: right; + color: var(--muted); + user-select: none; + border-right: 1px solid #1a1a1a; + flex-shrink: 0; + } + .log-text { + padding: 0 16px; + white-space: pre-wrap; + word-break: break-all; + flex: 1; + } + .log-text.err { color: var(--red); } + .log-text.warn { color: var(--yellow); } + + /* ── Sidebar ────────────────────────────────── */ + .sidebar-card { overflow: hidden; margin-bottom: 12px; } + .sidebar-card-title { + font-size: 11px; + font-family: var(--mono); + text-transform: uppercase; + letter-spacing: .8px; + color: var(--muted); + padding: 10px 14px 8px; + border-bottom: 1px solid var(--border); + background: var(--surface2); + } + .sidebar-card-body { padding: 12px 14px; } + .sidebar-stat { + display: flex; + justify-content: space-between; + align-items: center; + padding: 4px 0; + font-size: 13px; + } + .sidebar-stat-label { color: var(--text-dim); } + .sidebar-stat-value { font-family: var(--mono); font-size: 12px; } + + /* ── Navigation between artifacts ──────────── */ + .artifact-nav { + display: flex; + gap: 8px; + margin-top: 20px; + } + .artifact-nav a { + font-family: var(--mono); + font-size: 12px; + padding: 5px 12px; + background: var(--surface); + border: 1px solid var(--border); + border-radius: var(--radius); + color: var(--text-dim); + transition: border-color .15s, color .15s; + } + .artifact-nav a:hover { color: var(--text); border-color: #3a3a3a; text-decoration: none; } + +{% endblock %} + +{% block content %} +

+ + +{% endblock %} diff --git a/dsx_server/templates/artifact_list.html.tera b/dsx_server/templates/artifact_list.html.tera new file mode 100644 index 0000000..e5666a2 --- /dev/null +++ b/dsx_server/templates/artifact_list.html.tera @@ -0,0 +1,189 @@ +{% extends "base" %} + +{% block title %}Artifacts · {{ package.name }}{% endblock %} + +{% block extra_head %} + +{% endblock %} + +{% block content %} +
+ + + +
+

{{ package.name }} / artifacts

+
+ + {% if stats is defined %} +
+
+ {{ stats.total | default(value=0) }} + Total +
+
+ {{ stats.success | default(value=0) }} + Passed +
+
+ {{ stats.failure | default(value=0) }} + Failed +
+ {% if stats.avg_duration is defined %} +
+ {{ stats.avg_duration }} + Avg duration +
+ {% endif %} +
+ {% endif %} + + {% if artifacts and artifacts | length > 0 %} + + {% else %} +
+ +

No artifacts yet.

+
+ {% endif %} + +
+{% endblock %} diff --git a/dsx_server/templates/base.html.tera b/dsx_server/templates/base.html.tera new file mode 100644 index 0000000..4ef91f0 --- /dev/null +++ b/dsx_server/templates/base.html.tera @@ -0,0 +1,198 @@ + + + + + + {% block title %}Packages{% endblock %} · depot + + + + {% block extra_head %}{% endblock %} + + +
+ + + +
+ {% block content %}{% endblock %} +
+ +
+ + diff --git a/dsx_server/templates/components/file.html.tera b/dsx_server/templates/components/file.html.tera new file mode 100644 index 0000000..5af8741 --- /dev/null +++ b/dsx_server/templates/components/file.html.tera @@ -0,0 +1,16 @@ +{% macro file_view(package, file) %} +
+ + {% if file.is_dir %} + + {% else %} + + {% endif %} + + + {{ file.name }} + + +
+{% endmacro %} diff --git a/dsx_server/templates/components/file_tree.html.tera b/dsx_server/templates/components/file_tree.html.tera new file mode 100644 index 0000000..1757b06 --- /dev/null +++ b/dsx_server/templates/components/file_tree.html.tera @@ -0,0 +1,35 @@ + +
+
+
+ + {{ current_path | default(value="/") }} +
+ + {% if package.files and package.files | length > 0 %} +
+ {% if current_path %} + + + + + .. + + {% endif %} + + + + {% for file in package.files %} + {{ files::file_view(package = package.config.name, file = file) }} + {% endfor %} +
+ {% else %} +
No files found.
+ {% endif %} +
+
diff --git a/dsx_server/templates/components/sidebar.html.tera b/dsx_server/templates/components/sidebar.html.tera new file mode 100644 index 0000000..21e300c --- /dev/null +++ b/dsx_server/templates/components/sidebar.html.tera @@ -0,0 +1,81 @@ + + diff --git a/dsx_server/templates/package_home.html.tera b/dsx_server/templates/package_home.html.tera new file mode 100644 index 0000000..af982c6 --- /dev/null +++ b/dsx_server/templates/package_home.html.tera @@ -0,0 +1,204 @@ +{% extends "base" %} +{% import 'components/file' as files %} + +{% block title %}{{ package.config.name }}{% endblock %} + +{% block extra_head %} + +{% endblock %} + +{% block content %} +
+ + + +
+

+ {{ package.config.name }} + {% if package.meta.latest_build_status == "success" %} + passing + {% elif package.meta.latest_build_status == "failure" %} + failing + {% elif package.meta.latest_build_status == "running" %} + running + {% elif package.meta.latest_build_status == "pending" %} + pending + {% endif %} +

+ {% if package.config.description %} +

{{ package.config.description }}

+ {% endif %} +
+ +
+ + + {% include 'components/file_tree' %} + + + {% include 'components/sidebar' %} +
+
+{% endblock %} diff --git a/dsx_server/templates/packages.html.tera b/dsx_server/templates/packages.html.tera new file mode 100644 index 0000000..83522d5 --- /dev/null +++ b/dsx_server/templates/packages.html.tera @@ -0,0 +1,174 @@ +{% extends "base" %} + +{% block title %}{% if query %}Search: {{ query }}{% else %}All Packages{% endif %}{% endblock %} + +{% block extra_head %} + +{% endblock %} + +{% block content %} +
+
+ {% if query %} +

Results for "{{ query }}"

+ {% else %} +

Packages

+

{{ packages | length }} package{% if packages | length != 1 %}s{% endif %} available

+ {% endif %} +
+ + {% if query %} +
{{ packages | length }} result{% if packages | length != 1 %}s{% endif %}
+ {% endif %} + + {% if packages | length > 0 %} + + {% else %} +
+ + {% if query %} +

No packages match "{{ query }}"

+ {% else %} +

No packages yet.

+ {% endif %} +
+ {% endif %} +
+{% endblock %} diff --git a/dsx_server/templates/repo_path.html.tera b/dsx_server/templates/repo_path.html.tera new file mode 100644 index 0000000..a896316 --- /dev/null +++ b/dsx_server/templates/repo_path.html.tera @@ -0,0 +1,281 @@ +{% extends "base" %} + +{% block title %}{{ file.name }} · {{ package.name }}{% endblock %} + +{% block extra_head %} + +{% endblock %} + +{% block content %} +
+ + + + +
+ {{ package.name }} + {% for segment in path_segments %} + / + {% if loop.last %} + {{ segment.name }} + {% else %} + {{ segment.name }} + {% endif %} + {% endfor %} +
+ + {% if file.is_dir %} + +
+ +
+
+ {% if file.parent_path is defined %} + + + + + .. + + {% endif %} + {% for entry in file.children %} +
+ + {% if entry.is_dir %} + + {% else %} + + {% endif %} + + + {{ entry.name }} + + {{ entry.last_commit_message | default(value="") }} + {{ entry.last_modified | default(value="") }} +
+ {% endfor %} +
+ + {% elif file.is_image %} + +
+ {{ file.size | default(value="unknown size") }} + raw ↗ +
+
+ {{ file.name }} +
+ + {% elif file.is_binary %} + +
+ {{ file.size | default(value="unknown size") }} · binary file + {% if file.raw_url %}download ↗{% endif %} +
+
+ +

Binary file — cannot be displayed.

+
+ + {% else %} + +
+ {{ file.name }} + + {{ file.line_count | default(value="?") }} lines + · + {{ file.size | default(value="") }} + {% if file.raw_url %}·raw ↗{% endif %} + +
+
+

+                {% if file.lines %}
+                {% for line in file.lines %}
+                
+                    
+                    
+                
+                {% endfor %}
+                {% else %}
+                
+                {% endif %}
+            
{{ loop.index }}{{ line | escape }}
{{ file.content | default(value="") | escape }}
+
+ {% endif %} + +
+{% endblock %} diff --git a/dsx_server/templates/repo_search.html.tera b/dsx_server/templates/repo_search.html.tera new file mode 100644 index 0000000..c9739d3 --- /dev/null +++ b/dsx_server/templates/repo_search.html.tera @@ -0,0 +1,161 @@ +{% extends "base" %} + +{% block title %}Search "{{ query }}" · {{ package.name }}{% endblock %} + +{% block extra_head %} + +{% endblock %} + +{% block content %} +
+ + + +
+

Search in {{ package.name }}

+
+ +
+ + +
+ + {% if query %} +
+ {% if results and results | length > 0 %} + {{ results | length }} file{% if results | length != 1 %}s{% endif %} matched "{{ query }}" + {% else %} + No results for "{{ query }}" + {% endif %} +
+ + {% if results and results | length > 0 %} +
+ {% for result in results %} +
+ + {% if result.matches and result.matches | length > 0 %} +
+ {% for match in result.matches %} +
+ {{ match.line_number }} + {{ match.text | escape }} +
+ {% endfor %} +
+ {% endif %} +
+ {% endfor %} +
+ {% else %} +
+ +

No files match "{{ query }}".

+
+ {% endif %} + {% endif %} + +
+{% endblock %}
+ + + +
+

+ #{{ artifact.id }} + {% if artifact.status == "success" %} + passed + {% elif artifact.status == "failure" %} + failed + {% elif artifact.status == "running" %} + running + {% elif artifact.status == "pending" %} + queued + {% else %} + {{ artifact.status }} + {% endif %} +

+

+ {{ artifact.trigger | default(value="Triggered manually") }} + {% if artifact.commit_sha %} · {{ artifact.commit_sha }}{% endif %} + {% if artifact.branch %} on {{ artifact.branch }}{% endif %} +

+
+ +
+ + +
+ {% if artifact.steps and artifact.steps | length > 0 %} +

Steps

+
+ {% for step in artifact.steps %} +
+
+ + {% if step.status == "success" %} + + + + {% elif step.status == "failure" %} + + + + {% elif step.status == "running" %} + + + + {% elif step.status == "skipped" %} + + + + {% else %} + + + + {% endif %} + + {{ step.name }} + {% if step.duration %}{{ step.duration }}{% endif %} + +
+
+ {% if step.log_lines and step.log_lines | length > 0 %} + {% for line in step.log_lines %} +
+ {{ loop.index }} + {{ line.text | default(value=line) | escape }} +
+ {% endfor %} + {% elif step.log %} + {% for raw_line in step.log | split(pat="\n") %} +
+ {{ loop.index }} + {{ raw_line | escape }} +
+ {% endfor %} + {% else %} +
+ 1 + No output. +
+ {% endif %} +
+
+ {% endfor %} +
+ {% else %} +
+ No steps recorded for this artifact. +
+ {% endif %} + +
+ {% if artifact.prev_id %} + ← #{{ artifact.prev_id }} + {% endif %} + {% if artifact.next_id %} + #{{ artifact.next_id }} → + {% endif %} +
+
+ + + +
+ +