fix: resolve compilation errors and dependency conflicts
- Fix 'Path' macro parsing issue in service-kit-macros - Resolve 'reedline'/'sqlite' dependency conflict in service-kit - Consolidate workspace configuration and lockfile - Fix 'data-persistence-service' compilation errors - Update docker-compose and dev configurations
This commit is contained in:
parent
0c975bb8f1
commit
eee1eb8b3f
6
.tiltignore
Normal file
6
.tiltignore
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# Ignore Rust source changes to prevent Tilt from rebuilding/restarting containers.
|
||||||
|
# We rely on cargo-watch inside the container for hot reload (via volume mounts).
|
||||||
|
**/*.rs
|
||||||
|
**/Cargo.toml
|
||||||
|
**/Cargo.lock
|
||||||
|
|
||||||
1570
services/data-persistence-service/Cargo.lock → Cargo.lock
generated
1570
services/data-persistence-service/Cargo.lock → Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
33
Cargo.toml
Normal file
33
Cargo.toml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
[workspace]
|
||||||
|
resolver = "2"
|
||||||
|
members = [
|
||||||
|
"services/alphavantage-provider-service",
|
||||||
|
"services/api-gateway",
|
||||||
|
"services/common-contracts",
|
||||||
|
"services/data-persistence-service",
|
||||||
|
"services/finnhub-provider-service",
|
||||||
|
"services/mock-provider-service",
|
||||||
|
"services/report-generator-service",
|
||||||
|
"services/tushare-provider-service",
|
||||||
|
"services/workflow-orchestrator-service",
|
||||||
|
"services/yfinance-provider-service",
|
||||||
|
"crates/workflow-context",
|
||||||
|
]
|
||||||
|
|
||||||
|
[workspace.package]
|
||||||
|
edition = "2024"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Lv, Qi <lvsoft@gmail.com>"]
|
||||||
|
license = "MIT"
|
||||||
|
repository = "https://github.com/lvsoft/Fundamental_Analysis"
|
||||||
|
homepage = "https://github.com/lvsoft/Fundamental_Analysis"
|
||||||
|
readme = "README.md"
|
||||||
|
|
||||||
|
[workspace.dependencies]
|
||||||
|
rmcp = "0.9.1"
|
||||||
|
rmcp-macros = "0.9.1"
|
||||||
|
|
||||||
|
[patch.crates-io]
|
||||||
|
service_kit = { path = "ref/service_kit_mirror/service_kit/service_kit" }
|
||||||
|
service-kit-macros = { path = "ref/service_kit_mirror/service_kit/service_kit/service-kit-macros" }
|
||||||
|
|
||||||
840
crates/workflow-context/Cargo.lock
generated
840
crates/workflow-context/Cargo.lock
generated
@ -1,840 +0,0 @@
|
|||||||
# This file is automatically @generated by Cargo.
|
|
||||||
# It is not intended for manual editing.
|
|
||||||
version = 4
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "aho-corasick"
|
|
||||||
version = "1.1.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
|
|
||||||
dependencies = [
|
|
||||||
"memchr",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "anyhow"
|
|
||||||
version = "1.0.100"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bitflags"
|
|
||||||
version = "2.10.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "block-buffer"
|
|
||||||
version = "0.10.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bstr"
|
|
||||||
version = "1.12.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab"
|
|
||||||
dependencies = [
|
|
||||||
"memchr",
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cc"
|
|
||||||
version = "1.2.47"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07"
|
|
||||||
dependencies = [
|
|
||||||
"find-msvc-tools",
|
|
||||||
"jobserver",
|
|
||||||
"libc",
|
|
||||||
"shlex",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cfg-if"
|
|
||||||
version = "1.0.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cpufeatures"
|
|
||||||
version = "0.2.17"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crypto-common"
|
|
||||||
version = "0.1.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array",
|
|
||||||
"typenum",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "digest"
|
|
||||||
version = "0.10.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
|
|
||||||
dependencies = [
|
|
||||||
"block-buffer",
|
|
||||||
"crypto-common",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "displaydoc"
|
|
||||||
version = "0.2.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "errno"
|
|
||||||
version = "0.3.14"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"windows-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "fastrand"
|
|
||||||
version = "2.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "find-msvc-tools"
|
|
||||||
version = "0.1.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "form_urlencoded"
|
|
||||||
version = "1.2.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
|
|
||||||
dependencies = [
|
|
||||||
"percent-encoding",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "generic-array"
|
|
||||||
version = "0.14.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
|
|
||||||
dependencies = [
|
|
||||||
"typenum",
|
|
||||||
"version_check",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "getrandom"
|
|
||||||
version = "0.3.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"libc",
|
|
||||||
"r-efi",
|
|
||||||
"wasip2",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "git2"
|
|
||||||
version = "0.18.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "232e6a7bfe35766bf715e55a88b39a700596c0ccfd88cd3680b4cdb40d66ef70"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags",
|
|
||||||
"libc",
|
|
||||||
"libgit2-sys",
|
|
||||||
"log",
|
|
||||||
"openssl-probe",
|
|
||||||
"openssl-sys",
|
|
||||||
"url",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "globset"
|
|
||||||
version = "0.4.18"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3"
|
|
||||||
dependencies = [
|
|
||||||
"aho-corasick",
|
|
||||||
"bstr",
|
|
||||||
"log",
|
|
||||||
"regex-automata",
|
|
||||||
"regex-syntax",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hex"
|
|
||||||
version = "0.4.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_collections"
|
|
||||||
version = "2.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"potential_utf",
|
|
||||||
"yoke",
|
|
||||||
"zerofrom",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_locale_core"
|
|
||||||
version = "2.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"litemap",
|
|
||||||
"tinystr",
|
|
||||||
"writeable",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_normalizer"
|
|
||||||
version = "2.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
|
|
||||||
dependencies = [
|
|
||||||
"icu_collections",
|
|
||||||
"icu_normalizer_data",
|
|
||||||
"icu_properties",
|
|
||||||
"icu_provider",
|
|
||||||
"smallvec",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_normalizer_data"
|
|
||||||
version = "2.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_properties"
|
|
||||||
version = "2.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99"
|
|
||||||
dependencies = [
|
|
||||||
"icu_collections",
|
|
||||||
"icu_locale_core",
|
|
||||||
"icu_properties_data",
|
|
||||||
"icu_provider",
|
|
||||||
"zerotrie",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_properties_data"
|
|
||||||
version = "2.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_provider"
|
|
||||||
version = "2.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"icu_locale_core",
|
|
||||||
"writeable",
|
|
||||||
"yoke",
|
|
||||||
"zerofrom",
|
|
||||||
"zerotrie",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "idna"
|
|
||||||
version = "1.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
|
|
||||||
dependencies = [
|
|
||||||
"idna_adapter",
|
|
||||||
"smallvec",
|
|
||||||
"utf8_iter",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "idna_adapter"
|
|
||||||
version = "1.2.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
|
|
||||||
dependencies = [
|
|
||||||
"icu_normalizer",
|
|
||||||
"icu_properties",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "itoa"
|
|
||||||
version = "1.0.15"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "jobserver"
|
|
||||||
version = "0.1.34"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
|
|
||||||
dependencies = [
|
|
||||||
"getrandom",
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "libc"
|
|
||||||
version = "0.2.177"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "libgit2-sys"
|
|
||||||
version = "0.16.2+1.7.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ee4126d8b4ee5c9d9ea891dd875cfdc1e9d0950437179104b183d7d8a74d24e8"
|
|
||||||
dependencies = [
|
|
||||||
"cc",
|
|
||||||
"libc",
|
|
||||||
"libssh2-sys",
|
|
||||||
"libz-sys",
|
|
||||||
"openssl-sys",
|
|
||||||
"pkg-config",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "libssh2-sys"
|
|
||||||
version = "0.3.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "220e4f05ad4a218192533b300327f5150e809b54c4ec83b5a1d91833601811b9"
|
|
||||||
dependencies = [
|
|
||||||
"cc",
|
|
||||||
"libc",
|
|
||||||
"libz-sys",
|
|
||||||
"openssl-sys",
|
|
||||||
"pkg-config",
|
|
||||||
"vcpkg",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "libz-sys"
|
|
||||||
version = "1.1.23"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "15d118bbf3771060e7311cc7bb0545b01d08a8b4a7de949198dec1fa0ca1c0f7"
|
|
||||||
dependencies = [
|
|
||||||
"cc",
|
|
||||||
"libc",
|
|
||||||
"pkg-config",
|
|
||||||
"vcpkg",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "linux-raw-sys"
|
|
||||||
version = "0.11.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "litemap"
|
|
||||||
version = "0.8.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "log"
|
|
||||||
version = "0.4.28"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "memchr"
|
|
||||||
version = "2.7.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "once_cell"
|
|
||||||
version = "1.21.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "openssl-probe"
|
|
||||||
version = "0.1.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "openssl-src"
|
|
||||||
version = "300.5.4+3.5.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a507b3792995dae9b0df8a1c1e3771e8418b7c2d9f0baeba32e6fe8b06c7cb72"
|
|
||||||
dependencies = [
|
|
||||||
"cc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "openssl-sys"
|
|
||||||
version = "0.9.111"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321"
|
|
||||||
dependencies = [
|
|
||||||
"cc",
|
|
||||||
"libc",
|
|
||||||
"openssl-src",
|
|
||||||
"pkg-config",
|
|
||||||
"vcpkg",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "percent-encoding"
|
|
||||||
version = "2.3.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pkg-config"
|
|
||||||
version = "0.3.32"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "potential_utf"
|
|
||||||
version = "0.1.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
|
|
||||||
dependencies = [
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "proc-macro2"
|
|
||||||
version = "1.0.103"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
|
|
||||||
dependencies = [
|
|
||||||
"unicode-ident",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "quote"
|
|
||||||
version = "1.0.42"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "r-efi"
|
|
||||||
version = "5.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "regex"
|
|
||||||
version = "1.12.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
|
|
||||||
dependencies = [
|
|
||||||
"aho-corasick",
|
|
||||||
"memchr",
|
|
||||||
"regex-automata",
|
|
||||||
"regex-syntax",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "regex-automata"
|
|
||||||
version = "0.4.13"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
|
|
||||||
dependencies = [
|
|
||||||
"aho-corasick",
|
|
||||||
"memchr",
|
|
||||||
"regex-syntax",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "regex-syntax"
|
|
||||||
version = "0.8.8"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rustix"
|
|
||||||
version = "1.1.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags",
|
|
||||||
"errno",
|
|
||||||
"libc",
|
|
||||||
"linux-raw-sys",
|
|
||||||
"windows-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ryu"
|
|
||||||
version = "1.0.20"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "same-file"
|
|
||||||
version = "1.0.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
|
|
||||||
dependencies = [
|
|
||||||
"winapi-util",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "serde"
|
|
||||||
version = "1.0.228"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
|
||||||
dependencies = [
|
|
||||||
"serde_core",
|
|
||||||
"serde_derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "serde_core"
|
|
||||||
version = "1.0.228"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
|
|
||||||
dependencies = [
|
|
||||||
"serde_derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "serde_derive"
|
|
||||||
version = "1.0.228"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "serde_json"
|
|
||||||
version = "1.0.145"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
|
|
||||||
dependencies = [
|
|
||||||
"itoa",
|
|
||||||
"memchr",
|
|
||||||
"ryu",
|
|
||||||
"serde",
|
|
||||||
"serde_core",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "sha2"
|
|
||||||
version = "0.10.9"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"cpufeatures",
|
|
||||||
"digest",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "shlex"
|
|
||||||
version = "1.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "smallvec"
|
|
||||||
version = "1.15.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "stable_deref_trait"
|
|
||||||
version = "1.2.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "syn"
|
|
||||||
version = "2.0.111"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"unicode-ident",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "synstructure"
|
|
||||||
version = "0.13.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tempfile"
|
|
||||||
version = "3.23.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
|
|
||||||
dependencies = [
|
|
||||||
"fastrand",
|
|
||||||
"getrandom",
|
|
||||||
"once_cell",
|
|
||||||
"rustix",
|
|
||||||
"windows-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "thiserror"
|
|
||||||
version = "1.0.69"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
|
|
||||||
dependencies = [
|
|
||||||
"thiserror-impl",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "thiserror-impl"
|
|
||||||
version = "1.0.69"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tinystr"
|
|
||||||
version = "0.8.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "typenum"
|
|
||||||
version = "1.19.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "unicode-ident"
|
|
||||||
version = "1.0.22"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "url"
|
|
||||||
version = "2.5.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
|
|
||||||
dependencies = [
|
|
||||||
"form_urlencoded",
|
|
||||||
"idna",
|
|
||||||
"percent-encoding",
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "utf8_iter"
|
|
||||||
version = "1.0.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "vcpkg"
|
|
||||||
version = "0.2.15"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "version_check"
|
|
||||||
version = "0.9.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "walkdir"
|
|
||||||
version = "2.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
|
|
||||||
dependencies = [
|
|
||||||
"same-file",
|
|
||||||
"winapi-util",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wasip2"
|
|
||||||
version = "1.0.1+wasi-0.2.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
|
|
||||||
dependencies = [
|
|
||||||
"wit-bindgen",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "winapi-util"
|
|
||||||
version = "0.1.11"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
|
||||||
dependencies = [
|
|
||||||
"windows-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows-link"
|
|
||||||
version = "0.2.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows-sys"
|
|
||||||
version = "0.61.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
|
|
||||||
dependencies = [
|
|
||||||
"windows-link",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wit-bindgen"
|
|
||||||
version = "0.46.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "workflow-context"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"anyhow",
|
|
||||||
"git2",
|
|
||||||
"globset",
|
|
||||||
"hex",
|
|
||||||
"regex",
|
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
"sha2",
|
|
||||||
"tempfile",
|
|
||||||
"thiserror",
|
|
||||||
"walkdir",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "writeable"
|
|
||||||
version = "0.6.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "yoke"
|
|
||||||
version = "0.8.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
|
|
||||||
dependencies = [
|
|
||||||
"stable_deref_trait",
|
|
||||||
"yoke-derive",
|
|
||||||
"zerofrom",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "yoke-derive"
|
|
||||||
version = "0.8.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
"synstructure",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerofrom"
|
|
||||||
version = "0.1.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
|
|
||||||
dependencies = [
|
|
||||||
"zerofrom-derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerofrom-derive"
|
|
||||||
version = "0.1.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
"synstructure",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerotrie"
|
|
||||||
version = "0.2.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"yoke",
|
|
||||||
"zerofrom",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerovec"
|
|
||||||
version = "0.11.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
|
|
||||||
dependencies = [
|
|
||||||
"yoke",
|
|
||||||
"zerofrom",
|
|
||||||
"zerovec-derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerovec-derive"
|
|
||||||
version = "0.11.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
@ -28,9 +28,10 @@ services:
|
|||||||
data-persistence-service:
|
data-persistence-service:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: services/data-persistence-service/Dockerfile
|
dockerfile: docker/Dockerfile.dev
|
||||||
# Override build context to ensure ignored files are included if needed, or rely on .dockerignore
|
|
||||||
container_name: data-persistence-service
|
container_name: data-persistence-service
|
||||||
|
working_dir: /app/services/data-persistence-service
|
||||||
|
command: ["cargo", "watch", "-x", "run --bin data-persistence-service-server"]
|
||||||
environment:
|
environment:
|
||||||
HOST: 0.0.0.0
|
HOST: 0.0.0.0
|
||||||
PORT: 3000
|
PORT: 3000
|
||||||
@ -46,9 +47,10 @@ services:
|
|||||||
interval: 5s
|
interval: 5s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 10
|
retries: 10
|
||||||
# If you prefer live-reload or local code mount, consider switching to a dev Dockerfile.
|
volumes:
|
||||||
# volumes:
|
- ./:/app
|
||||||
# - ./:/workspace
|
- cargo-target:/app/target
|
||||||
|
- cargo-cache:/usr/local/cargo
|
||||||
networks:
|
networks:
|
||||||
- app-network
|
- app-network
|
||||||
|
|
||||||
@ -86,9 +88,11 @@ services:
|
|||||||
api-gateway:
|
api-gateway:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: services/api-gateway/Dockerfile
|
dockerfile: docker/Dockerfile.dev
|
||||||
container_name: api-gateway
|
container_name: api-gateway
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
working_dir: /app/services/api-gateway
|
||||||
|
command: ["cargo", "watch", "-x", "run --bin api-gateway"]
|
||||||
ports:
|
ports:
|
||||||
- "4000:4000"
|
- "4000:4000"
|
||||||
environment:
|
environment:
|
||||||
@ -120,14 +124,23 @@ services:
|
|||||||
interval: 5s
|
interval: 5s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 12
|
retries: 12
|
||||||
|
volumes:
|
||||||
|
- ./:/app
|
||||||
|
- cargo-target:/app/target
|
||||||
|
- cargo-cache:/usr/local/cargo
|
||||||
|
|
||||||
alphavantage-provider-service:
|
alphavantage-provider-service:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: services/alphavantage-provider-service/Dockerfile
|
dockerfile: docker/Dockerfile.dev
|
||||||
container_name: alphavantage-provider-service
|
container_name: alphavantage-provider-service
|
||||||
|
working_dir: /app/services/alphavantage-provider-service
|
||||||
|
command: ["cargo", "watch", "-x", "run"]
|
||||||
volumes:
|
volumes:
|
||||||
- workflow_data:/mnt/workflow_data
|
- workflow_data:/mnt/workflow_data
|
||||||
|
- ./:/app
|
||||||
|
- cargo-target:/app/target
|
||||||
|
- cargo-cache:/usr/local/cargo
|
||||||
environment:
|
environment:
|
||||||
SERVER_PORT: 8000
|
SERVER_PORT: 8000
|
||||||
NATS_ADDR: nats://nats:4222
|
NATS_ADDR: nats://nats:4222
|
||||||
@ -151,10 +164,15 @@ services:
|
|||||||
tushare-provider-service:
|
tushare-provider-service:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: services/tushare-provider-service/Dockerfile
|
dockerfile: docker/Dockerfile.dev
|
||||||
container_name: tushare-provider-service
|
container_name: tushare-provider-service
|
||||||
|
working_dir: /app/services/tushare-provider-service
|
||||||
|
command: ["cargo", "watch", "-x", "run"]
|
||||||
volumes:
|
volumes:
|
||||||
- workflow_data:/mnt/workflow_data
|
- workflow_data:/mnt/workflow_data
|
||||||
|
- ./:/app
|
||||||
|
- cargo-target:/app/target
|
||||||
|
- cargo-cache:/usr/local/cargo
|
||||||
environment:
|
environment:
|
||||||
SERVER_PORT: 8001
|
SERVER_PORT: 8001
|
||||||
NATS_ADDR: nats://nats:4222
|
NATS_ADDR: nats://nats:4222
|
||||||
@ -179,10 +197,15 @@ services:
|
|||||||
finnhub-provider-service:
|
finnhub-provider-service:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: services/finnhub-provider-service/Dockerfile
|
dockerfile: docker/Dockerfile.dev
|
||||||
container_name: finnhub-provider-service
|
container_name: finnhub-provider-service
|
||||||
|
working_dir: /app/services/finnhub-provider-service
|
||||||
|
command: ["cargo", "watch", "-x", "run"]
|
||||||
volumes:
|
volumes:
|
||||||
- workflow_data:/mnt/workflow_data
|
- workflow_data:/mnt/workflow_data
|
||||||
|
- ./:/app
|
||||||
|
- cargo-target:/app/target
|
||||||
|
- cargo-cache:/usr/local/cargo
|
||||||
environment:
|
environment:
|
||||||
SERVER_PORT: 8002
|
SERVER_PORT: 8002
|
||||||
NATS_ADDR: nats://nats:4222
|
NATS_ADDR: nats://nats:4222
|
||||||
@ -207,10 +230,15 @@ services:
|
|||||||
yfinance-provider-service:
|
yfinance-provider-service:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: services/yfinance-provider-service/Dockerfile
|
dockerfile: docker/Dockerfile.dev
|
||||||
container_name: yfinance-provider-service
|
container_name: yfinance-provider-service
|
||||||
|
working_dir: /app/services/yfinance-provider-service
|
||||||
|
command: ["cargo", "watch", "-x", "run"]
|
||||||
volumes:
|
volumes:
|
||||||
- workflow_data:/mnt/workflow_data
|
- workflow_data:/mnt/workflow_data
|
||||||
|
- ./:/app
|
||||||
|
- cargo-target:/app/target
|
||||||
|
- cargo-cache:/usr/local/cargo
|
||||||
environment:
|
environment:
|
||||||
SERVER_PORT: 8003
|
SERVER_PORT: 8003
|
||||||
NATS_ADDR: nats://nats:4222
|
NATS_ADDR: nats://nats:4222
|
||||||
@ -237,10 +265,15 @@ services:
|
|||||||
report-generator-service:
|
report-generator-service:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: services/report-generator-service/Dockerfile
|
dockerfile: docker/Dockerfile.dev
|
||||||
container_name: report-generator-service
|
container_name: report-generator-service
|
||||||
|
working_dir: /app/services/report-generator-service
|
||||||
|
command: ["cargo", "watch", "-x", "run --bin report-generator-service"]
|
||||||
volumes:
|
volumes:
|
||||||
- workflow_data:/mnt/workflow_data
|
- workflow_data:/mnt/workflow_data
|
||||||
|
- ./:/app
|
||||||
|
- cargo-target:/app/target
|
||||||
|
- cargo-cache:/usr/local/cargo
|
||||||
environment:
|
environment:
|
||||||
SERVER_PORT: 8004
|
SERVER_PORT: 8004
|
||||||
NATS_ADDR: nats://nats:4222
|
NATS_ADDR: nats://nats:4222
|
||||||
@ -262,10 +295,15 @@ services:
|
|||||||
workflow-orchestrator-service:
|
workflow-orchestrator-service:
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: services/workflow-orchestrator-service/Dockerfile
|
dockerfile: docker/Dockerfile.dev
|
||||||
container_name: workflow-orchestrator-service
|
container_name: workflow-orchestrator-service
|
||||||
|
working_dir: /app/services/workflow-orchestrator-service
|
||||||
|
command: ["cargo", "watch", "-x", "run --bin workflow-orchestrator-service"]
|
||||||
volumes:
|
volumes:
|
||||||
- workflow_data:/mnt/workflow_data
|
- workflow_data:/mnt/workflow_data
|
||||||
|
- ./:/app
|
||||||
|
- cargo-target:/app/target
|
||||||
|
- cargo-cache:/usr/local/cargo
|
||||||
environment:
|
environment:
|
||||||
SERVER_PORT: 8005
|
SERVER_PORT: 8005
|
||||||
NATS_ADDR: nats://nats:4222
|
NATS_ADDR: nats://nats:4222
|
||||||
@ -293,8 +331,10 @@ volumes:
|
|||||||
pgdata:
|
pgdata:
|
||||||
frontend_node_modules:
|
frontend_node_modules:
|
||||||
nats_data:
|
nats_data:
|
||||||
|
cargo-target:
|
||||||
|
driver: local
|
||||||
|
cargo-cache:
|
||||||
|
driver: local
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
app-network:
|
app-network:
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
13
docker/Dockerfile.dev
Normal file
13
docker/Dockerfile.dev
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
FROM rust:1.90-bookworm
|
||||||
|
|
||||||
|
# Install cargo-watch for hot reload
|
||||||
|
RUN cargo install cargo-watch
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Create target and cache directories to ensure permissions
|
||||||
|
RUN mkdir -p /app/target && mkdir -p /usr/local/cargo
|
||||||
|
|
||||||
|
# Default command
|
||||||
|
CMD ["cargo", "watch", "-x", "run"]
|
||||||
|
|
||||||
131
docs/experiences/rust_microservice_workspace_dev_pattern.md
Normal file
131
docs/experiences/rust_microservice_workspace_dev_pattern.md
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
# Rust 微服务开发最佳实践:Workspace 与 Docker 高效协同
|
||||||
|
|
||||||
|
**日期**: 2025-11-29
|
||||||
|
**标签**: #Rust #Microservices #Docker #DevEx #Tilt #Workspace
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 背景与痛点
|
||||||
|
|
||||||
|
在采用 Rust 开发微服务架构时,我们面临着一个经典的**两难选择**:
|
||||||
|
|
||||||
|
### 方案 A:单一仓库 (Monorepo) + Workspace
|
||||||
|
* **优点**:所有服务共享依赖库版本(`Cargo.lock`),代码复用极其方便,一次编译所有公共库(`target` 共享)。
|
||||||
|
* **缺点**:在 Docker 容器化部署时,每次修改哪怕一行代码,都会导致 Docker Cache 失效,触发整个 Workspace 的重新编译。对于拥有数十个服务的系统,这简直是灾难。
|
||||||
|
|
||||||
|
### 方案 B:多仓库 (Polyrepo) 或 独立构建
|
||||||
|
* **优点**:服务间彻底隔离,互不影响。
|
||||||
|
* **缺点**:每个服务都要重新下载和编译一遍 `tokio`, `axum` 等几百个依赖。磁盘占用爆炸(每个服务 2GB+ target),编译时间爆炸(CPU 重复劳动)。
|
||||||
|
|
||||||
|
### 我们的目标
|
||||||
|
我们需要一种**两全其美**的方案:
|
||||||
|
1. **开发时 (Dev)**:享受 Workspace 的增量编译速度,改一行代码只需 2 秒重启。
|
||||||
|
2. **部署时 (Prod)**:享受容器的隔离性,且构建尽可能快。
|
||||||
|
3. **体验 (DevEx)**:自动化热重载 (Hot Reload),无需手动重启容器。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 解决方案:共享缓存挂载 + 容器内增量编译
|
||||||
|
|
||||||
|
核心思想是**放弃在 Docker 构建阶段进行编译**(针对开发环境),改为**在容器运行时利用挂载的宿主机缓存进行增量编译**。
|
||||||
|
|
||||||
|
### 2.1 关键技术点
|
||||||
|
|
||||||
|
1. **极简开发镜像 (`Dockerfile.dev`)**:
|
||||||
|
* 不再 `COPY` 源代码。
|
||||||
|
* 不再运行 `cargo build`。
|
||||||
|
* 只安装必要工具(如 `cargo-watch`)。
|
||||||
|
* 所有源码和依赖通过 Volume 挂载。
|
||||||
|
|
||||||
|
2. **共享编译缓存 (`cargo-target` Volume)**:
|
||||||
|
* 创建一个 Docker Volume(或挂载宿主机目录)专门存放 `/app/target`。
|
||||||
|
* 所有微服务容器**共享**这个 Volume。
|
||||||
|
* **效果**:服务 A 编译过的 `tokio`,服务 B 启动时直接复用,无需再次编译。
|
||||||
|
|
||||||
|
3. **Cargo Registry 缓存 (`cargo-cache` Volume)**:
|
||||||
|
* 挂载 `/usr/local/cargo`。
|
||||||
|
* **效果**:避免每次启动容器都要重新下载 crates.io 的索引和源码。
|
||||||
|
|
||||||
|
4. **Cargo Watch 热重载**:
|
||||||
|
* 容器启动命令为 `cargo watch -x "run --bin my-service"`。
|
||||||
|
* 配合 Docker Compose 的源码挂载,一旦宿主机修改代码,容器内立即触发增量编译并重启进程。
|
||||||
|
|
||||||
|
### 2.2 实施细节
|
||||||
|
|
||||||
|
#### Dockerfile.dev (通用开发镜像)
|
||||||
|
```dockerfile
|
||||||
|
FROM rust:1.90
|
||||||
|
# 安装热重载工具
|
||||||
|
RUN cargo install cargo-watch
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# 预创建挂载点,避免权限问题
|
||||||
|
RUN mkdir -p /app/target && mkdir -p /usr/local/cargo
|
||||||
|
|
||||||
|
# 默认命令:监听并运行
|
||||||
|
CMD ["cargo", "watch", "-x", "run"]
|
||||||
|
```
|
||||||
|
|
||||||
|
#### docker-compose.yml (编排配置)
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
api-gateway:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: docker/Dockerfile.dev
|
||||||
|
# 覆盖启动命令,指定运行的 binary
|
||||||
|
command: ["cargo", "watch", "-x", "run --bin api-gateway-server"]
|
||||||
|
volumes:
|
||||||
|
# 1. 挂载源码 (实时同步)
|
||||||
|
- .:/app
|
||||||
|
# 2. 挂载共享编译产物 (核心加速点!)
|
||||||
|
- cargo-target:/app/target
|
||||||
|
# 3. 挂载依赖库缓存
|
||||||
|
- cargo-cache:/usr/local/cargo
|
||||||
|
|
||||||
|
iam-service:
|
||||||
|
# ... 同样的配置,复用相同的 cargo-target
|
||||||
|
volumes:
|
||||||
|
- .:/app
|
||||||
|
- cargo-target:/app/target
|
||||||
|
- cargo-cache:/usr/local/cargo
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
cargo-target: # 这里的魔法在于所有容器共享同一个 target 目录
|
||||||
|
driver: local
|
||||||
|
cargo-cache:
|
||||||
|
driver: local
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 优势总结
|
||||||
|
|
||||||
|
| 指标 | 传统 Docker 构建 | 本方案 (共享挂载) |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| **首次启动时间** | 慢 (需编译所有) | 慢 (需编译所有,但只需一次) |
|
||||||
|
| **二次启动时间** | **极慢** (代码变动导致层失效,全量重编) | **极快** (复用 target,增量编译 < 5s) |
|
||||||
|
| **磁盘占用** | 高 (每个镜像都有 target) | **低** (所有服务共享一份 target) |
|
||||||
|
| **依赖冲突** | 严格 (Docker 构建会报错) | 宽松 (只要本地能跑,容器就能跑) |
|
||||||
|
| **开发体验** | 修改代码 -> 等待构建 -> 重启容器 | 修改代码 -> 自动热跟新 (Hot Reload) |
|
||||||
|
|
||||||
|
## 4. 注意事项与坑
|
||||||
|
|
||||||
|
1. **文件锁 (File Locking)**:
|
||||||
|
* Rust 的 Cargo 能够很好地处理并发编译锁。多个服务同时启动时,它们会排队等待编译公共依赖(如 `tokio`),而不会发生冲突损坏文件。
|
||||||
|
* **注意**: 如果宿主机也是 Linux 且挂载了宿主机的 `target` 目录,可能会因为 glibc 版本不同导致宿主机和容器内的 `cargo` 互相“打架”(指纹不一致导致频繁重编)。**建议使用独立的 Docker Volume (`cargo-target`) 而不是挂载宿主机 `target` 目录**,以此隔离宿主机环境和容器环境。
|
||||||
|
|
||||||
|
2. **权限问题**:
|
||||||
|
* Docker 容器内默认是 `root`,写入 Volume 的文件也是 `root` 权限。如果挂载的是宿主机目录,可能会导致宿主机用户无法清理 `target`。使用 Docker Volume 可以规避这个问题。
|
||||||
|
|
||||||
|
3. **生产环境构建**:
|
||||||
|
* 本方案**仅限于开发环境**。
|
||||||
|
* 生产环境 (`Dockerfile.prod`) 依然需要使用标准的 `COPY . .` + `cargo build --release` 流程,或者使用 `cargo-chef` 进行多阶段构建以减小镜像体积。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 结论
|
||||||
|
|
||||||
|
通过 **Docker Compose Volume 挂载** + **Cargo Watch** + **共享 Target 目录**,我们成功地在微服务架构下保留了 Monorepo 的开发效率。这是一套经过验证的、适合中大型 Rust 项目的高效开发模式。
|
||||||
|
|
||||||
86
ref/service_kit_mirror/service_kit/service_kit/Cargo.toml
Normal file
86
ref/service_kit_mirror/service_kit/service_kit/Cargo.toml
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
[package]
|
||||||
|
name = "service_kit"
|
||||||
|
version.workspace = true
|
||||||
|
edition = "2021"
|
||||||
|
authors = ["lvsoft"]
|
||||||
|
description = "A foundational toolkit for building high-performance, modular services in Rust."
|
||||||
|
license = "MIT OR Apache-2.0"
|
||||||
|
repository = "https://github.com/lvsoft/service_kit"
|
||||||
|
readme = "README.md"
|
||||||
|
links = "service_kit_v0_1_2"
|
||||||
|
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "forge-cli"
|
||||||
|
path = "src/main.rs"
|
||||||
|
required-features = ["cli-support"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
# proc-macro consumers and toolchain utilities
|
||||||
|
syn = { version = "2.0", features = ["full", "extra-traits"] }
|
||||||
|
quote = "1.0"
|
||||||
|
proc-macro2 = "1.0"
|
||||||
|
toml = "0.9"
|
||||||
|
service-kit-macros = { path = "service-kit-macros", optional = true }
|
||||||
|
|
||||||
|
# unified runtime deps (migrated from forge-core)
|
||||||
|
axum = { version = "0.8", features = ["json"], default-features = false }
|
||||||
|
once_cell = "1.19"
|
||||||
|
inventory = { version = "0.3", optional = true }
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
serde_json = "1.0"
|
||||||
|
serde_urlencoded = "0.7.1"
|
||||||
|
thiserror = "2.0.12"
|
||||||
|
utoipa = { version = "5.4.0", features = ["axum_extras", "macros", "uuid", "chrono"], optional = true }
|
||||||
|
schemars = { version = "1.0.4", features = ["derive", "chrono04"], default-features = true }
|
||||||
|
|
||||||
|
# Optional feature-gated deps
|
||||||
|
anyhow = { version = "1.0", optional = true }
|
||||||
|
clap = { version = "4.5", features = ["derive", "env"], optional = true }
|
||||||
|
walkdir = { version = "2.5", optional = true }
|
||||||
|
fs_extra = { version = "1.3", optional = true }
|
||||||
|
tokio = { version = "1.38.0", features = ["full"], optional = true }
|
||||||
|
# reedline = { version = "0.43.0", features = ["bashisms", "sqlite"], optional = true }
|
||||||
|
nu-ansi-term = { version = "0.50.0", optional = true }
|
||||||
|
oas = { version = "0.2.1", optional = true }
|
||||||
|
shlex = { version = "1.3.0", optional = true }
|
||||||
|
rmcp = { workspace = true, optional = true }
|
||||||
|
reqwest = { version = "0.12", features = ["json"], optional = true }
|
||||||
|
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
utoipa = { version = "5.4", features = ["axum_extras"] }
|
||||||
|
toml = "0.9"
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
# 目前build.rs只使用std库,如果将来需要额外依赖可以在这里添加
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["macros", "openapi"]
|
||||||
|
macros = ["dep:service-kit-macros"]
|
||||||
|
openapi = ["dep:utoipa", "dep:inventory"]
|
||||||
|
|
||||||
|
# 轻量 CLI 内核:仅包含构建 CLI 所需依赖(兼容 wasm)
|
||||||
|
cli-core = [
|
||||||
|
"dep:clap",
|
||||||
|
"dep:oas",
|
||||||
|
"dep:shlex",
|
||||||
|
]
|
||||||
|
|
||||||
|
# 原先的 cli-support(保留以兼容)
|
||||||
|
cli-support = ["dep:anyhow", "dep:clap", "dep:walkdir", "dep:fs_extra"]
|
||||||
|
|
||||||
|
# 完整的本地 API CLI(native):在 cli-core 基础上引入网络、终端与异步运行时
|
||||||
|
api-cli = [
|
||||||
|
"cli-core",
|
||||||
|
"dep:tokio",
|
||||||
|
# "dep:reedline",
|
||||||
|
"dep:nu-ansi-term",
|
||||||
|
"dep:reqwest",
|
||||||
|
]
|
||||||
|
|
||||||
|
# MCP 相关功能
|
||||||
|
mcp = ["dep:rmcp"]
|
||||||
File diff suppressed because it is too large
Load Diff
3696
services/alphavantage-provider-service/Cargo.lock
generated
3696
services/alphavantage-provider-service/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
3744
services/api-gateway/Cargo.lock
generated
3744
services/api-gateway/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
3659
services/common-contracts/Cargo.lock
generated
3659
services/common-contracts/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,8 @@ path = "src/bin/api-cli.rs"
|
|||||||
# required-features = ["service_kit/api-cli"]
|
# required-features = ["service_kit/api-cli"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
service_kit = { version = "0.1.2", default-features = true }
|
# service_kit = { version = "0.1.2", default-features = true }
|
||||||
|
service_kit = { path = "../../ref/service_kit_mirror/service_kit/service_kit", default-features = true }
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
rmcp = { version = "0.9.0", features = [
|
rmcp = { version = "0.9.0", features = [
|
||||||
"transport-streamable-http-server",
|
"transport-streamable-http-server",
|
||||||
@ -76,7 +77,3 @@ mcp = ["service_kit/mcp"]
|
|||||||
# api-cli = ["service_kit/api-cli"]
|
# api-cli = ["service_kit/api-cli"]
|
||||||
# full-data = []
|
# full-data = []
|
||||||
|
|
||||||
# --- For Local Development & Docker Build ---
|
|
||||||
[patch.crates-io]
|
|
||||||
service_kit = { path = "../../ref/service_kit_mirror/service_kit/service_kit" }
|
|
||||||
service-kit-macros = { path = "../../ref/service_kit_mirror/service_kit/service_kit/service-kit-macros" }
|
|
||||||
|
|||||||
@ -78,3 +78,4 @@ pub async fn get_provider_status(
|
|||||||
.map_err(AnyhowError::from)?;
|
.map_err(AnyhowError::from)?;
|
||||||
Ok(Json(status))
|
Ok(Json(status))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
3433
services/finnhub-provider-service/Cargo.lock
generated
3433
services/finnhub-provider-service/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
3432
services/mock-provider-service/Cargo.lock
generated
3432
services/mock-provider-service/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
4080
services/report-generator-service/Cargo.lock
generated
4080
services/report-generator-service/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
3464
services/tushare-provider-service/Cargo.lock
generated
3464
services/tushare-provider-service/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
3205
services/workflow-orchestrator-service/Cargo.lock
generated
3205
services/workflow-orchestrator-service/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
3484
services/yfinance-provider-service/Cargo.lock
generated
3484
services/yfinance-provider-service/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user