diff --git a/docs/dev/design/repo-rule.md b/docs/dev/design/repo-rule.md index 2971dcc..0769f73 100644 --- a/docs/dev/design/repo-rule.md +++ b/docs/dev/design/repo-rule.md @@ -23,7 +23,7 @@ The repository rule file will be written to a TOML file, following the structure # The article template to use when creating a new source file for an article. article_template = """--- title: {{title}} -date: <发布时间> +date: {{release_date}} author: - fosscope-translation-team - {{translator}} @@ -32,9 +32,8 @@ banner: {{cover_image}} cover: {{cover_image}} categories: - 翻译 - - <类型> -tags: - - <标签> + - {{category}} +tags: {{tags}} authorInfo: | via: {{via}} @@ -46,7 +45,7 @@ authorInfo: | 本文由 [FOSScope翻译组](https://github.com/FOSScope/TranslateProject) 原创编译,[开源观察](https://fosscope.com/) 荣誉推出 --- - + {{summary}} diff --git a/src-rust/Cargo.lock b/src-rust/Cargo.lock index e15d7b7..155eef3 100644 --- a/src-rust/Cargo.lock +++ b/src-rust/Cargo.lock @@ -80,13 +80,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.80" +version = "0.1.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -166,9 +166,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "block" @@ -224,9 +224,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.16.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78834c15cb5d5efe3452d58b1e8ba890dd62d21907f867f383358198e56ebca5" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" [[package]] name = "byteorder" @@ -236,9 +236,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" [[package]] name = "cairo-rs" @@ -276,9 +276,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.99" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c51067fd44124faa7f870b4b1c969379ad32b2ba805aa959430ceaa384f695" +checksum = "324c74f2155653c90b04f25b2a47a8a631360cb908f92a772695f430c7e31052" [[package]] name = "cesu8" @@ -332,7 +332,7 @@ dependencies = [ "iana-time-zone", "num-traits", "serde", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -513,7 +513,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -523,14 +523,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] name = "darling" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ "darling_core", "darling_macro", @@ -538,27 +538,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] name = "darling_macro" -version = "0.20.9" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -599,7 +599,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -662,9 +662,9 @@ checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" [[package]] name = "either" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "embed-resource" @@ -677,7 +677,7 @@ dependencies = [ "rustc_version", "toml 0.8.14", "vswhom", - "winreg 0.52.0", + "winreg", ] [[package]] @@ -820,7 +820,7 @@ dependencies = [ "octocrab", "openai_api_rust", "regex", - "reqwest 0.12.5", + "reqwest", "serde", "serde_json", "tokio", @@ -895,7 +895,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -1236,25 +1236,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.2.6", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "h2" version = "0.4.5" @@ -1398,20 +1379,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - -[[package]] -name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http 1.1.0", @@ -1426,7 +1396,7 @@ dependencies = [ "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body", "pin-project-lite", ] @@ -1450,40 +1420,16 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.29" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f361cde2f109281a220d4307746cdfd5ee3f410da58a70377762396775634b33" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa 1.0.11", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "hyper" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "h2 0.4.5", + "h2", "http 1.1.0", - "http-body 1.0.0", + "http-body", "httparse", "httpdate", "itoa 1.0.11", @@ -1501,7 +1447,7 @@ checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c" dependencies = [ "futures-util", "http 1.1.0", - "hyper 1.3.1", + "hyper", "hyper-util", "log", "rustls 0.22.4", @@ -1520,9 +1466,9 @@ checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" dependencies = [ "futures-util", "http 1.1.0", - "hyper 1.3.1", + "hyper", "hyper-util", - "rustls 0.23.10", + "rustls 0.23.11", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", @@ -1535,26 +1481,13 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3203a961e5c83b6f5498933e78b6b263e208c197b63e9c6c53cc82ffd3f63793" dependencies = [ - "hyper 1.3.1", + "hyper", "hyper-util", "pin-project-lite", "tokio", "tower-service", ] -[[package]] -name = "hyper-tls" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" -dependencies = [ - "bytes", - "hyper 0.14.29", - "native-tls", - "tokio", - "tokio-native-tls", -] - [[package]] name = "hyper-tls" version = "0.6.0" @@ -1563,7 +1496,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.3.1", + "hyper", "hyper-util", "native-tls", "tokio", @@ -1573,16 +1506,16 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" dependencies = [ "bytes", "futures-channel", "futures-util", "http 1.1.0", - "http-body 1.0.0", - "hyper 1.3.1", + "http-body", + "hyper", "pin-project-lite", "socket2", "tokio", @@ -1855,9 +1788,9 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" @@ -1868,11 +1801,10 @@ checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libhtmlfilter" version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca46ef1566e7b3058bcfd3238cb9d0617ffe3a454aea77a4ab7c5fa7d3f4f92" +source = "git+https://github.com/FOSScope/libhtmlfilter.git?rev=e403113e901ae3cd422c86ab7ca6602e3ba78ab8#e403113e901ae3cd422c86ab7ca6602e3ba78ab8" dependencies = [ "kuchiki", - "reqwest 0.11.27", + "reqwest", ] [[package]] @@ -1881,16 +1813,10 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "libc", ] -[[package]] -name = "line-wrap" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd1bc4d24ad230d21fb898d1116b1801d7adfc449d42026475862ab48b11e70e" - [[package]] name = "linux-raw-sys" version = "0.4.14" @@ -1909,9 +1835,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.21" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "loom" @@ -2109,9 +2035,9 @@ dependencies = [ [[package]] name = "num-bigint" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c165a9ab64cf766f73521c0dd2cfdff64f488b8f0b3e621face3462d3db536d7" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", @@ -2202,9 +2128,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" +checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce" dependencies = [ "memchr", ] @@ -2225,9 +2151,9 @@ dependencies = [ "futures", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body", "http-body-util", - "hyper 1.3.1", + "hyper", "hyper-rustls 0.26.0", "hyper-timeout", "hyper-util", @@ -2284,7 +2210,7 @@ version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "cfg-if", "foreign-types", "libc", @@ -2301,7 +2227,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -2371,9 +2297,9 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.2", + "redox_syscall 0.5.3", "smallvec", - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -2429,7 +2355,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -2547,7 +2473,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -2594,7 +2520,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -2617,13 +2543,12 @@ checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plist" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9d34169e64b3c7a80c8621a48adaf44e0cf62c78a9b25dd9dd35f1881a17cf9" +checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ - "base64 0.21.7", + "base64 0.22.1", "indexmap 2.2.6", - "line-wrap", "quick-xml", "serde", "time", @@ -2702,18 +2627,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.85" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] [[package]] name = "quick-xml" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33" +checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" dependencies = [ "memchr", ] @@ -2825,11 +2750,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", ] [[package]] @@ -2887,46 +2812,6 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.29", - "hyper-tls 0.5.0", - "ipnet", - "js-sys", - "log", - "mime", - "native-tls", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls-pemfile 1.0.4", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration", - "tokio", - "tokio-native-tls", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg 0.50.0", -] - [[package]] name = "reqwest" version = "0.12.5" @@ -2938,13 +2823,13 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.4.5", + "h2", "http 1.1.0", - "http-body 1.0.0", + "http-body", "http-body-util", - "hyper 1.3.1", + "hyper", "hyper-rustls 0.27.2", - "hyper-tls 0.6.0", + "hyper-tls", "hyper-util", "ipnet", "js-sys", @@ -2954,11 +2839,11 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile 2.1.2", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.1", + "sync_wrapper", "system-configuration", "tokio", "tokio-native-tls", @@ -2967,7 +2852,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg 0.52.0", + "winreg", ] [[package]] @@ -3006,7 +2891,7 @@ version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "errno", "libc", "linux-raw-sys", @@ -3029,9 +2914,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.10" +version = "0.23.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +checksum = "4828ea528154ae444e5a642dbb7d5623354030dc9822b83fd9bb79683c7399d0" dependencies = [ "log", "once_cell", @@ -3044,26 +2929,17 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" +checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba" dependencies = [ "openssl-probe", - "rustls-pemfile 2.1.2", + "rustls-pemfile", "rustls-pki-types", "schannel", "security-framework", ] -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - [[package]] name = "rustls-pemfile" version = "2.1.2" @@ -3082,9 +2958,9 @@ checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" [[package]] name = "rustls-webpki" -version = "0.102.4" +version = "0.102.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +checksum = "f9a6fccd794a42c2c105b513a2f62bc3fd8f3ba57a4593677ceb0bd035164d78" dependencies = [ "ring", "rustls-pki-types", @@ -3144,11 +3020,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -3157,9 +3033,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" dependencies = [ "core-foundation-sys", "libc", @@ -3196,29 +3072,29 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.203" +version = "1.0.204" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] name = "serde_json" -version = "1.0.117" +version = "1.0.120" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" dependencies = [ "indexmap 2.2.6", "itoa 1.0.11", @@ -3244,7 +3120,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -3270,9 +3146,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" +checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" dependencies = [ "base64 0.22.1", "chrono", @@ -3288,14 +3164,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" +checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -3400,23 +3276,23 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "snafu" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418b8136fec49956eba89be7da2847ec1909df92a9ae4178b5ff0ff092c8d95e" +checksum = "2b835cb902660db3415a672d862905e791e54d306c6e8189168c7f3d9ae1c79d" dependencies = [ "snafu-derive", ] [[package]] name = "snafu-derive" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a4812a669da00d17d8266a0439eddcacbc88b17f732f927e52eeb9d196f7fb5" +checksum = "38d1e02fca405f6280643174a50c942219f0bbf4dbf7d480f1dd864d6f211ae5" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -3512,9 +3388,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -3529,21 +3405,15 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.66" +version = "2.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" +checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - [[package]] name = "sync_wrapper" version = "1.0.1" @@ -3668,15 +3538,15 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.14" +version = "0.12.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" +checksum = "4873307b7c257eddcb50c9bedf158eb669578359fb28428bef438fec8e6ba7c2" [[package]] name = "tauri" -version = "1.6.8" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77567d2b3b74de4588d544147142d02297f3eaa171a25a065252141d8597a516" +checksum = "336bc661a3f3250853fa83c6e5245449ed1c26dce5dcb28bdee7efedf6278806" dependencies = [ "anyhow", "cocoa", @@ -3723,9 +3593,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "1.5.2" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab30cba12974d0f9b09794f61e72cad6da2142d3ceb81e519321bab86ce53312" +checksum = "b0c6ec7a5c3296330c7818478948b422967ce4649094696c985f61d50076d29c" dependencies = [ "anyhow", "cargo_toml", @@ -3742,9 +3612,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "1.4.3" +version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a1d90db526a8cdfd54444ad3f34d8d4d58fa5c536463915942393743bd06f8" +checksum = "c1aed706708ff1200ec12de9cfbf2582b5d8ec05f6a7293911091effbd22036b" dependencies = [ "base64 0.21.7", "brotli", @@ -3768,9 +3638,9 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "1.4.4" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a582d75414250122e4a597b9dd7d3c910a2c77906648fc2ac9353845ff0feec" +checksum = "b88f831d2973ae4f81a706a0004e67dac87f2e4439973bbe98efbd73825d8ede" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -3782,9 +3652,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7ffddf36d450791018e63a3ddf54979b9581d9644c584a5fb5611e6b5f20b4" +checksum = "3068ed62b63dedc705558f4248c7ecbd5561f0f8050949859ea0db2326f26012" dependencies = [ "gtk", "http 0.2.12", @@ -3803,9 +3673,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "0.14.8" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1989b3b4d611f5428b3414a4abae6fa6df30c7eb8ed33250ca90a5f7e5bb3655" +checksum = "d4c3db170233096aa30330feadcd895bf9317be97e624458560a20e814db7955" dependencies = [ "cocoa", "gtk", @@ -3823,9 +3693,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "1.5.4" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "450b17a7102e5d46d4bdabae0d1590fd27953e704e691fc081f06c06d2253b35" +checksum = "2826db448309d382dac14d520f0c0a40839b87b57b977e59cf5f296b3ace6a93" dependencies = [ "brotli", "ctor", @@ -3892,22 +3762,22 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "f2675633b1499176c2dff06b0856a27976a8f9d436737b4cf4f312d4d91d8bbb" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "d20468752b09f49e909e55a5d338caa8bedf615594e9d80bc4c565d30faf798c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -3993,7 +3863,7 @@ checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -4023,7 +3893,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.10", + "rustls 0.23.11", "rustls-pki-types", "tokio", ] @@ -4071,7 +3941,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.14", + "toml_edit 0.22.15", ] [[package]] @@ -4098,9 +3968,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.14" +version = "0.22.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" +checksum = "d59a3a72298453f564e2b111fa896f8d07fabb36f51f06d7e875fc5e0b5a3ef1" dependencies = [ "indexmap 2.2.6", "serde", @@ -4132,11 +4002,11 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ - "bitflags 2.5.0", + "bitflags 2.6.0", "bytes", "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body", "http-body-util", "iri-string", "pin-project-lite", @@ -4178,7 +4048,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", ] [[package]] @@ -4281,7 +4151,7 @@ dependencies = [ "flate2", "log", "once_cell", - "rustls 0.23.10", + "rustls 0.23.11", "rustls-pki-types", "serde", "serde_json", @@ -4309,9 +4179,9 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "uuid" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ "getrandom 0.2.15", ] @@ -4418,7 +4288,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", "wasm-bindgen-shared", ] @@ -4452,7 +4322,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.66", + "syn 2.0.71", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4637,7 +4507,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -4686,7 +4556,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -4706,18 +4576,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -4732,7 +4602,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", ] [[package]] @@ -4749,9 +4619,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -4773,9 +4643,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -4797,15 +4667,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -4827,9 +4697,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -4851,9 +4721,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -4869,9 +4739,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -4893,9 +4763,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" @@ -4915,16 +4785,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "winreg" version = "0.52.0" @@ -4948,7 +4808,7 @@ dependencies = [ "futures", "http 1.1.0", "http-body-util", - "hyper 1.3.1", + "hyper", "hyper-util", "log", "once_cell", diff --git a/src-rust/Cargo.toml b/src-rust/Cargo.toml index e4d2c53..0c72897 100644 --- a/src-rust/Cargo.toml +++ b/src-rust/Cargo.toml @@ -1,4 +1,5 @@ [workspace] +resolver = "2" members = ["tauri-backend", "toolkit-cli", "toolkit-core"] [workspace.dependencies] diff --git a/src-rust/toolkit-cli/src/config/config.rs b/src-rust/toolkit-cli/src/config/config.rs index 28cddf6..6c3602b 100644 --- a/src-rust/toolkit-cli/src/config/config.rs +++ b/src-rust/toolkit-cli/src/config/config.rs @@ -27,6 +27,11 @@ pub fn get_config() -> Config { } pub fn initial_configuration_process() -> Result { + let dir_path = std::path::Path::new(".fosscope_toolkit"); + if !dir_path.exists() { + std::fs::create_dir_all(".fosscope_toolkit").unwrap(); + } + let file_path = std::path::Path::new(".fosscope_toolkit/config.json"); if !file_path.exists() { let mut user_input = String::new(); diff --git a/src-rust/toolkit-cli/src/main.rs b/src-rust/toolkit-cli/src/main.rs index 746df79..09fc8cf 100644 --- a/src-rust/toolkit-cli/src/main.rs +++ b/src-rust/toolkit-cli/src/main.rs @@ -1,5 +1,4 @@ use std::io::{stdin, stdout, Write}; -use tokio::runtime::Runtime; use fosscopetoolkit_core::{get_contributor_repo, set_contributor_repo}; use fosscopetoolkit_core::apis::github_api::GitHubApi; use fosscopetoolkit_core::models::github_repo::GitHubRepo; @@ -201,10 +200,11 @@ async fn login() -> GitHubApi { } } -fn main() { +#[tokio::main] +async fn main() { let _= initial_configuration_process(); - let github = Runtime::new().unwrap().block_on(login()); + let github = login().await; println!("Please select the upstream repository you want to work with:"); println!("1. FOSScope/Articles - 开源观察原创文章与中文转载文章源文件"); @@ -237,9 +237,13 @@ fn main() { std::process::exit(1); } - if get_contributor_repo(&upstream_repo).is_none() { - Runtime::new().unwrap().block_on(fork_check(&github, upstream_repo)); - } + let contributor_repo = match get_contributor_repo(&upstream_repo) { + Some(repo) => repo, + None => { + fork_check(&github, upstream_repo.clone()).await; + get_contributor_repo(&upstream_repo).unwrap() + } + }; println!( r#"请选择当前要进行的贡献 @@ -256,7 +260,7 @@ fn main() { match user_input.trim() { "1" => { valid_input = true; - select(); + select(&contributor_repo, &github).await; } "2" | "3" | "4" => { eprintln!("Not implemented yet."); diff --git a/src-rust/toolkit-cli/src/workflow/select.rs b/src-rust/toolkit-cli/src/workflow/select.rs index 619d6cc..d141aad 100644 --- a/src-rust/toolkit-cli/src/workflow/select.rs +++ b/src-rust/toolkit-cli/src/workflow/select.rs @@ -1,48 +1,87 @@ +use std::collections::HashMap; use std::io::{stdin, stdout, Write}; -use fosscopetoolkit_core::workflow::translate::select::get_content; + +use fosscopetoolkit_core::apis::github_api::GitHubApi; +use fosscopetoolkit_core::models::github_repo::GitHubRepo; +use fosscopetoolkit_core::models::repo_rule::get_repo_rule; +use fosscopetoolkit_core::workflow::translate::select::select_article; + use crate::config::get_config; /** * Workflow for selecting new articles to translate. */ -pub fn select() { +pub async fn select( + contributor_repo: &GitHubRepo, + github: &GitHubApi, +) { + let user = github.get_user().await; + let user = match user { + Ok(user) => user, + Err(e) => { + eprintln!("Failed to get GitHub user: {:?}", e); + return; + } + }; + + let repo_rule = get_repo_rule(contributor_repo, github).await; + + if repo_rule.is_err() { + eprintln!("Failed to get repository rule: {:?}", repo_rule.err()); + return; + } + let repo_rule = repo_rule.unwrap(); + let config = get_config(); println!("欢迎参与开源观察翻译项目!"); print!("请输入要选题的文章的 URL:"); - let _= stdout().flush(); + let _ = stdout().flush(); let mut url = String::new(); stdin().read_line(&mut url).unwrap_or(0); let url = url.trim(); println!("您选择的文章 URL 是:{}", url); - // Get markdown content - let markdown = get_content(url); - - match markdown { - Ok(markdown) => { - println!("已成功转换为 Markdown"); - - // TODO: Be able to allow the user to set the file name - let file_name = "article.md"; - std::fs::write(file_name, markdown).expect("无法写入文件"); - println!("已将 Markdown 内容写入文件:{}", file_name); - - let path_to_file = std::env::current_dir().unwrap().join(file_name); - let editor = &config.editor; - let _= std::process::Command::new(editor) - .arg(path_to_file) - .status() - .expect("无法打开编辑器"); - // We would not be able to detect the program's exit status if it is - // a program that only uses the terminal to launch the editor. - // e.g. Visual Studio Code. - - println!("如果您已经完成了编辑,请输入任何内容以继续。"); - let _= stdin().read_line(&mut String::new()); - } - Err(e) => { - eprintln!("Markdown 转换失败:{}", e); - } + // Get the type of the article + let article_types = &repo_rule.articles; + println!("请选择文章类型:"); + for (i, article_type) in article_types.iter().enumerate() { + println!("{}. {}", i + 1, article_type.description); + } + print!("请输入文章类型的编号:"); + let _ = stdout().flush(); + let mut article_type_index = String::new(); + stdin().read_line(&mut article_type_index).unwrap_or(0); + let article_type_index = article_type_index.trim().parse::().unwrap_or(0); + let article_type = &article_types[article_type_index - 1]; + println!("您选择的文章类型是:{}", article_type.description); + + let mut vars = HashMap::new(); + vars.insert("via", url); + vars.insert("selector", &user); + + let article = select_article(&repo_rule, article_type, &vars).await; + if article.is_err() { + eprintln!("Failed to select article: {:?}", article.err()); + return; } + let article = article.unwrap(); + + // TODO: Be able to allow the user to set the file name + let file_name = "article.md"; + std::fs::write(file_name, article).expect("无法写入文件"); + println!("已将 Markdown 内容写入文件:{}", file_name); + + let path_to_file = std::env::current_dir().unwrap().join(file_name); + let editor = &config.editor; + let _ = std::process::Command::new(editor) + .arg(path_to_file) + .status() + .expect("无法打开编辑器"); + // We would not be able to detect the program's exit status if it is + // a program that only uses the terminal to launch the editor. + // e.g. Visual Studio Code. + + println!("如果您已经完成了编辑,请输入任何内容以继续。"); + let _ = stdin().read_line(&mut String::new()); } diff --git a/src-rust/toolkit-core/Cargo.toml b/src-rust/toolkit-core/Cargo.toml index 1014108..fbb2730 100644 --- a/src-rust/toolkit-core/Cargo.toml +++ b/src-rust/toolkit-core/Cargo.toml @@ -23,7 +23,8 @@ url = "2.5.2" # URL Parsing reqwest = { version = "0.12", features = ["json"] } # HTTP Client octocrab = "0.38.0" # GitHub API html2md = { workspace = true } # HTML to Markdown -libhtmlfilter = "0.1.2" # HTML Filter +#libhtmlfilter = "0.1.2" # HTML Filter +libhtmlfilter = { git = "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/FOSScope/libhtmlfilter.git", rev = "e403113e901ae3cd422c86ab7ca6602e3ba78ab8" } # HTML Filter openai_api_rust = "0.1.9" # OpenAI API handlebars = "5.1.2" # Template Engine diff --git a/src-rust/toolkit-core/src/apis/github_api.rs b/src-rust/toolkit-core/src/apis/github_api.rs index 5e36f37..329e694 100644 --- a/src-rust/toolkit-core/src/apis/github_api.rs +++ b/src-rust/toolkit-core/src/apis/github_api.rs @@ -31,8 +31,7 @@ impl GitHubApi { Ok(user) => Ok(user.login), Err(_) => { Err( - "Failed to get the username of the currently signed in GitHub user.\ - Coule be due to an invalid token." + "Failed to get the username of the currently signed in GitHub user. Could be due to an invalid token." ) }, } @@ -167,4 +166,36 @@ impl GitHubApi { Err(_) => Err("Failed to parse fork response"), } } + + /// Get the **decoded** content of a file in a repository. + /// + /// # Arguments + /// - `repo`: The repository to get the file from. + /// - `path`: The path to the file in the repository. + /// + /// # Returns + /// - `Result` + /// - `Ok(String)`: The decoded content of the file. + /// - `Err(&str)`: An error message indicating why the method failed. + pub async fn get_file_content(&self, repo: &GitHubRepo, path: &str) -> Result { + let repo = self.octocrab.repos(repo.owner.clone(), repo.name.clone()); + let content = repo + .get_content() + .path(path) + .r#ref("main") + .send() + .await; + match content { + Ok(mut content) => { + let contents = content.take_items(); + let c = &contents[0]; + let decoded_content = c.decoded_content(); + match decoded_content { + Some(decoded_content) => Ok(decoded_content), + None => Err("No file content found"), + } + }, + Err(_) => Err("Failed to get file content"), + } + } } diff --git a/src-rust/toolkit-core/src/lib.rs b/src-rust/toolkit-core/src/lib.rs index 5cfe746..46c36c7 100644 --- a/src-rust/toolkit-core/src/lib.rs +++ b/src-rust/toolkit-core/src/lib.rs @@ -1,6 +1,5 @@ use std::io::Write; use crate::models::github_repo::GitHubRepo; -use crate::models::repo_rule::RepoRule; pub mod apis; pub mod models; @@ -59,22 +58,3 @@ pub fn get_contributor_repo(upstream: &GitHubRepo) -> Option { Err(_) => None } } - -/// Get the deserialized repository rule from the TOML string. -/// -/// # Arguments -/// - `rule`: The TOML string representing the repository rule. -/// -/// # Returns -/// - `Result` -/// - `Ok(RepoRule)`: The deserialized repository rule. -/// - `Err(&str)`: An error message indicating that the method failed and why. -pub fn get_repo_rule(rule: &str) -> Result{ - let deserialized: Result = toml::from_str(&rule); - match deserialized { - Ok(rule) => Ok(rule), - Err(err) => { - Err(format!("Failed to deserialize the repository rule: {}", err)) - } - } -} diff --git a/src-rust/toolkit-core/src/models/repo_rule.rs b/src-rust/toolkit-core/src/models/repo_rule.rs index e773cf5..fb816f8 100644 --- a/src-rust/toolkit-core/src/models/repo_rule.rs +++ b/src-rust/toolkit-core/src/models/repo_rule.rs @@ -1,4 +1,6 @@ +use crate::apis::github_api::GitHubApi; use crate::models::action_command::ActionCommand; +use crate::models::github_repo::GitHubRepo; /// A representation of an article type in the FOSScope repository rule, which defines the types of articles that can be found in the repository. /// @@ -125,4 +127,45 @@ impl RepoRule { git, } } + + pub fn get_article_template(&self, article: &Article) -> String { + match &article.article_template { + Some(template) => template.clone(), + None => self.article_template.clone(), + } + } +} + +/// Get the deserialized repository rule of a GitHub repository. +/// The repository rule is stored in a file named `REPORULE` in the root directory of the repository. +/// +/// # Arguments +/// - `repo`: The GitHub repository to get the repository rule from. +/// - `api`: The GitHub API wrapper that provides the method to get the file content. +/// +/// # Returns +/// - `Result`: The deserialized repository rule if successful, an error message otherwise. +pub async fn get_repo_rule(repo: &GitHubRepo, api: &GitHubApi) -> Result { + let repo_rule_file_content = api.get_file_content( + repo, + "REPORULE", + ).await; + + match repo_rule_file_content { + Ok(rule) => { + let deserialized: Result = toml::from_str(&rule); + match deserialized { + Ok(rule) => Ok(rule), + Err(err) => { + Err(format!("Failed to deserialize the repository rule: {}", err)) + } + } + }, + Err(e) => { + Err(format!( + "Failed to get the repository rule file for repo {}/{}. Error: {}", + repo.owner, repo.name, e + )) + } + } } diff --git a/src-rust/toolkit-core/src/workflow/translate/select.rs b/src-rust/toolkit-core/src/workflow/translate/select.rs index b9eb796..2221f5f 100644 --- a/src-rust/toolkit-core/src/workflow/translate/select.rs +++ b/src-rust/toolkit-core/src/workflow/translate/select.rs @@ -1,14 +1,9 @@ +use std::collections::HashMap; +use handlebars::{Context, Handlebars, Helper, Output, RenderContext, RenderError}; use crate::models::html_filter_rule::HTMLFilterRule; +use crate::models::repo_rule::{Article, RepoRule}; -pub fn get_content(url: &str) -> Result { - let article_template = std::fs::read_to_string("rsc/translate_article_template.md"); - let article_template = match article_template { - Ok(article_template) => article_template, - Err(_) => { - return Err("Failed to read the translate article template.".to_string()); - } - }; - +pub async fn get_content(url: &str) -> Result { let website = url::Url::parse(url); let website = match website { Ok(website) => website, @@ -30,15 +25,57 @@ pub fn get_content(url: &str) -> Result { url, &*html_filter_rule.tags, &*html_filter_rule.classes - ); + ).await; + + Ok(html2md::parse_html(&filtered_html).trim().to_string()) +} + +pub async fn select_article( + repo_rule: &RepoRule, + article_type: &Article, + vars: &HashMap<&str, &str> +) -> Result { + let mut local_vars = vars.clone(); + + let url = local_vars.get("via").unwrap(); + + let content = get_content(url).await; + if content.is_err() { + return content; + } + let content = content.unwrap(); + + // The title is the only H1 header in the content + let title = content.split("\n").find(|line| line.starts_with("# ")).unwrap(); + + // The content is the content without the title + let content = content.replace(title, ""); + + // Add Info To Vars + local_vars.insert("title", title); + local_vars.insert("content", &content); - // Parse HTML to markdown - let md = html2md::parse_html(&filtered_html).trim().to_string(); + // Get Article Template + let article_template = repo_rule.get_article_template(article_type); - // Add header and footer - let mut content = String::new(); - content.push_str(&article_template); - content.push_str(&md); + let mut handlebars = Handlebars::new(); + handlebars.set_strict_mode(false); + handlebars.register_helper( + "helperMissing", + Box::new( + |h: &Helper<'_>, + _: &Handlebars<'_>, + _: &Context, + _: &mut RenderContext<'_, '_>, + out: &mut dyn Output| + -> Result<(), RenderError> { + out.write(&format!("{{{{{}}}}}", h.name()))?; + Ok(()) + }, + ), + ); - Ok(content) + Ok( + handlebars.render_template(&*article_template, &local_vars).unwrap() + ) } diff --git a/src-rust/toolkit-core/tests/github_file_getter_test.rs b/src-rust/toolkit-core/tests/github_file_getter_test.rs new file mode 100644 index 0000000..1f493fd --- /dev/null +++ b/src-rust/toolkit-core/tests/github_file_getter_test.rs @@ -0,0 +1,70 @@ +use octocrab::Octocrab; +use serde::{Deserialize, Serialize}; +use wiremock::{ + matchers::{method, path}, + Mock, MockServer, ResponseTemplate, +}; + +use mock_error::setup_error_handler; + +mod mock_error; + +// This is a fake page that we can use to deserialize the response from the GitHub API. +#[derive(Serialize, Deserialize)] +struct FakePage { + items: Vec, +} + +// This function sets up the mock server with the given template (response). +async fn setup_api(template: ResponseTemplate) -> MockServer { + let mock_server = MockServer::start().await; + + let mocked_path = "/repos/octocat/Hello-World/contents/README"; + + Mock::given(method("GET")) + .and(path(mocked_path)) + .respond_with(template) + .mount(&mock_server) + .await; + setup_error_handler( + &mock_server, + &format!("GET on {mocked_path} was not received"), + ).await; + + mock_server +} + +// This function sets up the Octocrab client with the base URI of the mock server. +fn setup_octocrab(uri: &str) -> Octocrab { + Octocrab::builder().base_uri(uri).unwrap().build().unwrap() +} + +#[cfg(test)] +mod tests { + use octocrab::models::repos::Content; + + use fosscopetoolkit_core::apis::github_api::GitHubApi; + use fosscopetoolkit_core::models::github_repo::GitHubRepo; + + use super::*; + + #[tokio::test] + async fn get_file() { + let mocked_response: Content = + serde_json::from_str(include_str!("resources/get_file.json")).unwrap(); + let template = ResponseTemplate::new(200).set_body_json(&mocked_response); + let mock_server = setup_api(template).await; + let client = setup_octocrab(&mock_server.uri()); + + let github = GitHubApi::new("octocat".to_string(), client); + let file_content = github.get_file_content( + GitHubRepo { + owner: "octocat".to_string(), + name: "Hello-World".to_string(), + }, + "README", + ).await; + assert!(file_content.is_ok()); + assert_eq!(file_content.unwrap().trim(), "Hello World!"); + } +} diff --git a/src-rust/toolkit-core/tests/html_to_markdown_test.rs b/src-rust/toolkit-core/tests/html_to_markdown_test.rs deleted file mode 100644 index f9fc08b..0000000 --- a/src-rust/toolkit-core/tests/html_to_markdown_test.rs +++ /dev/null @@ -1,129 +0,0 @@ -mod mock_error; - -use mock_error::setup_error_handler; -use wiremock::{ - matchers::{method, path}, - Mock, MockServer, ResponseTemplate, -}; - -async fn setup_api(template: ResponseTemplate) -> MockServer { - let mock_server = MockServer::start().await; - - let mocked_path = "/simple-html"; - - Mock::given(method("GET")) - .and(path(mocked_path)) - .respond_with(template) - .mount(&mock_server) - .await; - setup_error_handler( - &mock_server, - &format!("GET on {mocked_path} was not received"), - ).await; - - mock_server -} - -mod tests { - use fosscopetoolkit_core::parser::html_to_markdown; - use super::*; - - #[tokio::test] - async fn convert_html_to_markdown() { - let template = ResponseTemplate::new(200).set_body_string( - r#" - - - Simple HTML - - -

Simple HTML

-

This is a simple HTML page.

- - - "#, - ); - let mock_server = setup_api(template).await; - - let url = format!("{}/simple-html", mock_server.uri()); - let markdown = html_to_markdown(&url).await; - - assert_eq!(markdown.unwrap(), "# Simple HTML\n\nThis is a simple HTML page."); - } - - #[tokio::test] - async fn convert_html_to_markdown_file() { - let template = ResponseTemplate::new(200).set_body_string( - r#" - - - Simple HTML - - -

Simple HTML

-
Header 6
-

This is a simple HTML page.

-
- This is a blockquote. -
-

This is some inline code.

-
-                        
-                        fn main() {
-                            println!("Hello, world!");
-                        }
-                        
-                    
-
    -
  • Item 1
  • -
  • - Item 2 -
      -
    • Item 2.1
    • -
    • Item 2.2
    • -
    -
  • -
  • Item 3
  • -
-
    -
  1. Item 1
  2. -
  3. - Item 2 -
      -
    • Item 2.1
    • -
    • Item 2.2
    • -
    -
  4. -
  5. Item 3
  6. -
- - - "#, - ); - let mock_server = setup_api(template).await; - - let url = format!("{}/simple-html", mock_server.uri()); - let markdown = html_to_markdown(&url).await; - - // Write the markdown to a file for debugging - use std::fs; - fs::write("output.md", markdown.unwrap()).expect("Unable to write file"); - - // Yes I know this is not the right way of writing tests, but - // forgive me because I need to know the output of the markdown conversion. - assert!(true); - } - - #[tokio::test] - async fn site_to_markdown_file() { - let markdown = html_to_markdown("https://news.itsfoss.com/lindroid/").await; - - // Write the markdown to a file for debugging - use std::fs; - fs::write("output.md", markdown.unwrap()).expect("Unable to write file"); - - // Yes I know this is not the right way of writing tests, but - // forgive me because I need to know the output of the markdown conversion. - assert!(true); - } -} diff --git a/src-rust/toolkit-core/tests/local_repo_file_test.rs b/src-rust/toolkit-core/tests/local_repo_file_test.rs index aaaaf39..da6b628 100644 --- a/src-rust/toolkit-core/tests/local_repo_file_test.rs +++ b/src-rust/toolkit-core/tests/local_repo_file_test.rs @@ -1,6 +1,6 @@ #[cfg(test)] mod tests { - use fosscopetoolkit_core::models::GitHubRepo; + use fosscopetoolkit_core::models::github_repo::GitHubRepo; use fosscopetoolkit_core::{get_contributor_repo, set_contributor_repo}; #[test] diff --git a/src-rust/toolkit-core/tests/repo_forks_check_test.rs b/src-rust/toolkit-core/tests/repo_forks_check_test.rs index 27aa1bc..70dcfb3 100644 --- a/src-rust/toolkit-core/tests/repo_forks_check_test.rs +++ b/src-rust/toolkit-core/tests/repo_forks_check_test.rs @@ -58,8 +58,8 @@ fn setup_octocrab(uri: &str) -> Octocrab { #[cfg(test)] mod tests { - use fosscopetoolkit_core::apis::GitHubApi; - use fosscopetoolkit_core::models::GitHubRepo; + use fosscopetoolkit_core::apis::github_api::GitHubApi; + use fosscopetoolkit_core::models::github_repo::GitHubRepo; use super::*; #[tokio::test] diff --git a/src-rust/toolkit-core/tests/repo_rule_test.rs b/src-rust/toolkit-core/tests/repo_rule_test.rs index f7f82b7..294314d 100644 --- a/src-rust/toolkit-core/tests/repo_rule_test.rs +++ b/src-rust/toolkit-core/tests/repo_rule_test.rs @@ -1,65 +1,111 @@ +use octocrab::Octocrab; +use serde::{Deserialize, Serialize}; +use wiremock::{ + matchers::{method, path}, + Mock, MockServer, ResponseTemplate, +}; + +use mock_error::setup_error_handler; + +mod mock_error; + +// This is a fake page that we can use to deserialize the response from the GitHub API. +#[derive(Serialize, Deserialize)] +struct FakePage { + items: Vec, +} + +// This function sets up the mock server with the given template (response). +async fn setup_api(template: ResponseTemplate) -> MockServer { + let mock_server = MockServer::start().await; + + let mocked_path = "/repos/FOSScope/TranslateProject/contents/REPORULE"; + + Mock::given(method("GET")) + .and(path(mocked_path)) + .respond_with(template) + .mount(&mock_server) + .await; + setup_error_handler( + &mock_server, + &format!("GET on {mocked_path} was not received"), + ).await; + + mock_server +} + +// This function sets up the Octocrab client with the base URI of the mock server. +fn setup_octocrab(uri: &str) -> Octocrab { + Octocrab::builder().base_uri(uri).unwrap().build().unwrap() +} + #[cfg(test)] mod tests { - use fosscopetoolkit_core::get_repo_rule; + use octocrab::models::repos::Content; + + use fosscopetoolkit_core::apis::github_api::GitHubApi; + use fosscopetoolkit_core::models::github_repo::GitHubRepo; use fosscopetoolkit_core::models::action_command::ActionCommand; - use fosscopetoolkit_core::models::repo_rule::{Article, Action, GitRule, RepoRule}; - - #[test] - fn deserialize() { - let rule = r#"# The article template to use when creating a new source file for an article. -article_template = """--- -General Article Template ----""" - - -[[articles]] -# Each `[[articles]]` block defines a type of article available to contribute to. -type = "news" # The type of article. -description = "News Articles" # The description of the article type. -directory = "{{step}}/news" # The directory where the articles of this type are stored. - # `{step}` is the placeholder for the directory where the article will be moved from - # step to step (e.g. "source", "translated", "published", etc.) -article_template = """--- -News Article Template ----""" - -# Multiple article types can be defined. -[[articles]] -type = "tech" -description = "Tech Articles" -directory = "{{step}}/tech" - -# [[articles]] -# ... - -[[actions]] -# Each `[[actions]]` block defines an action that can be made in the contribution process. -action = "select" # The action name. -description = "Select an article to translate." # The description of the action. -command = "TOUCH source/{{article_id}}.md" # The command to execute when the action is made. - # The command follows a *nix shell command syntax, but is defined, parsed, and executed by the core component of Toolkit software. - # In this case, {article} is the placeholder for the article name. - -# Multiple actions can be defined. -[[actions]] -action = "translate" -description = "Translate the article." -command = "MV source/{{article_id}}.md translated/{{article_id}}.md" - -# [[actions]] -# ... - -[git] -# This section defines how git conventions applies in different steps. -# `{action}`, `{type}`, and `{article}` are placeholders for the action's name, article type, and article name respectively. -# Other placeholders can be used as well. -branch_naming = "{{action_name}}/{{type_name}}/{{article_id}}" # The branch naming rule. -commit_message = "[{{action_desc}}][{{type_desc}}]: {{article_title}}" # The commit message rule."#; - - let deserialized = get_repo_rule(rule).unwrap(); - - let news: Article = Article::new("news".to_string(), "News Articles".to_string(), "{{step}}/news".to_string(), Some("---\nNews Article Template\n---".to_string())); - let tech: Article = Article::new("tech".to_string(), "Tech Articles".to_string(), "{{step}}/tech".to_string(), None); + use fosscopetoolkit_core::models::repo_rule::{Article, Action, GitRule, RepoRule, get_repo_rule}; + + use super::*; + + #[tokio::test] + async fn get_rule() { + let mocked_response: Content = + serde_json::from_str(include_str!("resources/repo_rule_content.json")).unwrap(); + let template = ResponseTemplate::new(200).set_body_json(&mocked_response); + let mock_server = setup_api(template).await; + let client = setup_octocrab(&mock_server.uri()); + + let github = GitHubApi::new("octocat".to_string(), client); + let rule = get_repo_rule( + &GitHubRepo { + owner: "FOSScope".to_string(), + name: "TranslateProject".to_string(), + }, + &github + ).await; + assert!(rule.is_ok()); + + let template: String = r#"--- +title: {{title}} +date: <发布时间> +author: + - fosscope-translation-team + - {{translator}} + - {{proofreader}} +banner: {{cover_image}} +cover: {{cover_image}} +categories: + - 翻译 + - <类型> +tags: + - <标签> +authorInfo: | + via: {{via}} + + 作者:[{{author}}]({{author_link}}) + 选题:[{{selector}}](https://github.com/{{selector}}) + 译者:[{{translator}}](https://github.com/{{translator}}) + 校对:[{{proofreader}}](https://github.com/{{proofreader}}) + + 本文由 [FOSScope翻译组](https://github.com/FOSScope/TranslateProject) 原创编译,[开源观察](https://fosscope.com/) 荣誉推出 +--- + + + +{{summary}} + + + +{{content}} +"#.to_string(); + + let news: Article = Article::new("news".to_string(), "新闻".to_string(), "{{step}}/news".to_string(), None); + let tech: Article = Article::new("tech".to_string(), "技术".to_string(), "{{step}}/tech".to_string(), None); + let talk: Article = Article::new("talk".to_string(), "评论".to_string(), "{{step}}/talk".to_string(), None); + let select: Action = Action::new("select".to_string(), "Select an article to translate.".to_string(), ActionCommand::new("TOUCH".to_string(), vec!["source/{{article_id}}.md".to_string()]) ); @@ -68,8 +114,8 @@ commit_message = "[{{action_desc}}][{{type_desc}}]: {{article_title}}" # The co ); let git_rule: GitRule = GitRule::new("{{action_name}}/{{type_name}}/{{article_id}}".to_string(), "[{{action_desc}}][{{type_desc}}]: {{article_title}}".to_string()); - let expected = RepoRule::new("---\nGeneral Article Template\n---".to_string(), vec![news, tech], vec![select, translate], git_rule); + let expected = RepoRule::new(template, vec![news, tech, talk], vec![select, translate], git_rule); - assert_eq!(deserialized, expected); + assert_eq!(rule.unwrap(), expected); } } diff --git a/src-rust/toolkit-core/tests/repo_validation_test.rs b/src-rust/toolkit-core/tests/repo_validation_test.rs index 368fd78..88391d3 100644 --- a/src-rust/toolkit-core/tests/repo_validation_test.rs +++ b/src-rust/toolkit-core/tests/repo_validation_test.rs @@ -41,8 +41,8 @@ fn setup_octocrab(uri: &str) -> Octocrab { #[cfg(test)] mod tests { - use fosscopetoolkit_core::apis::GitHubApi; - use fosscopetoolkit_core::models::GitHubRepo; + use fosscopetoolkit_core::apis::github_api::GitHubApi; + use fosscopetoolkit_core::models::github_repo::GitHubRepo; use super::*; #[tokio::test] diff --git a/src-rust/toolkit-core/tests/resources/get_file.json b/src-rust/toolkit-core/tests/resources/get_file.json new file mode 100644 index 0000000..ce1d9e6 --- /dev/null +++ b/src-rust/toolkit-core/tests/resources/get_file.json @@ -0,0 +1,18 @@ +{ + "name": "README", + "path": "README", + "sha": "980a0d5f19a64b4b30a87d4206aade58726b60e3", + "size": 13, + "url": "https://api.github.com/repos/octocat/Hello-World/contents/README?ref=master", + "html_url": "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/octocat/Hello-World/blob/master/README", + "git_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs/980a0d5f19a64b4b30a87d4206aade58726b60e3", + "download_url": "https://raw.githubusercontent.com/octocat/Hello-World/master/README", + "type": "file", + "content": "SGVsbG8gV29ybGQhCg==\n", + "encoding": "base64", + "_links": { + "self": "https://api.github.com/repos/octocat/Hello-World/contents/README?ref=master", + "git": "https://api.github.com/repos/octocat/Hello-World/git/blobs/980a0d5f19a64b4b30a87d4206aade58726b60e3", + "html": "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/octocat/Hello-World/blob/master/README" + } +} diff --git a/src-rust/toolkit-core/tests/resources/repo_rule_content.json b/src-rust/toolkit-core/tests/resources/repo_rule_content.json new file mode 100644 index 0000000..00ca162 --- /dev/null +++ b/src-rust/toolkit-core/tests/resources/repo_rule_content.json @@ -0,0 +1,18 @@ +{ + "name": "REPORULE", + "path": "REPORULE", + "sha": "0cd5ffb0934f299f18ae5da94a126591732dddae", + "size": 1532, + "url": "https://api.github.com/repos/FOSScope/TranslateProject/contents/REPORULE?ref=main", + "html_url": "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/FOSScope/TranslateProject/blob/main/REPORULE", + "git_url": "https://api.github.com/repos/FOSScope/TranslateProject/git/blobs/0cd5ffb0934f299f18ae5da94a126591732dddae", + "download_url": "https://raw.githubusercontent.com/FOSScope/TranslateProject/main/REPORULE", + "type": "file", + "content": "YXJ0aWNsZV90ZW1wbGF0ZSA9ICIiIi0tLQp0aXRsZToge3t0aXRsZX19CmRh\ndGU6IDzlj5HluIPml7bpl7Q+CmF1dGhvcjoKICAtIGZvc3Njb3BlLXRyYW5z\nbGF0aW9uLXRlYW0KICAtIHt7dHJhbnNsYXRvcn19CiAgLSB7e3Byb29mcmVh\nZGVyfX0KYmFubmVyOiB7e2NvdmVyX2ltYWdlfX0KY292ZXI6IHt7Y292ZXJf\naW1hZ2V9fQpjYXRlZ29yaWVzOgogIC0g57+76K+RCiAgLSA857G75Z6LPgp0\nYWdzOgogIC0gPOagh+etvj4KYXV0aG9ySW5mbzogfAogIHZpYToge3t2aWF9\nfQoKICDkvZzogIXvvJpbe3thdXRob3J9fV0oe3thdXRob3JfbGlua319KQog\nIOmAiemimO+8mlt7e3NlbGVjdG9yfX1dKGh0dHBzOi8vZ2l0aHViLmNvbS97\ne3NlbGVjdG9yfX0pCiAg6K+R6ICF77yaW3t7dHJhbnNsYXRvcn19XShodHRw\nczovL2dpdGh1Yi5jb20ve3t0cmFuc2xhdG9yfX0pCiAg5qCh5a+577yaW3t7\ncHJvb2ZyZWFkZXJ9fV0oaHR0cHM6Ly9naXRodWIuY29tL3t7cHJvb2ZyZWFk\nZXJ9fSkKCiAg5pys5paH55SxIFtGT1NTY29wZee/u+ivkee7hF0oaHR0cHM6\nLy9naXRodWIuY29tL0ZPU1Njb3BlL1RyYW5zbGF0ZVByb2plY3QpIOWOn+WI\nm+e8luivke+8jFvlvIDmupDop4Llr59dKGh0dHBzOi8vZm9zc2NvcGUuY29t\nLykg6I2j6KqJ5o6o5Ye6Ci0tLQoKPCEtLSDmiYDmnInlnKjooqsgYDw+YCDm\noIforrDnmoTlnLDmlrnpg73pnIDopoHloavlhpnlr7nlupTkv6Hmga8gLS0+\nCgp7e3N1bW1hcnl9fQoKPCEtLSBtb3JlIC0tPgoKe3tjb250ZW50fX0KIiIi\nCgpbW2FydGljbGVzXV0KdHlwZSA9ICJuZXdzIgpkZXNjcmlwdGlvbiA9ICLm\nlrDpl7siCmRpcmVjdG9yeSA9ICJ7e3N0ZXB9fS9uZXdzIgoKW1thcnRpY2xl\nc11dCnR5cGUgPSAidGVjaCIKZGVzY3JpcHRpb24gPSAi5oqA5pyvIgpkaXJl\nY3RvcnkgPSAie3tzdGVwfX0vdGVjaCIKCltbYXJ0aWNsZXNdXQp0eXBlID0g\nInRhbGsiCmRlc2NyaXB0aW9uID0gIuivhOiuuiIKZGlyZWN0b3J5ID0gInt7\nc3RlcH19L3RhbGsiCgojIyMgQ29uZmlndXJhdGlvbnMgQmVsb3cgYXJlIE5P\nVCB1c2VkIGZvciBub3cgYW5kICoqbWF5IG5vdCByZXByZXNlbnQgdGhlIGZp\nbmFsIHZlcnNpb24gb2YgdGhlIHJlbGF0ZWQgcnVsZSBkZWZpbml0aW9ucyoq\nLgoKW1thY3Rpb25zXV0KYWN0aW9uID0gInNlbGVjdCIKZGVzY3JpcHRpb24g\nPSAiU2VsZWN0IGFuIGFydGljbGUgdG8gdHJhbnNsYXRlLiIKY29tbWFuZCA9\nICJUT1VDSCBzb3VyY2Uve3thcnRpY2xlX2lkfX0ubWQiCgpbW2FjdGlvbnNd\nXQphY3Rpb24gPSAidHJhbnNsYXRlIgpkZXNjcmlwdGlvbiA9ICJUcmFuc2xh\ndGUgdGhlIGFydGljbGUuIgpjb21tYW5kID0gIk1WIHNvdXJjZS97e2FydGlj\nbGVfaWR9fS5tZCB0cmFuc2xhdGVkL3t7YXJ0aWNsZV9pZH19Lm1kIgoKW2dp\ndF0KYnJhbmNoX25hbWluZyA9ICJ7e2FjdGlvbl9uYW1lfX0ve3t0eXBlX25h\nbWV9fS97e2FydGljbGVfaWR9fSIKY29tbWl0X21lc3NhZ2UgPSAiW3t7YWN0\naW9uX2Rlc2N9fV1be3t0eXBlX2Rlc2N9fV06IHt7YXJ0aWNsZV90aXRsZX19\nIgo=\n", + "encoding": "base64", + "_links": { + "self": "https://api.github.com/repos/FOSScope/TranslateProject/contents/REPORULE?ref=main", + "git": "https://api.github.com/repos/FOSScope/TranslateProject/git/blobs/0cd5ffb0934f299f18ae5da94a126591732dddae", + "html": "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/FOSScope/TranslateProject/blob/main/REPORULE" + } +} diff --git a/src-rust/toolkit-core/tests/user_verify_test.rs b/src-rust/toolkit-core/tests/user_verify_test.rs index fe75c42..7236264 100644 --- a/src-rust/toolkit-core/tests/user_verify_test.rs +++ b/src-rust/toolkit-core/tests/user_verify_test.rs @@ -41,7 +41,7 @@ fn setup_octocrab(uri: &str) -> Octocrab { #[cfg(test)] mod tests { - use fosscopetoolkit_core::apis::GitHubApi; + use fosscopetoolkit_core::apis::github_api::GitHubApi; use super::*; #[tokio::test]