feat: implement build trigger system#1880
Conversation
Signed-off-by: allure <1550220889@qq.com>
|
@codex review |
|
Claude finished @genedna's task in 2m 46s —— View job Code Review Complete ✅I've completed a comprehensive review of the build trigger system implementation. This is a well-architected feature that successfully decouples build triggering from the pack layer. Here's my detailed analysis: 🎯 Overall AssessmentStrengths:
Areas for Improvement:
📋 Detailed Findings1. Code Quality ⭐⭐⭐⭐Positive:
Issues:
2. Security ⭐⭐⭐⭐⭐Positive:
No security issues identified. The authentication model properly protects all build trigger endpoints. 3. Performance ⭐⭐⭐⭐Positive:
Concerns:
4. Error Handling ⭐⭐⭐⭐Positive:
Issues:
5. Testing ⭐⭐Critical Gap: No unit or integration tests found for the build_trigger module. This is a significant concern for a new subsystem. Recommended test coverage:
Create tests for build trigger system → 6. Documentation ⭐⭐⭐⭐Positive:
Minor gaps:
🔍 Architecture ReviewThe implementation successfully achieves its goal of decoupling build triggers from the pack layer: Before: // Direct coupling in monorepo.rs
bellatrix.on_post_receive(req).awaitAfter: // Decoupled through event
BuildTriggerService::handle_git_push_event(storage, cache, bellatrix, event).awaitThe new architecture provides:
🎯 Priority RecommendationsHigh Priority:
Medium Priority: Low Priority: ✅ Approval StatusDespite the missing tests, this is a well-implemented feature with clean architecture and proper error handling. The code quality is high, and the security model is sound. Recommendation: ✅ Approve with suggestions The missing tests should be addressed before production deployment, but they don't block merging if the team plans to add them in a follow-up PR. The inline comments highlight specific improvements that would enhance robustness. Review completed • 6 inline comments • View all comments |
| ); | ||
| } | ||
| } | ||
| }); |
There was a problem hiding this comment.
Error Handling Concern: The build dispatch is spawned asynchronously (fire-and-forget), but errors are only logged and not tracked in the database. This makes it difficult to debug failed builds or understand why a trigger didn't result in a successful build.
Recommendation: Consider:
- Adding a
statusfield to the trigger record (e.g.,pending,dispatched,failed) - Updating the trigger record with dispatch status
- Storing dispatch errors in the database for debugging
This would provide better observability and help users understand build failures.
| pub cl_link: String, | ||
| #[serde(skip_serializing_if = "Option::is_none")] | ||
| pub cl_id: Option<i64>, | ||
| pub builds: serde_json::Value, |
There was a problem hiding this comment.
Type Safety Issue: Using serde_json::Value for builds loses type safety. The actual type is Vec<SerializableBuildInfo> (defined at line 478), but this isn't enforced at the type level.
Recommendation: Consider using a more specific type or adding validation in the constructor to ensure builds can be deserialized to Vec<SerializableBuildInfo>. This would catch serialization errors earlier and provide better compile-time guarantees.
| commit_hash: context.commit_hash.clone(), | ||
| cl_link, | ||
| cl_id: context.cl_id, | ||
| builds: serde_json::to_value(&builds) |
There was a problem hiding this comment.
Potential Serialization Failure: This serialization error is correctly handled, but it occurs after the builds have been computed. Since BuildInfo should always be serializable, this error case suggests a potential data inconsistency.
Recommendation: Consider adding a debug assertion or structured logging here to help identify cases where serialization fails, as this could indicate corrupted data or API contract violations.
| ref_name: &str, | ||
| ) -> Result<Option<ResolvedRef>, MegaError> { | ||
| // Check if it looks like a commit hash (hex string, typically 40 chars but can be shorter) | ||
| if !ref_name.chars().all(|c| c.is_ascii_hexdigit()) { |
There was a problem hiding this comment.
Ambiguous Commit Hash Handling: This check only validates that the string contains hex digits, but doesn't enforce any length constraints. Git commit hashes can be abbreviated (7+ chars) or full (40 chars).
Recommendation: Consider adding a minimum length check (e.g., 7 characters) to avoid treating very short hex strings like "a1" as potential commit hashes. This would improve error messages for typos.
| let resolved = ref_resolver | ||
| .resolve(ref_name.as_deref()) | ||
| .await | ||
| .map_err(|_| { |
There was a problem hiding this comment.
Error Message Clarity: The error handling here discards the original error and creates a new one. The .map_err(|_| pattern loses information about why resolution failed.
Recommendation: Preserve the original error for better debugging:
.map_err(|e| {
let ref_str = ref_name.unwrap_or_else(|| "main".to_string());
MegaError::Other(format!("[code:400] Reference not found: {} ({})", ref_str, e))
})?;There was a problem hiding this comment.
Pull request overview
This PR implements an explicit, extensible build trigger system for Mega, as described in issue #1830. The implementation decouples Git push events from build execution, introducing a unified trigger model that supports multiple trigger sources (Git Push, Manual, Retry) with clear separation of concerns.
Changes:
- Introduces a build trigger system with handler registry pattern for extensibility
- Adds RESTful API endpoints for creating, listing, retrieving, and retrying build triggers
- Implements ref resolution service supporting branches, tags, and commit hashes
- Decouples Git pack processing from build triggering in monorepo.rs
Reviewed changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 8 comments.
Show a summary per file
| File | Description |
|---|---|
| ceres/src/build_trigger/mod.rs | Core trigger registry and handler trait definition |
| ceres/src/build_trigger/service.rs | Build trigger service with API-facing methods |
| ceres/src/build_trigger/model.rs | Data models for triggers, payloads, and serialization types |
| ceres/src/build_trigger/git_push_handler.rs | Handler for Git push triggered builds |
| ceres/src/build_trigger/manual_handler.rs | Handler for manual/UI triggered builds |
| ceres/src/build_trigger/retry_handler.rs | Handler for retrying previous builds |
| ceres/src/build_trigger/ref_resolver.rs | Git reference resolution (branches/tags/commits to hashes) |
| ceres/src/build_trigger/dispatcher.rs | Dispatches triggers to Bellatrix build system |
| mono/src/api/router/build_trigger_router.rs | RESTful API endpoints for build triggers |
| mono/src/api/mod.rs | Integration of BuildTriggerService into API state |
| mono/src/api/error.rs | Enhanced error code parsing for trigger errors |
| ceres/src/pack/monorepo.rs | Decoupled build triggering from Git pack processing |
| ceres/src/lib.rs | Exports new build_trigger module |
| mono/src/api/router/mod.rs | Adds build_trigger_router module |
| mono/src/api/api_router.rs | Merges build trigger routes into API |
| mono/src/server/http_server.rs | Adds BUILD_TRIGGER_TAG for API documentation |
| mono/Cargo.toml | Adds bellatrix dependency |
| builds: serde_json::to_value(&builds) | ||
| .map_err(|e| MegaError::Other(format!("Failed to serialize builds: {}", e)))?, |
There was a problem hiding this comment.
Same type mismatch as in git_push_handler.rs. The code serializes Vec<bellatrix::orion_client::BuildInfo> but the dispatcher expects to deserialize as Vec<SerializableBuildInfo>. Since BuildInfo does not derive Deserialize, this will fail at runtime.
| use std::{collections::HashMap, sync::Arc}; | ||
|
|
||
| use async_trait::async_trait; | ||
| use bellatrix::Bellatrix; | ||
| use common::errors::MegaError; | ||
| use jupiter::storage::Storage; | ||
|
|
||
| use crate::api_service::cache::GitObjectCache; | ||
|
|
||
| mod dispatcher; | ||
| mod git_push_handler; | ||
| mod manual_handler; | ||
| mod model; | ||
| mod ref_resolver; | ||
| mod retry_handler; | ||
|
|
||
| // Export all models from the single model file | ||
| pub use model::*; | ||
| pub use ref_resolver::{RefResolver, RefType, ResolvedRef}; | ||
| pub mod service; | ||
| use dispatcher::BuildDispatcher; | ||
| use git_push_handler::GitPushHandler; | ||
| use manual_handler::ManualHandler; | ||
| use retry_handler::RetryHandler; | ||
| pub use service::BuildTriggerService; | ||
|
|
||
| /// Trait for handling different types of build triggers. | ||
| #[async_trait] | ||
| pub trait TriggerHandler: Send + Sync { | ||
| /// Handle the trigger and return a BuildTrigger. | ||
| async fn handle(&self, context: &TriggerContext) -> Result<BuildTrigger, MegaError>; | ||
|
|
||
| /// Get the trigger type this handler supports. | ||
| fn trigger_type(&self) -> BuildTriggerType; | ||
| } | ||
|
|
||
| /// Registry for managing and dispatching build triggers. | ||
| pub struct TriggerRegistry { | ||
| handlers: HashMap<BuildTriggerType, Box<dyn TriggerHandler>>, | ||
| dispatcher: Arc<BuildDispatcher>, | ||
| } | ||
|
|
||
| impl TriggerRegistry { | ||
| /// Create a new TriggerRegistry with all handlers registered. | ||
| pub fn new( | ||
| storage: Storage, | ||
| git_object_cache: Arc<GitObjectCache>, | ||
| bellatrix: Arc<Bellatrix>, | ||
| ) -> Self { | ||
| let mut registry = Self { | ||
| handlers: HashMap::new(), | ||
| dispatcher: Arc::new(BuildDispatcher::new(storage.clone(), bellatrix)), | ||
| }; | ||
|
|
||
| // Register core handlers (Git Push, Manual, Retry) | ||
| registry.register(Box::new(GitPushHandler::new( | ||
| storage.clone(), | ||
| git_object_cache.clone(), | ||
| ))); | ||
| registry.register(Box::new(ManualHandler::new( | ||
| storage.clone(), | ||
| git_object_cache.clone(), | ||
| ))); | ||
| registry.register(Box::new(RetryHandler::new( | ||
| storage.clone(), | ||
| git_object_cache.clone(), | ||
| ))); | ||
|
|
||
| // Note: Webhook and Schedule handlers are reserved for future implementation | ||
| // but not registered yet as they are not part of the current requirements | ||
|
|
||
| registry | ||
| } | ||
|
|
||
| /// Register a trigger handler. | ||
| fn register(&mut self, handler: Box<dyn TriggerHandler>) { | ||
| self.handlers.insert(handler.trigger_type(), handler); | ||
| } | ||
|
|
||
| /// Trigger a build using the unified interface. | ||
| /// | ||
| /// This is the single entry point for all build triggers. | ||
| /// | ||
| /// Returns the ID of the created trigger record. | ||
| pub async fn trigger_build(&self, context: TriggerContext) -> Result<i64, MegaError> { | ||
| tracing::info!( | ||
| "TriggerRegistry: Received {:?} build trigger for {} (commit: {})", | ||
| context.trigger_type, | ||
| context.repo_path, | ||
| &context.commit_hash[..8.min(context.commit_hash.len())] | ||
| ); | ||
|
|
||
| // Find the appropriate handler | ||
| let handler = self.handlers.get(&context.trigger_type).ok_or_else(|| { | ||
| MegaError::Other(format!( | ||
| "No handler for trigger type: {:?}", | ||
| context.trigger_type | ||
| )) | ||
| })?; | ||
|
|
||
| // Handle the trigger | ||
| let trigger = handler.handle(&context).await?; | ||
|
|
||
| // Dispatch the build and return the trigger ID | ||
| let trigger_id = self.dispatcher.dispatch(trigger).await?; | ||
|
|
||
| tracing::info!( | ||
| "TriggerRegistry: Build trigger completed (ID: {})", | ||
| trigger_id | ||
| ); | ||
|
|
||
| Ok(trigger_id) | ||
| } | ||
| } |
There was a problem hiding this comment.
The build trigger system lacks test coverage. Given the complexity of this feature (multiple trigger types, ref resolution, serialization/deserialization, database persistence), tests should be added to verify:
- Each trigger handler (GitPush, Manual, Retry) creates correct payloads
- Ref resolution works correctly for branches, tags, and commits
- Error handling for invalid references
- Database persistence and retrieval of triggers
- The dispatcher correctly transforms and dispatches builds to Bellatrix
The codebase has comprehensive test coverage in other modules (e.g., buck_tree_builder.rs, mono_api_service.rs), so tests should be added here as well to maintain consistency.
| .await | ||
| .map_err(|_| { | ||
| let ref_str = ref_name.unwrap_or_else(|| "main".to_string()); | ||
| MegaError::Other(format!("[code:400] Reference not found: {}", ref_str)) |
There was a problem hiding this comment.
Incorrect error code transformation. The RefResolver returns an error with [code:404] when a reference is not found, but this code discards that error and creates a new [code:400] error. This changes the HTTP status code from 404 (Not Found) to 400 (Bad Request), which is semantically incorrect. A missing reference should return 404, not 400.
The map_err should either preserve the original error, or if custom handling is needed, it should preserve the 404 status code. Consider changing line 89 to use [code:404] instead of [code:400], or better yet, just propagate the original error with ? since it already has the correct error code.
| MegaError::Other(format!("[code:400] Reference not found: {}", ref_str)) | |
| MegaError::Other(format!("[code:404] Reference not found: {}", ref_str)) |
| tokio::spawn(async move { | ||
| match bellatrix.on_post_receive(req).await { | ||
| Ok(_) => { | ||
| tracing::info!( | ||
| "BuildDispatcher: Build request sent to Bellatrix (Trigger ID: {})", | ||
| trigger_id | ||
| ); | ||
| } | ||
| Err(err) => { | ||
| tracing::error!( | ||
| "BuildDispatcher: Failed to dispatch build (Trigger ID: {}): {}", | ||
| trigger_id, | ||
| err | ||
| ); | ||
| } | ||
| } | ||
| }); |
There was a problem hiding this comment.
Async dispatch error handling creates observability gap. The build dispatch to Bellatrix happens in a spawned task (line 87), so any failures are only logged but not surfaced to the user or stored in the database. This means:
- The API returns success even if Bellatrix dispatch fails
- Users have no way to know if their trigger was actually dispatched
- The trigger record in the database doesn't track dispatch status
Consider one of these approaches:
- Store dispatch status/errors in the trigger record (add a status column)
- Wait for dispatch completion before returning (synchronous)
- Add a separate dispatch_error column to track failures
The current design prioritizes responsiveness over reliability feedback. If this is intentional, it should be documented. Otherwise, users need visibility into whether their builds actually started.
| async fn create_trigger( | ||
| user: LoginUser, | ||
| state: State<MonoApiServiceState>, | ||
| Json(req): Json<CreateTriggerRequest>, | ||
| ) -> Result<Json<CommonResult<TriggerResponse>>, ApiError> { | ||
| let service = state.build_trigger_service(); | ||
| let response = service | ||
| .create_manual_trigger(req.repo_path, req.ref_name, req.params, user.username) | ||
| .await?; |
There was a problem hiding this comment.
Missing authorization check for repo_path. The create_trigger endpoint accepts a repo_path from the user but doesn't verify that the user has permission to trigger builds for that repository. While authentication is required (LoginUser), there's no authorization check.
Consider adding validation to:
- Verify the repo_path exists in the database
- Check that the user has appropriate permissions for that repository
- Return appropriate error (403 Forbidden) if unauthorized
If repository access control is handled elsewhere in the system and build execution will fail safely for unauthorized repos, this may be acceptable, but it would be better to fail early with a clear error message.
| pub fn build_trigger_service(&self) -> BuildTriggerService { | ||
| let bellatrix = Arc::new(Bellatrix::new(self.storage.config().build.clone())); | ||
| BuildTriggerService::new( | ||
| self.storage.clone(), | ||
| self.git_object_cache.clone(), | ||
| bellatrix, | ||
| ) | ||
| } |
There was a problem hiding this comment.
Performance consideration: A new Bellatrix instance is created on every API call. The build_trigger_service() method creates a new Arc<Bellatrix> each time it's called (line 152), which could be inefficient if Bellatrix has expensive initialization.
Consider either:
- Store
Arc<Bellatrix>in MonoApiServiceState and reuse it - Document that Bellatrix::new() is lightweight if that's the case
If the bellatrix configuration can change at runtime, the current approach is correct. Otherwise, reusing a single instance would be more efficient.
| builds: serde_json::to_value(&builds) | ||
| .map_err(|e| MegaError::Other(format!("Failed to serialize builds: {}", e)))?, |
There was a problem hiding this comment.
Type mismatch in serialization/deserialization flow. The code serializes Vec<bellatrix::orion_client::BuildInfo> but later tries to deserialize as Vec<SerializableBuildInfo>. While BuildInfo derives Serialize, it does not derive Deserialize (see bellatrix/src/orion_client/mod.rs:36). This will cause a runtime error when the dispatcher tries to deserialize the builds from the JSON payload.
To fix this, either:
- Convert
BuildInfotoSerializableBuildInfobefore serialization in the handlers - Add a helper method to convert
Vec<Status<ProjectRelativePath>>toVec<SerializableStatus>
Recommended approach: Create the SerializableBuildInfo directly in the handlers instead of creating BuildInfo first.
| builds: serde_json::to_value(&builds) | ||
| .map_err(|e| MegaError::Other(format!("Failed to serialize builds: {}", e)))?, |
There was a problem hiding this comment.
Same type mismatch as in git_push_handler.rs. The code serializes Vec<bellatrix::orion_client::BuildInfo> but the dispatcher expects to deserialize as Vec<SerializableBuildInfo>. Since BuildInfo does not derive Deserialize, this will fail at runtime.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0cd88456b2
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| trigger_type: BuildTriggerType::Manual, | ||
| trigger_source: TriggerSource::User, | ||
| triggered_by: Some(triggered_by), | ||
| repo_path, | ||
| from_hash: commit_hash.clone(), | ||
| commit_hash, |
There was a problem hiding this comment.
Avoid empty diffs for manual triggers
Here from_hash is set to the same value as commit_hash, but ManualHandler reuses GitPushHandler::get_builds_for_commit, which computes changes by diffing from_hash vs commit_hash (see manual_handler.rs lines 31-33). When they’re identical, the diff is empty, so the build request carries no changes. Orion’s target selection is driven by the change list (e.g., orion/src/buck_controller.rs get_build_targets), so a manual trigger can enqueue zero targets and effectively do nothing. Consider using a base commit (e.g., the resolved branch head) or an explicit full-rebuild marker instead of equating from_hash and commit_hash.
Useful? React with 👍 / 👎.
Signed-off-by: allure <1550220889@qq.com>
00cb3d8 to
96b0ee1
Compare
Signed-off-by: Chen-Rong-Zi <1398881912@qq.com>
Signed-off-by: Chen-Rong-Zi <1398881912@qq.com>
* feat: implement build trigger system Signed-off-by: allure <1550220889@qq.com> * feat: refactor build trigger system and fix error Signed-off-by: allure <1550220889@qq.com> --------- Signed-off-by: allure <1550220889@qq.com>
Signed-off-by: Chen-Rong-Zi <1398881912@qq.com>
* feat: implement build trigger system Signed-off-by: allure <1550220889@qq.com> * feat: refactor build trigger system and fix error Signed-off-by: allure <1550220889@qq.com> --------- Signed-off-by: allure <1550220889@qq.com>
Signed-off-by: Chen-Rong-Zi <1398881912@qq.com>
* feat: implement build trigger system Signed-off-by: allure <1550220889@qq.com> * feat: refactor build trigger system and fix error Signed-off-by: allure <1550220889@qq.com> --------- Signed-off-by: allure <1550220889@qq.com>
Signed-off-by: Chen-Rong-Zi <1398881912@qq.com>
Signed-off-by: Chen-Rong-Zi <1398881912@qq.com>
* feat: implement build trigger system Signed-off-by: allure <1550220889@qq.com> * feat: refactor build trigger system and fix error Signed-off-by: allure <1550220889@qq.com> --------- Signed-off-by: allure <1550220889@qq.com> Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com>
…d WebSocket (#1909) * refactor: some modules (#4) * feat: add refactor orion module for migration Signed-off-by: Wangyan <topshihun@foxmail.com> * fix: add CL for build Signed-off-by: Wangyan <topshihun@foxmail.com> * refactor: some modules Signed-off-by: Wangyan <topshihun@foxmail.com> --------- Signed-off-by: Wangyan <topshihun@foxmail.com> Signed-off-by: Aid_C <57825561+AidCheng@users.noreply.github.com> Co-authored-by: Aid_C <57825561+AidCheng@users.noreply.github.com> * [orion]REFACTOR: Integrate generic jupiter model with refactored orion structure Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * fix: enforce mount_path semantics and stabilize builds (#1836) * fix: enforce mount_path semantics and stabilize builds Consolidate mount_path handling with buck2 prechecks and fix BuildDTO repo handling to avoid moves. Signed-off-by: jerry609 <1772030600@qq.com> style: format code with cargo fmt Signed-off-by: jerry609 <1772030600@qq.com> chore(orion): remove unused mount helpers Signed-off-by: jerry609 <1772030600@qq.com> fix(orion): retry buck2 targets once on failure Signed-off-by: jerry609 <1772030600@qq.com> fix(orion): remount and retry target discovery on failure Signed-off-by: jerry609 <1772030600@qq.com> style(orion): format buck_controller after retry changes Signed-off-by: jerry609 <1772030600@qq.com> fix(orion): annotate changes type for retry path Signed-off-by: jerry609 <1772030600@qq.com> fix(orion): appease clippy for mount guards Signed-off-by: jerry609 <1772030600@qq.com> test(common): avoid clippy field reassignment lint Signed-off-by: jerry609 <1772030600@qq.com> * test(ceres): fix clippy lints in tests Signed-off-by: jerry609 <1772030600@qq.com> --------- Signed-off-by: jerry609 <1772030600@qq.com> Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * Feature/comment reanchor (#1874) * refactor(code_review): add anchor and position to locat code thread * feat: add reanchor thread function * fix: seaORM repeated * fix: rebase error * fix: lcs_len error * fix: fix CR problems * fix: error Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * feat(theme): Complete theme color migration for multiple modules (#1875) * feat(theme): Complete theme color system migration for CL, Issue, Queue, OrionClient, and Settings modules * feat(theme): Complete theme color system migration for CL, Issue, Queue, OrionClient, and Settings modules * feat(theme): Complete theme color system migration for CL, Issue, Queue, OrionClient, and Settings modules * feat(theme): Complete theme color system migration for CL, Issue, Queue, OrionClient, and Settings modules Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * refactor(mono): convert third-party and buckal-bundles init to script (#1876) Signed-off-by: MYUU <1405758738@qq.com> Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * chore: move log models under buck2 types (#1878) Signed-off-by: lvy010 <17338770572@163.com> Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * test(mono): add multi-user support and files-list API (#1881) * test(mono): Add CL merge and update-branch integration test Signed-off-by: miliu2cc <miliu2cc@gmail.com> * test(mono): Add CL merge and update-branch integration test Signed-off-by: miliu2cc <miliu2cc@gmail.com> * test(mono): add multi-user support and files-list API Signed-off-by: miliu2cc <miliu2cc@gmail.com> * test(mono): add multi-user support and files-list API Signed-off-by: miliu2cc <miliu2cc@gmail.com> --------- Signed-off-by: miliu2cc <miliu2cc@gmail.com> Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * fix(script):cleanup per-repo .git after processing (#1884) Signed-off-by: MYUU <1405758738@qq.com> Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * feat: implement build trigger system (#1880) * feat: implement build trigger system Signed-off-by: allure <1550220889@qq.com> * feat: refactor build trigger system and fix error Signed-off-by: allure <1550220889@qq.com> --------- Signed-off-by: allure <1550220889@qq.com> Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * fix(orion): skip incompatible targets for buck2 builds (#1885) Signed-off-by: jerry609 <1772030600@qq.com> Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * fixed(cl): update UI for checks log section (#1887) Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * refactor: some modules (#4) * feat: add refactor orion module for migration Signed-off-by: Wangyan <topshihun@foxmail.com> * fix: add CL for build Signed-off-by: Wangyan <topshihun@foxmail.com> * refactor: some modules Signed-off-by: Wangyan <topshihun@foxmail.com> --------- Signed-off-by: Wangyan <topshihun@foxmail.com> Signed-off-by: Aid_C <57825561+AidCheng@users.noreply.github.com> Co-authored-by: Aid_C <57825561+AidCheng@users.noreply.github.com> Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * [buck2]REFACTOR: Integrate orion and orion server with generic api and model interface Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * FIX: use correct ProjectRelativePath crate Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * UPDATE: cargo fmt Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * [orion] Replace worker-server commun with WS msg Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * [orion]FIX: update branch and fix conflicts * [Orion]FIX: workflow error Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * [orion]UPDATE: fix based on copilot suggestions Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * cargo fmt Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * UPDATE: temporary allow unused started at in build info Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * FIX: remove unused import Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * fmt Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> * [jupiter]REMOVE: duplicate migration Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Aid_C <57825561+AidCheng@users.noreply.github.com> * [jupiter]FIX: temporary remove task.rs Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> --------- Signed-off-by: Wangyan <topshihun@foxmail.com> Signed-off-by: Aid_C <57825561+AidCheng@users.noreply.github.com> Signed-off-by: AidCheng <cn.aiden.cheng@gmail.com> Signed-off-by: jerry609 <1772030600@qq.com> Signed-off-by: MYUU <1405758738@qq.com> Signed-off-by: lvy010 <17338770572@163.com> Signed-off-by: miliu2cc <miliu2cc@gmail.com> Signed-off-by: allure <1550220889@qq.com> Co-authored-by: TOP <89700178+topshihun@users.noreply.github.com> Co-authored-by: Jerry Zhang <1772030600@qq.com> Co-authored-by: TianYi <2739022972@qq.com> Co-authored-by: zhaokang <zhaokang.r2cn@isrc.iscas.ac.cn> Co-authored-by: MYUU <52773565+zhoujiaqi30@users.noreply.github.com> Co-authored-by: lvy010 <17338770572@163.com> Co-authored-by: miliu2cc <98928567+miliu2cc@users.noreply.github.com> Co-authored-by: Yao <1550220889@qq.com> Co-authored-by: zyd123-cmd <yingdong.r2cn@isrc.iscas.ac.cn> Co-authored-by: Tianxing Ye <benjamin.747@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
link #1830