From d296a2cfb1774233ca1a1acce809cb6622ad5dde Mon Sep 17 00:00:00 2001 From: Aria Beingessner Date: Wed, 12 Jun 2024 18:33:29 -0400 Subject: [PATCH] chore: add test for generic workspace --- src/generic.rs | 6 +- src/tests.rs | 57 ++++++++++++++++++- tests/projects/generic-workspace/CHANGELOG.md | 1 + tests/projects/generic-workspace/LICENSE.txt | 1 + tests/projects/generic-workspace/README.md | 1 + .../generic-workspace/dist-workspace.toml | 2 + .../generic-workspace/generic1/CHANGELOG.md | 1 + .../generic-workspace/generic1/LICENSE.txt | 1 + .../generic-workspace/generic1/Makefile | 13 +++++ .../generic-workspace/generic1/README.md | 1 + .../generic-workspace/generic1/dist.toml | 47 +++++++++++++++ .../generic-workspace/generic1/main.c | 3 + .../generic-workspace/generic2/Makefile | 13 +++++ .../generic-workspace/generic2/dist.toml | 47 +++++++++++++++ .../generic-workspace/generic2/main.c | 3 + 15 files changed, 194 insertions(+), 3 deletions(-) create mode 100644 tests/projects/generic-workspace/CHANGELOG.md create mode 100644 tests/projects/generic-workspace/LICENSE.txt create mode 100644 tests/projects/generic-workspace/README.md create mode 100644 tests/projects/generic-workspace/dist-workspace.toml create mode 100644 tests/projects/generic-workspace/generic1/CHANGELOG.md create mode 100644 tests/projects/generic-workspace/generic1/LICENSE.txt create mode 100644 tests/projects/generic-workspace/generic1/Makefile create mode 100644 tests/projects/generic-workspace/generic1/README.md create mode 100644 tests/projects/generic-workspace/generic1/dist.toml create mode 100644 tests/projects/generic-workspace/generic1/main.c create mode 100644 tests/projects/generic-workspace/generic2/Makefile create mode 100644 tests/projects/generic-workspace/generic2/dist.toml create mode 100644 tests/projects/generic-workspace/generic2/main.c diff --git a/src/generic.rs b/src/generic.rs index bdb760f..b9a7687 100644 --- a/src/generic.rs +++ b/src/generic.rs @@ -85,8 +85,10 @@ fn workspace_from(manifest_path: &Utf8Path) -> Result { let root_auto_includes = crate::find_auto_includes(&workspace_dir)?; let mut package_info = vec![]; - for member_dir in &manifest.workspace.members { - let mut package = package_from(&member_dir.join(DIST_PACKAGE_TOML))?; + for member_reldir in &manifest.workspace.members { + let member_dir = workspace_dir.join(member_reldir); + let member_manifest_path = member_dir.join(DIST_PACKAGE_TOML); + let mut package = package_from(&member_manifest_path)?; crate::merge_auto_includes(&mut package, &root_auto_includes); package_info.push(package); } diff --git a/src/tests.rs b/src/tests.rs index ea6b072..60912ce 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -1,4 +1,4 @@ -use camino::Utf8PathBuf; +use camino::{Utf8Path, Utf8PathBuf}; use crate::{changelog::ChangelogInfo, errors::AxoprojectError, Version, WorkspaceKind}; @@ -564,11 +564,66 @@ fn test_generic_c() { .unwrap(); assert_eq!(project.kind, WorkspaceKind::Generic); assert_eq!(project.package_info.len(), 1); + assert!(project.manifest_path.exists()); let package = &project.package_info[0]; assert_eq!(package.name, "testprog"); assert_eq!(package.binaries.len(), 1); + assert!(project.manifest_path.exists()); let binary = &package.binaries[0]; assert_eq!(binary, "main"); } + +#[test] +fn test_generic_workspace_root() { + generic_workspace_check("tests/projects/generic-workspace") +} + +#[test] +fn test_generic_workspace_subdir() { + generic_workspace_check("tests/projects/generic-workspace/generic1/") +} + +fn generic_workspace_check<'a>(path: impl Into<&'a Utf8Path>) { + let project = crate::get_workspaces(path.into(), None) + .best() + .unwrap(); + assert_eq!(project.kind, WorkspaceKind::Generic); + assert_eq!(project.package_info.len(), 2); + assert!(project.manifest_path.exists()); + check_file(project.root_auto_includes.readme.as_deref().unwrap(), "root fake readme!"); + check_file(&project.root_auto_includes.licenses[0], "root fake license!"); + check_file(project.root_auto_includes.changelog.as_deref().unwrap(), "root fake changelog!"); + + { + let package = &project.package_info[0]; + assert_eq!(package.name, "generic1"); + assert_eq!(package.binaries.len(), 1); + let binary = &package.binaries[0]; + assert_eq!(binary, "main"); + assert!(package.manifest_path.exists()); + assert!(package.manifest_path != project.manifest_path); + check_file(package.readme_file.as_deref().unwrap(), "inner fake readme!"); + check_file(&package.license_files[0], "inner fake license!"); + check_file(package.changelog_file.as_deref().unwrap(), "inner fake changelog!"); + } + + { + let package = &project.package_info[1]; + assert_eq!(package.name, "generic2"); + assert_eq!(package.binaries.len(), 1); + let binary = &package.binaries[0]; + assert_eq!(binary, "main"); + assert!(package.manifest_path.exists()); + assert!(package.manifest_path != project.manifest_path); + check_file(package.readme_file.as_deref().unwrap(), "root fake readme!"); + check_file(&package.license_files[0], "root fake license!"); + check_file(package.changelog_file.as_deref().unwrap(), "root fake changelog!"); + } +} + +#[track_caller] +fn check_file(file: &Utf8Path, val: &str) { + assert!(axoasset::LocalAsset::load_string(file).unwrap().trim() == val) +} \ No newline at end of file diff --git a/tests/projects/generic-workspace/CHANGELOG.md b/tests/projects/generic-workspace/CHANGELOG.md new file mode 100644 index 0000000..4b5e9e7 --- /dev/null +++ b/tests/projects/generic-workspace/CHANGELOG.md @@ -0,0 +1 @@ +root fake changelog! diff --git a/tests/projects/generic-workspace/LICENSE.txt b/tests/projects/generic-workspace/LICENSE.txt new file mode 100644 index 0000000..4b46362 --- /dev/null +++ b/tests/projects/generic-workspace/LICENSE.txt @@ -0,0 +1 @@ +root fake license! diff --git a/tests/projects/generic-workspace/README.md b/tests/projects/generic-workspace/README.md new file mode 100644 index 0000000..b7dc76f --- /dev/null +++ b/tests/projects/generic-workspace/README.md @@ -0,0 +1 @@ +root fake readme! diff --git a/tests/projects/generic-workspace/dist-workspace.toml b/tests/projects/generic-workspace/dist-workspace.toml new file mode 100644 index 0000000..d85a880 --- /dev/null +++ b/tests/projects/generic-workspace/dist-workspace.toml @@ -0,0 +1,2 @@ +[workspace] +members = ["generic1", "generic2"] diff --git a/tests/projects/generic-workspace/generic1/CHANGELOG.md b/tests/projects/generic-workspace/generic1/CHANGELOG.md new file mode 100644 index 0000000..5fcb5c6 --- /dev/null +++ b/tests/projects/generic-workspace/generic1/CHANGELOG.md @@ -0,0 +1 @@ +inner fake changelog! \ No newline at end of file diff --git a/tests/projects/generic-workspace/generic1/LICENSE.txt b/tests/projects/generic-workspace/generic1/LICENSE.txt new file mode 100644 index 0000000..b2f1771 --- /dev/null +++ b/tests/projects/generic-workspace/generic1/LICENSE.txt @@ -0,0 +1 @@ +inner fake license! diff --git a/tests/projects/generic-workspace/generic1/Makefile b/tests/projects/generic-workspace/generic1/Makefile new file mode 100644 index 0000000..2b10616 --- /dev/null +++ b/tests/projects/generic-workspace/generic1/Makefile @@ -0,0 +1,13 @@ +CC := gcc +RM := rm +EXEEXT := + +all: main$(EXEEXT) + +main$(EXEEXT): + $(CC) main.c -o main$(EXEEXT) + +clean: + $(RM) -f main$(EXEEXT) + +.PHONY: all clean diff --git a/tests/projects/generic-workspace/generic1/README.md b/tests/projects/generic-workspace/generic1/README.md new file mode 100644 index 0000000..83f4981 --- /dev/null +++ b/tests/projects/generic-workspace/generic1/README.md @@ -0,0 +1 @@ +inner fake readme! diff --git a/tests/projects/generic-workspace/generic1/dist.toml b/tests/projects/generic-workspace/generic1/dist.toml new file mode 100644 index 0000000..d8ca05e --- /dev/null +++ b/tests/projects/generic-workspace/generic1/dist.toml @@ -0,0 +1,47 @@ +[package] +name = "generic1" +description = "A test of a C program for cargo-dist" +version = "0.0.1" +license = "WTFPL" +repository = "https://github.com/mistydemeo/testprog" +binaries = ["main"] +build-command = ["make"] + +# Config for 'cargo dist' +[workspace.metadata.dist] +# The preferred cargo-dist version to use in CI (Cargo.toml SemVer syntax) +cargo-dist-version = "0.4.2" +# CI backends to support +ci = ["github"] +# The installers to generate for each app +installers = ["shell", "homebrew"] +# Target platforms to build apps for (Rust target-triple syntax) +targets = ["x86_64-unknown-linux-gnu", "aarch64-apple-darwin", "x86_64-apple-darwin", "x86_64-unknown-linux-musl"] +# The archive format to use for windows builds (defaults .zip) +windows-archive = ".tar.gz" +# The archive format to use for non-windows builds (defaults .tar.xz) +unix-archive = ".tar.gz" +# A namespace to use when publishing this package to the npm registry +npm-scope = "@axodotdev" +# A GitHub repo to push Homebrew formulas to +tap = "mistydemeo/homebrew-cargodisttest" +# Publish jobs to run in CI +publish-jobs = ["homebrew"] +# Whether cargo-dist should create a Github Release or use an existing draft +create-release = false +# Whether to publish prereleases to package managers +publish-prereleases = true +# Publish jobs to run in CI +pr-run-mode = "plan" + +[workspace.metadata.dist.dependencies.homebrew] +cmake = { targets = ["x86_64-apple-darwin"] } +libcue = { version = "2.2.1", targets = ["x86_64-apple-darwin"] } + +[workspace.metadata.dist.dependencies.apt] +cmake = '*' +libcue-dev = { version = "2.2.1-2" } + +[workspace.metadata.dist.dependencies.chocolatey] +lftp = '*' +cmake = '3.27.6' diff --git a/tests/projects/generic-workspace/generic1/main.c b/tests/projects/generic-workspace/generic1/main.c new file mode 100644 index 0000000..cc27795 --- /dev/null +++ b/tests/projects/generic-workspace/generic1/main.c @@ -0,0 +1,3 @@ +#include + +int main() { puts("Hello, cargo-dist!"); } diff --git a/tests/projects/generic-workspace/generic2/Makefile b/tests/projects/generic-workspace/generic2/Makefile new file mode 100644 index 0000000..2b10616 --- /dev/null +++ b/tests/projects/generic-workspace/generic2/Makefile @@ -0,0 +1,13 @@ +CC := gcc +RM := rm +EXEEXT := + +all: main$(EXEEXT) + +main$(EXEEXT): + $(CC) main.c -o main$(EXEEXT) + +clean: + $(RM) -f main$(EXEEXT) + +.PHONY: all clean diff --git a/tests/projects/generic-workspace/generic2/dist.toml b/tests/projects/generic-workspace/generic2/dist.toml new file mode 100644 index 0000000..0d14bab --- /dev/null +++ b/tests/projects/generic-workspace/generic2/dist.toml @@ -0,0 +1,47 @@ +[package] +name = "generic2" +description = "A test of a C program for cargo-dist" +version = "0.0.1" +license = "WTFPL" +repository = "https://github.com/mistydemeo/testprog" +binaries = ["main"] +build-command = ["make"] + +# Config for 'cargo dist' +[workspace.metadata.dist] +# The preferred cargo-dist version to use in CI (Cargo.toml SemVer syntax) +cargo-dist-version = "0.4.2" +# CI backends to support +ci = ["github"] +# The installers to generate for each app +installers = ["shell", "homebrew"] +# Target platforms to build apps for (Rust target-triple syntax) +targets = ["x86_64-unknown-linux-gnu", "aarch64-apple-darwin", "x86_64-apple-darwin", "x86_64-unknown-linux-musl"] +# The archive format to use for windows builds (defaults .zip) +windows-archive = ".tar.gz" +# The archive format to use for non-windows builds (defaults .tar.xz) +unix-archive = ".tar.gz" +# A namespace to use when publishing this package to the npm registry +npm-scope = "@axodotdev" +# A GitHub repo to push Homebrew formulas to +tap = "mistydemeo/homebrew-cargodisttest" +# Publish jobs to run in CI +publish-jobs = ["homebrew"] +# Whether cargo-dist should create a Github Release or use an existing draft +create-release = false +# Whether to publish prereleases to package managers +publish-prereleases = true +# Publish jobs to run in CI +pr-run-mode = "plan" + +[workspace.metadata.dist.dependencies.homebrew] +cmake = { targets = ["x86_64-apple-darwin"] } +libcue = { version = "2.2.1", targets = ["x86_64-apple-darwin"] } + +[workspace.metadata.dist.dependencies.apt] +cmake = '*' +libcue-dev = { version = "2.2.1-2" } + +[workspace.metadata.dist.dependencies.chocolatey] +lftp = '*' +cmake = '3.27.6' diff --git a/tests/projects/generic-workspace/generic2/main.c b/tests/projects/generic-workspace/generic2/main.c new file mode 100644 index 0000000..cc27795 --- /dev/null +++ b/tests/projects/generic-workspace/generic2/main.c @@ -0,0 +1,3 @@ +#include + +int main() { puts("Hello, cargo-dist!"); }