Display architectures for tags
This commit is contained in:
parent
bd7867aeef
commit
27dabbf641
|
@ -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" ];
|
||||||
|
|
15
src/css.rs
15
src/css.rs
|
@ -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 {
|
||||||
|
|
22
src/main.rs
22
src/main.rs
|
@ -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())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue