diff --git a/.github/workflows/production-deploy.yml b/.github/workflows/production-deploy.yml index 86f2f11..7e27150 100644 --- a/.github/workflows/production-deploy.yml +++ b/.github/workflows/production-deploy.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - le-testing concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/Cargo.lock b/Cargo.lock index ee4701a..48281c8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -108,13 +108,22 @@ dependencies = [ "tokio", ] +[[package]] +name = "akatsuki-pp" +version = "1.1.2" +source = "git+https://github.com/kippysevenstars/akatsuki-pp-rs?rev=001cc6eb920c4945e14b66ca682bfbf8ecedce4b#001cc6eb920c4945e14b66ca682bfbf8ecedce4b" +dependencies = [ + "rosu-map", + "rosu-mods 0.2.0", +] + [[package]] name = "akatsuki-pp" version = "1.1.2" source = "git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=2bb69c851b3ac08e5efbc4c95a4664581618c2af#2bb69c851b3ac08e5efbc4c95a4664581618c2af" dependencies = [ "rosu-map", - "rosu-mods", + "rosu-mods 0.2.0", ] [[package]] @@ -123,7 +132,7 @@ version = "1.1.2" source = "git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=6d22dcdcafb70399a5c0380fcad96e3bdd5c4009#6d22dcdcafb70399a5c0380fcad96e3bdd5c4009" dependencies = [ "rosu-map", - "rosu-mods", + "rosu-mods 0.2.0", ] [[package]] @@ -132,7 +141,7 @@ version = "1.1.2" source = "git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=c0e499ec3ac138c7cc329771fc70992de39fbb77#c0e499ec3ac138c7cc329771fc70992de39fbb77" dependencies = [ "rosu-map", - "rosu-mods", + "rosu-mods 0.2.0", ] [[package]] @@ -141,7 +150,7 @@ version = "1.1.2" source = "git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=c5cb35b62309c2159a466a6d26addde7acf0c231#c5cb35b62309c2159a466a6d26addde7acf0c231" dependencies = [ "rosu-map", - "rosu-mods", + "rosu-mods 0.2.0", ] [[package]] @@ -213,6 +222,12 @@ dependencies = [ "libc", ] +[[package]] +name = "anstyle" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" + [[package]] name = "anyhow" version = "1.0.86" @@ -750,7 +765,7 @@ dependencies = [ "atty", "bitflags 1.3.2", "clap_derive", - "clap_lex", + "clap_lex 0.2.4", "indexmap 1.9.3", "once_cell", "strsim", @@ -758,6 +773,26 @@ dependencies = [ "textwrap", ] +[[package]] +name = "clap" +version = "4.5.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" +dependencies = [ + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.5.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" +dependencies = [ + "anstyle", + "clap_lex 1.1.0", + "terminal_size", +] + [[package]] name = "clap_derive" version = "3.2.25" @@ -780,6 +815,12 @@ dependencies = [ "os_str_bytes", ] +[[package]] +name = "clap_lex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" + [[package]] name = "cmake" version = "0.1.50" @@ -824,6 +865,12 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "condtype" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf0a07a401f374238ab8e2f11a104d2851bf9ce711ec69804834de8af45c7af" + [[package]] name = "const-oid" version = "0.7.1" @@ -1045,6 +1092,31 @@ dependencies = [ "syn 2.0.71", ] +[[package]] +name = "divan" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a405457ec78b8fe08b0e32b4a3570ab5dff6dd16eb9e76a5ee0a9d9cbd898933" +dependencies = [ + "cfg-if", + "clap 4.5.60", + "condtype", + "divan-macros", + "libc", + "regex-lite", +] + +[[package]] +name = "divan-macros" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9556bc800956545d6420a640173e5ba7dfa82f38d3ea5a167eb555bc69ac3323" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.71", +] + [[package]] name = "doc-comment" version = "0.3.3" @@ -2128,6 +2200,7 @@ dependencies = [ "akatsuki-pp 1.0.1 (git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=72fa5510ef66898308fc6bb3b2f9d3be1dd606c5)", "akatsuki-pp 1.0.1 (git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=773fc16a60546c92b501ad1782757ab897365227)", "akatsuki-pp 1.0.1 (git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=bb1c8ee99a6788f4706fbadee47894590c4fded6)", + "akatsuki-pp 1.1.2 (git+https://github.com/kippysevenstars/akatsuki-pp-rs?rev=001cc6eb920c4945e14b66ca682bfbf8ecedce4b)", "akatsuki-pp 1.1.2 (git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=2bb69c851b3ac08e5efbc4c95a4664581618c2af)", "akatsuki-pp 1.1.2 (git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=6d22dcdcafb70399a5c0380fcad96e3bdd5c4009)", "akatsuki-pp 1.1.2 (git+https://github.com/osuAkatsuki/akatsuki-pp-rs?rev=c0e499ec3ac138c7cc329771fc70992de39fbb77)", @@ -2138,7 +2211,7 @@ dependencies = [ "bcrypt", "bytecheck", "chrono", - "clap", + "clap 3.2.25", "deadpool", "deadpool-lapin", "dotenv", @@ -2150,6 +2223,7 @@ dependencies = [ "redis", "reqwest", "rkyv", + "rosu-pp", "serde", "serde_json", "sqlx", @@ -2512,6 +2586,12 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "regex-lite" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" + [[package]] name = "regex-syntax" version = "0.8.4" @@ -2629,6 +2709,22 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a0fb1475e860c987673e8abc1df5d23f22c4e1ae62e9459e656cff4d82f603b" +[[package]] +name = "rosu-mods" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc58d42f8f2308b4b241de147827af84179d0a318de250495c7c5e47cb701cd9" + +[[package]] +name = "rosu-pp" +version = "4.0.1" +source = "git+https://github.com/infernalfire72/rosu-pp?rev=ab89d750d62a42e47157e4810d576aa5ee915b1b#ab89d750d62a42e47157e4810d576aa5ee915b1b" +dependencies = [ + "divan", + "rosu-map", + "rosu-mods 0.4.1", +] + [[package]] name = "rsa" version = "0.6.1" @@ -3331,6 +3427,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "terminal_size" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5352447f921fda68cf61b4101566c0bdb5104eff6804d0678e5227580ab6a4e9" +dependencies = [ + "rustix 0.38.34", + "windows-sys 0.59.0", +] + [[package]] name = "textwrap" version = "0.16.1" @@ -3880,6 +3986,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.60.2" diff --git a/Cargo.toml b/Cargo.toml index 0da8720..6072ace 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,4 +64,5 @@ aim-accuracy-fix = { package = "akatsuki-pp", git = "https://github.com/osuAkats improved-miss-penalty-and-acc-rework = { package = "akatsuki-pp", git = "https://github.com/osuAkatsuki/akatsuki-pp-rs", rev = "c5cb35b62309c2159a466a6d26addde7acf0c231" } everything-at-once = { package = "akatsuki-pp", git = "https://github.com/osuAkatsuki/akatsuki-pp-rs", rev = "6d22dcdcafb70399a5c0380fcad96e3bdd5c4009" } kippy-attempt = { package = "akatsuki-pp", git = "https://github.com/kippysevenstars/akatsuki-pp-rs", rev = "001cc6eb920c4945e14b66ca682bfbf8ecedce4b" } +merge-test = { package = "rosu-pp", git = "https://github.com/infernalfire72/rosu-pp", rev = "ab89d750d62a42e47157e4810d576aa5ee915b1b" } md5 = "0.7.0" diff --git a/src/processor/mod.rs b/src/processor/mod.rs index 27ff729..a10c4b1 100644 --- a/src/processor/mod.rs +++ b/src/processor/mod.rs @@ -282,6 +282,31 @@ async fn calculate_kippy_attempt_pp( Ok(pp) } +async fn calculate_merge_test_pp( + score: &RippleScore, + context: Arc, +) -> anyhow::Result { + let beatmap_bytes = + usecases::beatmaps::fetch_beatmap_osu_file(score.beatmap_id, context).await?; + let beatmap = merge_test::Beatmap::from_bytes(&beatmap_bytes)?; + + let result = merge_test::any::Performance::from(&beatmap) + .mods(score.mods as u32) + .combo(score.max_combo as u32) + .n300(score.count_300 as u32) + .n100(score.count_100 as u32) + .n50(score.count_50 as u32) + .misses(score.count_misses as u32) + .calculate(); + + let mut pp = round(result.pp() as f32, 2); + if pp.is_infinite() || pp.is_nan() { + pp = 0.0; + } + + Ok(pp) +} + async fn process_scores( rework: &Rework, scores: Vec, @@ -301,6 +326,7 @@ async fn process_scores( 27 => calculate_improved_miss_penalty_and_acc_rework_pp(score, context.clone()).await?, 28 => calculate_everything_at_once_pp(score, context.clone()).await?, 29 => calculate_kippy_attempt_pp(score, context.clone()).await?, + 30 => calculate_merge_test_pp(score, context.clone()).await?, _ => unreachable!(), };