Display architectures for tags

This commit is contained in:
Gabriel Simmer 2022-12-12 22:09:01 +00:00
parent bd7867aeef
commit 27dabbf641
Signed by: arch
GPG key ID: C81B106D46C5B875
3 changed files with 34 additions and 11 deletions

View file

@ -34,14 +34,6 @@
}; };
dockerImage = pkgs.dockerTools.buildImage { dockerImage = pkgs.dockerTools.buildImage {
copyToRoot = pkgs.buildEnv {
name = "image-root";
paths = [
pkgs.coreutils
pkgs.bash
];
pathsToLink = [ "/bin" ];
};
name = "dref"; name = "dref";
config = { config = {
Cmd = [ "${my-crate}/bin/docker-rs-dashboard" ]; Cmd = [ "${my-crate}/bin/docker-rs-dashboard" ];

View file

@ -106,10 +106,23 @@ footer {
details { details {
font-size: 1.3em; font-size: 1.3em;
cursor: pointer;
border: 2px solid var(--text); border: 2px solid var(--text);
padding: 5px; padding: 5px;
margin: -2px 0; margin: -2px 0;
cursor: default;
}
li span {
margin: 10px;
}
li {
display: flex;
justify-content: space-between;
}
details summary {
cursor: pointer;
} }
details > ul { details > ul {

View file

@ -15,6 +15,7 @@ struct Image {
#[derive(Debug)] #[derive(Debug)]
struct Tag { struct Tag {
name: String, name: String,
architectures: Vec<String>
} }
#[tokio::main(flavor = "multi_thread", worker_threads = 10)] #[tokio::main(flavor = "multi_thread", worker_threads = 10)]
@ -68,7 +69,13 @@ async fn root() -> Markup {
summary { (image.name) } summary { (image.name) }
ul { ul {
@for tag in &image.tags { @for tag in &image.tags {
li { (tag.name) } li { (tag.name)
div {
@for arch in &tag.architectures {
span { (arch) }
}
}
}
} }
} }
} }
@ -104,5 +111,16 @@ async fn get_tags(image: String) -> Result<Vec<Tag>, boxed::Box<dyn error::Error
let tags = dclient.get_tags(image.as_str(), None).collect::<Vec<_>>().await let tags = dclient.get_tags(image.as_str(), None).collect::<Vec<_>>().await
.into_iter() .into_iter()
.map(Result::unwrap).collect::<Vec<String>>(); .map(Result::unwrap).collect::<Vec<String>>();
Ok(tags.into_iter().map(|t| Tag{name: t}).collect()) let tags_complete: Vec<Tag> = join_all(tags.into_iter().map(|t| async { Tag{name: String::from(&t), architectures: get_platforms(&image, t).await.unwrap() }})).await;
Ok(tags_complete)
}
async fn get_platforms(image: &String, tag: String) -> Result<Vec<String>, boxed::Box<dyn error::Error>> {
let host = env::var("DREF_REGISTRY").unwrap();
let dclient = Client::configure()
.insecure_registry(false)
.registry(&host)
.build()?;
let manifest = dclient.get_manifest(image.as_str(), tag.as_str()).await.unwrap();
Ok(manifest.architectures().unwrap())
} }