Skip to content

feat: implement build trigger system#1880

Merged
benjamin-747 merged 2 commits into
gitmono-dev:mainfrom
AllureCurtain:feat/build-triggers
Feb 2, 2026
Merged

feat: implement build trigger system#1880
benjamin-747 merged 2 commits into
gitmono-dev:mainfrom
AllureCurtain:feat/build-triggers

Conversation

@AllureCurtain

Copy link
Copy Markdown
Contributor

link #1830

Signed-off-by: allure <1550220889@qq.com>
@genedna

genedna commented Feb 2, 2026

Copy link
Copy Markdown
Collaborator

@codex review

@genedna

genedna commented Feb 2, 2026

Copy link
Copy Markdown
Collaborator

@claude

@github-actions

github-actions Bot commented Feb 2, 2026

Copy link
Copy Markdown

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 Assessment

Strengths:

  • Clean separation of concerns with trait-based handler pattern
  • Well-structured models with comprehensive type definitions
  • Good error handling with user-friendly error codes
  • RESTful API design following project conventions
  • Effective code reuse between handlers (Manual/Retry leverage GitPush logic)
  • Proper async/await usage throughout

Areas for Improvement:

  • Missing test coverage
  • Incomplete error observability in async dispatch
  • Some type safety gaps with serde_json::Value
  • Missing 503 error code mapping

📋 Detailed Findings

1. Code Quality ⭐⭐⭐⭐

Positive:

  • Excellent use of Rust's type system with enums for BuildTriggerType, TriggerSource, and RefType
  • Clean trait abstraction (TriggerHandler) enables extensibility
  • Handler registry pattern is well-implemented
  • Proper separation between DTOs, internal models, and API responses

Issues:

  • Type Safety Gap (model.rs:70): The builds field uses serde_json::Value instead of Vec<SerializableBuildInfo>, losing compile-time type safety. While runtime validation exists, this could catch errors earlier.

2. Security ⭐⭐⭐⭐⭐

Positive:

  • Authentication required on all API endpoints via LoginUser extractor
  • User attribution tracked in triggered_by field
  • No SQL injection risks (using parameterized queries via SeaORM)
  • Build enablement check prevents unauthorized access when builds disabled
  • Input validation through deserialization

No security issues identified. The authentication model properly protects all build trigger endpoints.

3. Performance ⭐⭐⭐⭐

Positive:

  • Async dispatch pattern (dispatcher.rs:87-103) prevents blocking API responses
  • Efficient git operations reused from existing services
  • Proper use of Arc for shared state
  • Database operations appropriately async

Concerns:

  • Fire-and-forget dispatch: Build requests are spawned without tracking completion status. This is acceptable for throughput but limits observability (see inline comment).
  • RefResolver makes sequential database queries (branch → tag → commit). Could be optimized with parallel queries, but the performance impact is likely minimal given typical usage patterns.

4. Error Handling ⭐⭐⭐⭐

Positive:

  • Consistent [code:xxx] error format for HTTP status mapping
  • User-friendly error messages
  • Proper error propagation with ? operator
  • Distinction between client (4xx) and server (5xx) errors

Issues:

  • Error context loss (service.rs:87): .map_err(|_| discards original error details (see inline comment)
  • Missing 503 mapping (error.rs): The error parser doesn't handle code 503 used for disabled builds, defaulting to 500 instead
  • Async dispatch errors: Errors in spawned build tasks are only logged, not persisted (see inline comment)

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:

  • Unit tests for RefResolver (branch/tag/commit resolution, error cases)
  • Unit tests for error code parsing in ApiError
  • Integration tests for each handler (GitPush, Manual, Retry)
  • API endpoint tests for build_trigger_router
  • Mock-based tests for dispatcher to verify database persistence

Create tests for build trigger system →

6. Documentation ⭐⭐⭐⭐

Positive:

  • Comprehensive doc comments on public items
  • OpenAPI/utoipa annotations on all API endpoints
  • Module-level documentation (ref_resolver.rs)
  • Clear explanation of resolution order and behavior

Minor gaps:

  • No high-level README or design doc for the build_trigger module
  • Complex payload serialization logic could use more inline comments

🔍 Architecture Review

The implementation successfully achieves its goal of decoupling build triggers from the pack layer:

Before:

// Direct coupling in monorepo.rs
bellatrix.on_post_receive(req).await

After:

// Decoupled through event
BuildTriggerService::handle_git_push_event(storage, cache, bellatrix, event).await

The new architecture provides:

  1. Extensibility: Easy to add Webhook and Schedule triggers
  2. Testability: Handlers can be tested independently
  3. Maintainability: Build logic centralized in one module
  4. API Access: RESTful endpoints for manual triggers and history

🎯 Priority Recommendations

High Priority:

  1. Add test coverage - Critical for production readiness
  2. Fix error context loss in service.rs:87 - Better debugging
  3. Add 503 error mapping - Correct HTTP status for disabled builds

Medium Priority:
4. Improve async dispatch observability - Add status tracking in database
5. Strengthen type safety - Replace serde_json::Value with concrete types where possible
6. Add commit hash length validation - Improve error messages for typos

Low Priority:
7. Add high-level design documentation
8. Consider parallel queries in RefResolver optimization


✅ Approval Status

Despite 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

);
}
}
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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:

  1. Adding a status field to the trigger record (e.g., pending, dispatched, failed)
  2. Updating the trigger record with dispatch status
  3. 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,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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()) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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(|_| {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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))
})?;

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Comment on lines +55 to +56
builds: serde_json::to_value(&builds)
.map_err(|e| MegaError::Other(format!("Failed to serialize builds: {}", e)))?,

Copilot AI Feb 2, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Comment on lines +1 to +114
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)
}
}

Copilot AI Feb 2, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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:

  1. Each trigger handler (GitPush, Manual, Retry) creates correct payloads
  2. Ref resolution works correctly for branches, tags, and commits
  3. Error handling for invalid references
  4. Database persistence and retrieval of triggers
  5. 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.

Copilot uses AI. Check for mistakes.
Comment thread ceres/src/build_trigger/service.rs Outdated
.await
.map_err(|_| {
let ref_str = ref_name.unwrap_or_else(|| "main".to_string());
MegaError::Other(format!("[code:400] Reference not found: {}", ref_str))

Copilot AI Feb 2, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
MegaError::Other(format!("[code:400] Reference not found: {}", ref_str))
MegaError::Other(format!("[code:404] Reference not found: {}", ref_str))

Copilot uses AI. Check for mistakes.
Comment on lines +87 to +103
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
);
}
}
});

Copilot AI Feb 2, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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:

  1. The API returns success even if Bellatrix dispatch fails
  2. Users have no way to know if their trigger was actually dispatched
  3. The trigger record in the database doesn't track dispatch status

Consider one of these approaches:

  1. Store dispatch status/errors in the trigger record (add a status column)
  2. Wait for dispatch completion before returning (synchronous)
  3. 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.

Copilot uses AI. Check for mistakes.
Comment on lines +46 to +54
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?;

Copilot AI Feb 2, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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:

  1. Verify the repo_path exists in the database
  2. Check that the user has appropriate permissions for that repository
  3. 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.

Copilot uses AI. Check for mistakes.
Comment thread mono/src/api/mod.rs
Comment on lines +151 to +158
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,
)
}

Copilot AI Feb 2, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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:

  1. Store Arc<Bellatrix> in MonoApiServiceState and reuse it
  2. 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.

Copilot uses AI. Check for mistakes.
Comment on lines +141 to +142
builds: serde_json::to_value(&builds)
.map_err(|e| MegaError::Other(format!("Failed to serialize builds: {}", e)))?,

Copilot AI Feb 2, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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:

  1. Convert BuildInfo to SerializableBuildInfo before serialization in the handlers
  2. Add a helper method to convert Vec<Status<ProjectRelativePath>> to Vec<SerializableStatus>

Recommended approach: Create the SerializableBuildInfo directly in the handlers instead of creating BuildInfo first.

Copilot uses AI. Check for mistakes.
Comment on lines +54 to +55
builds: serde_json::to_value(&builds)
.map_err(|e| MegaError::Other(format!("Failed to serialize builds: {}", e)))?,

Copilot AI Feb 2, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +314 to +319
trigger_type: BuildTriggerType::Manual,
trigger_source: TriggerSource::User,
triggered_by: Some(triggered_by),
repo_path,
from_hash: commit_hash.clone(),
commit_hash,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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>
@benjamin-747 benjamin-747 added this pull request to the merge queue Feb 2, 2026
Merged via the queue into gitmono-dev:main with commit 029e066 Feb 2, 2026
11 checks passed
Chen-Rong-Zi added a commit to Chen-Rong-Zi/mega that referenced this pull request Feb 2, 2026
Chen-Rong-Zi added a commit to Chen-Rong-Zi/mega that referenced this pull request Feb 3, 2026
Chen-Rong-Zi pushed a commit to Chen-Rong-Zi/mega that referenced this pull request Feb 3, 2026
* 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>
Chen-Rong-Zi added a commit to Chen-Rong-Zi/mega that referenced this pull request Feb 3, 2026
Chen-Rong-Zi pushed a commit to Chen-Rong-Zi/mega that referenced this pull request Feb 3, 2026
* 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>
Chen-Rong-Zi added a commit to Chen-Rong-Zi/mega that referenced this pull request Feb 3, 2026
Chen-Rong-Zi pushed a commit to Chen-Rong-Zi/mega that referenced this pull request Feb 3, 2026
* 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>
Chen-Rong-Zi added a commit to Chen-Rong-Zi/mega that referenced this pull request Feb 3, 2026
Chen-Rong-Zi added a commit to Chen-Rong-Zi/mega that referenced this pull request Feb 3, 2026
AidCheng pushed a commit to AidCheng/mega that referenced this pull request Feb 5, 2026
* 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>
github-merge-queue Bot pushed a commit that referenced this pull request Feb 11, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants