Skip to main content

swarmhive_api_types/
artifact.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use utoipa::ToSchema;
4use uuid::Uuid;
5
6use crate::platform::Platform;
7
8/// A platform binary belonging to a release. `target` is the Tauri target
9/// triple; `abi` the Android ABI; `arch` a coarse arch tag. The triple
10/// `(platform, target, arch, abi)` is unique within a release.
11#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
12pub struct Artifact {
13    pub id: Uuid,
14    pub release_id: Uuid,
15    pub platform: Platform,
16    pub target: Option<String>,
17    pub arch: Option<String>,
18    pub abi: Option<String>,
19    pub filename: String,
20    pub size_bytes: i64,
21    pub sha256: String,
22    pub storage_backend_id: Uuid,
23    pub object_key: String,
24    pub signature_metadata: Option<serde_json::Value>,
25    pub created_at: DateTime<Utc>,
26}
27
28/// Action recorded in a channel's promote/rollback history.
29#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, ToSchema)]
30#[serde(rename_all = "snake_case")]
31pub enum ChannelAction {
32    Promote,
33    Rollback,
34}
35
36/// One entry in a channel's append-only promote/rollback history.
37#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
38pub struct ChannelReleaseHistoryEntry {
39    pub id: Uuid,
40    pub channel_id: Uuid,
41    pub release_id: Uuid,
42    pub action: ChannelAction,
43    pub reason: Option<String>,
44    pub actor_id: Uuid,
45    pub created_at: DateTime<Utc>,
46}