diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a9c3814..54cbc7b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,7 +54,16 @@ jobs: - name: Verify the workspace builds before releasing run: cargo build --release --workspace --all-targets --exclude timsrust-sdk - - name: Bump shared version, commit, tag and push + - name: Bump shared version, publish to crates.io, commit, tag and push + env: + # Token used by `cargo publish`; create it on crates.io and store it as + # a repository Actions secret (Settings > Secrets and variables > Actions). + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} run: | - cargo release patch --workspace --no-publish --no-confirm - cargo release patch --workspace --no-publish --no-confirm --execute + if [ -z "${CARGO_REGISTRY_TOKEN}" ]; then + echo "Missing CARGO_REGISTRY_TOKEN secret; required to publish to crates.io." >&2 + exit 1 + fi + # Dry-run first to surface problems before anything is published or pushed. + cargo release patch --workspace --no-confirm + cargo release patch --workspace --no-confirm --execute diff --git a/Cargo.toml b/Cargo.toml index acf096b..94b0e0d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,8 @@ resolver = "3" [workspace.package] version = "0.6.1" edition = "2024" +repository = "https://github.com/MannLabs/timsrust" + [workspace.metadata.release] # Bump every crate together to one shared version and emit a single tag. shared-version = true diff --git a/clis/timsrust-centroid-cli/Cargo.toml b/clis/timsrust-centroid-cli/Cargo.toml index 65d2398..37dd8cd 100644 --- a/clis/timsrust-centroid-cli/Cargo.toml +++ b/clis/timsrust-centroid-cli/Cargo.toml @@ -2,6 +2,7 @@ name = "timsrust-centroid-cli" version.workspace = true edition.workspace = true +repository.workspace = true publish = false [dependencies] diff --git a/clis/timsrust-cli-core/Cargo.toml b/clis/timsrust-cli-core/Cargo.toml index dbeefe7..e4dee24 100644 --- a/clis/timsrust-cli-core/Cargo.toml +++ b/clis/timsrust-cli-core/Cargo.toml @@ -2,6 +2,7 @@ name = "timsrust-cli-core" version.workspace = true edition.workspace = true +repository.workspace = true publish = false [dependencies] diff --git a/clis/timsrust-mgf-cli/Cargo.toml b/clis/timsrust-mgf-cli/Cargo.toml index f1627fb..c02131f 100644 --- a/clis/timsrust-mgf-cli/Cargo.toml +++ b/clis/timsrust-mgf-cli/Cargo.toml @@ -2,6 +2,7 @@ name = "timsrust-mgf-cli" version.workspace = true edition.workspace = true +repository.workspace = true publish = false [dependencies] diff --git a/clis/timsrust-parquet-spectra-cli/Cargo.toml b/clis/timsrust-parquet-spectra-cli/Cargo.toml index 191262a..7bcbd42 100644 --- a/clis/timsrust-parquet-spectra-cli/Cargo.toml +++ b/clis/timsrust-parquet-spectra-cli/Cargo.toml @@ -2,6 +2,7 @@ name = "timsrust-parquet-spectra-cli" version.workspace = true edition.workspace = true +repository.workspace = true publish = false [dependencies] diff --git a/crates/filemanager/Cargo.toml b/crates/filemanager/Cargo.toml index 0b7f9b4..22b6791 100644 --- a/crates/filemanager/Cargo.toml +++ b/crates/filemanager/Cargo.toml @@ -2,6 +2,7 @@ name = "filemanager" version.workspace = true edition.workspace = true +repository.workspace = true description = "Unified file abstraction for local and cloud files with caching options and support for multiple formats." license = "Apache-2.0" diff --git a/crates/timsrust-centroid/Cargo.toml b/crates/timsrust-centroid/Cargo.toml index b692974..66cdab2 100644 --- a/crates/timsrust-centroid/Cargo.toml +++ b/crates/timsrust-centroid/Cargo.toml @@ -2,6 +2,7 @@ name = "timsrust-centroid" version.workspace = true edition.workspace = true +repository.workspace = true description = "Centroiding algorithms for timsTOF ion mobility spectra" license = "Apache-2.0" diff --git a/crates/timsrust-core/Cargo.toml b/crates/timsrust-core/Cargo.toml index 5d1c4fb..6d63d9d 100644 --- a/crates/timsrust-core/Cargo.toml +++ b/crates/timsrust-core/Cargo.toml @@ -2,6 +2,7 @@ name = "timsrust-core" version.workspace = true edition.workspace = true +repository.workspace = true description = "Core data types and abstractions for timsTOF data" license = "Apache-2.0" diff --git a/crates/timsrust-mgf/Cargo.toml b/crates/timsrust-mgf/Cargo.toml index 943f025..8f517bd 100644 --- a/crates/timsrust-mgf/Cargo.toml +++ b/crates/timsrust-mgf/Cargo.toml @@ -2,6 +2,7 @@ name = "timsrust-mgf" version.workspace = true edition.workspace = true +repository.workspace = true description = "MGF (Mascot Generic Format) writer for timsTOF spectra" license = "Apache-2.0" diff --git a/crates/timsrust-minitdf/Cargo.toml b/crates/timsrust-minitdf/Cargo.toml index b1f3bd5..d60fe6a 100644 --- a/crates/timsrust-minitdf/Cargo.toml +++ b/crates/timsrust-minitdf/Cargo.toml @@ -2,6 +2,7 @@ name = "timsrust-minitdf" version.workspace = true edition.workspace = true +repository.workspace = true description = "Reader for the ProteoScape miniTDF timsTOF file format" license = "Apache-2.0" diff --git a/crates/timsrust-parquet-spectra/Cargo.toml b/crates/timsrust-parquet-spectra/Cargo.toml index adac5f7..44d4aaa 100644 --- a/crates/timsrust-parquet-spectra/Cargo.toml +++ b/crates/timsrust-parquet-spectra/Cargo.toml @@ -2,6 +2,7 @@ name = "timsrust-parquet-spectra" version.workspace = true edition.workspace = true +repository.workspace = true description = "Parquet-backed spectrum and precursor reader for timsTOF data" license = "Apache-2.0" diff --git a/crates/timsrust-sdk/Cargo.toml b/crates/timsrust-sdk/Cargo.toml index 7aca5c4..250e816 100644 --- a/crates/timsrust-sdk/Cargo.toml +++ b/crates/timsrust-sdk/Cargo.toml @@ -2,10 +2,19 @@ name = "timsrust-sdk" version.workspace = true edition.workspace = true +repository.workspace = true build = "build.rs" description = "Bruker TimsData SDK bindings for native timsTOF data access" license = "Apache-2.0" +[package.metadata.release] +# The proprietary Bruker native SDK is not available on the CI runners, so this +# crate cannot be built there. Publish the source without a verification build +# (`cargo publish --no-verify`). Consumers link the real library themselves via +# the crate's `lib/` directory or the TIMSDATA_LIB_DIR env var; build.rs +# tolerates a missing library so docs.rs and plain `cargo build` still succeed. +verify = false + [dependencies] timsrust-core = { workspace = true, features = ["io"] } serde = { workspace = true, features = ["derive"] } diff --git a/crates/timsrust-sdk/build.rs b/crates/timsrust-sdk/build.rs index c355622..cf64b30 100644 --- a/crates/timsrust-sdk/build.rs +++ b/crates/timsrust-sdk/build.rs @@ -53,18 +53,34 @@ fn main() { // Source file you want to copy let source = lib_path.join(&runtime_lib_name); - // Destination in the target folder - let destination = target_dir.join(&runtime_lib_name); - // Create directory if missing - fs::create_dir_all(&target_dir).unwrap(); - // Copy the file - fs::copy(&source, &destination).unwrap_or_else(|e| { - panic!("Failed to copy {:?} to {:?}: {}", source, destination, e) - }); - // Logging - println!("cargo:warning=Target dir: {}", target_dir.display()); - println!("cargo:warning=Source dir: {}", source.display()); + // The runtime library is gitignored and absent when the crate is built + // without the proprietary Bruker SDK (e.g. `cargo publish --no-verify`, + // docs.rs, or a plain `cargo build` by a downstream user). Skip the copy + // instead of failing; real usage requires the library to be present in + // `lib/` or pointed at by TIMSDATA_LIB_DIR. + if source.exists() { + // Destination in the target folder + let destination = target_dir.join(&runtime_lib_name); + // Create directory if missing + fs::create_dir_all(&target_dir).unwrap(); + // Copy the file + fs::copy(&source, &destination).unwrap_or_else(|e| { + panic!("Failed to copy {:?} to {:?}: {}", source, destination, e) + }); + + // Logging + println!("cargo:warning=Target dir: {}", target_dir.display()); + println!("cargo:warning=Source dir: {}", source.display()); + } else { + println!( + "cargo:warning=timsrust-sdk: {} not found in {}; skipping runtime library copy. \ + Set TIMSDATA_LIB_DIR to the directory containing the Bruker timsdata library to link against it.", + runtime_lib_name, + lib_path.display() + ); + } + // Re-run this script if the file changes println!("cargo:rerun-if-changed={}", source.display()); println!("cargo:rerun-if-env-changed=TIMSDATA_LIB_DIR"); diff --git a/crates/timsrust-tdf/Cargo.toml b/crates/timsrust-tdf/Cargo.toml index c9014ef..0902849 100644 --- a/crates/timsrust-tdf/Cargo.toml +++ b/crates/timsrust-tdf/Cargo.toml @@ -2,6 +2,7 @@ name = "timsrust-tdf" version.workspace = true edition.workspace = true +repository.workspace = true description = "Reader for the Bruker TDF timsTOF file format (.d folders)" license = "Apache-2.0" diff --git a/crates/timsrust-tsf/Cargo.toml b/crates/timsrust-tsf/Cargo.toml index d7b421c..24d966f 100644 --- a/crates/timsrust-tsf/Cargo.toml +++ b/crates/timsrust-tsf/Cargo.toml @@ -2,6 +2,7 @@ name = "timsrust-tsf" version.workspace = true edition.workspace = true +repository.workspace = true description = "Reader for the Bruker TSF timsTOF file format (MALDI/MS imaging)" license = "Apache-2.0" diff --git a/crates/timsrust-utils/Cargo.toml b/crates/timsrust-utils/Cargo.toml index e4eced9..d980f6c 100644 --- a/crates/timsrust-utils/Cargo.toml +++ b/crates/timsrust-utils/Cargo.toml @@ -2,6 +2,7 @@ name = "timsrust-utils" version.workspace = true edition.workspace = true +repository.workspace = true description = "Shared utilities for the timsrust crate family (readers, buffers, threading helpers)" license = "Apache-2.0" diff --git a/crates/timsrust/Cargo.toml b/crates/timsrust/Cargo.toml index 59bc95b..67f8446 100644 --- a/crates/timsrust/Cargo.toml +++ b/crates/timsrust/Cargo.toml @@ -2,11 +2,11 @@ name = "timsrust" version.workspace = true edition.workspace = true +repository.workspace = true description = "A crate to read Bruker timsTOF data" license = "Apache-2.0" readme = "README.md" documentation = "https://docs.rs/timsrust" -repository = "https://github.com/mannlabs/timsrust" homepage = "https://github.com/mannlabs/timsrust" categories = ["accessibility", "data-structures", "parsing", "science"] keywords = ["MS", "LC-TIMS-TOF", "PASEF"] diff --git a/python/timsrust-pyo3/Cargo.toml b/python/timsrust-pyo3/Cargo.toml index 4c6e867..f4ff224 100644 --- a/python/timsrust-pyo3/Cargo.toml +++ b/python/timsrust-pyo3/Cargo.toml @@ -2,6 +2,7 @@ name = "timsrust-pyo3" version.workspace = true edition.workspace = true +repository.workspace = true publish = false [lib]