From f869c7f52d8fd1f1ef61e218bbec4d0dac27673d Mon Sep 17 00:00:00 2001 From: Max Audron Date: Tue, 7 Jun 2022 12:28:18 +0200 Subject: init --- src/forge/gitlab/config.rs | 26 +++++++++++++++++ src/forge/gitlab/mod.rs | 73 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 src/forge/gitlab/config.rs create mode 100644 src/forge/gitlab/mod.rs (limited to 'src/forge/gitlab') diff --git a/src/forge/gitlab/config.rs b/src/forge/gitlab/config.rs new file mode 100644 index 0000000..37186e8 --- /dev/null +++ b/src/forge/gitlab/config.rs @@ -0,0 +1,26 @@ +use serde::{Deserialize, Serialize}; +use std::path::PathBuf; + +use crate::config::ForgeConfigTrait; + +#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Deserialize, Serialize)] +pub struct Gitlab { + // pub url: url::Url, + pub host: String, + pub token: String, + pub directory: PathBuf, + #[serde(default = "default_tls")] + pub tls: bool, + #[serde(default)] + pub auto_create_branches: bool, +} + +const fn default_tls() -> bool { + true +} + +impl ForgeConfigTrait for Gitlab { + fn root(&self) -> &str { + self.directory.to_str().unwrap() + } +} diff --git a/src/forge/gitlab/mod.rs b/src/forge/gitlab/mod.rs new file mode 100644 index 0000000..a32c367 --- /dev/null +++ b/src/forge/gitlab/mod.rs @@ -0,0 +1,73 @@ +use anyhow::{bail, Context, Result}; +use gitlab::AsyncGitlab; + +use graphql_client::GraphQLQuery; +use tracing::{debug, trace}; + +pub mod config; + +#[derive(Clone, Debug)] +pub struct Gitlab { + client: AsyncGitlab, +} + +impl Gitlab { + pub async fn new(host: &str, token: &str, tls: bool) -> Result { + let mut gitlab = gitlab::GitlabBuilder::new(host, token); + + if !tls { + gitlab.insecure(); + } + + let gitlab = gitlab.build_async().await?; + + Ok(Gitlab { client: gitlab }) + } + + pub async fn from_config(forge: &config::Gitlab) -> Result { + Gitlab::new(&forge.host, &forge.token, forge.tls).await + } +} + +#[async_trait::async_trait] +impl super::ForgeTrait for Gitlab { + async fn projects(&self, scope: &str) -> Result> { + let query = Projects::build_query(projects::Variables { + scope: scope.to_owned(), + }); + debug!("query: {:#?}", query); + let res = self.client.graphql::(&query).await?; + + let res = res + .projects + .unwrap() + .nodes + .unwrap() + .into_iter() + .filter(|x| x.is_some()) + .map(|x| x.unwrap().into()) + .collect(); + + Ok(res) + } +} + +#[derive(GraphQLQuery)] +#[graphql( + query_path = "graphql/projects_query.graphql", + schema_path = "graphql/schema.graphql", + response_derives = "Clone, Debug" +)] +pub struct Projects; + +impl Into for projects::ProjectsProjectsNodes { + fn into(self) -> super::Project { + super::Project { + id: self.id, + name: self.name, + path: self.full_path, + ssh_clone_url: self.ssh_url_to_repo, + http_clone_url: self.http_url_to_repo, + } + } +} -- cgit v1.2.3 :36 +0200'>2024-10-26update nixpkgs-masterMax Audron-3/+3 2024-10-25update nixpkgs-masterMax Audron-3/+3 2024-10-22update factorioMax Audron-3/+27 2024-10-18deploy satisfactory serverMax Audron-1/+22 2024-10-18switch to protonvpn for illegal activitiesMax Audron-50/+240 2024-08-12move catinator secrets to be managed by secrets moduleMax Audron-1/+8 2024-08-12add pastor deploymentMax Audron-1/+296 2024-08-12remove psql ensurePermissionsMax Audron-5/+5 2024-08-12disable k8sMax Audron-5/+0 2024-08-12add catinatorMax Audron-7/+299 2024-08-12update flaresolverrMax Audron-1/+1 2024-08-12update powerdns configMax Audron-5/+5 2024-08-12update garage config to 1.0Max Audron-2/+3 2024-08-12update to nixos 24.05Max Audron-27/+21 2024-07-03add acc serverMax Audron-2/+23 2024-03-29add rtmp and laplaceMax Audron-1/+200 2024-03-29add hydra secretsMax Audron-0/+0 2024-03-29add hydra secretsMax Audron-5/+35 2024-03-19extend postgresql hpa for podman ipsMax Audron-1/+1 2024-03-02update authentikMax Audron-8/+6 2024-03-02setup gitea oidcMax Audron-5/+18 2024-02-28add giteaMax Audron-2/+39 2024-02-28remove gitlab moduleMax Audron-25/+0 2024-02-26update d3fus phone wg pubkeyMarcin Maselko-1/+1 2024-02-26added d3fus nass to wg configMarcin Maselko-0/+9 2024-02-21set minecraft memoryMax Audron-0/+1 2024-02-21add minecraft server and move palworld to games moduleMax Audron-3/+56 2024-02-21set network manually for ns serversMax Audron-0/+51 2024-02-20update nixpkgs-unstableMax Audron-3/+3 2024-02-19update d3fus fritzbox wg portMarcin Maselko-1/+1 2024-02-19add xonotic serverMax Audron-1/+10