Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(gitlab): add gitlab ci support #47

Merged
merged 8 commits into from
Nov 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
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
9 changes: 9 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"recommendations": [
"esbenp.prettier-vscode",
"foxundermoon.shell-format",
"rust-lang.rust-analyzer",
"GitHub.vscode-github-actions",
"GitLab.gitlab-workflow"
]
}
15 changes: 14 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"rust-analyzer.checkOnSave": true,
"rust-analyzer.check.command": "clippy"
"rust-analyzer.check.command": "clippy",
"[dotenv][ignore][properties][shellscript]": {
"editor.defaultFormatter": "foxundermoon.shell-format"
},
"[html][javascript][json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[rust]": {
"editor.defaultFormatter": "rust-lang.rust-analyzer"
},
"files.watcherExclude": {
"**/target/**": true
}
}
10 changes: 10 additions & 0 deletions cspell.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
// Version of the setting file. Always 0.2
"version": "0.2",
// language - current active spelling language
"language": "en",
// words - list of words to be always considered correct
"words": [
"codspeed"
]
}
16 changes: 8 additions & 8 deletions src/run/check_system.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ pub struct SystemInfo {
impl SystemInfo {
pub fn test() -> Self {
SystemInfo {
os: "Ubuntu".to_string(),
os: "ubuntu".to_string(),
os_version: "20.04".to_string(),
arch: "x86_64".to_string(),
host: "host".to_string(),
Expand All @@ -54,7 +54,7 @@ impl SystemInfo {

impl SystemInfo {
pub fn new() -> Result<Self> {
let os = System::name().ok_or(anyhow!("Failed to get OS name"))?;
let os = System::distribution_id();
let os_version = System::os_version().ok_or(anyhow!("Failed to get OS version"))?;
let arch = System::cpu_arch().ok_or(anyhow!("Failed to get CPU architecture"))?;
let user = get_user()?;
Expand Down Expand Up @@ -98,12 +98,12 @@ impl SystemInfo {
lazy_static! {
static ref SUPPORTED_SYSTEMS: HashSet<(&'static str, &'static str, &'static str)> = {
HashSet::from([
("Ubuntu", "20.04", "x86_64"),
("Ubuntu", "22.04", "x86_64"),
("Ubuntu", "24.04", "x86_64"),
("Ubuntu", "22.04", "aarch64"),
("Debian", "11", "x86_64"),
("Debian", "12", "x86_64"),
("ubuntu", "20.04", "x86_64"),
("ubuntu", "22.04", "x86_64"),
("ubuntu", "24.04", "x86_64"),
("ubuntu", "22.04", "aarch64"),
("debian", "11", "x86_64"),
("debian", "12", "x86_64"),
])
};
}
Expand Down
14 changes: 7 additions & 7 deletions src/run/ci_provider/buildkite/logger.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ impl Log for BuildkiteLogger {
if let Some(group_event) = get_group_event(record) {
match group_event {
GroupEvent::Start(name) => {
println!("--- {}", name);
println!("--- {name}");
}
GroupEvent::StartOpened(name) => {
println!("+++ {}", name);
println!("+++ {name}");
}
GroupEvent::End => {}
}
Expand All @@ -55,19 +55,19 @@ impl Log for BuildkiteLogger {
// there is no support for log levels in Buildkite, so we print the level in the message
match level {
Level::Error => {
println!("[ERROR] {}", message);
println!("[ERROR] {message}");
}
Level::Warn => {
println!("[WARN] {}", message);
println!("[WARN] {message}");
}
Level::Info => {
println!("{}", message);
println!("{message}");
}
Level::Debug => {
println!("[DEBUG] {}", message);
println!("[DEBUG] {message}");
}
Level::Trace => {
println!("[TRACE] {}", message);
println!("[TRACE] {message}");
}
}
}
Expand Down
28 changes: 17 additions & 11 deletions src/run/ci_provider/buildkite/provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use simplelog::SharedLogger;
use crate::prelude::*;
use crate::run::{
ci_provider::{
interfaces::{ProviderMetadata, RunEvent},
interfaces::{CIProviderMetadata, RepositoryProvider, RunEvent},
provider::{CIProvider, CIProviderDetector},
},
config::Config,
Expand All @@ -18,13 +18,13 @@ use super::logger::BuildkiteLogger;

#[derive(Debug)]
pub struct BuildkiteProvider {
pub owner: String,
pub repository: String,
pub ref_: String,
pub head_ref: Option<String>,
pub base_ref: Option<String>,
pub event: RunEvent,
pub repository_root_path: String,
owner: String,
repository: String,
ref_: String,
head_ref: Option<String>,
base_ref: Option<String>,
event: RunEvent,
repository_root_path: String,
}

lazy_static! {
Expand Down Expand Up @@ -133,6 +133,10 @@ impl CIProviderDetector for BuildkiteProvider {
}

impl CIProvider for BuildkiteProvider {
fn get_repository_provider(&self) -> RepositoryProvider {
RepositoryProvider::GitHub
}

fn get_logger(&self) -> Box<dyn SharedLogger> {
Box::new(BuildkiteLogger::new())
}
Expand All @@ -145,8 +149,8 @@ impl CIProvider for BuildkiteProvider {
"buildkite"
}

fn get_provider_metadata(&self) -> Result<ProviderMetadata> {
Ok(ProviderMetadata {
fn get_ci_provider_metadata(&self) -> Result<CIProviderMetadata> {
Ok(CIProviderMetadata {
base_ref: self.base_ref.clone(),
head_ref: self.head_ref.clone(),
event: self.event.clone(),
Expand All @@ -155,6 +159,8 @@ impl CIProvider for BuildkiteProvider {
ref_: self.ref_.clone(),
repository_root_path: self.repository_root_path.clone(),
gh_data: None,
gl_data: None,
sender: None,
})
}
}
Expand Down Expand Up @@ -300,7 +306,7 @@ mod tests {
..Config::test()
};
let provider = BuildkiteProvider::try_from(&config).unwrap();
let provider_metadata = provider.get_provider_metadata().unwrap();
let provider_metadata = provider.get_ci_provider_metadata().unwrap();

assert_json_snapshot!(provider_metadata, {
".runner.version" => insta::dynamic_redaction(|value,_path| {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ expression: provider_metadata
"owner": "my-org",
"repository": "adrien-python-test",
"event": "pull_request",
"sender": null,
"ghData": null,
"glData": null,
"repositoryRootPath": "/buildkite/builds/7b10eca7600b-1/my-org/buildkite-test/"
}
44 changes: 21 additions & 23 deletions src/run/ci_provider/github_actions/provider.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use std::{env, fs};
use crate::prelude::*;
use crate::run::{
ci_provider::{
interfaces::{GhData, ProviderMetadata, RunEvent, Sender},
interfaces::{CIProviderMetadata, GhData, RepositoryProvider, RunEvent, Sender},
provider::{CIProvider, CIProviderDetector},
},
config::Config,
Expand All @@ -23,6 +23,7 @@ pub struct GitHubActionsProvider {
pub ref_: String,
pub head_ref: Option<String>,
pub base_ref: Option<String>,
pub sender: Option<Sender>,
pub gh_data: GhData,
pub event: RunEvent,
pub repository_root_path: String,
Expand Down Expand Up @@ -95,16 +96,12 @@ impl TryFrom<&Config> for GitHubActionsProvider {
event,
gh_data: GhData {
job: get_env_variable("GITHUB_JOB")?,
run_id: get_env_variable("GITHUB_RUN_ID")?
.parse()
.context("Failed to parse GITHUB_RUN_ID into an integer")?,
sender: Some(Sender {
login: get_env_variable("GITHUB_ACTOR")?,
id: get_env_variable("GITHUB_ACTOR_ID")?
.parse()
.context("Failed to parse GITHUB_ACTOR_ID into an integer")?,
}),
run_id: get_env_variable("GITHUB_RUN_ID")?,
},
sender: Some(Sender {
login: get_env_variable("GITHUB_ACTOR")?,
id: get_env_variable("GITHUB_ACTOR_ID")?,
fargito marked this conversation as resolved.
Show resolved Hide resolved
}),
base_ref: get_env_variable("GITHUB_BASE_REF").ok(),
repository_root_path,
})
Expand All @@ -119,6 +116,10 @@ impl CIProviderDetector for GitHubActionsProvider {
}

impl CIProvider for GitHubActionsProvider {
fn get_repository_provider(&self) -> RepositoryProvider {
RepositoryProvider::GitHub
}

fn get_logger(&self) -> Box<dyn SharedLogger> {
Box::new(GithubActionLogger)
}
Expand All @@ -131,12 +132,14 @@ impl CIProvider for GitHubActionsProvider {
"github-actions"
}

fn get_provider_metadata(&self) -> Result<ProviderMetadata> {
Ok(ProviderMetadata {
fn get_ci_provider_metadata(&self) -> Result<CIProviderMetadata> {
Ok(CIProviderMetadata {
base_ref: self.base_ref.clone(),
head_ref: self.head_ref.clone(),
event: self.event.clone(),
gh_data: Some(self.gh_data.clone()),
gl_data: None,
sender: self.sender.clone(),
owner: self.owner.clone(),
repository: self.repository.clone(),
ref_: self.ref_.clone(),
Expand Down Expand Up @@ -196,19 +199,14 @@ mod tests {
assert_eq!(github_actions_provider.head_ref, None);
assert_eq!(github_actions_provider.event, RunEvent::Push);
assert_eq!(github_actions_provider.gh_data.job, "job");
assert_eq!(github_actions_provider.gh_data.run_id, 1234567890);
assert_eq!(github_actions_provider.gh_data.run_id, "1234567890");
assert_eq!(
github_actions_provider
.gh_data
.sender
.as_ref()
.unwrap()
.login,
github_actions_provider.sender.as_ref().unwrap().login,
"actor"
);
assert_eq!(
github_actions_provider.gh_data.sender.as_ref().unwrap().id,
1234567890
github_actions_provider.sender.as_ref().unwrap().id,
"1234567890"
);
},
)
Expand Down Expand Up @@ -246,7 +244,7 @@ mod tests {
..Config::test()
};
let github_actions_provider = GitHubActionsProvider::try_from(&config).unwrap();
let provider_metadata = github_actions_provider.get_provider_metadata().unwrap();
let provider_metadata = github_actions_provider.get_ci_provider_metadata().unwrap();

assert_json_snapshot!(provider_metadata, {
".runner.version" => insta::dynamic_redaction(|value,_path| {
Expand Down Expand Up @@ -290,7 +288,7 @@ mod tests {
..Config::test()
};
let github_actions_provider = GitHubActionsProvider::try_from(&config).unwrap();
let provider_metadata = github_actions_provider.get_provider_metadata().unwrap();
let provider_metadata = github_actions_provider.get_ci_provider_metadata().unwrap();

assert_eq!(provider_metadata.owner, "my-org");
assert_eq!(provider_metadata.repository, "adrien-python-test");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@ expression: provider_metadata
"owner": "my-org",
"repository": "adrien-python-test",
"event": "pull_request",
"sender": {
"id": "19605940",
"login": "adriencaccia"
},
"ghData": {
"runId": 6957110437,
"job": "log-env",
"sender": {
"id": 19605940,
"login": "adriencaccia"
}
"runId": "6957110437",
"job": "log-env"
},
"glData": null,
"repositoryRootPath": "/home/runner/work/adrien-python-test/adrien-python-test/"
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@ expression: provider_metadata
"owner": "my-org",
"repository": "adrien-python-test",
"event": "pull_request",
"sender": {
"id": "19605940",
"login": "adriencaccia"
},
"ghData": {
"runId": 6957110437,
"job": "log-env",
"sender": {
"id": 19605940,
"login": "adriencaccia"
}
"runId": "6957110437",
"job": "log-env"
},
"glData": null,
"repositoryRootPath": "/home/runner/work/adrien-python-test/adrien-python-test/"
}
Loading
Loading