From 90cc7efb11be2451b9b3e9ea525eddb5dafe40b9 Mon Sep 17 00:00:00 2001 From: Miles Johnson Date: Thu, 4 Jan 2024 12:08:45 -0800 Subject: [PATCH] Add new field. --- CHANGELOG.md | 9 +++++++++ src/proto.rs | 21 +++++++++++++++++---- src/schema.rs | 6 ++++-- tests/versions_test.rs | 2 +- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb9606d..ab2963c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 0.7.1 + +#### 🚀 Updates + +- Added `resolve.version-pattern` and improved regex handling. + - Now supports named captures: `major`, `minor`, `patch`, `pre`, `build` + - Will construct the version from the above captures. +- Deprecated `resolve.git-tag-pattern` (use the above instead). + ## 0.7.0 #### 🚀 Updates diff --git a/src/proto.rs b/src/proto.rs index 2375e0c..72a8427 100644 --- a/src/proto.rs +++ b/src/proto.rs @@ -104,7 +104,13 @@ pub fn load_versions(Json(_): Json) -> FnResult) -> FnResult = fetch_url(endpoint)?; + let pattern = regex::Regex::new(&schema.resolve.version_pattern)?; let version_key = &schema.resolve.manifest_version_key; + let response: Vec = fetch_url(endpoint)?; let mut versions = vec![]; + let mut push_version = |v: &str| { + if let Some(cap) = pattern.captures(v) { + versions.push(create_version(cap)); + } + }; + for row in response { match row { JsonValue::String(v) => { - versions.push(remove_v_prefix(&v).to_string()); + push_version(&v); } JsonValue::Object(o) => { if let Some(JsonValue::String(v)) = o.get(version_key) { - versions.push(remove_v_prefix(v).to_string()); + push_version(v); } } _ => {} diff --git a/src/schema.rs b/src/schema.rs index 4566275..6ffdd5e 100644 --- a/src/schema.rs +++ b/src/schema.rs @@ -41,12 +41,13 @@ pub struct GlobalsSchema { #[derive(Debug, Deserialize)] #[serde(default, rename_all = "kebab-case")] pub struct ResolveSchema { + pub version_pattern: String, // Manifest pub manifest_url: Option, pub manifest_version_key: String, // Tags pub git_url: Option, - pub git_tag_pattern: String, + pub git_tag_pattern: Option, } impl Default for ResolveSchema { @@ -55,7 +56,8 @@ impl Default for ResolveSchema { manifest_url: None, manifest_version_key: "version".to_string(), git_url: None, - git_tag_pattern: + git_tag_pattern: None, + version_pattern: r"^v?((?[0-9]+)\.(?[0-9]+)\.(?[0-9]+)(?
-[0-9a-zA-Z\.]+)?(?\+[-0-9a-zA-Z\.]+)?)$"
                     .to_string(),
         }
diff --git a/tests/versions_test.rs b/tests/versions_test.rs
index 6e643a5..c1db779 100644
--- a/tests/versions_test.rs
+++ b/tests/versions_test.rs
@@ -7,7 +7,7 @@ generate_resolve_versions_tests!(
         "1.0.3" => "1.0.3",
         "1.4" => "1.4.0",
         "1.5" => "1.5.1",
-        "1" => "1.18.5",
+        "1" => "1.19.0",
     },
     Some(locate_fixture("schemas").join("base.toml"))
 );