remove id and improve naming of logs

This commit is contained in:
askiiart 2025-01-18 15:14:28 -06:00
parent 6d0a3ec4f2
commit 2809459d8b
Signed by untrusted user who does not match committer: askiiart
GPG key ID: 6A32977DAF31746A
5 changed files with 25 additions and 26 deletions

View file

@ -2,8 +2,6 @@
This is Gregory. Gregory controls repos. Gregory keeps track of updating repos, trying to be simple and elegant, but enough.
## THIS IS A PROTOTYPE
## Documentation
Go look at [`docs/`](/docs/)

View file

@ -28,9 +28,6 @@ Note: This primarily uses LibreWolf and Fedora as examples of packages and distr
## Job config
- `id` (string): An ID to identify the job, such as the compilation of a program **(highly recommended)**
- Default is `-1` for unassigned
- If you just want to run stuff, you don't need this, but it's *highly* recommended as it allows you to filter your logs.
- `revision` (string): A revision id for the job, such as a version number for a compilation script
- Default is `1`
- `threads` (float): The maximum number of vCPUs/threads to dedicate to a job; this can be a fractional number
@ -56,9 +53,9 @@ Example:
[packages.librewolf]
dependencies = ["some-librewolf-dependency"]
version_check = ["check-version --whenever-you-feel-like-it-please"]
[packages.librewolf.compilation]
id = "1"
revision = "2"
threads = 8
image = "docker.io/library/debian"
@ -75,7 +72,11 @@ Example:
volumes = ["librewolf"]
```
Aside from just the jobs, `packages` also contains the `dependencies` field, which lists dependencies for this package which gregory manages - don't list external dependencies in that field.
`packages` contains the following fields:
- `dependencies` (array): Lists dependencies for this package which gregory manages - don't list external dependencies in that field. This isn't required, but will ensure that gregory doesn't have to be run multiple times to get a package up-to-date.
- Note that the repo will be updated (`[update-repo]`) after any dependency it updated
- `version-check` (array): Commands to be run to check the version of the package; what's printed to `stdout` will be counted as the version, and if anything is printed to `stderr`, the package will be ignored and an error will be logged. Additionally, if the package version seems to have decreased, then a warning will be logged.
### Compilation (optional)
@ -89,7 +90,6 @@ It's defined in this format:
[packages.librewolf]
[packages.librewolf.compilation]
id = "1"
revision = "2"
threads = 8
image = "docker.io/library/debian"

View file

@ -6,9 +6,9 @@ max-threads = 10
[packages.librewolf]
dependencies = ["some-librewolf-dependency"]
version_check = ["check-version --whenever-you-feel-like-it-please"]
[packages.librewolf.compilation]
id = "1"
revision = "2"
threads = 6
image = "docker.io/library/debian"
@ -27,7 +27,6 @@ max-threads = 10
[packages.some-librewolf-dependency]
[packages.some-librewolf-dependency.compilation]
id = "2"
revision = "4"
threads = 2
image = "docker.io/library/debian"
@ -35,7 +34,6 @@ max-threads = 10
volumes = ["other-workspace"]
[packages.some-librewolf-dependency.packaging.fedora]
id = "3"
revision = "2"
threads = 2
image = "docker.io/library/fedora"

View file

@ -35,9 +35,7 @@ pub(crate) struct Config {
/// Holds the data for a job
#[derive(Debug, Clone, Deserialize)]
pub(crate) struct Job {
/// An ID to identify the job, such as the compilation of a program
#[serde(default = "id")]
pub(crate) id: String,
/// What revision of the job config, temporary until better revision tracking is added
#[serde(default = "revision")]
pub(crate) revision: String,
/// How many threads to limit this job to; recommended to set it to the max threads the job will use

View file

@ -3,6 +3,7 @@ use crate::data::*;
use better_commands;
use clap::{CommandFactory, Parser};
use clap_complete::aot::{generate, Bash, Elvish, Fish, PowerShell, Zsh};
use std::collections::HashMap;
use std::fs::create_dir_all;
use std::fs::remove_dir_all;
use std::fs::write;
@ -52,38 +53,40 @@ fn main() {
fn run(config_path: String) {
let config = config_from_file(config_path).unwrap();
let mut jobs: Vec<Job> = Vec::new();
let mut jobs: HashMap<String, Job> = HashMap::new();
for (package_name, package) in config.clone().packages {
for (_, package) in config.clone().packages {
match package.compilation {
Some(tmp) => {
jobs.push(tmp);
jobs.insert(format!("packages.{}.compilation", package_name), tmp);
}
None => {}
}
for (_, job) in package.packaging {
jobs.push(job);
for (packaging_name, job) in package.packaging {
jobs.insert(format!("packages.{}.{}", package_name, packaging_name), job);
}
}
for (_, job) in config.clone().update_repo {
jobs.push(job);
for (repo, job) in config.clone().update_repo {
jobs.insert(format!("update-repo.{}", repo), job);
}
for job in jobs {
println!("{:#?}", run_job(config.clone(), job));
for (job_name, job) in jobs {
println!("{:#?}", run_job(config.clone(), job_name, job));
}
}
fn run_job(conf: Config, job: Job) -> JobExitStatus {
fn run_job(conf: Config, job_name: String, job: Job) -> JobExitStatus {
// limit threads to max_threads in the config
let mut threads = job.threads;
if job.threads > conf.max_threads {
threads = conf.max_threads;
}
let container_name: String = format!("gregory-{}-{}-{}", job.id, job.revision, Uuid::now_v7());
let container_name: String = format!("gregory-{}-{}-{}", job_name, job.revision, Uuid::now_v7());
// do job log setup
let log_path = &format!("{}/logs/{container_name}", conf.data_dir); // can't select fields in the format!() {} thing, have to do this
@ -108,6 +111,7 @@ fn run_job(conf: Config, job: Job) -> JobExitStatus {
.permissions();
PermissionsExt::set_mode(&mut perms, 0o755);
// run the job
let mut cmd_args: Vec<String> = vec![
"run".to_string(),
format!("--name={container_name}"),
@ -150,7 +154,8 @@ fn run_job(conf: Config, job: Job) -> JobExitStatus {
}
},
);
// remove tmp dir
// remove tmp dir/clean up
remove_dir_all(script_dir).unwrap();
println!("{:?}", cmd_output);