Packages

A gleamy app framework.

Current section

Files

Jump to
pane_gleam src commands build.gleam
Raw

src/commands/build.gleam

import gleam/io
import gleam_community/ansi
import helpers/http
import simplifile
import tom
@external(erlang, "ffi", "cmd")
fn cmd(command: String) -> Nil
fn download_rust_bin() -> Nil {
let binary = http.download("https://github.com/Thebugcanfly13/pane/releases/download/rust/pane-webview")
case simplifile.write_bits("output/pane/pane-webview", binary) {
Ok(Nil) -> Nil
Error(e) -> {
io.println(ansi.red("Error: ") <> simplifile.describe_error(e))
panic
}
}
}
fn verify_rust_bin() -> Nil {
case simplifile.is_file("output/pane/pane-webview") {
Ok(True) -> Nil
Ok(False) -> download_rust_bin()
Error(e) -> {
io.println(ansi.red("Error: ") <> simplifile.describe_error(e))
panic
}
}
}
fn copy_content() -> Nil {
case simplifile.copy_directory("priv/static/", "priv/pane") {
Ok(Nil) -> Nil
Error(e) -> {
io.println(ansi.red("Error: ") <> simplifile.describe_error(e))
panic
}
}
}
fn get_gleam_toml() -> String {
case simplifile.read("gleam.toml") {
Ok(content) -> content
Error(e) -> {
io.println(ansi.red("Error: ") <> simplifile.describe_error(e))
panic
}
}
}
fn get_project_name() -> String {
let assert Ok(parsed) = tom.parse(get_gleam_toml())
case tom.get_string(parsed, ["name"]) {
Ok(name) -> name
Error(_) -> {
io.println(ansi.red("Error: ") <> "Couldn't find project name.")
panic
}
}
}
fn compile_escript() -> Nil {
let _ = cmd("gleam export escript")
}
fn move_escript() -> Nil {
case simplifile.copy_file(get_project_name(), "priv/pane/" <> get_project_name()) {
Ok(Nil) -> Nil
Error(e) -> {
io.println(ansi.red("Error: ") <> simplifile.describe_error(e))
panic
}
}
}
fn compress() -> Nil {
cmd("zip -r priv/output/pane.zip priv/pane/")
}
pub fn main() -> Nil {
io.println(ansi.blue("Building..."))
copy_content()
verify_rust_bin()
compile_escript()
move_escript()
compress()
io.println(ansi.green("Finished building. Output is ./priv/output/pane.zip"))
}