diff --git a/build/configure/src/aqt.rs b/build/configure/src/aqt.rs index 6b6f2706e..2b6f4cd9d 100644 --- a/build/configure/src/aqt.rs +++ b/build/configure/src/aqt.rs @@ -1,6 +1,7 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +use anyhow::Result; use ninja_gen::action::BuildAction; use ninja_gen::command::RunCommand; use ninja_gen::copy::CopyFile; @@ -14,7 +15,6 @@ use ninja_gen::node::TypescriptCheck; use ninja_gen::python::python_format; use ninja_gen::python::PythonTest; use ninja_gen::Build; -use ninja_gen::Result; use ninja_gen::Utf8Path; use ninja_gen::Utf8PathBuf; diff --git a/build/configure/src/bundle.rs b/build/configure/src/bundle.rs index 090446fa6..ca00b0463 100644 --- a/build/configure/src/bundle.rs +++ b/build/configure/src/bundle.rs @@ -1,6 +1,7 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +use anyhow::Result; use ninja_gen::action::BuildAction; use ninja_gen::archives::download_and_extract; use ninja_gen::archives::empty_manifest; @@ -14,7 +15,6 @@ use ninja_gen::input::BuildInput; use ninja_gen::inputs; use ninja_gen::python::PythonEnvironment; use ninja_gen::Build; -use ninja_gen::Result; use ninja_gen::Utf8Path; use crate::anki_version; diff --git a/build/configure/src/main.rs b/build/configure/src/main.rs index 3f915db43..74ae90162 100644 --- a/build/configure/src/main.rs +++ b/build/configure/src/main.rs @@ -4,17 +4,20 @@ mod aqt; mod bundle; mod platform; -mod proto; mod pylib; mod python; mod rust; mod web; +use anyhow::Result; use aqt::build_and_check_aqt; use bundle::build_bundle; +use ninja_gen::glob; +use ninja_gen::inputs; +use ninja_gen::protobuf::check_proto; +use ninja_gen::protobuf::setup_protoc; use ninja_gen::python::setup_python; use ninja_gen::Build; -use ninja_gen::Result; use pylib::build_pylib; use pylib::check_pylib; use python::check_python; @@ -25,8 +28,6 @@ use rust::check_rust; use web::build_and_check_web; use web::check_sql; -use crate::proto::check_proto; - fn anki_version() -> String { std::fs::read_to_string(".version") .unwrap() @@ -38,6 +39,9 @@ fn main() -> Result<()> { let mut build = Build::new()?; let build = &mut build; + setup_protoc(build)?; + check_proto(build, inputs![glob!["proto/**/*.proto"]])?; + setup_python(build)?; setup_venv(build)?; @@ -50,7 +54,7 @@ fn main() -> Result<()> { check_rust(build)?; check_pylib(build)?; check_python(build)?; - check_proto(build)?; + check_sql(build)?; check_minilints(build)?; diff --git a/build/configure/src/proto.rs b/build/configure/src/proto.rs deleted file mode 100644 index 2a046bd68..000000000 --- a/build/configure/src/proto.rs +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright: Ankitects Pty Ltd and contributors -// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html - -use std::env; - -use ninja_gen::archives::download_and_extract; -use ninja_gen::archives::with_exe; -use ninja_gen::glob; -use ninja_gen::hashmap; -use ninja_gen::inputs; -use ninja_gen::protobuf::protoc_archive; -use ninja_gen::protobuf::ClangFormat; -use ninja_gen::Build; -use ninja_gen::Result; -use ninja_gen::Utf8Path; - -pub fn setup_protoc(build: &mut Build) -> Result<()> { - let protoc_binary = match env::var("PROTOC_BINARY") { - Ok(path) => { - assert!( - Utf8Path::new(&path).is_absolute(), - "PROTOC_BINARY must be absolute" - ); - path.into() - } - Err(_) => { - download_and_extract( - build, - "protoc", - protoc_archive(build.host_platform), - hashmap! { - "bin" => [with_exe("bin/protoc")] - }, - )?; - inputs![":extract:protoc:bin"] - } - }; - build.add_dependency("protoc_binary", protoc_binary); - Ok(()) -} - -pub fn check_proto(build: &mut Build) -> Result<()> { - build.add_action( - "check:format:proto", - ClangFormat { - inputs: inputs![glob!["proto/**/*.proto"]], - check_only: true, - }, - )?; - build.add_action( - "format:proto", - ClangFormat { - inputs: inputs![glob!["proto/**/*.proto"]], - check_only: false, - }, - )?; - Ok(()) -} diff --git a/build/configure/src/pylib.rs b/build/configure/src/pylib.rs index 3b59fcc2d..9b1822be2 100644 --- a/build/configure/src/pylib.rs +++ b/build/configure/src/pylib.rs @@ -1,6 +1,7 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +use anyhow::Result; use ninja_gen::action::BuildAction; use ninja_gen::archives::Platform; use ninja_gen::command::RunCommand; @@ -11,7 +12,6 @@ use ninja_gen::inputs; use ninja_gen::python::python_format; use ninja_gen::python::PythonTest; use ninja_gen::Build; -use ninja_gen::Result; use crate::anki_version; use crate::platform::overriden_python_target_platform; diff --git a/build/configure/src/python.rs b/build/configure/src/python.rs index 915f76bcc..68dae1a76 100644 --- a/build/configure/src/python.rs +++ b/build/configure/src/python.rs @@ -1,6 +1,7 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +use anyhow::Result; use ninja_gen::action::BuildAction; use ninja_gen::archives::Platform; use ninja_gen::build::FilesHandle; @@ -15,7 +16,6 @@ use ninja_gen::python::PythonLint; use ninja_gen::python::PythonTypecheck; use ninja_gen::rsync::RsyncFiles; use ninja_gen::Build; -use ninja_gen::Result; pub fn setup_venv(build: &mut Build) -> Result<()> { let platform_deps = if cfg!(windows) { diff --git a/build/configure/src/rust.rs b/build/configure/src/rust.rs index c51412f64..de1e062c6 100644 --- a/build/configure/src/rust.rs +++ b/build/configure/src/rust.rs @@ -1,6 +1,7 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +use anyhow::Result; use ninja_gen::action::BuildAction; use ninja_gen::build::FilesHandle; use ninja_gen::cargo::CargoBuild; @@ -14,14 +15,11 @@ use ninja_gen::glob; use ninja_gen::input::BuildInput; use ninja_gen::inputs; use ninja_gen::Build; -use ninja_gen::Result; use crate::platform::overriden_rust_target_triple; -use crate::proto::setup_protoc; pub fn build_rust(build: &mut Build) -> Result<()> { prepare_translations(build)?; - setup_protoc(build)?; prepare_proto_descriptors(build)?; build_rsbridge(build) } diff --git a/build/configure/src/web.rs b/build/configure/src/web.rs index 2b6a384b4..151d59674 100644 --- a/build/configure/src/web.rs +++ b/build/configure/src/web.rs @@ -1,6 +1,7 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +use anyhow::Result; use ninja_gen::action::BuildAction; use ninja_gen::command::RunCommand; use ninja_gen::glob; @@ -20,7 +21,6 @@ use ninja_gen::node::SvelteCheck; use ninja_gen::node::TypescriptCheck; use ninja_gen::rsync::RsyncFiles; use ninja_gen::Build; -use ninja_gen::Result; pub fn build_and_check_web(build: &mut Build) -> Result<()> { setup_node(build)?; diff --git a/build/ninja_gen/src/action.rs b/build/ninja_gen/src/action.rs index e6c9e1c29..48d2ab5f0 100644 --- a/build/ninja_gen/src/action.rs +++ b/build/ninja_gen/src/action.rs @@ -1,9 +1,10 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +use anyhow::Result; + use crate::build::FilesHandle; use crate::Build; -use crate::Result; pub trait BuildAction { /// Command line to invoke for each build statement. diff --git a/build/ninja_gen/src/archives.rs b/build/ninja_gen/src/archives.rs index 6175ea820..4d13263be 100644 --- a/build/ninja_gen/src/archives.rs +++ b/build/ninja_gen/src/archives.rs @@ -4,6 +4,7 @@ use std::borrow::Cow; use std::collections::HashMap; +use anyhow::Result; use camino::Utf8Path; use camino::Utf8PathBuf; @@ -11,7 +12,6 @@ use crate::action::BuildAction; use crate::input::BuildInput; use crate::inputs; use crate::Build; -use crate::Result; #[derive(Clone, Copy, Debug)] pub struct OnlineArchive { diff --git a/build/ninja_gen/src/build.rs b/build/ninja_gen/src/build.rs index ffa93611f..15ba6e66b 100644 --- a/build/ninja_gen/src/build.rs +++ b/build/ninja_gen/src/build.rs @@ -5,6 +5,7 @@ use std::collections::HashMap; use std::collections::HashSet; use std::fmt::Write; +use anyhow::Result; use camino::Utf8PathBuf; use itertools::Itertools; @@ -13,7 +14,6 @@ use crate::archives::Platform; use crate::configure::ConfigureBuild; use crate::input::space_separated; use crate::input::BuildInput; -use crate::Result; #[derive(Debug)] pub struct Build { diff --git a/build/ninja_gen/src/cargo.rs b/build/ninja_gen/src/cargo.rs index 42e48ab12..c3875442c 100644 --- a/build/ninja_gen/src/cargo.rs +++ b/build/ninja_gen/src/cargo.rs @@ -1,6 +1,7 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +use anyhow::Result; use camino::Utf8Path; use camino::Utf8PathBuf; @@ -10,7 +11,6 @@ use crate::build::FilesHandle; use crate::input::BuildInput; use crate::inputs; use crate::Build; -use crate::Result; #[derive(Debug, PartialEq, Eq)] pub enum RustOutput<'a> { diff --git a/build/ninja_gen/src/configure.rs b/build/ninja_gen/src/configure.rs index 368591cf5..3ce175398 100644 --- a/build/ninja_gen/src/configure.rs +++ b/build/ninja_gen/src/configure.rs @@ -1,6 +1,8 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +use anyhow::Result; + use crate::action::BuildAction; use crate::build::FilesHandle; use crate::cargo::CargoBuild; @@ -8,7 +10,6 @@ use crate::cargo::RustOutput; use crate::glob; use crate::inputs; use crate::Build; -use crate::Result; pub struct ConfigureBuild {} diff --git a/build/ninja_gen/src/git.rs b/build/ninja_gen/src/git.rs index 712ed23a6..ab7a1e72f 100644 --- a/build/ninja_gen/src/git.rs +++ b/build/ninja_gen/src/git.rs @@ -1,6 +1,7 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +use anyhow::Result; use itertools::Itertools; use super::*; diff --git a/build/ninja_gen/src/lib.rs b/build/ninja_gen/src/lib.rs index 5c0856f17..10d0c43ca 100644 --- a/build/ninja_gen/src/lib.rs +++ b/build/ninja_gen/src/lib.rs @@ -24,8 +24,6 @@ pub use camino::Utf8PathBuf; pub use maplit::hashmap; pub use which::which; -pub type Result = std::result::Result>; - #[macro_export] macro_rules! inputs { ($($param:expr),+ $(,)?) => { diff --git a/build/ninja_gen/src/node.rs b/build/ninja_gen/src/node.rs index 451865458..0644cb507 100644 --- a/build/ninja_gen/src/node.rs +++ b/build/ninja_gen/src/node.rs @@ -4,6 +4,7 @@ use std::borrow::Cow; use std::collections::HashMap; +use anyhow::Result; use itertools::Itertools; use super::*; diff --git a/build/ninja_gen/src/protobuf.rs b/build/ninja_gen/src/protobuf.rs index fe2d09401..2643c2ab1 100644 --- a/build/ninja_gen/src/protobuf.rs +++ b/build/ninja_gen/src/protobuf.rs @@ -1,6 +1,10 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +use std::env; + +use anyhow::Result; +use camino::Utf8Path; use maplit::hashmap; use crate::action::BuildAction; @@ -11,6 +15,7 @@ use crate::archives::Platform; use crate::hash::simple_hash; use crate::input::BuildInput; use crate::inputs; +use crate::Build; pub fn protoc_archive(platform: Platform) -> OnlineArchive { match platform { @@ -91,7 +96,7 @@ impl BuildAction for ClangFormat { let hash = simple_hash(&self.inputs); build.add_output_stamp(format!("tests/clang-format.{mode}.{hash}")); } - fn on_first_instance(&self, build: &mut crate::Build) -> crate::Result<()> { + fn on_first_instance(&self, build: &mut crate::Build) -> anyhow::Result<()> { let binary = with_exe("clang-format"); download_and_extract( build, @@ -103,3 +108,46 @@ impl BuildAction for ClangFormat { ) } } + +pub fn setup_protoc(build: &mut Build) -> Result<()> { + let protoc_binary = match env::var("PROTOC_BINARY") { + Ok(path) => { + assert!( + Utf8Path::new(&path).is_absolute(), + "PROTOC_BINARY must be absolute" + ); + path.into() + } + Err(_) => { + download_and_extract( + build, + "protoc", + protoc_archive(build.host_platform), + hashmap! { + "bin" => [with_exe("bin/protoc")] + }, + )?; + inputs![":extract:protoc:bin"] + } + }; + build.add_dependency("protoc_binary", protoc_binary); + Ok(()) +} + +pub fn check_proto(build: &mut Build, inputs: BuildInput) -> Result<()> { + build.add_action( + "check:format:proto", + ClangFormat { + inputs: inputs.clone(), + check_only: true, + }, + )?; + build.add_action( + "format:proto", + ClangFormat { + inputs, + check_only: false, + }, + )?; + Ok(()) +} diff --git a/build/ninja_gen/src/python.rs b/build/ninja_gen/src/python.rs index f16da6f3d..d19dd05ef 100644 --- a/build/ninja_gen/src/python.rs +++ b/build/ninja_gen/src/python.rs @@ -3,6 +3,7 @@ use std::env; +use anyhow::Result; use camino::Utf8Path; use maplit::hashmap; @@ -14,7 +15,6 @@ use crate::hash::simple_hash; use crate::input::BuildInput; use crate::inputs; use crate::Build; -use crate::Result; pub fn python_archive(platform: Platform) -> OnlineArchive { match platform { diff --git a/build/ninja_gen/src/sass.rs b/build/ninja_gen/src/sass.rs index a91a60e19..8d651096c 100644 --- a/build/ninja_gen/src/sass.rs +++ b/build/ninja_gen/src/sass.rs @@ -1,13 +1,14 @@ // Copyright: Ankitects Pty Ltd and contributors // License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html +use anyhow::Result; + use crate::action::BuildAction; use crate::cargo::CargoInstall; use crate::input::space_separated; use crate::input::BuildInput; use crate::inputs; use crate::Build; -use crate::Result; pub struct CompileSassWithGrass { pub input: BuildInput,