diff --git a/.github/update.log b/.github/update.log index fd6e0040e1..eab91121e4 100644 --- a/.github/update.log +++ b/.github/update.log @@ -1163,3 +1163,4 @@ Update On Thu Oct 23 20:39:01 CEST 2025 Update On Fri Oct 24 20:39:40 CEST 2025 Update On Sat Oct 25 20:37:45 CEST 2025 Update On Sun Oct 26 19:35:56 CET 2025 +Update On Mon Oct 27 19:43:18 CET 2025 diff --git a/clash-meta/hub/executor/executor.go b/clash-meta/hub/executor/executor.go index 041e6fc36b..44f7f14418 100644 --- a/clash-meta/hub/executor/executor.go +++ b/clash-meta/hub/executor/executor.go @@ -39,7 +39,7 @@ import ( "github.com/metacubex/mihomo/listener/inner" "github.com/metacubex/mihomo/listener/tproxy" "github.com/metacubex/mihomo/log" - "github.com/metacubex/mihomo/ntp" + "github.com/metacubex/mihomo/ntp/ntp" "github.com/metacubex/mihomo/tunnel" ) diff --git a/clash-meta/ntp/service.go b/clash-meta/ntp/ntp/service.go similarity index 80% rename from clash-meta/ntp/service.go rename to clash-meta/ntp/ntp/service.go index 8473df6a8f..8f27d0aac1 100644 --- a/clash-meta/ntp/service.go +++ b/clash-meta/ntp/ntp/service.go @@ -3,18 +3,18 @@ package ntp import ( "context" "sync" - "sync/atomic" "time" "github.com/metacubex/mihomo/component/dialer" "github.com/metacubex/mihomo/component/proxydialer" "github.com/metacubex/mihomo/log" + mihomoNtp "github.com/metacubex/mihomo/ntp" M "github.com/metacubex/sing/common/metadata" "github.com/metacubex/sing/common/ntp" ) -var globalSrv atomic.Pointer[Service] +var globalSrv *Service var globalMu sync.Mutex type Service struct { @@ -23,21 +23,20 @@ type Service struct { ticker *time.Ticker ctx context.Context cancel context.CancelFunc - offset atomic.Int64 // [time.Duration] syncSystemTime bool } func ReCreateNTPService(server string, interval time.Duration, dialerProxy string, syncSystemTime bool) { globalMu.Lock() defer globalMu.Unlock() - if service := globalSrv.Swap(nil); service != nil { - service.Stop() + if globalSrv != nil { + globalSrv.Stop() } if server == "" || interval <= 0 { return } ctx, cancel := context.WithCancel(context.Background()) - service := &Service{ + globalSrv = &Service{ server: M.ParseSocksaddr(server), dialer: proxydialer.NewByNameSingDialer(dialerProxy, dialer.NewDialer()), ticker: time.NewTicker(interval * time.Minute), @@ -45,8 +44,7 @@ func ReCreateNTPService(server string, interval time.Duration, dialerProxy strin cancel: cancel, syncSystemTime: syncSystemTime, } - service.Start() - globalSrv.Store(service) + globalSrv.Start() } func (srv *Service) Start() { @@ -59,10 +57,6 @@ func (srv *Service) Stop() { srv.cancel() } -func (srv *Service) Offset() time.Duration { - return time.Duration(srv.offset.Load()) -} - func (srv *Service) update() error { var response *ntp.Response var err error @@ -80,7 +74,7 @@ func (srv *Service) update() error { } else if offset < time.Duration(0) { log.Infoln("System clock is behind NTP time by %s", -offset) } - srv.offset.Store(int64(offset)) + mihomoNtp.SetOffset(offset) if srv.syncSystemTime { timeNow := response.Time syncErr := setSystemTime(timeNow) @@ -97,7 +91,7 @@ func (srv *Service) update() error { } func (srv *Service) loopUpdate() { - defer srv.offset.Store(0) + defer mihomoNtp.SetOffset(0) defer srv.ticker.Stop() for { err := srv.update() @@ -111,13 +105,3 @@ func (srv *Service) loopUpdate() { } } } - -func Now() time.Time { - now := time.Now() - if service := globalSrv.Load(); service != nil { - if offset := service.Offset(); offset.Abs() > 0 { - now = now.Add(offset) - } - } - return now -} diff --git a/clash-meta/ntp/time_stub.go b/clash-meta/ntp/ntp/time_stub.go similarity index 100% rename from clash-meta/ntp/time_stub.go rename to clash-meta/ntp/ntp/time_stub.go diff --git a/clash-meta/ntp/time_unix.go b/clash-meta/ntp/ntp/time_unix.go similarity index 100% rename from clash-meta/ntp/time_unix.go rename to clash-meta/ntp/ntp/time_unix.go diff --git a/clash-meta/ntp/time_windows.go b/clash-meta/ntp/ntp/time_windows.go similarity index 100% rename from clash-meta/ntp/time_windows.go rename to clash-meta/ntp/ntp/time_windows.go diff --git a/clash-meta/ntp/time.go b/clash-meta/ntp/time.go new file mode 100644 index 0000000000..e69be02564 --- /dev/null +++ b/clash-meta/ntp/time.go @@ -0,0 +1,28 @@ +// Package ntp provide time.Now +// +// DON'T import other package in mihomo to keep minimal internal dependencies +package ntp + +import ( + "time" + + "sync/atomic" +) + +var _offset atomic.Int64 // [time.Duration] + +func SetOffset(offset time.Duration) { + _offset.Store(int64(offset)) +} + +func GetOffset() time.Duration { + return time.Duration(_offset.Load()) +} + +func Now() time.Time { + now := time.Now() + if offset := GetOffset(); offset != 0 { + now = now.Add(offset) + } + return now +} diff --git a/clash-meta/rules/provider/mrs_converter.go b/clash-meta/rules/provider/mrs_converter.go index dbbe51cb29..edc24e7eea 100644 --- a/clash-meta/rules/provider/mrs_converter.go +++ b/clash-meta/rules/provider/mrs_converter.go @@ -34,7 +34,7 @@ func ConvertToMrs(buf []byte, behavior P.RuleBehavior, format P.RuleFormat, w io } var encoder *zstd.Encoder - encoder, err = zstd.NewWriter(w, zstd.WithEncoderLevel(zstd.SpeedBestCompression)) + encoder, err = zstd.NewWriter(w) if err != nil { return err } diff --git a/clash-nyanpasu/backend/Cargo.lock b/clash-nyanpasu/backend/Cargo.lock index 13564c4558..c585387c49 100644 --- a/clash-nyanpasu/backend/Cargo.lock +++ b/clash-nyanpasu/backend/Cargo.lock @@ -365,7 +365,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -531,7 +531,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -566,7 +566,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -615,7 +615,7 @@ checksum = "99e1aca718ea7b89985790c94aad72d77533063fe00bc497bb79a7c2dae6a661" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -860,7 +860,7 @@ dependencies = [ "regex", "rustc-hash 1.1.0", "shlex", - "syn 2.0.107", + "syn 2.0.108", "which 4.4.2", ] @@ -1058,7 +1058,7 @@ checksum = "9fd3f870829131332587f607a7ff909f1af5fc523fd1b192db55fbbdf52e8d3c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "synstructure", ] @@ -1196,7 +1196,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1488,7 +1488,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -1722,7 +1722,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f76990911f2267d837d9d0ad060aa63aaad170af40904b29461734c339030d4d" dependencies = [ "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2003,7 +2003,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2013,7 +2013,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2054,7 +2054,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2065,7 +2065,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2156,7 +2156,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2177,7 +2177,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2187,7 +2187,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2200,7 +2200,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2355,7 +2355,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2387,7 +2387,7 @@ checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2685,7 +2685,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2706,7 +2706,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2777,7 +2777,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -2898,7 +2898,7 @@ checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -3055,7 +3055,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -3205,7 +3205,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -3511,7 +3511,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -3773,7 +3773,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -4302,7 +4302,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -4404,7 +4404,7 @@ dependencies = [ "proc-macro2", "quote", "sha2 0.10.9", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -4421,7 +4421,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.9", - "syn 2.0.107", + "syn 2.0.108", "url", ] @@ -4519,7 +4519,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -5122,7 +5122,7 @@ checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -5632,7 +5632,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -5694,7 +5694,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -5763,7 +5763,7 @@ version = "0.1.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6419,7 +6419,7 @@ checksum = "05bbaa5b6b98826bb62b164406f703bee72c5287af9986f9c863fa8ea992b476" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6461,7 +6461,7 @@ dependencies = [ "phf 0.13.1", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6721,7 +6721,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6869,7 +6869,7 @@ dependencies = [ "phf_shared 0.11.3", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "unicase", ] @@ -6883,7 +6883,7 @@ dependencies = [ "phf_shared 0.13.1", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -6946,7 +6946,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7124,7 +7124,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7187,9 +7187,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" dependencies = [ "unicode-ident", ] @@ -7210,7 +7210,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" dependencies = [ "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7608,7 +7608,7 @@ checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -7817,7 +7817,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8025,7 +8025,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8169,7 +8169,7 @@ checksum = "d6185cf75117e20e62b1ff867b9518577271e58abe0037c40bb4794969355ab0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8180,7 +8180,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8215,7 +8215,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8277,7 +8277,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8325,7 +8325,7 @@ checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8717,7 +8717,7 @@ dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8841,7 +8841,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -8884,9 +8884,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.107" +version = "2.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" +checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" dependencies = [ "proc-macro2", "quote", @@ -8910,7 +8910,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -9032,7 +9032,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -9152,7 +9152,7 @@ dependencies = [ "serde", "serde_json", "sha2 0.10.9", - "syn 2.0.107", + "syn 2.0.108", "tauri-utils", "thiserror 2.0.17", "time", @@ -9170,7 +9170,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "tauri-codegen", "tauri-utils", ] @@ -9476,7 +9476,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -9645,7 +9645,7 @@ checksum = "451b374529930d7601b1eef8d32bc79ae870b6079b069401709c2a8bf9e75f36" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -9691,7 +9691,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -9702,7 +9702,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -9859,7 +9859,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -10082,7 +10082,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -10174,7 +10174,7 @@ version = "0.2.5" source = "git+https://github.com/Frando/tracing-test.git?rev=e81ec65#e81ec655a5ec5c4351104628b1b1ba694f80a1dc" dependencies = [ "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -10680,7 +10680,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "wasm-bindgen-shared", ] @@ -10715,7 +10715,7 @@ checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -10997,7 +10997,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -11414,7 +11414,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -11425,7 +11425,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -11436,7 +11436,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -11447,7 +11447,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12229,7 +12229,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "synstructure", ] @@ -12241,7 +12241,7 @@ checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "synstructure", ] @@ -12297,7 +12297,7 @@ checksum = "dc6821851fa840b708b4cbbaf6241868cabc85a2dc22f426361b0292bfc0b836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "zbus-lockstep", "zbus_xml", "zvariant", @@ -12312,7 +12312,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "zbus_names", "zvariant", "zvariant_utils", @@ -12360,7 +12360,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12380,7 +12380,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "synstructure", ] @@ -12401,7 +12401,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12445,7 +12445,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12456,7 +12456,7 @@ checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", ] [[package]] @@ -12601,7 +12601,7 @@ dependencies = [ "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn 2.0.107", + "syn 2.0.108", "zvariant_utils", ] @@ -12614,6 +12614,6 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.107", + "syn 2.0.108", "winnow 0.7.13", ] diff --git a/clash-nyanpasu/frontend/interface/package.json b/clash-nyanpasu/frontend/interface/package.json index 79f96867f7..0d8d789fa7 100644 --- a/clash-nyanpasu/frontend/interface/package.json +++ b/clash-nyanpasu/frontend/interface/package.json @@ -13,7 +13,7 @@ "dependencies": { "@tanstack/react-query": "5.90.5", "@tauri-apps/api": "2.8.0", - "ahooks": "3.9.5", + "ahooks": "3.9.6", "dayjs": "1.11.18", "lodash-es": "4.17.21", "ofetch": "1.4.1", diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index a07ca76396..481d59135b 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -26,7 +26,7 @@ "@tanstack/router-zod-adapter": "1.81.5", "@tauri-apps/api": "2.8.0", "@types/json-schema": "7.0.15", - "ahooks": "3.9.5", + "ahooks": "3.9.6", "allotment": "1.20.4", "country-code-emoji": "2.3.0", "country-emoji": "1.5.6", @@ -59,9 +59,9 @@ "@iconify/json": "2.2.400", "@monaco-editor/react": "4.7.0", "@tanstack/react-query": "5.90.5", - "@tanstack/react-router": "1.133.13", - "@tanstack/react-router-devtools": "1.133.13", - "@tanstack/router-plugin": "1.133.13", + "@tanstack/react-router": "1.133.32", + "@tanstack/react-router-devtools": "1.133.32", + "@tanstack/router-plugin": "1.133.32", "@tauri-apps/plugin-clipboard-manager": "2.3.0", "@tauri-apps/plugin-dialog": "2.4.0", "@tauri-apps/plugin-fs": "2.4.2", diff --git a/clash-nyanpasu/frontend/ui/package.json b/clash-nyanpasu/frontend/ui/package.json index 11d0b2325d..7bc464381a 100644 --- a/clash-nyanpasu/frontend/ui/package.json +++ b/clash-nyanpasu/frontend/ui/package.json @@ -21,7 +21,7 @@ "@types/d3": "7.4.3", "@types/react": "19.2.2", "@vitejs/plugin-react": "5.0.4", - "ahooks": "3.9.5", + "ahooks": "3.9.6", "d3": "7.9.0", "framer-motion": "12.23.24", "react": "19.2.0", diff --git a/clash-nyanpasu/manifest/version.json b/clash-nyanpasu/manifest/version.json index 99ee038b1e..993d6960f2 100644 --- a/clash-nyanpasu/manifest/version.json +++ b/clash-nyanpasu/manifest/version.json @@ -2,7 +2,7 @@ "manifest_version": 1, "latest": { "mihomo": "v1.19.15", - "mihomo_alpha": "alpha-90f47a6", + "mihomo_alpha": "alpha-9ed9c3d", "clash_rs": "v0.9.1", "clash_premium": "2023-09-05-gdcc8d87", "clash_rs_alpha": "0.9.1-alpha+sha.fc9ebc5" @@ -69,5 +69,5 @@ "linux-armv7hf": "clash-armv7-unknown-linux-gnueabihf" } }, - "updated_at": "2025-10-25T22:20:57.739Z" + "updated_at": "2025-10-26T22:21:09.443Z" } diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index 11926955cd..14d2e332fd 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -185,8 +185,8 @@ importers: specifier: 2.8.0 version: 2.8.0 ahooks: - specifier: 3.9.5 - version: 3.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: 3.9.6 + version: 3.9.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) dayjs: specifier: 1.11.18 version: 1.11.18 @@ -253,7 +253,7 @@ importers: version: 4.1.14 '@tanstack/router-zod-adapter': specifier: 1.81.5 - version: 1.81.5(@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12) + version: 1.81.5(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12) '@tauri-apps/api': specifier: 2.8.0 version: 2.8.0 @@ -261,8 +261,8 @@ importers: specifier: 7.0.15 version: 7.0.15 ahooks: - specifier: 3.9.5 - version: 3.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: 3.9.6 + version: 3.9.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) allotment: specifier: 1.20.4 version: 1.20.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -355,14 +355,14 @@ importers: specifier: 5.90.5 version: 5.90.5(react@19.2.0) '@tanstack/react-router': - specifier: 1.133.13 - version: 1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: 1.133.32 + version: 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0) '@tanstack/react-router-devtools': - specifier: 1.133.13 - version: 1.133.13(@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.13)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + specifier: 1.133.32 + version: 1.133.32(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) '@tanstack/router-plugin': - specifier: 1.133.13 - version: 1.133.13(@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) + specifier: 1.133.32 + version: 1.133.32(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) '@tauri-apps/plugin-clipboard-manager': specifier: 2.3.0 version: 2.3.0 @@ -493,8 +493,8 @@ importers: specifier: 5.0.4 version: 5.0.4(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1)) ahooks: - specifier: 3.9.5 - version: 3.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + specifier: 3.9.6 + version: 3.9.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) d3: specifier: 7.9.0 version: 7.9.0 @@ -1304,10 +1304,6 @@ packages: resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.2': - resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==} - engines: {node: '>=6.9.0'} - '@babel/runtime@7.28.3': resolution: {integrity: sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==} engines: {node: '>=6.9.0'} @@ -3092,8 +3088,8 @@ packages: '@tailwindcss/postcss@4.1.14': resolution: {integrity: sha512-BdMjIxy7HUNThK87C7BC8I1rE8BVUsfNQSI5siQ4JK3iIa3w0XyVvVL9SXLWO//CtYTcp1v7zci0fYwJOjB+Zg==} - '@tanstack/history@1.133.3': - resolution: {integrity: sha512-zFQnGdX0S4g5xRuS+95iiEXM+qlGvYG7ksmOKx7LaMv60lDWa0imR8/24WwXXvBWJT1KnwVdZcjvhCwz9IiJCw==} + '@tanstack/history@1.133.28': + resolution: {integrity: sha512-B7+x7eP2FFvi3fgd3rNH9o/Eixt+pp0zCIdGhnQbAJjFrlwIKGjGnwyJjhWJ5fMQlGks/E2LdDTqEV4W9Plx7g==} engines: {node: '>=12'} '@tanstack/match-sorter-utils@8.19.4': @@ -3108,16 +3104,16 @@ packages: peerDependencies: react: ^18 || ^19 - '@tanstack/react-router-devtools@1.133.13': - resolution: {integrity: sha512-Bc7jap95WD32U0KSuPDZOehujwycNE8cUoroQ8/A2FIugTV6msxW7/fm1Dny7MzVv2lc8VgRIykFGt1vveZgVA==} + '@tanstack/react-router-devtools@1.133.32': + resolution: {integrity: sha512-dd0PzcAjzaDY9rPq9zoiItit3PKDVAekLgMLtNyXneyYrTXqPDSZwSge/l+cB0V1QcuAq6w+qx3LyFd3+zK40g==} engines: {node: '>=12'} peerDependencies: - '@tanstack/react-router': ^1.133.13 + '@tanstack/react-router': ^1.133.32 react: '>=18.0.0 || >=19.0.0' react-dom: '>=18.0.0 || >=19.0.0' - '@tanstack/react-router@1.133.13': - resolution: {integrity: sha512-mVAj70mPOH/a60Hjlha3gHEWLFuE4kHeKau/AL5Xp6e5GtNk1JTRwN4sJ9QlSyLcClOUUtGfED1FoLj0D2W0Eg==} + '@tanstack/react-router@1.133.32': + resolution: {integrity: sha512-UqakhaFJ+r5S+b4/AvLux70Hk+1MpmwfKwbdV7vuM2bVRUSztM8xtcttVpzZwRV45Ls8YsStY58prEVdCpvkNg==} engines: {node: '>=12'} peerDependencies: react: '>=18.0.0 || >=19.0.0' @@ -3142,15 +3138,15 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - '@tanstack/router-core@1.133.13': - resolution: {integrity: sha512-zZptdlS/wSkqozb07Y3zX5gas2OapJdjEG6/Id0e/twNefVdR4EY2TK/mgvyhHtKIpCxIcnZz/3opypgeQi9bg==} + '@tanstack/router-core@1.133.28': + resolution: {integrity: sha512-HErb1X9F+u4VzguJKafX1p5fSnNnfo7aK8Xxh5cICFMShPBxt9i1K45nUbQaRkf45N1tg4gJ3l8mlmwWRm9WWA==} engines: {node: '>=12'} - '@tanstack/router-devtools-core@1.133.13': - resolution: {integrity: sha512-NyXZws0sVeB6+410fa2fopitFAbEqKMhGZw1ojI4bp3DyVwL6l9cnIRHw6qew3gRUVa3SBn00puJ++LfZSYc7w==} + '@tanstack/router-devtools-core@1.133.28': + resolution: {integrity: sha512-V4wwfVV9dGJ+OoEkAvVF6LWyST+s6MMSt+N73453lNbIbzQrODu5xdVr5svnzsuH3Kt5Fms5dMBlvb77gRcn4w==} engines: {node: '>=12'} peerDependencies: - '@tanstack/router-core': ^1.133.13 + '@tanstack/router-core': ^1.133.28 csstype: ^3.0.10 solid-js: '>=1.9.5' tiny-invariant: ^1.3.3 @@ -3158,18 +3154,18 @@ packages: csstype: optional: true - '@tanstack/router-generator@1.133.13': - resolution: {integrity: sha512-W5locmcYSz0dY+KEOIFijUeOdQEzjCxY+uT9ExY/YeQcOBcBFIk9/UnBkE6wRLCPOBb1gfURjPNc9rI93HGrOA==} + '@tanstack/router-generator@1.133.29': + resolution: {integrity: sha512-Nngp1i7ch22qqLkjsQwoyos8mawL5bG2GjHg8IMOzFbMR+dVQfh9gSkpkhUbLMv8TMb8Na31tyR0/tDr+E/NCA==} engines: {node: '>=12'} - '@tanstack/router-plugin@1.133.13': - resolution: {integrity: sha512-R5cbCwdw5chQhgaVERE2JlPpGWcER4FuVkRGDbLaW/rpawIskJCjkAbhqyfgXPF8VsEUOs9+7FK6ocODnqM/qA==} + '@tanstack/router-plugin@1.133.32': + resolution: {integrity: sha512-4YtRrGs5nq/sZmwwT/jmS1LiucEevsWjxzTEilHRBtjeMgFbrhnQ7jBHHRPym71C40W/9tEgzcQS3dGq5LC5+g==} engines: {node: '>=12'} peerDependencies: '@rsbuild/core': '>=1.0.2' - '@tanstack/react-router': ^1.133.13 + '@tanstack/react-router': ^1.133.32 vite: '>=5.0.0 || >=6.0.0 || >=7.0.0' - vite-plugin-solid: ^2.11.8 + vite-plugin-solid: ^2.11.10 webpack: '>=5.92.0' peerDependenciesMeta: '@rsbuild/core': @@ -3183,8 +3179,8 @@ packages: webpack: optional: true - '@tanstack/router-utils@1.133.3': - resolution: {integrity: sha512-miPFlt0aG6ID5VDolYuRXgLS7cofvbZGMvHwf2Wmyxjo6GLp/kxxpkQrfM4T1I5cwjwYZZAQmdUKbVHwFZz9sQ==} + '@tanstack/router-utils@1.133.19': + resolution: {integrity: sha512-WEp5D2gPxvlLDRXwD/fV7RXjYtqaqJNXKB/L6OyZEbT+9BG/Ib2d7oG9GSUZNNMGPGYAlhBUOi3xutySsk6rxA==} engines: {node: '>=12'} '@tanstack/router-zod-adapter@1.81.5': @@ -3204,8 +3200,8 @@ packages: '@tanstack/virtual-core@3.13.9': resolution: {integrity: sha512-3jztt0jpaoJO5TARe2WIHC1UQC3VMLAFUW5mmMo0yrkwtDB2AQP0+sh10BVUpWrnvHjSLvzFizydtEGLCJKFoQ==} - '@tanstack/virtual-file-routes@1.133.3': - resolution: {integrity: sha512-6d2AP9hAjEi8mcIew2RkxBX+wClH1xedhfaYhs8fUiX+V2Cedk7RBD9E9ww2z6BGUYD8Es4fS0OIrzXZWHKGhw==} + '@tanstack/virtual-file-routes@1.133.19': + resolution: {integrity: sha512-IKwZENsK7owmW1Lm5FhuHegY/SyQ8KqtL/7mTSnzoKJgfzhrrf9qwKB1rmkKkt+svUuy/Zw3uVEpZtUzQruWtA==} engines: {node: '>=12'} '@taplo/core@0.2.0': @@ -3831,9 +3827,8 @@ packages: resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} engines: {node: '>=12.0'} - ahooks@3.9.5: - resolution: {integrity: sha512-TrjXie49Q8HuHKTa84Fm9A+famMDAG1+7a9S9Gq6RQ0h90Jgqmiq3CkObuRjWT/C4d6nRZCw35Y2k2fmybb5eA==} - engines: {node: '>=18'} + ahooks@3.9.6: + resolution: {integrity: sha512-Mr7f05swd5SmKlR9SZo5U6M0LsL4ErweLzpdgXjA1JPmnZ78Vr6wzx0jUtvoxrcqGKYnX0Yjc02iEASVxHFPjQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -9716,8 +9711,6 @@ snapshots: '@babel/runtime@7.27.6': {} - '@babel/runtime@7.28.2': {} - '@babel/runtime@7.28.3': {} '@babel/runtime@7.28.4': {} @@ -11434,7 +11427,7 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.14 - '@tanstack/history@1.133.3': {} + '@tanstack/history@1.133.28': {} '@tanstack/match-sorter-utils@8.19.4': dependencies: @@ -11447,10 +11440,10 @@ snapshots: '@tanstack/query-core': 5.90.5 react: 19.2.0 - '@tanstack/react-router-devtools@1.133.13(@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.13)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/react-router-devtools@1.133.32(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': dependencies: - '@tanstack/react-router': 1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-devtools-core': 1.133.13(@tanstack/router-core@1.133.13)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) + '@tanstack/react-router': 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/router-devtools-core': 1.133.28(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1) react: 19.2.0 react-dom: 19.2.0(react@19.2.0) vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) @@ -11471,11 +11464,11 @@ snapshots: - tsx - yaml - '@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': + '@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': dependencies: - '@tanstack/history': 1.133.3 + '@tanstack/history': 1.133.28 '@tanstack/react-store': 0.7.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) - '@tanstack/router-core': 1.133.13 + '@tanstack/router-core': 1.133.28 isbot: 5.1.28 react: 19.2.0 react-dom: 19.2.0(react@19.2.0) @@ -11501,9 +11494,9 @@ snapshots: react: 19.2.0 react-dom: 19.2.0(react@19.2.0) - '@tanstack/router-core@1.133.13': + '@tanstack/router-core@1.133.28': dependencies: - '@tanstack/history': 1.133.3 + '@tanstack/history': 1.133.28 '@tanstack/store': 0.7.0 cookie-es: 2.0.0 seroval: 1.3.2 @@ -11511,9 +11504,9 @@ snapshots: tiny-invariant: 1.3.3 tiny-warning: 1.0.3 - '@tanstack/router-devtools-core@1.133.13(@tanstack/router-core@1.133.13)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': + '@tanstack/router-devtools-core@1.133.28(@tanstack/router-core@1.133.28)(@types/node@24.8.1)(csstype@3.1.3)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(solid-js@1.9.5)(stylus@0.62.0)(terser@5.36.0)(tiny-invariant@1.3.3)(tsx@4.20.6)(yaml@2.8.1)': dependencies: - '@tanstack/router-core': 1.133.13 + '@tanstack/router-core': 1.133.28 clsx: 2.1.1 goober: 2.1.16(csstype@3.1.3) solid-js: 1.9.5 @@ -11534,11 +11527,11 @@ snapshots: - tsx - yaml - '@tanstack/router-generator@1.133.13': + '@tanstack/router-generator@1.133.29': dependencies: - '@tanstack/router-core': 1.133.13 - '@tanstack/router-utils': 1.133.3 - '@tanstack/virtual-file-routes': 1.133.3 + '@tanstack/router-core': 1.133.28 + '@tanstack/router-utils': 1.133.19 + '@tanstack/virtual-file-routes': 1.133.19 prettier: 3.6.2 recast: 0.23.11 source-map: 0.7.4 @@ -11547,7 +11540,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.133.13(@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))': + '@tanstack/router-plugin@1.133.32(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) @@ -11555,21 +11548,21 @@ snapshots: '@babel/template': 7.27.2 '@babel/traverse': 7.28.4 '@babel/types': 7.28.4 - '@tanstack/router-core': 1.133.13 - '@tanstack/router-generator': 1.133.13 - '@tanstack/router-utils': 1.133.3 - '@tanstack/virtual-file-routes': 1.133.3 + '@tanstack/router-core': 1.133.28 + '@tanstack/router-generator': 1.133.29 + '@tanstack/router-utils': 1.133.19 + '@tanstack/virtual-file-routes': 1.133.19 babel-dead-code-elimination: 1.0.10 chokidar: 3.6.0 unplugin: 2.3.10 zod: 3.25.76 optionalDependencies: - '@tanstack/react-router': 1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/react-router': 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0) vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.0)(less@4.2.0)(lightningcss@1.30.1)(sass-embedded@1.93.2)(sass@1.93.2)(stylus@0.62.0)(terser@5.36.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@tanstack/router-utils@1.133.3': + '@tanstack/router-utils@1.133.19': dependencies: '@babel/core': 7.28.4 '@babel/generator': 7.28.3 @@ -11582,9 +11575,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)': + '@tanstack/router-zod-adapter@1.81.5(@tanstack/react-router@1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(zod@4.1.12)': dependencies: - '@tanstack/react-router': 1.133.13(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + '@tanstack/react-router': 1.133.32(react-dom@19.2.0(react@19.2.0))(react@19.2.0) zod: 4.1.12 '@tanstack/store@0.7.0': {} @@ -11593,7 +11586,7 @@ snapshots: '@tanstack/virtual-core@3.13.9': {} - '@tanstack/virtual-file-routes@1.133.3': {} + '@tanstack/virtual-file-routes@1.133.19': {} '@taplo/core@0.2.0': {} @@ -12283,9 +12276,9 @@ snapshots: adm-zip@0.5.16: {} - ahooks@3.9.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + ahooks@3.9.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 '@types/js-cookie': 3.0.6 dayjs: 1.11.18 intersection-observer: 0.12.2 @@ -12524,7 +12517,7 @@ snapshots: babel-plugin-macros@3.1.0: dependencies: - '@babel/runtime': 7.28.2 + '@babel/runtime': 7.28.4 cosmiconfig: 7.1.0 resolve: 1.22.8 diff --git a/lede/target/linux/rockchip/patches-6.1/011-v6.3-net-rfkill-gpio-add-DT-support.patch b/lede/target/linux/rockchip/patches-6.1/011-v6.3-net-rfkill-gpio-add-DT-support.patch deleted file mode 100644 index 8a9f4c3079..0000000000 --- a/lede/target/linux/rockchip/patches-6.1/011-v6.3-net-rfkill-gpio-add-DT-support.patch +++ /dev/null @@ -1,67 +0,0 @@ -From d64c732dfc9edcd57feb693c23162117737e426b Mon Sep 17 00:00:00 2001 -From: Philipp Zabel -Date: Mon, 2 Jan 2023 18:29:34 +0100 -Subject: [PATCH] net: rfkill: gpio: add DT support - -Allow probing rfkill-gpio via device tree. This hooks up the already -existing support that was started in commit 262c91ee5e52 ("net: -rfkill: gpio: prepare for DT and ACPI support") via the "rfkill-gpio" -compatible, with the "name" and "type" properties renamed to "label" -and "radio-type", respectively, in the device tree case. - -Signed-off-by: Philipp Zabel -Link: https://lore.kernel.org/r/20230102-rfkill-gpio-dt-v2-2-d1b83758c16d@pengutronix.de -Signed-off-by: Johannes Berg ---- - net/rfkill/rfkill-gpio.c | 20 ++++++++++++++++++-- - 1 file changed, 18 insertions(+), 2 deletions(-) - ---- a/net/rfkill/rfkill-gpio.c -+++ b/net/rfkill/rfkill-gpio.c -@@ -79,6 +79,8 @@ static int rfkill_gpio_probe(struct plat - { - struct rfkill_gpio_data *rfkill; - struct gpio_desc *gpio; -+ const char *name_property; -+ const char *type_property; - const char *type_name; - int ret; - -@@ -86,8 +88,15 @@ static int rfkill_gpio_probe(struct plat - if (!rfkill) - return -ENOMEM; - -- device_property_read_string(&pdev->dev, "name", &rfkill->name); -- device_property_read_string(&pdev->dev, "type", &type_name); -+ if (dev_of_node(&pdev->dev)) { -+ name_property = "label"; -+ type_property = "radio-type"; -+ } else { -+ name_property = "name"; -+ type_property = "type"; -+ } -+ device_property_read_string(&pdev->dev, name_property, &rfkill->name); -+ device_property_read_string(&pdev->dev, type_property, &type_name); - - if (!rfkill->name) - rfkill->name = dev_name(&pdev->dev); -@@ -169,12 +178,19 @@ static const struct acpi_device_id rfkil - MODULE_DEVICE_TABLE(acpi, rfkill_acpi_match); - #endif - -+static const struct of_device_id rfkill_of_match[] __maybe_unused = { -+ { .compatible = "rfkill-gpio", }, -+ { }, -+}; -+MODULE_DEVICE_TABLE(of, rfkill_of_match); -+ - static struct platform_driver rfkill_gpio_driver = { - .probe = rfkill_gpio_probe, - .remove = rfkill_gpio_remove, - .driver = { - .name = "rfkill_gpio", - .acpi_match_table = ACPI_PTR(rfkill_acpi_match), -+ .of_match_table = of_match_ptr(rfkill_of_match), - }, - }; - diff --git a/lede/target/linux/rockchip/patches-6.12/036-06-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch b/lede/target/linux/rockchip/patches-6.12/036-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch similarity index 100% rename from lede/target/linux/rockchip/patches-6.12/036-06-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch rename to lede/target/linux/rockchip/patches-6.12/036-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch diff --git a/lede/target/linux/rockchip/patches-6.12/206-arm64-dts-rockchip-add-bus-scan-delay-for-NanoPi-R4S.patch b/lede/target/linux/rockchip/patches-6.12/206-arm64-dts-rockchip-add-bus-scan-delay-for-NanoPi-R4S.patch deleted file mode 100644 index 2917724911..0000000000 --- a/lede/target/linux/rockchip/patches-6.12/206-arm64-dts-rockchip-add-bus-scan-delay-for-NanoPi-R4S.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi -+++ b/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi -@@ -514,6 +514,7 @@ - num-lanes = <2>; - vpcie0v9-supply = <&vcca0v9_s3>; - vpcie1v8-supply = <&vcca1v8_s3>; -+ bus-scan-delay-ms = <1000>; - status = "okay"; - }; - diff --git a/lede/target/linux/rockchip/patches-6.12/994-rockchip-pcie-reimplement-bus-scan-delay.patch b/lede/target/linux/rockchip/patches-6.12/994-rockchip-pcie-reimplement-bus-scan-delay.patch deleted file mode 100644 index 7541f5437d..0000000000 --- a/lede/target/linux/rockchip/patches-6.12/994-rockchip-pcie-reimplement-bus-scan-delay.patch +++ /dev/null @@ -1,96 +0,0 @@ ---- a/Documentation/admin-guide/kernel-parameters.txt -+++ b/Documentation/admin-guide/kernel-parameters.txt -@@ -4967,6 +4967,14 @@ - nomsi Do not use MSI for native PCIe PME signaling (this makes - all PCIe root ports use INTx for all services). - -+ pcie_rockchip_host.bus_scan_delay= [PCIE] Delay in ms before -+ scanning PCIe bus in Rockchip PCIe host driver. Some PCIe -+ cards seem to need delays that can be several hundred ms. -+ If set to greater than or equal to 0 this parameter will -+ override delay that can be set in device tree. -+ Values less than 0 mean that this parameter is ignored. -+ default=-1 -+ - pcmv= [HW,PCMCIA] BadgePAD 4 - - pd_ignore_unused ---- a/drivers/pci/controller/pcie-rockchip-host.c -+++ b/drivers/pci/controller/pcie-rockchip-host.c -@@ -32,10 +32,14 @@ - #include - #include - #include -+#include - - #include "../pci.h" - #include "pcie-rockchip.h" - -+static int bus_scan_delay = -1; -+module_param_named(bus_scan_delay, bus_scan_delay, int, S_IRUGO); -+ - static void rockchip_pcie_enable_bw_int(struct rockchip_pcie *rockchip) - { - u32 status; -@@ -933,6 +937,7 @@ static int rockchip_pcie_probe(struct platform_device *pdev) - struct device *dev = &pdev->dev; - struct pci_host_bridge *bridge; - int err; -+ u32 delay = 0; - - if (!dev->of_node) - return -ENODEV; -@@ -982,6 +987,26 @@ static int rockchip_pcie_probe(struct platform_device *pdev) - bridge->sysdata = rockchip; - bridge->ops = &rockchip_pcie_ops; - -+ /* Checking if bus scan delay was given from command line and prefer -+ * that over the value in device tree (which defaults to 0 if not set). -+ */ -+ if (bus_scan_delay >= 0) { -+ delay = bus_scan_delay; -+ dev_info(dev, "wait %u ms (from command-line) before bus scan\n", delay); -+ } else { -+ delay = rockchip->bus_scan_delay; -+ dev_info(dev, "wait %u ms (from device tree) before bus scan\n", delay); -+ } -+ /* Workaround for some devices crashing on pci_host_probe / pci_scan_root_bus_bridge -+ * calls: sleep a bit before bus scan. Call trace gets to rockchip_pcie_rd_conf when -+ * trying to read vendor id (pci_bus_generic_read_dev_vendor_id is in call stack) -+ * before panicing. I have no idea why this works or what causes the panic. I just -+ * found this hack by luck when trying to "make it break differently if possible". -+ */ -+ if (delay > 0) { -+ msleep(delay); -+ } -+ - err = rockchip_pcie_setup_irq(rockchip); - if (err) - goto err_remove_irq_domain; ---- a/drivers/pci/controller/pcie-rockchip.c -+++ b/drivers/pci/controller/pcie-rockchip.c -@@ -102,6 +102,12 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) - return dev_err_probe(dev, rockchip->num_clks, - "failed to get clocks\n"); - -+ err = of_property_read_u32(node, "bus-scan-delay-ms", &rockchip->bus_scan_delay); -+ if (err) { -+ dev_info(dev, "no bus scan delay, default to 0 ms\n"); -+ rockchip->bus_scan_delay = 0; -+ } -+ - return 0; - } - EXPORT_SYMBOL_GPL(rockchip_pcie_parse_dt); ---- a/drivers/pci/controller/pcie-rockchip.h -+++ b/drivers/pci/controller/pcie-rockchip.h -@@ -351,6 +351,8 @@ struct rockchip_pcie { - phys_addr_t msg_bus_addr; - bool is_rc; - struct resource *mem_res; -+ /* Bus scan delay is a workaround for some pcie devices causing crashes */ -+ u32 bus_scan_delay; - }; - - static u32 rockchip_pcie_read(struct rockchip_pcie *rockchip, u32 reg) - diff --git a/lede/target/linux/rockchip/patches-6.6/036-06-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch b/lede/target/linux/rockchip/patches-6.6/071-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch similarity index 100% rename from lede/target/linux/rockchip/patches-6.6/036-06-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch rename to lede/target/linux/rockchip/patches-6.6/071-v6.17-phy-rockchip-pcie-Enable-all-four-lanes-if-required.patch diff --git a/lede/target/linux/rockchip/patches-6.6/206-arm64-dts-rockchip-add-bus-scan-delay-for-NanoPi-R4S.patch b/lede/target/linux/rockchip/patches-6.6/206-arm64-dts-rockchip-add-bus-scan-delay-for-NanoPi-R4S.patch deleted file mode 100644 index 2917724911..0000000000 --- a/lede/target/linux/rockchip/patches-6.6/206-arm64-dts-rockchip-add-bus-scan-delay-for-NanoPi-R4S.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi -+++ b/arch/arm64/boot/dts/rockchip/rk3399-nanopi4.dtsi -@@ -514,6 +514,7 @@ - num-lanes = <2>; - vpcie0v9-supply = <&vcca0v9_s3>; - vpcie1v8-supply = <&vcca1v8_s3>; -+ bus-scan-delay-ms = <1000>; - status = "okay"; - }; - diff --git a/lede/target/linux/rockchip/patches-6.6/994-rockchip-pcie-reimplement-bus-scan-delay.patch b/lede/target/linux/rockchip/patches-6.6/994-rockchip-pcie-reimplement-bus-scan-delay.patch deleted file mode 100644 index 7541f5437d..0000000000 --- a/lede/target/linux/rockchip/patches-6.6/994-rockchip-pcie-reimplement-bus-scan-delay.patch +++ /dev/null @@ -1,96 +0,0 @@ ---- a/Documentation/admin-guide/kernel-parameters.txt -+++ b/Documentation/admin-guide/kernel-parameters.txt -@@ -4967,6 +4967,14 @@ - nomsi Do not use MSI for native PCIe PME signaling (this makes - all PCIe root ports use INTx for all services). - -+ pcie_rockchip_host.bus_scan_delay= [PCIE] Delay in ms before -+ scanning PCIe bus in Rockchip PCIe host driver. Some PCIe -+ cards seem to need delays that can be several hundred ms. -+ If set to greater than or equal to 0 this parameter will -+ override delay that can be set in device tree. -+ Values less than 0 mean that this parameter is ignored. -+ default=-1 -+ - pcmv= [HW,PCMCIA] BadgePAD 4 - - pd_ignore_unused ---- a/drivers/pci/controller/pcie-rockchip-host.c -+++ b/drivers/pci/controller/pcie-rockchip-host.c -@@ -32,10 +32,14 @@ - #include - #include - #include -+#include - - #include "../pci.h" - #include "pcie-rockchip.h" - -+static int bus_scan_delay = -1; -+module_param_named(bus_scan_delay, bus_scan_delay, int, S_IRUGO); -+ - static void rockchip_pcie_enable_bw_int(struct rockchip_pcie *rockchip) - { - u32 status; -@@ -933,6 +937,7 @@ static int rockchip_pcie_probe(struct platform_device *pdev) - struct device *dev = &pdev->dev; - struct pci_host_bridge *bridge; - int err; -+ u32 delay = 0; - - if (!dev->of_node) - return -ENODEV; -@@ -982,6 +987,26 @@ static int rockchip_pcie_probe(struct platform_device *pdev) - bridge->sysdata = rockchip; - bridge->ops = &rockchip_pcie_ops; - -+ /* Checking if bus scan delay was given from command line and prefer -+ * that over the value in device tree (which defaults to 0 if not set). -+ */ -+ if (bus_scan_delay >= 0) { -+ delay = bus_scan_delay; -+ dev_info(dev, "wait %u ms (from command-line) before bus scan\n", delay); -+ } else { -+ delay = rockchip->bus_scan_delay; -+ dev_info(dev, "wait %u ms (from device tree) before bus scan\n", delay); -+ } -+ /* Workaround for some devices crashing on pci_host_probe / pci_scan_root_bus_bridge -+ * calls: sleep a bit before bus scan. Call trace gets to rockchip_pcie_rd_conf when -+ * trying to read vendor id (pci_bus_generic_read_dev_vendor_id is in call stack) -+ * before panicing. I have no idea why this works or what causes the panic. I just -+ * found this hack by luck when trying to "make it break differently if possible". -+ */ -+ if (delay > 0) { -+ msleep(delay); -+ } -+ - err = rockchip_pcie_setup_irq(rockchip); - if (err) - goto err_remove_irq_domain; ---- a/drivers/pci/controller/pcie-rockchip.c -+++ b/drivers/pci/controller/pcie-rockchip.c -@@ -102,6 +102,12 @@ int rockchip_pcie_parse_dt(struct rockchip_pcie *rockchip) - return dev_err_probe(dev, rockchip->num_clks, - "failed to get clocks\n"); - -+ err = of_property_read_u32(node, "bus-scan-delay-ms", &rockchip->bus_scan_delay); -+ if (err) { -+ dev_info(dev, "no bus scan delay, default to 0 ms\n"); -+ rockchip->bus_scan_delay = 0; -+ } -+ - return 0; - } - EXPORT_SYMBOL_GPL(rockchip_pcie_parse_dt); ---- a/drivers/pci/controller/pcie-rockchip.h -+++ b/drivers/pci/controller/pcie-rockchip.h -@@ -351,6 +351,8 @@ struct rockchip_pcie { - phys_addr_t msg_bus_addr; - bool is_rc; - struct resource *mem_res; -+ /* Bus scan delay is a workaround for some pcie devices causing crashes */ -+ u32 bus_scan_delay; - }; - - static u32 rockchip_pcie_read(struct rockchip_pcie *rockchip, u32 reg) - diff --git a/mieru/Makefile b/mieru/Makefile index 5a3a9cf30b..d759b98fbd 100644 --- a/mieru/Makefile +++ b/mieru/Makefile @@ -34,6 +34,11 @@ PROJECT_NAME=$(shell basename "${ROOT}") # Use `tools/bump_version.sh` script to change all those files at one shot. VERSION="3.21.0" +# With .ONESHELL, each recipe is executed in a single shell instance. +# This allows `cd` to affect subsequent commands in the same recipe. +# .ONESHELL is supported in GNU Make version 3.82 and later. +.ONESHELL: + # Build binaries and installation packages. .PHONY: build build: bin deb rpm @@ -82,16 +87,15 @@ client-android: client-android-arm64 # Build Android arm64 client. .PHONY: client-android-arm64 client-android-arm64: - if [ ! -z $$(command -v gcc) ]; then\ - mkdir -p release/android/arm64;\ - env GOOS=android GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/android/arm64/mieru cmd/mieru/mieru.go;\ - cd release/android/arm64;\ - sha256sum mieru > mieru_${VERSION}_android_arm64.sha256.txt;\ - tar -zcvf mieru_${VERSION}_android_arm64.tar.gz mieru;\ - sha256sum mieru_${VERSION}_android_arm64.tar.gz > mieru_${VERSION}_android_arm64.tar.gz.sha256.txt;\ - cd "${ROOT}";\ - mv release/android/arm64/mieru_${VERSION}_android_arm64.tar.gz release/;\ - mv release/android/arm64/mieru_${VERSION}_android_arm64.tar.gz.sha256.txt release/;\ + if [ ! -z $$(command -v gcc) ]; then + mkdir -p release/android/arm64 + env GOOS=android GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/android/arm64/mieru cmd/mieru/mieru.go + cd release/android/arm64 + sha256sum mieru > mieru_${VERSION}_android_arm64.sha256.txt + tar -zcvf mieru_${VERSION}_android_arm64.tar.gz mieru + sha256sum mieru_${VERSION}_android_arm64.tar.gz > mieru_${VERSION}_android_arm64.tar.gz.sha256.txt + mv mieru_${VERSION}_android_arm64.tar.gz ../../ + mv mieru_${VERSION}_android_arm64.tar.gz.sha256.txt ../../ fi # Build linux clients. @@ -103,48 +107,48 @@ client-linux: client-linux-amd64 client-linux-arm64 client-linux-armv7 client-li client-linux-amd64: mkdir -p release/linux/amd64 env GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/linux/amd64/mieru cmd/mieru/mieru.go - cd release/linux/amd64;\ - sha256sum mieru > mieru_${VERSION}_linux_amd64.sha256.txt;\ - tar -zcvf mieru_${VERSION}_linux_amd64.tar.gz mieru;\ - sha256sum mieru_${VERSION}_linux_amd64.tar.gz > mieru_${VERSION}_linux_amd64.tar.gz.sha256.txt - mv release/linux/amd64/mieru_${VERSION}_linux_amd64.tar.gz release/ - mv release/linux/amd64/mieru_${VERSION}_linux_amd64.tar.gz.sha256.txt release/ + cd release/linux/amd64 + sha256sum mieru > mieru_${VERSION}_linux_amd64.sha256.txt + tar -zcvf mieru_${VERSION}_linux_amd64.tar.gz mieru + sha256sum mieru_${VERSION}_linux_amd64.tar.gz > mieru_${VERSION}_linux_amd64.tar.gz.sha256.txt + mv mieru_${VERSION}_linux_amd64.tar.gz ../../ + mv mieru_${VERSION}_linux_amd64.tar.gz.sha256.txt ../../ # Build linux arm64 client. .PHONY: client-linux-arm64 client-linux-arm64: mkdir -p release/linux/arm64 env GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/linux/arm64/mieru cmd/mieru/mieru.go - cd release/linux/arm64;\ - sha256sum mieru > mieru_${VERSION}_linux_arm64.sha256.txt;\ - tar -zcvf mieru_${VERSION}_linux_arm64.tar.gz mieru;\ - sha256sum mieru_${VERSION}_linux_arm64.tar.gz > mieru_${VERSION}_linux_arm64.tar.gz.sha256.txt - mv release/linux/arm64/mieru_${VERSION}_linux_arm64.tar.gz release/ - mv release/linux/arm64/mieru_${VERSION}_linux_arm64.tar.gz.sha256.txt release/ + cd release/linux/arm64 + sha256sum mieru > mieru_${VERSION}_linux_arm64.sha256.txt + tar -zcvf mieru_${VERSION}_linux_arm64.tar.gz mieru + sha256sum mieru_${VERSION}_linux_arm64.tar.gz > mieru_${VERSION}_linux_arm64.tar.gz.sha256.txt + mv mieru_${VERSION}_linux_arm64.tar.gz ../../ + mv mieru_${VERSION}_linux_arm64.tar.gz.sha256.txt ../../ # Build linux armv7 client. .PHONY: client-linux-armv7 client-linux-armv7: mkdir -p release/linux/armv7 env GOOS=linux GOARCH=arm GOARM=7 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/linux/armv7/mieru cmd/mieru/mieru.go - cd release/linux/armv7;\ - sha256sum mieru > mieru_${VERSION}_linux_armv7.sha256.txt;\ - tar -zcvf mieru_${VERSION}_linux_armv7.tar.gz mieru;\ - sha256sum mieru_${VERSION}_linux_armv7.tar.gz > mieru_${VERSION}_linux_armv7.tar.gz.sha256.txt - mv release/linux/armv7/mieru_${VERSION}_linux_armv7.tar.gz release/ - mv release/linux/armv7/mieru_${VERSION}_linux_armv7.tar.gz.sha256.txt release/ + cd release/linux/armv7 + sha256sum mieru > mieru_${VERSION}_linux_armv7.sha256.txt + tar -zcvf mieru_${VERSION}_linux_armv7.tar.gz mieru + sha256sum mieru_${VERSION}_linux_armv7.tar.gz > mieru_${VERSION}_linux_armv7.tar.gz.sha256.txt + mv mieru_${VERSION}_linux_armv7.tar.gz ../../ + mv mieru_${VERSION}_linux_armv7.tar.gz.sha256.txt ../../ # Build linux riscv64 client. .PHONY: client-linux-riscv64 client-linux-riscv64: mkdir -p release/linux/riscv64 env GOOS=linux GOARCH=riscv64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/linux/riscv64/mieru cmd/mieru/mieru.go - cd release/linux/riscv64;\ - sha256sum mieru > mieru_${VERSION}_linux_riscv64.sha256.txt;\ - tar -zcvf mieru_${VERSION}_linux_riscv64.tar.gz mieru;\ - sha256sum mieru_${VERSION}_linux_riscv64.tar.gz > mieru_${VERSION}_linux_riscv64.tar.gz.sha256.txt - mv release/linux/riscv64/mieru_${VERSION}_linux_riscv64.tar.gz release/ - mv release/linux/riscv64/mieru_${VERSION}_linux_riscv64.tar.gz.sha256.txt release/ + cd release/linux/riscv64 + sha256sum mieru > mieru_${VERSION}_linux_riscv64.sha256.txt + tar -zcvf mieru_${VERSION}_linux_riscv64.tar.gz mieru + sha256sum mieru_${VERSION}_linux_riscv64.tar.gz > mieru_${VERSION}_linux_riscv64.tar.gz.sha256.txt + mv mieru_${VERSION}_linux_riscv64.tar.gz ../../ + mv mieru_${VERSION}_linux_riscv64.tar.gz.sha256.txt ../../ # Build MacOS clients. .PHONY: client-mac @@ -155,24 +159,24 @@ client-mac: client-mac-amd64 client-mac-arm64 client-mac-amd64: mkdir -p release/macos/amd64 env GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/macos/amd64/mieru cmd/mieru/mieru.go - cd release/macos/amd64;\ - sha256sum mieru > mieru_${VERSION}_macos_amd64.sha256.txt;\ - tar -zcvf mieru_${VERSION}_macos_amd64.tar.gz mieru;\ - sha256sum mieru_${VERSION}_macos_amd64.tar.gz > mieru_${VERSION}_macos_amd64.tar.gz.sha256.txt - mv release/macos/amd64/mieru_${VERSION}_macos_amd64.tar.gz release/ - mv release/macos/amd64/mieru_${VERSION}_macos_amd64.tar.gz.sha256.txt release/ + cd release/macos/amd64 + sha256sum mieru > mieru_${VERSION}_macos_amd64.sha256.txt + tar -zcvf mieru_${VERSION}_macos_amd64.tar.gz mieru + sha256sum mieru_${VERSION}_macos_amd64.tar.gz > mieru_${VERSION}_macos_amd64.tar.gz.sha256.txt + mv mieru_${VERSION}_macos_amd64.tar.gz ../../ + mv mieru_${VERSION}_macos_amd64.tar.gz.sha256.txt ../../ # Build MacOS arm64 client. .PHONY: client-mac-arm64 client-mac-arm64: mkdir -p release/macos/arm64 env GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/macos/arm64/mieru cmd/mieru/mieru.go - cd release/macos/arm64;\ - sha256sum mieru > mieru_${VERSION}_macos_arm64.sha256.txt;\ - tar -zcvf mieru_${VERSION}_macos_arm64.tar.gz mieru;\ - sha256sum mieru_${VERSION}_macos_arm64.tar.gz > mieru_${VERSION}_macos_arm64.tar.gz.sha256.txt - mv release/macos/arm64/mieru_${VERSION}_macos_arm64.tar.gz release/ - mv release/macos/arm64/mieru_${VERSION}_macos_arm64.tar.gz.sha256.txt release/ + cd release/macos/arm64 + sha256sum mieru > mieru_${VERSION}_macos_arm64.sha256.txt + tar -zcvf mieru_${VERSION}_macos_arm64.tar.gz mieru + sha256sum mieru_${VERSION}_macos_arm64.tar.gz > mieru_${VERSION}_macos_arm64.tar.gz.sha256.txt + mv mieru_${VERSION}_macos_arm64.tar.gz ../../ + mv mieru_${VERSION}_macos_arm64.tar.gz.sha256.txt ../../ # Build windows clients. .PHONY: client-windows @@ -183,24 +187,24 @@ client-windows: client-windows-x86 client-windows-amd64 client-windows-x86: mkdir -p release/windows/386 env GOOS=windows GOARCH=386 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/windows/386/mieru.exe cmd/mieru/mieru.go - cd release/windows/386;\ - sha256sum mieru.exe > mieru_${VERSION}_windows_x86.exe.sha256.txt;\ - zip -r mieru_${VERSION}_windows_x86.zip mieru.exe;\ - sha256sum mieru_${VERSION}_windows_x86.zip > mieru_${VERSION}_windows_x86.zip.sha256.txt - mv release/windows/386/mieru_${VERSION}_windows_x86.zip release/ - mv release/windows/386/mieru_${VERSION}_windows_x86.zip.sha256.txt release/ + cd release/windows/386 + sha256sum mieru.exe > mieru_${VERSION}_windows_x86.exe.sha256.txt + zip -r mieru_${VERSION}_windows_x86.zip mieru.exe + sha256sum mieru_${VERSION}_windows_x86.zip > mieru_${VERSION}_windows_x86.zip.sha256.txt + mv mieru_${VERSION}_windows_x86.zip ../../ + mv mieru_${VERSION}_windows_x86.zip.sha256.txt ../../ # Build windows amd64 client. .PHONY: client-windows-amd64 client-windows-amd64: mkdir -p release/windows/amd64 env GOOS=windows GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/windows/amd64/mieru.exe cmd/mieru/mieru.go - cd release/windows/amd64;\ - sha256sum mieru.exe > mieru_${VERSION}_windows_amd64.exe.sha256.txt;\ - zip -r mieru_${VERSION}_windows_amd64.zip mieru.exe;\ - sha256sum mieru_${VERSION}_windows_amd64.zip > mieru_${VERSION}_windows_amd64.zip.sha256.txt - mv release/windows/amd64/mieru_${VERSION}_windows_amd64.zip release/ - mv release/windows/amd64/mieru_${VERSION}_windows_amd64.zip.sha256.txt release/ + cd release/windows/amd64 + sha256sum mieru.exe > mieru_${VERSION}_windows_amd64.exe.sha256.txt + zip -r mieru_${VERSION}_windows_amd64.zip mieru.exe + sha256sum mieru_${VERSION}_windows_amd64.zip > mieru_${VERSION}_windows_amd64.zip.sha256.txt + mv mieru_${VERSION}_windows_amd64.zip ../../ + mv mieru_${VERSION}_windows_amd64.zip.sha256.txt ../../ # Build linux servers. .PHONY: server-linux @@ -211,24 +215,24 @@ server-linux: server-linux-amd64 server-linux-arm64 server-linux-amd64: mkdir -p release/linux/amd64 env GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/linux/amd64/mita cmd/mita/mita.go - cd release/linux/amd64;\ - sha256sum mita > mita_${VERSION}_linux_amd64.sha256.txt;\ - tar -zcvf mita_${VERSION}_linux_amd64.tar.gz mita;\ - sha256sum mita_${VERSION}_linux_amd64.tar.gz > mita_${VERSION}_linux_amd64.tar.gz.sha256.txt - mv release/linux/amd64/mita_${VERSION}_linux_amd64.tar.gz release/ - mv release/linux/amd64/mita_${VERSION}_linux_amd64.tar.gz.sha256.txt release/ + cd release/linux/amd64 + sha256sum mita > mita_${VERSION}_linux_amd64.sha256.txt + tar -zcvf mita_${VERSION}_linux_amd64.tar.gz mita + sha256sum mita_${VERSION}_linux_amd64.tar.gz > mita_${VERSION}_linux_amd64.tar.gz.sha256.txt + mv mita_${VERSION}_linux_amd64.tar.gz ../../ + mv mita_${VERSION}_linux_amd64.tar.gz.sha256.txt ../../ # Build linux arm64 server. .PHONY: server-linux-arm64 server-linux-arm64: mkdir -p release/linux/arm64 env GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o release/linux/arm64/mita cmd/mita/mita.go - cd release/linux/arm64;\ - sha256sum mita > mita_${VERSION}_linux_arm64.sha256.txt;\ - tar -zcvf mita_${VERSION}_linux_arm64.tar.gz mita;\ - sha256sum mita_${VERSION}_linux_arm64.tar.gz > mita_${VERSION}_linux_arm64.tar.gz.sha256.txt - mv release/linux/arm64/mita_${VERSION}_linux_arm64.tar.gz release/ - mv release/linux/arm64/mita_${VERSION}_linux_arm64.tar.gz.sha256.txt release/ + cd release/linux/arm64 + sha256sum mita > mita_${VERSION}_linux_arm64.sha256.txt + tar -zcvf mita_${VERSION}_linux_arm64.tar.gz mita + sha256sum mita_${VERSION}_linux_arm64.tar.gz > mita_${VERSION}_linux_arm64.tar.gz.sha256.txt + mv mita_${VERSION}_linux_arm64.tar.gz ../../ + mv mita_${VERSION}_linux_arm64.tar.gz.sha256.txt ../../ # Build debian installation packages. .PHONY: deb @@ -237,61 +241,61 @@ deb: deb-client-amd64 deb-client-arm64 deb-server-amd64 deb-server-arm64 # Build debian client amd64 installation package. .PHONY: deb-client-amd64 deb-client-amd64: client-linux-amd64 - if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then\ - rm -rf build/package/mieru/amd64/debian/usr/bin;\ - mkdir -p build/package/mieru/amd64/debian/usr/bin;\ - cp release/linux/amd64/mieru build/package/mieru/amd64/debian/usr/bin/;\ - cd build/package/mieru/amd64;\ - fakeroot dpkg-deb -Zxz --build debian .;\ - cd "${ROOT}";\ - mv build/package/mieru/amd64/mieru_${VERSION}_amd64.deb release/;\ - cd release;\ - sha256sum mieru_${VERSION}_amd64.deb > mieru_${VERSION}_amd64.deb.sha256.txt;\ + if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then + rm -rf build/package/mieru/amd64/debian/usr/bin + mkdir -p build/package/mieru/amd64/debian/usr/bin + cp release/linux/amd64/mieru build/package/mieru/amd64/debian/usr/bin/ + cd build/package/mieru/amd64 + fakeroot dpkg-deb -Zxz --build debian . + cd "${ROOT}" + mv build/package/mieru/amd64/mieru_${VERSION}_amd64.deb release/ + cd release + sha256sum mieru_${VERSION}_amd64.deb > mieru_${VERSION}_amd64.deb.sha256.txt fi # Build debian client arm64 installation package. .PHONY: deb-client-arm64 deb-client-arm64: client-linux-arm64 - if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then\ - rm -rf build/package/mieru/arm64/debian/usr/bin;\ - mkdir -p build/package/mieru/arm64/debian/usr/bin;\ - cp release/linux/arm64/mieru build/package/mieru/arm64/debian/usr/bin/;\ - cd build/package/mieru/arm64;\ - fakeroot dpkg-deb -Zxz --build debian .;\ - cd "${ROOT}";\ - mv build/package/mieru/arm64/mieru_${VERSION}_arm64.deb release/;\ - cd release;\ - sha256sum mieru_${VERSION}_arm64.deb > mieru_${VERSION}_arm64.deb.sha256.txt;\ + if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then + rm -rf build/package/mieru/arm64/debian/usr/bin + mkdir -p build/package/mieru/arm64/debian/usr/bin + cp release/linux/arm64/mieru build/package/mieru/arm64/debian/usr/bin/ + cd build/package/mieru/arm64 + fakeroot dpkg-deb -Zxz --build debian . + cd "${ROOT}" + mv build/package/mieru/arm64/mieru_${VERSION}_arm64.deb release/ + cd release + sha256sum mieru_${VERSION}_arm64.deb > mieru_${VERSION}_arm64.deb.sha256.txt fi # Build debian server amd64 installation package. .PHONY: deb-server-amd64 deb-server-amd64: server-linux-amd64 - if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then\ - rm -rf build/package/mita/amd64/debian/usr/bin;\ - mkdir -p build/package/mita/amd64/debian/usr/bin;\ - cp release/linux/amd64/mita build/package/mita/amd64/debian/usr/bin/;\ - cd build/package/mita/amd64;\ - fakeroot dpkg-deb -Zxz --build debian .;\ - cd "${ROOT}";\ - mv build/package/mita/amd64/mita_${VERSION}_amd64.deb release/;\ - cd release;\ - sha256sum mita_${VERSION}_amd64.deb > mita_${VERSION}_amd64.deb.sha256.txt;\ + if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then + rm -rf build/package/mita/amd64/debian/usr/bin + mkdir -p build/package/mita/amd64/debian/usr/bin + cp release/linux/amd64/mita build/package/mita/amd64/debian/usr/bin/ + cd build/package/mita/amd64 + fakeroot dpkg-deb -Zxz --build debian . + cd "${ROOT}" + mv build/package/mita/amd64/mita_${VERSION}_amd64.deb release/ + cd release + sha256sum mita_${VERSION}_amd64.deb > mita_${VERSION}_amd64.deb.sha256.txt fi # Build debian server arm64 installation package. .PHONY: deb-server-arm64 deb-server-arm64: server-linux-arm64 - if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then\ - rm -rf build/package/mita/arm64/debian/usr/bin;\ - mkdir -p build/package/mita/arm64/debian/usr/bin;\ - cp release/linux/arm64/mita build/package/mita/arm64/debian/usr/bin/;\ - cd build/package/mita/arm64;\ - fakeroot dpkg-deb -Zxz --build debian .;\ - cd "${ROOT}";\ - mv build/package/mita/arm64/mita_${VERSION}_arm64.deb release/;\ - cd release;\ - sha256sum mita_${VERSION}_arm64.deb > mita_${VERSION}_arm64.deb.sha256.txt;\ + if [ ! -z $$(command -v dpkg-deb) ] && [ ! -z $$(command -v fakeroot) ]; then + rm -rf build/package/mita/arm64/debian/usr/bin + mkdir -p build/package/mita/arm64/debian/usr/bin + cp release/linux/arm64/mita build/package/mita/arm64/debian/usr/bin/ + cd build/package/mita/arm64 + fakeroot dpkg-deb -Zxz --build debian . + cd "${ROOT}" + mv build/package/mita/arm64/mita_${VERSION}_arm64.deb release/ + cd release + sha256sum mita_${VERSION}_arm64.deb > mita_${VERSION}_arm64.deb.sha256.txt fi # Build RPM installation packages. @@ -301,57 +305,57 @@ rpm: rpm-client-amd64 rpm-client-arm64 rpm-server-amd64 rpm-server-arm64 # Build RPM client amd64 installation package. .PHONY: rpm-client-amd64 rpm-client-amd64: client-linux-amd64 - if [ ! -z $$(command -v rpmbuild) ]; then\ - rm -rf build/package/mieru/amd64/rpm/mieru;\ - cp release/linux/amd64/mieru build/package/mieru/amd64/rpm/;\ - cd build/package/mieru/amd64/rpm;\ - rpmbuild -bb --target x86_64 --build-in-place --define "_topdir $$(pwd)" mieru.spec;\ - cd "${ROOT}";\ - mv build/package/mieru/amd64/rpm/RPMS/x86_64/mieru-${VERSION}-1.x86_64.rpm release/;\ - cd release;\ - sha256sum mieru-${VERSION}-1.x86_64.rpm > mieru-${VERSION}-1.x86_64.rpm.sha256.txt;\ + if [ ! -z $$(command -v rpmbuild) ]; then + rm -rf build/package/mieru/amd64/rpm/mieru + cp release/linux/amd64/mieru build/package/mieru/amd64/rpm/ + cd build/package/mieru/amd64/rpm + rpmbuild -bb --target x86_64 --build-in-place --define "_topdir $$(pwd)" mieru.spec + cd "${ROOT}" + mv build/package/mieru/amd64/rpm/RPMS/x86_64/mieru-${VERSION}-1.x86_64.rpm release/ + cd release + sha256sum mieru-${VERSION}-1.x86_64.rpm > mieru-${VERSION}-1.x86_64.rpm.sha256.txt fi # Build RPM client arm64 installation package. .PHONY: rpm-client-arm64 rpm-client-arm64: client-linux-arm64 - if [ ! -z $$(command -v rpmbuild) ]; then\ - rm -rf build/package/mieru/arm64/rpm/mieru;\ - cp release/linux/arm64/mieru build/package/mieru/arm64/rpm/;\ - cd build/package/mieru/arm64/rpm;\ - rpmbuild -bb --target aarch64 --build-in-place --define "_topdir $$(pwd)" mieru.spec;\ - cd "${ROOT}";\ - mv build/package/mieru/arm64/rpm/RPMS/aarch64/mieru-${VERSION}-1.aarch64.rpm release/;\ - cd release;\ - sha256sum mieru-${VERSION}-1.aarch64.rpm > mieru-${VERSION}-1.aarch64.rpm.sha256.txt;\ + if [ ! -z $$(command -v rpmbuild) ]; then + rm -rf build/package/mieru/arm64/rpm/mieru + cp release/linux/arm64/mieru build/package/mieru/arm64/rpm/ + cd build/package/mieru/arm64/rpm + rpmbuild -bb --target aarch64 --build-in-place --define "_topdir $$(pwd)" mieru.spec + cd "${ROOT}" + mv build/package/mieru/arm64/rpm/RPMS/aarch64/mieru-${VERSION}-1.aarch64.rpm release/ + cd release + sha256sum mieru-${VERSION}-1.aarch64.rpm > mieru-${VERSION}-1.aarch64.rpm.sha256.txt fi # Build RPM server amd64 installation package. .PHONY: rpm-server-amd64 rpm-server-amd64: server-linux-amd64 - if [ ! -z $$(command -v rpmbuild) ]; then\ - rm -rf build/package/mita/amd64/rpm/mita;\ - cp release/linux/amd64/mita build/package/mita/amd64/rpm/;\ - cd build/package/mita/amd64/rpm;\ - rpmbuild -bb --target x86_64 --build-in-place --define "_topdir $$(pwd)" mita.spec;\ - cd "${ROOT}";\ - mv build/package/mita/amd64/rpm/RPMS/x86_64/mita-${VERSION}-1.x86_64.rpm release/;\ - cd release;\ - sha256sum mita-${VERSION}-1.x86_64.rpm > mita-${VERSION}-1.x86_64.rpm.sha256.txt;\ + if [ ! -z $$(command -v rpmbuild) ]; then + rm -rf build/package/mita/amd64/rpm/mita + cp release/linux/amd64/mita build/package/mita/amd64/rpm/ + cd build/package/mita/amd64/rpm + rpmbuild -bb --target x86_64 --build-in-place --define "_topdir $$(pwd)" mita.spec + cd "${ROOT}" + mv build/package/mita/amd64/rpm/RPMS/x86_64/mita-${VERSION}-1.x86_64.rpm release/ + cd release + sha256sum mita-${VERSION}-1.x86_64.rpm > mita-${VERSION}-1.x86_64.rpm.sha256.txt fi # Build RPM server arm64 installation package. .PHONY: rpm-server-arm64 rpm-server-arm64: server-linux-arm64 - if [ ! -z $$(command -v rpmbuild) ]; then\ - rm -rf build/package/mita/arm64/rpm/mita;\ - cp release/linux/arm64/mita build/package/mita/arm64/rpm/;\ - cd build/package/mita/arm64/rpm;\ - rpmbuild -bb --target aarch64 --build-in-place --define "_topdir $$(pwd)" mita.spec;\ - cd "${ROOT}";\ - mv build/package/mita/arm64/rpm/RPMS/aarch64/mita-${VERSION}-1.aarch64.rpm release/;\ - cd release;\ - sha256sum mita-${VERSION}-1.aarch64.rpm > mita-${VERSION}-1.aarch64.rpm.sha256.txt;\ + if [ ! -z $$(command -v rpmbuild) ]; then + rm -rf build/package/mita/arm64/rpm/mita + cp release/linux/arm64/mita build/package/mita/arm64/rpm/ + cd build/package/mita/arm64/rpm + rpmbuild -bb --target aarch64 --build-in-place --define "_topdir $$(pwd)" mita.spec + cd "${ROOT}" + mv build/package/mita/arm64/rpm/RPMS/aarch64/mita-${VERSION}-1.aarch64.rpm release/ + cd release + sha256sum mita-${VERSION}-1.aarch64.rpm > mita-${VERSION}-1.aarch64.rpm.sha256.txt fi # Build binaries used in integration tests. @@ -370,18 +374,18 @@ test-binary: # Build a docker image to run integration tests. .PHONY: test-container test-container: test-binary - if [ ! -z $$(command -v docker) ]; then\ - docker build -t mieru_httptest:${SHORT_SHA} -f test/deploy/httptest/Dockerfile .;\ - docker build -t mieru_proxychain:${SHORT_SHA} -f test/deploy/proxychain/Dockerfile .;\ + if [ ! -z $$(command -v docker) ]; then + docker build -t mieru_httptest:${SHORT_SHA} -f test/deploy/httptest/Dockerfile . + docker build -t mieru_proxychain:${SHORT_SHA} -f test/deploy/proxychain/Dockerfile . fi rm -f exampleapiclient mieru mieru2 mita mita2 httpserver sockshttpclient socksudpclient udpserver # Run docker integration tests. .PHONY: run-container-test run-container-test: test-container - if [ ! -z $$(command -v docker) ]; then\ - docker run mieru_httptest:${SHORT_SHA};\ - docker run mieru_proxychain:${SHORT_SHA};\ + if [ ! -z $$(command -v docker) ]; then + docker run mieru_httptest:${SHORT_SHA} + docker run mieru_proxychain:${SHORT_SHA} fi # Generate source code from protobuf. @@ -396,19 +400,19 @@ endif .PHONY: protobuf protobuf: # Download location: https://github.com/protocolbuffers/protobuf/releases - if [ ! -x "${ROOT}/tools/build/protoc" ]; then\ - curl -o "${ROOT}/tools/build/protoc" https://raw.githubusercontent.com/enfein/buildtools/main/protoc/22.3/linux_${PROTOC_ARCH}/bin/protoc;\ - chmod 755 "${ROOT}/tools/build/protoc";\ + if [ ! -x "${ROOT}/tools/build/protoc" ]; then + curl -o "${ROOT}/tools/build/protoc" https://raw.githubusercontent.com/enfein/buildtools/main/protoc/22.3/linux_${PROTOC_ARCH}/bin/protoc + chmod 755 "${ROOT}/tools/build/protoc" fi # Download location: https://github.com/protocolbuffers/protobuf-go/releases - if [ ! -x "${ROOT}/tools/build/protoc-gen-go" ]; then\ - curl -o "${ROOT}/tools/build/protoc-gen-go" https://raw.githubusercontent.com/enfein/buildtools/main/protoc-gen-go/1.30.0/linux_${PROTOC_ARCH}/protoc-gen-go;\ - chmod 755 "${ROOT}/tools/build/protoc-gen-go";\ + if [ ! -x "${ROOT}/tools/build/protoc-gen-go" ]; then + curl -o "${ROOT}/tools/build/protoc-gen-go" https://raw.githubusercontent.com/enfein/buildtools/main/protoc-gen-go/1.30.0/linux_${PROTOC_ARCH}/protoc-gen-go + chmod 755 "${ROOT}/tools/build/protoc-gen-go" fi # Download location: https://github.com/grpc/grpc-go/releases - if [ ! -x "${ROOT}/tools/build/protoc-gen-go-grpc" ]; then\ - curl -o "${ROOT}/tools/build/protoc-gen-go-grpc" https://raw.githubusercontent.com/enfein/buildtools/main/protoc-gen-go-grpc/1.3.0/linux_${PROTOC_ARCH}/protoc-gen-go-grpc;\ - chmod 755 "${ROOT}/tools/build/protoc-gen-go-grpc";\ + if [ ! -x "${ROOT}/tools/build/protoc-gen-go-grpc" ]; then + curl -o "${ROOT}/tools/build/protoc-gen-go-grpc" https://raw.githubusercontent.com/enfein/buildtools/main/protoc-gen-go-grpc/1.3.0/linux_${PROTOC_ARCH}/protoc-gen-go-grpc + chmod 755 "${ROOT}/tools/build/protoc-gen-go-grpc" fi PATH=${PATH}:"${ROOT}/tools/build" ${ROOT}/tools/build/protoc -I="${ROOT}/pkg" \ @@ -434,8 +438,11 @@ protobuf: # Package source code. .PHONY: src src: clean - cd ..; tar --exclude="${PROJECT_NAME}/.git" -zcvf source.tar.gz "${PROJECT_NAME}"; zip -r source.zip "${PROJECT_NAME}" -x \*.git\* - mkdir -p release; mv ../source.tar.gz release; mv ../source.zip release + (cd ..; tar --exclude="${PROJECT_NAME}/.git" -zcvf source.tar.gz "${PROJECT_NAME}") + (cd ..; zip -r source.zip "${PROJECT_NAME}" -x "${PROJECT_NAME}/.git/*") + mkdir -p release + mv ../source.tar.gz release + mv ../source.zip release # Clean all the files outside the git repository. .PHONY: clean diff --git a/mieru/apis/client/client.go b/mieru/apis/client/client.go index a4246ca0fd..f66e752330 100644 --- a/mieru/apis/client/client.go +++ b/mieru/apis/client/client.go @@ -145,7 +145,9 @@ func (mc *mieruClient) DialContext(ctx context.Context, addr net.Addr) (net.Conn return nil, fmt.Errorf("unsupported network type %s", netAddrSpec.Network()) } req.DstAddr = netAddrSpec.AddrSpec - return internal.NewEarlyConn(conn, req), nil + earlyConn := internal.NewEarlyConn(conn) + earlyConn.SetRequest(req) + return earlyConn, nil } _, err = internal.PostDialHandshake(conn, netAddrSpec) return conn, err diff --git a/mieru/apis/internal/early_conn.go b/mieru/apis/internal/early_conn.go index 068031353f..6903df9a89 100644 --- a/mieru/apis/internal/early_conn.go +++ b/mieru/apis/internal/early_conn.go @@ -18,43 +18,61 @@ package internal import ( "bytes" "fmt" - "io" "net" "sync" + "sync/atomic" "time" "github.com/enfein/mieru/v3/apis/constant" "github.com/enfein/mieru/v3/apis/model" ) -// Socks5Writer is an interface for socks5 objects that can be written to a writer. -type Socks5Writer interface { - WriteToSocks5(writer io.Writer) error -} - -var _ Socks5Writer = (*model.Request)(nil) -var _ Socks5Writer = (*model.Response)(nil) - // EarlyConn implements net.Conn interface. // When the Write() method on the net.Conn is called for the first time, -// it performs the initial handshake and writes the request to the server. +// it performs the initial handshake and writes +// the request or response to the peer. type EarlyConn struct { net.Conn - object Socks5Writer + request atomic.Pointer[model.Request] + response atomic.Pointer[model.Response] + peerResponse atomic.Pointer[model.Response] handshakeOnce sync.Once handshakeErr error handshaked chan struct{} } // NewEarlyConn creates a new EarlyConn. -func NewEarlyConn(conn net.Conn, object Socks5Writer) *EarlyConn { +func NewEarlyConn(conn net.Conn) *EarlyConn { return &EarlyConn{ Conn: conn, - object: object, handshaked: make(chan struct{}), } } +func (c *EarlyConn) SetRequest(request *model.Request) { + if c.response.Load() != nil { + panic("can't set request when response is not empty") + } + select { + case <-c.handshaked: + panic("can't set request when handshake already done") + default: + c.request.Store(request) + } +} + +func (c *EarlyConn) SetResponse(response *model.Response) { + if c.request.Load() != nil { + panic("can't set response when request is not empty") + } + select { + case <-c.handshaked: + panic("can't set response when handshake already done") + default: + c.response.Store(response) + } +} + // Read will block until a message is received or an error occurs. // It waits for the handshake to complete. func (c *EarlyConn) Read(b []byte) (n int, err error) { @@ -103,10 +121,26 @@ func (c *EarlyConn) NeedHandshake() bool { } } +// PeerResponse returns the response from the peer. +// It returns nil if the handshake has not been performed yet. +func (c *EarlyConn) PeerResponse() *model.Response { + return c.peerResponse.Load() +} + func (c *EarlyConn) doHandshakeAndWrite(b []byte) error { var buf bytes.Buffer - if err := c.object.WriteToSocks5(&buf); err != nil { - return err + request := c.request.Load() + response := c.response.Load() + if request != nil { + if err := request.WriteToSocks5(&buf); err != nil { + return err + } + } else if response != nil { + if err := response.WriteToSocks5(&buf); err != nil { + return err + } + } else { + return fmt.Errorf("no request or response set") } if len(b) > 0 { buf.Write(b) @@ -116,8 +150,7 @@ func (c *EarlyConn) doHandshakeAndWrite(b []byte) error { } // If this is a request, read the response. - switch c.object.(type) { - case *model.Request: + if request != nil { c.Conn.SetReadDeadline(time.Now().Add(10 * time.Second)) defer c.Conn.SetReadDeadline(time.Time{}) @@ -128,11 +161,7 @@ func (c *EarlyConn) doHandshakeAndWrite(b []byte) error { if resp.Reply != constant.Socks5ReplySuccess { return fmt.Errorf("server returned socks5 error code %d", resp.Reply) } - case *model.Response: - // No need to read anything. - default: - return fmt.Errorf("unsupported object type for EarlyConn: %T", c.object) + c.peerResponse.Store(&resp) } - return nil } diff --git a/mieru/apis/internal/early_conn_test.go b/mieru/apis/internal/early_conn_test.go index b8b76a3777..8f64268912 100644 --- a/mieru/apis/internal/early_conn_test.go +++ b/mieru/apis/internal/early_conn_test.go @@ -78,7 +78,8 @@ func TestEarlyConn_Request(t *testing.T) { Port: 80, }, } - conn := internal.NewEarlyConn(clientConn, req) + conn := internal.NewEarlyConn(clientConn) + conn.SetRequest(req) defer conn.Close() // The first write triggers the handshake. @@ -143,7 +144,8 @@ func TestEarlyConn_Response(t *testing.T) { Port: 1080, }, } - conn := internal.NewEarlyConn(clientConn, resp) + conn := internal.NewEarlyConn(clientConn) + conn.SetResponse(resp) defer conn.Close() // The first write triggers sending the response. diff --git a/mihomo/hub/executor/executor.go b/mihomo/hub/executor/executor.go index 041e6fc36b..44f7f14418 100644 --- a/mihomo/hub/executor/executor.go +++ b/mihomo/hub/executor/executor.go @@ -39,7 +39,7 @@ import ( "github.com/metacubex/mihomo/listener/inner" "github.com/metacubex/mihomo/listener/tproxy" "github.com/metacubex/mihomo/log" - "github.com/metacubex/mihomo/ntp" + "github.com/metacubex/mihomo/ntp/ntp" "github.com/metacubex/mihomo/tunnel" ) diff --git a/mihomo/ntp/service.go b/mihomo/ntp/ntp/service.go similarity index 80% rename from mihomo/ntp/service.go rename to mihomo/ntp/ntp/service.go index 8473df6a8f..8f27d0aac1 100644 --- a/mihomo/ntp/service.go +++ b/mihomo/ntp/ntp/service.go @@ -3,18 +3,18 @@ package ntp import ( "context" "sync" - "sync/atomic" "time" "github.com/metacubex/mihomo/component/dialer" "github.com/metacubex/mihomo/component/proxydialer" "github.com/metacubex/mihomo/log" + mihomoNtp "github.com/metacubex/mihomo/ntp" M "github.com/metacubex/sing/common/metadata" "github.com/metacubex/sing/common/ntp" ) -var globalSrv atomic.Pointer[Service] +var globalSrv *Service var globalMu sync.Mutex type Service struct { @@ -23,21 +23,20 @@ type Service struct { ticker *time.Ticker ctx context.Context cancel context.CancelFunc - offset atomic.Int64 // [time.Duration] syncSystemTime bool } func ReCreateNTPService(server string, interval time.Duration, dialerProxy string, syncSystemTime bool) { globalMu.Lock() defer globalMu.Unlock() - if service := globalSrv.Swap(nil); service != nil { - service.Stop() + if globalSrv != nil { + globalSrv.Stop() } if server == "" || interval <= 0 { return } ctx, cancel := context.WithCancel(context.Background()) - service := &Service{ + globalSrv = &Service{ server: M.ParseSocksaddr(server), dialer: proxydialer.NewByNameSingDialer(dialerProxy, dialer.NewDialer()), ticker: time.NewTicker(interval * time.Minute), @@ -45,8 +44,7 @@ func ReCreateNTPService(server string, interval time.Duration, dialerProxy strin cancel: cancel, syncSystemTime: syncSystemTime, } - service.Start() - globalSrv.Store(service) + globalSrv.Start() } func (srv *Service) Start() { @@ -59,10 +57,6 @@ func (srv *Service) Stop() { srv.cancel() } -func (srv *Service) Offset() time.Duration { - return time.Duration(srv.offset.Load()) -} - func (srv *Service) update() error { var response *ntp.Response var err error @@ -80,7 +74,7 @@ func (srv *Service) update() error { } else if offset < time.Duration(0) { log.Infoln("System clock is behind NTP time by %s", -offset) } - srv.offset.Store(int64(offset)) + mihomoNtp.SetOffset(offset) if srv.syncSystemTime { timeNow := response.Time syncErr := setSystemTime(timeNow) @@ -97,7 +91,7 @@ func (srv *Service) update() error { } func (srv *Service) loopUpdate() { - defer srv.offset.Store(0) + defer mihomoNtp.SetOffset(0) defer srv.ticker.Stop() for { err := srv.update() @@ -111,13 +105,3 @@ func (srv *Service) loopUpdate() { } } } - -func Now() time.Time { - now := time.Now() - if service := globalSrv.Load(); service != nil { - if offset := service.Offset(); offset.Abs() > 0 { - now = now.Add(offset) - } - } - return now -} diff --git a/mihomo/ntp/time_stub.go b/mihomo/ntp/ntp/time_stub.go similarity index 100% rename from mihomo/ntp/time_stub.go rename to mihomo/ntp/ntp/time_stub.go diff --git a/mihomo/ntp/time_unix.go b/mihomo/ntp/ntp/time_unix.go similarity index 100% rename from mihomo/ntp/time_unix.go rename to mihomo/ntp/ntp/time_unix.go diff --git a/mihomo/ntp/time_windows.go b/mihomo/ntp/ntp/time_windows.go similarity index 100% rename from mihomo/ntp/time_windows.go rename to mihomo/ntp/ntp/time_windows.go diff --git a/mihomo/ntp/time.go b/mihomo/ntp/time.go new file mode 100644 index 0000000000..e69be02564 --- /dev/null +++ b/mihomo/ntp/time.go @@ -0,0 +1,28 @@ +// Package ntp provide time.Now +// +// DON'T import other package in mihomo to keep minimal internal dependencies +package ntp + +import ( + "time" + + "sync/atomic" +) + +var _offset atomic.Int64 // [time.Duration] + +func SetOffset(offset time.Duration) { + _offset.Store(int64(offset)) +} + +func GetOffset() time.Duration { + return time.Duration(_offset.Load()) +} + +func Now() time.Time { + now := time.Now() + if offset := GetOffset(); offset != 0 { + now = now.Add(offset) + } + return now +} diff --git a/mihomo/rules/provider/mrs_converter.go b/mihomo/rules/provider/mrs_converter.go index dbbe51cb29..edc24e7eea 100644 --- a/mihomo/rules/provider/mrs_converter.go +++ b/mihomo/rules/provider/mrs_converter.go @@ -34,7 +34,7 @@ func ConvertToMrs(buf []byte, behavior P.RuleBehavior, format P.RuleFormat, w io } var encoder *zstd.Encoder - encoder, err = zstd.NewWriter(w, zstd.WithEncoderLevel(zstd.SpeedBestCompression)) + encoder, err = zstd.NewWriter(w) if err != nil { return err } diff --git a/openclash/.github/workflows/update_third_party_resources.yml b/openclash/.github/workflows/update_third_party_resources.yml deleted file mode 100644 index ef5813ff44..0000000000 --- a/openclash/.github/workflows/update_third_party_resources.yml +++ /dev/null @@ -1,213 +0,0 @@ -name: Update Third-Party Resources - -on: - schedule: - - cron: '30 0 */3 * *' - workflow_dispatch: - -jobs: - update-resources: - runs-on: ubuntu-latest - steps: - - name: Checkout Repository - uses: actions/checkout@v4 - with: - fetch-depth: 1 - ref: dev - - - name: Set up environment - run: | - sudo apt-get update - sudo apt-get -y install curl wget unzip git jq coreutils - - - name: Set file paths - run: | - echo "CHNR_PATH=luci-app-openclash/root/etc/openclash/china_ip_route.ipset" >> $GITHUB_ENV - echo "CHNR6_PATH=luci-app-openclash/root/etc/openclash/china_ip6_route.ipset" >> $GITHUB_ENV - echo "YACD_PATH=luci-app-openclash/root/usr/share/openclash/ui/yacd" >> $GITHUB_ENV - echo "ZASHBOARD_PATH=luci-app-openclash/root/usr/share/openclash/ui/zashboard" >> $GITHUB_ENV - echo "METACUBEXD_PATH=luci-app-openclash/root/usr/share/openclash/ui/metacubexd" >> $GITHUB_ENV - echo "GEOSITE_PATH=luci-app-openclash/root/etc/openclash/GeoSite.dat" >> $GITHUB_ENV - echo "COUNTRY_MMDB_PATH=luci-app-openclash/root/etc/openclash/Country.mmdb" >> $GITHUB_ENV - - - name: Update China IP Route Files - id: chnr - run: | - mkdir -p tmp - echo "Downloading China IP Route files..." - curl -sSL https://ispip.clang.cn/all_cn.txt -o tmp/china_ip_route.ipset - mkdir -p $(dirname $CHNR_PATH) - UPDATED=0 - if [ -f "$CHNR_PATH" ]; then - if ! cmp -s tmp/china_ip_route.ipset "$CHNR_PATH"; then - echo "China IP Route list has been updated, replacing old version." - cp tmp/china_ip_route.ipset "$CHNR_PATH" - UPDATED=1 - else - echo "China IP Route list is up to date." - fi - else - echo "China IP Route list file doesn't exist, creating it." - cp tmp/china_ip_route.ipset "$CHNR_PATH" - UPDATED=1 - fi - curl -sSL https://ispip.clang.cn/all_cn_ipv6.txt -o tmp/china_ip6_route.ipset - mkdir -p $(dirname $CHNR6_PATH) - UPDATED6=0 - if [ -f "$CHNR6_PATH" ]; then - if ! cmp -s tmp/china_ip6_route.ipset "$CHNR6_PATH"; then - echo "China IP6 Route list has been updated, replacing old version." - cp tmp/china_ip6_route.ipset "$CHNR6_PATH" - UPDATED6=1 - else - echo "China IP6 Route list is up to date." - fi - else - echo "China IP6 Route list file doesn't exist, creating it." - cp tmp/china_ip6_route.ipset "$CHNR6_PATH" - UPDATED6=1 - fi - echo "updated=$UPDATED" >> $GITHUB_OUTPUT - echo "updated6=$UPDATED6" >> $GITHUB_OUTPUT - - - name: Update MetaCubeXD UI - id: metacubexd - run: | - echo "Downloading latest MetaCubeXD UI zip from gh-pages branch..." - mkdir -p tmp/metacubexd_zip - curl -sSL https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip -o tmp/metacubexd.zip - unzip -q -o tmp/metacubexd.zip -d tmp/metacubexd_zip - METACUBEXD_UNZIP_PATH="tmp/metacubexd_zip/metacubexd-gh-pages" - mkdir -p "$METACUBEXD_PATH" - UPDATED=0 - if [ -d "$METACUBEXD_PATH" ]; then - if diff -qr "$METACUBEXD_UNZIP_PATH"/ "$METACUBEXD_PATH"/ >/dev/null; then - echo "MetaCubeXD UI is up to date." - else - echo "MetaCubeXD UI has been updated, replacing old version." - rm -rf "$METACUBEXD_PATH"/* - cp -rf "$METACUBEXD_UNZIP_PATH"/* "$METACUBEXD_PATH" - UPDATED=1 - fi - else - echo "MetaCubeXD UI directory doesn't exist, creating it." - mkdir -p "$METACUBEXD_PATH" - cp -rf "$METACUBEXD_UNZIP_PATH"/* "$METACUBEXD_PATH" - UPDATED=1 - fi - echo "updated=$UPDATED" >> $GITHUB_OUTPUT - - - name: Update Yacd UI - id: yacd - run: | - echo "Downloading latest Yacd UI zip from gh-pages branch..." - mkdir -p tmp/yacd_zip - curl -sSL https://github.com/MetaCubeX/Yacd-meta/archive/refs/heads/gh-pages.zip -o tmp/yacd.zip - unzip -q -o tmp/yacd.zip -d tmp/yacd_zip - YACD_UNZIP_PATH="tmp/yacd_zip/Yacd-meta-gh-pages" - mkdir -p "$YACD_PATH" - UPDATED=0 - if [ -d "$YACD_PATH" ]; then - if diff -qr "$YACD_UNZIP_PATH"/ "$YACD_PATH"/ >/dev/null; then - echo "Yacd UI is up to date." - else - echo "Yacd UI has been updated, replacing old version." - rm -rf "$YACD_PATH"/* - cp -rf "$YACD_UNZIP_PATH"/* "$YACD_PATH" - UPDATED=1 - fi - else - echo "Yacd UI directory doesn't exist, creating it." - mkdir -p "$YACD_PATH" - cp -rf "$YACD_UNZIP_PATH"/* "$YACD_PATH" - UPDATED=1 - fi - echo "updated=$UPDATED" >> $GITHUB_OUTPUT - - - name: Update ZashBoard UI - id: zashboard - run: | - echo "Downloading latest ZashBoard UI release zip..." - mkdir -p tmp/zashboard_zip - curl -sSL https://github.com/Zephyruso/zashboard/releases/latest/download/dist-cdn-fonts.zip -o tmp/zashboard.zip - unzip -q -o tmp/zashboard.zip -d tmp/zashboard_zip - mkdir -p "$ZASHBOARD_PATH" - UPDATED=0 - if [ -d "$ZASHBOARD_PATH" ]; then - if diff -qr tmp/zashboard_zip/dist/ "$ZASHBOARD_PATH"/ >/dev/null; then - echo "ZashBoard UI is up to date." - else - echo "ZashBoard UI has been updated, replacing old version." - rm -rf "$ZASHBOARD_PATH"/* - cp -rf tmp/zashboard_zip/dist/* "$ZASHBOARD_PATH" - UPDATED=1 - fi - else - echo "ZashBoard UI directory doesn't exist, creating it." - mkdir -p "$ZASHBOARD_PATH" - cp -rf tmp/zashboard_zip/dist/* "$ZASHBOARD_PATH" - UPDATED=1 - fi - echo "updated=$UPDATED" >> $GITHUB_OUTPUT - - - name: Update GeoSite files - id: geo - run: | - RULES_RELEASE=$(curl -s https://api.github.com/repos/Loyalsoldier/v2ray-rules-dat/releases/latest | jq -r '.tag_name') - echo "Latest v2ray-rules-dat version: $RULES_RELEASE" - curl -sSL "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/download/${RULES_RELEASE}/geosite.dat" -o tmp/GeoSite.dat - mkdir -p $(dirname "$GEOSITE_PATH") - UPDATED_GEOSITE=0 - if [ -f "$GEOSITE_PATH" ]; then - if ! cmp -s tmp/GeoSite.dat "$GEOSITE_PATH"; then - echo "GeoSite.dat has been updated, replacing old version." - cp tmp/GeoSite.dat "$GEOSITE_PATH" - UPDATED_GEOSITE=1 - else - echo "GeoSite.dat is up to date." - fi - else - echo "GeoSite.dat file doesn't exist, creating it." - cp tmp/GeoSite.dat "$GEOSITE_PATH" - UPDATED_GEOSITE=1 - fi - echo "geosite=$UPDATED_GEOSITE" >> $GITHUB_OUTPUT - - - name: Update Country.mmdb - id: mmdb - run: | - curl -sSL "https://github.com/alecthw/mmdb_china_ip_list/releases/latest/download/Country-lite.mmdb" -o tmp/Country.mmdb - mkdir -p $(dirname "$COUNTRY_MMDB_PATH") - UPDATED=0 - if [ -f "$COUNTRY_MMDB_PATH" ]; then - if ! cmp -s tmp/Country.mmdb "$COUNTRY_MMDB_PATH"; then - echo "Country.mmdb has been updated, replacing old version." - cp tmp/Country.mmdb "$COUNTRY_MMDB_PATH" - UPDATED=1 - else - echo "Country.mmdb is up to date." - fi - else - echo "Country.mmdb file doesn't exist, creating it." - cp tmp/Country.mmdb "$COUNTRY_MMDB_PATH" - UPDATED=1 - fi - echo "updated=$UPDATED" >> $GITHUB_OUTPUT - - - name: Commit changes - if: | - steps.chnr.outputs.updated == '1' || - steps.chnr.outputs.updated6 == '1' || - steps.metacubexd.outputs.updated == '1' || - steps.yacd.outputs.updated == '1' || - steps.zashboard.outputs.updated == '1' || - steps.geo.outputs.geosite == '1' || - steps.mmdb.outputs.updated == '1' - run: | - rm -rf tmp - git config user.name 'github-actions[bot]' - git config user.email 'github-actions[bot]@users.noreply.github.com' - git add . - UPDATE_MSG="Chore: update third-party resources" - git commit -m "$UPDATE_MSG" - git push \ No newline at end of file diff --git a/openclash/luci-app-openclash/Makefile b/openclash/luci-app-openclash/Makefile index 2ce9d306af..33fe329b5a 100644 --- a/openclash/luci-app-openclash/Makefile +++ b/openclash/luci-app-openclash/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-openclash -PKG_VERSION:=0.47.022 +PKG_VERSION:=0.47.024 PKG_MAINTAINER:=vernesong PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/openclash/luci-app-openclash/root/etc/init.d/openclash b/openclash/luci-app-openclash/root/etc/init.d/openclash index 7ddc4c4d06..d34bc27014 100644 --- a/openclash/luci-app-openclash/root/etc/init.d/openclash +++ b/openclash/luci-app-openclash/root/etc/init.d/openclash @@ -651,10 +651,21 @@ do_run_file() } >/dev/null 2>&1 +container() { + [ -f "/proc/1/cgroup" ] && grep -qiE "(docker|containerd|lxc|podman|kubepods|container)" /proc/1/cgroup 2>/dev/null && return 0 + [ -f "/proc/1/environ" ] && grep -qiE "(docker|containerd|lxc|podman|kubepods|container)" /proc/1/environ 2>/dev/null && return 0 + [ -f "/.dockerenv" ] && return 0 + env | grep -qiE "(docker|kubernetes|container)" && return 0 + return 1 +} + check_mod() { - modprobe $1 - if [ -z "$(lsmod |awk '{print $1}' |grep ^$1$)" ]; then + if container; then + return 0 + fi + modprobe $1 2>/dev/null + if [ $? -ne 0 ]; then LOG_OUT "Error:【$1】module not found, please check your system depends and try again!" start_fail fi diff --git a/openwrt-passwall/.github/workflows/Auto compile with openwrt sdk.yml b/openwrt-passwall/.github/workflows/Auto compile with openwrt sdk.yml index 1e75322cc8..eb003e12b6 100644 --- a/openwrt-passwall/.github/workflows/Auto compile with openwrt sdk.yml +++ b/openwrt-passwall/.github/workflows/Auto compile with openwrt sdk.yml @@ -137,9 +137,6 @@ jobs: rm -rf temp_resp git clone -b master --single-branch https://github.com/openwrt/packages.git temp_resp - cd temp_resp - git checkout 2b99cd7d7637da0f152da378994f699aaf0dd44d - cd .. echo "update golang version" rm -rf feeds/packages/lang/golang cp -r temp_resp/lang/golang feeds/packages/lang @@ -147,6 +144,11 @@ jobs: rm -rf feeds/packages/lang/rust cp -r temp_resp/lang/rust feeds/packages/lang rm -rf temp_resp + + echo "update patch-kernel.sh" + git clone -b main --single-branch https://github.com/openwrt/openwrt.git temp_resp + cp -f temp_resp/scripts/patch-kernel.sh scripts/ + rm -rf temp_resp echo "Patch application completed" #--------------------------------------end_patches-------------------------------------------- @@ -324,9 +326,6 @@ jobs: rm -rf temp_resp git clone -b master --single-branch https://github.com/openwrt/packages.git temp_resp - cd temp_resp - git checkout 2b99cd7d7637da0f152da378994f699aaf0dd44d - cd .. echo "update golang version" rm -rf feeds/packages/lang/golang cp -r temp_resp/lang/golang feeds/packages/lang @@ -335,6 +334,10 @@ jobs: cp -r temp_resp/lang/rust feeds/packages/lang rm -rf temp_resp + git clone -b main --single-branch https://github.com/openwrt/openwrt.git temp_resp + cp -f temp_resp/scripts/patch-kernel.sh scripts/ + rm -rf temp_resp + echo "fixed rust host build error" sed -i 's/--set=llvm\.download-ci-llvm=false/--set=llvm.download-ci-llvm=true/' feeds/packages/lang/rust/Makefile grep -q -- '--ci false \\' feeds/packages/lang/rust/Makefile || sed -i '/x\.py \\/a \ --ci false \\' feeds/packages/lang/rust/Makefile diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua index 39a105abac..433ed33569 100644 --- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua +++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua @@ -29,7 +29,6 @@ o = s:option(DynamicList, "chnroute_url", translate("China IPs(chnroute) Update o:depends("geo2rule", false) o:value("https://fastly.jsdelivr.net/gh/gaoyifan/china-operator-ip@ip-lists/china.txt", translate("gaoyifan/china-operator-ip/china")) o:value("https://ispip.clang.cn/all_cn.txt", translate("Clang.CN")) -o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang.CN.CIDR")) o:value("https://fastly.jsdelivr.net/gh/soffchen/GeoIP2-CN@release/CN-ip-cidr.txt", translate("soffchen/GeoIP2-CN")) o:value("https://fastly.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us/GeoIP2-CN")) o:value("https://fastly.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/ChinaMax/ChinaMax_IP_No_IPv6.txt", translate("ios_rule_script/ChinaMax_IP_No_IPv6")) diff --git a/openwrt-passwall2/.github/workflows/Auto compile with openwrt sdk.yml b/openwrt-passwall2/.github/workflows/Auto compile with openwrt sdk.yml index c77f5d5bfe..5174b487f4 100644 --- a/openwrt-passwall2/.github/workflows/Auto compile with openwrt sdk.yml +++ b/openwrt-passwall2/.github/workflows/Auto compile with openwrt sdk.yml @@ -136,9 +136,6 @@ jobs: rm -rf temp_resp git clone -b master --single-branch https://github.com/openwrt/packages.git temp_resp - cd temp_resp - git checkout 2b99cd7d7637da0f152da378994f699aaf0dd44d - cd .. echo "update golang version" rm -rf feeds/packages/lang/golang cp -r temp_resp/lang/golang feeds/packages/lang @@ -147,6 +144,11 @@ jobs: cp -r temp_resp/lang/rust feeds/packages/lang rm -rf temp_resp + echo "update patch-kernel.sh" + git clone -b main --single-branch https://github.com/openwrt/openwrt.git temp_resp + cp -f temp_resp/scripts/patch-kernel.sh scripts/ + rm -rf temp_resp + echo "Patch application completed" #--------------------------------------end_patches-------------------------------------------- @@ -323,9 +325,6 @@ jobs: rm -rf temp_resp git clone -b master --single-branch https://github.com/openwrt/packages.git temp_resp - cd temp_resp - git checkout 2b99cd7d7637da0f152da378994f699aaf0dd44d - cd .. echo "update golang version" rm -rf feeds/packages/lang/golang cp -r temp_resp/lang/golang feeds/packages/lang @@ -333,6 +332,11 @@ jobs: rm -rf feeds/packages/lang/rust cp -r temp_resp/lang/rust feeds/packages/lang rm -rf temp_resp + + echo "update patch-kernel.sh" + git clone -b main --single-branch https://github.com/openwrt/openwrt.git temp_resp + cp -f temp_resp/scripts/patch-kernel.sh scripts/ + rm -rf temp_resp echo "fixed rust host build error" sed -i 's/--set=llvm\.download-ci-llvm=false/--set=llvm.download-ci-llvm=true/' feeds/packages/lang/rust/Makefile diff --git a/sing-box/clients/android/version.properties b/sing-box/clients/android/version.properties index 2d89cd6009..78cfee0f59 100644 --- a/sing-box/clients/android/version.properties +++ b/sing-box/clients/android/version.properties @@ -1,3 +1,3 @@ -VERSION_CODE=584 -VERSION_NAME=1.12.11 +VERSION_CODE=587 +VERSION_NAME=1.12.12 GO_VERSION=go1.25.3 diff --git a/sing-box/docs/changelog.md b/sing-box/docs/changelog.md index 7d97f09595..2eb606d37e 100644 --- a/sing-box/docs/changelog.md +++ b/sing-box/docs/changelog.md @@ -2,6 +2,14 @@ icon: material/alert-decagram --- +#### 1.13.0-alpha.27 + +* Fixes and improvements + +#### 1.12.12 + +* Fixes and improvements + #### 1.13.0-alpha.26 * Update quic-go to v0.55.0 diff --git a/sing-box/go.mod b/sing-box/go.mod index e8c5661967..8476e1570d 100644 --- a/sing-box/go.mod +++ b/sing-box/go.mod @@ -29,7 +29,7 @@ require ( github.com/sagernet/gomobile v0.1.8 github.com/sagernet/gvisor v0.0.0-20250811.0-sing-box-mod.1 github.com/sagernet/quic-go v0.55.0-sing-box-mod.2 - github.com/sagernet/sing v0.8.0-beta.5 + github.com/sagernet/sing v0.8.0-beta.6 github.com/sagernet/sing-mux v0.3.3 github.com/sagernet/sing-quic v0.6.0-beta.4 github.com/sagernet/sing-shadowsocks v0.2.8 diff --git a/sing-box/go.sum b/sing-box/go.sum index 0bc63e2ea4..f9ca8bb1bb 100644 --- a/sing-box/go.sum +++ b/sing-box/go.sum @@ -163,8 +163,8 @@ github.com/sagernet/nftables v0.3.0-beta.4/go.mod h1:OQXAjvjNGGFxaTgVCSTRIhYB5/l github.com/sagernet/quic-go v0.55.0-sing-box-mod.2 h1:I79gW4Xl5ciVARHfnp122lDAMhC0AwUCU765Q8Kxdfo= github.com/sagernet/quic-go v0.55.0-sing-box-mod.2/go.mod h1:IE9naq7Kekj0rPAdWc0GLW1ENR7gAOQV9VRTDlKN8Bk= github.com/sagernet/sing v0.6.9/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= -github.com/sagernet/sing v0.8.0-beta.5 h1:Cm4CnLQGNyG5Jl1U9pKWAjFUcbjchGGqn1xeXzfI5kw= -github.com/sagernet/sing v0.8.0-beta.5/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= +github.com/sagernet/sing v0.8.0-beta.6 h1:GXv1j1xWHihx6ptyOXh0yp4jUqJoNjCqD8d+AI9rnLU= +github.com/sagernet/sing v0.8.0-beta.6/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak= github.com/sagernet/sing-mux v0.3.3 h1:YFgt9plMWzH994BMZLmyKL37PdIVaIilwP0Jg+EcLfw= github.com/sagernet/sing-mux v0.3.3/go.mod h1:pht8iFY4c9Xltj7rhVd208npkNaeCxzyXCgulDPLUDA= github.com/sagernet/sing-quic v0.6.0-beta.4 h1:2k/+Xrv/pjl7AYC7LD9tcB7y1lIgw04LjJjqTI8q5Xk= diff --git a/small/gn/Makefile b/small/gn/Makefile index 311aead233..aabc09600a 100644 --- a/small/gn/Makefile +++ b/small/gn/Makefile @@ -38,7 +38,8 @@ endef define Host/Configure $(PYTHON) $(HOST_BUILD_DIR)/build/gen.py \ - --no-last-commit-position + --no-last-commit-position \ + --allow-warnings endef define Host/Compile diff --git a/small/luci-app-openclash/Makefile b/small/luci-app-openclash/Makefile index 2ce9d306af..33fe329b5a 100644 --- a/small/luci-app-openclash/Makefile +++ b/small/luci-app-openclash/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-openclash -PKG_VERSION:=0.47.022 +PKG_VERSION:=0.47.024 PKG_MAINTAINER:=vernesong PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/small/luci-app-openclash/root/etc/init.d/openclash b/small/luci-app-openclash/root/etc/init.d/openclash index 7ddc4c4d06..d34bc27014 100644 --- a/small/luci-app-openclash/root/etc/init.d/openclash +++ b/small/luci-app-openclash/root/etc/init.d/openclash @@ -651,10 +651,21 @@ do_run_file() } >/dev/null 2>&1 +container() { + [ -f "/proc/1/cgroup" ] && grep -qiE "(docker|containerd|lxc|podman|kubepods|container)" /proc/1/cgroup 2>/dev/null && return 0 + [ -f "/proc/1/environ" ] && grep -qiE "(docker|containerd|lxc|podman|kubepods|container)" /proc/1/environ 2>/dev/null && return 0 + [ -f "/.dockerenv" ] && return 0 + env | grep -qiE "(docker|kubernetes|container)" && return 0 + return 1 +} + check_mod() { - modprobe $1 - if [ -z "$(lsmod |awk '{print $1}' |grep ^$1$)" ]; then + if container; then + return 0 + fi + modprobe $1 2>/dev/null + if [ $? -ne 0 ]; then LOG_OUT "Error:【$1】module not found, please check your system depends and try again!" start_fail fi diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua index 39a105abac..433ed33569 100644 --- a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua +++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/rule.lua @@ -29,7 +29,6 @@ o = s:option(DynamicList, "chnroute_url", translate("China IPs(chnroute) Update o:depends("geo2rule", false) o:value("https://fastly.jsdelivr.net/gh/gaoyifan/china-operator-ip@ip-lists/china.txt", translate("gaoyifan/china-operator-ip/china")) o:value("https://ispip.clang.cn/all_cn.txt", translate("Clang.CN")) -o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang.CN.CIDR")) o:value("https://fastly.jsdelivr.net/gh/soffchen/GeoIP2-CN@release/CN-ip-cidr.txt", translate("soffchen/GeoIP2-CN")) o:value("https://fastly.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/CN-ip-cidr.txt", translate("Hackl0us/GeoIP2-CN")) o:value("https://fastly.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/ChinaMax/ChinaMax_IP_No_IPv6.txt", translate("ios_rule_script/ChinaMax_IP_No_IPv6")) diff --git a/small/sing-box/Makefile b/small/sing-box/Makefile index 293b2d8add..e4474414d8 100644 --- a/small/sing-box/Makefile +++ b/small/sing-box/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=sing-box -PKG_VERSION:=1.12.11 +PKG_VERSION:=1.12.12 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/SagerNet/sing-box/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=14f5f106812b9e0c0c91432c1a6dd0b42d8bcd2fcf3789e4ceba0892967ac41e +PKG_HASH:=f08add81eab7e4d6091195179bb39fa3f64dbb0326feaa022994566b702d1245 PKG_LICENSE:=GPL-3.0-or-later PKG_LICENSE_FILES:=LICENSE diff --git a/small/v2ray-geodata/Makefile b/small/v2ray-geodata/Makefile index 91eb90b04d..58761e6035 100644 --- a/small/v2ray-geodata/Makefile +++ b/small/v2ray-geodata/Makefile @@ -21,16 +21,16 @@ define Download/geoip HASH:=c23ac8343e9796f8cc8b670c3aeb6df6d03d4e8914437a409961477f6b226098 endef -GEOSITE_VER:=20251026063608 +GEOSITE_VER:=20251027071824 GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER) define Download/geosite URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/ URL_FILE:=dlc.dat FILE:=$(GEOSITE_FILE) - HASH:=a8d4a7ae3b3fb1ece40eb3e5af8618fc7b86fe6f51eeda6efa08a390ed7de16c + HASH:=e31ccd49c4c2b28e83a8124f764f711fa4d444da71c8f74d14958ae991b1e1bb endef -GEOSITE_IRAN_VER:=202510200041 +GEOSITE_IRAN_VER:=202510270042 GEOSITE_IRAN_FILE:=iran.dat.$(GEOSITE_IRAN_VER) define Download/geosite-ir URL:=https://github.com/bootmortis/iran-hosted-domains/releases/download/$(GEOSITE_IRAN_VER)/ diff --git a/yt-dlp/yt_dlp/extractor/urplay.py b/yt-dlp/yt_dlp/extractor/urplay.py index 79bb8a8055..a0ac2a0bc6 100644 --- a/yt-dlp/yt_dlp/extractor/urplay.py +++ b/yt-dlp/yt_dlp/extractor/urplay.py @@ -8,6 +8,7 @@ from ..utils import ( try_get, unified_timestamp, ) +from ..utils.traversal import traverse_obj class URPlayIE(InfoExtractor): @@ -25,7 +26,7 @@ class URPlayIE(InfoExtractor): 'upload_date': '20171214', 'series': 'UR Samtiden - Livet, universum och rymdens märkliga musik', 'duration': 2269, - 'categories': ['Vetenskap & teknik'], + 'categories': ['Kultur & historia'], 'tags': ['Kritiskt tänkande', 'Vetenskap', 'Vetenskaplig verksamhet'], 'episode': 'Om vetenskap, kritiskt tänkande och motstånd', 'age_limit': 15, @@ -78,7 +79,7 @@ class URPlayIE(InfoExtractor): webpage = self._download_webpage(url, video_id) urplayer_data = self._search_nextjs_data(webpage, video_id, fatal=False) or {} if urplayer_data: - urplayer_data = try_get(urplayer_data, lambda x: x['props']['pageProps']['program'], dict) + urplayer_data = traverse_obj(urplayer_data, ('props', 'pageProps', 'productData', {dict})) if not urplayer_data: raise ExtractorError('Unable to parse __NEXT_DATA__') else: