Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
database: Add GitLabConfig model structs
  • Loading branch information
Turbo87 committed Sep 30, 2025
commit 6e4fc5cdb9f152d8d2186118fa35c17e1da7823d
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion crates/crates_io_database/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,5 @@ utoipa = { version = "=5.4.0", features = ["chrono"] }
claims = "=0.8.0"
crates_io_test_db = { path = "../crates_io_test_db" }
googletest = "=0.14.2"
insta = { version = "=1.43.2", features = ["json"] }
insta = { version = "=1.43.2", features = ["filters", "json"] }
tokio = { version = "=1.47.1", features = ["macros", "rt"] }
98 changes: 98 additions & 0 deletions crates/crates_io_database/src/models/trustpub/gitlab_config.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
use crate::schema::trustpub_configs_gitlab;
use chrono::{DateTime, Utc};
use diesel::prelude::*;
use diesel_async::{AsyncPgConnection, RunQueryDsl};
use serde::Serialize;

#[derive(Debug, Identifiable, Queryable, Selectable, Serialize)]
#[diesel(table_name = trustpub_configs_gitlab, check_for_backend(diesel::pg::Pg))]
pub struct GitLabConfig {
pub id: i32,
pub created_at: DateTime<Utc>,
pub crate_id: i32,
pub namespace: String,
pub namespace_id: Option<String>,
pub project: String,
pub workflow_filepath: String,
pub environment: Option<String>,
}

#[derive(Debug, Insertable)]
#[diesel(table_name = trustpub_configs_gitlab, check_for_backend(diesel::pg::Pg))]
pub struct NewGitLabConfig<'a> {
pub crate_id: i32,
pub namespace: &'a str,
pub project: &'a str,
pub workflow_filepath: &'a str,
pub environment: Option<&'a str>,
}

impl NewGitLabConfig<'_> {
pub async fn insert(&self, conn: &mut AsyncPgConnection) -> QueryResult<GitLabConfig> {
self.insert_into(trustpub_configs_gitlab::table)
.returning(GitLabConfig::as_returning())
.get_result(conn)
.await
}
}

#[cfg(test)]
mod tests {
use super::*;
use crate::models::krate::*;
use crate::schema::crates;
use crates_io_test_db::TestDatabase;
use diesel_async::RunQueryDsl;
use insta::assert_debug_snapshot;

#[tokio::test]
async fn test_gitlab_config_insert_and_retrieve() {
let test_db = TestDatabase::new();
let mut conn = test_db.async_connect().await;

// Create a test crate first
let test_crate = diesel::insert_into(crates::table)
.values((crates::name.eq("test-crate"),))
.returning(Crate::as_returning())
.get_result(&mut conn)
.await
.unwrap();

// Create a new GitLab config
let new_config = NewGitLabConfig {
crate_id: test_crate.id,
namespace: "rust-lang",
project: "cargo",
workflow_filepath: ".gitlab-ci.yml",
environment: Some("production"),
};

// Insert the config
let inserted_config = new_config.insert(&mut conn).await.unwrap();

// Retrieve the config
let retrieved_config = trustpub_configs_gitlab::table
.filter(trustpub_configs_gitlab::id.eq(inserted_config.id))
.first::<GitLabConfig>(&mut conn)
.await
.unwrap();

// Snapshot test the structure
insta::with_settings!({ filters => vec![(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z", "[datetime]")] }, {
assert_debug_snapshot!(retrieved_config, @r#"
GitLabConfig {
id: 1,
created_at: [datetime],
crate_id: 1,
namespace: "rust-lang",
namespace_id: None,
project: "cargo",
workflow_filepath: ".gitlab-ci.yml",
environment: Some(
"production",
),
}
"#);
});
}
}
2 changes: 2 additions & 0 deletions crates/crates_io_database/src/models/trustpub/mod.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
mod data;
mod github_config;
mod gitlab_config;
mod token;
mod used_jti;

pub use self::data::TrustpubData;
pub use self::github_config::{GitHubConfig, NewGitHubConfig};
pub use self::gitlab_config::{GitLabConfig, NewGitLabConfig};
pub use self::token::NewToken;
pub use self::used_jti::NewUsedJti;