1
0
Fork 0
mirror of https://codeberg.org/icewind/haze.git synced 2026-10-01 16:54:08 +02:00

Compare commits

..

No commits in common. "main" and "v2.4.2" have entirely different histories.

25 changed files with 63 additions and 161 deletions

View file

@ -23,4 +23,3 @@ worktrees
config config
stdin stdin
stdout stdout
direnv

View file

@ -1,80 +0,0 @@
# Developing
## Setup
### Nix based development environment
The recommended way to setup the development environment is to use
[Lix](https://lix.systems/install/)/[Nix](https://nixos.org/download/).
Once installed, you can enter the development shell using `nix develop` or,
setup [direnv](https://direnv.net/) to automatically enter the development shell
when you enter the folder.
The development shell provides all necessary tooling to develop haze.
### Without Nix
The fooling tools need to be setup to develop without using Nix to manage the
development setup:
- [`cargo`](https://doc.rust-lang.org/cargo/getting-started/installation.html) -
For building the program
- [`mdbook`](https://github.com/rust-lang/mdBook) - For building the
documentation
- [`prettier`](https://prettier.io/) - For formatting the non-rust files
- [`vale`](https://vale.sh/) - For checking documentation
## Building
```bash
cargo build
```
The binary can then be found at `target/debug/haze`.
## Formatting
### With Nix
```bash
nix fmt
```
### Without Nix
#### Rust code
```bash
cargo fmt
```
#### Documentation
```bash
prettier --write '**/*.md'
```
### Building documentation
```bash
mdbook serve
```
### Checking documentation
```bash
vale src/ book/src/ book/README.md *.md
```
### Run all checks
```bash
nix flake check
```
### Building docker images
```bash
nix run .#'"haze-image-php-8.4"'.copyToDockerDaemon
```

View file

@ -35,7 +35,3 @@ Documentation for haze can be found in the
- Navigate to the address that is provided in the output. - Navigate to the address that is provided in the output.
See the [book](https://icewind.codeberg.page/haze/) for more details. See the [book](https://icewind.codeberg.page/haze/) for more details.
## Developing
See [DEVELOPING.md](./DEVELOPING.md) for information on how to work on `haze`.

View file

@ -19,7 +19,7 @@ IDE debugger configuration usually looks like:
This would have to be adapted for detached instances. This would have to be adapted for detached instances.
## Debugging all requests ### Debugging all requests
By default, Xdebug is configured to only run for requests that containing the By default, Xdebug is configured to only run for requests that containing the
trigger (e.g. from using the Xdebug browser extension, or adding trigger (e.g. from using the Xdebug browser extension, or adding
@ -29,8 +29,3 @@ To enable Xdebug for all requests:
- Un-comment the lines in `haze [cloud-id] edit /config/php.ini` - Un-comment the lines in `haze [cloud-id] edit /config/php.ini`
- Then run `haze reload [cloud-id]` - Then run `haze reload [cloud-id]`
## Xdebug profile and trace files
When enabling Xdebug trace or profile mode, the generated files can be found in
`<work-dir>/<instance id>/xdebug`.

View file

@ -69,7 +69,7 @@
]; ];
checks = { checks = {
vale = {vale, ...}: "${vale}/bin/vale src/ book/src/ book/README.md *.md"; vale = {vale, ...}: "${vale}/bin/vale src/ book/src/ CHANGELOG.md README.md book/README.md";
}; };
homeModules = { homeModules = {

View file

@ -1,6 +1,6 @@
use bollard::Docker;
use bollard::models::CreateImageInfo; use bollard::models::CreateImageInfo;
use bollard::query_parameters::CreateImageOptions; use bollard::query_parameters::CreateImageOptions;
use bollard::Docker;
use futures_util::StreamExt; use futures_util::StreamExt;
use indicatif::{MultiProgress, ProgressBar, ProgressStyle}; use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
use miette::{IntoDiagnostic, Result, WrapErr}; use miette::{IntoDiagnostic, Result, WrapErr};

View file

@ -1,6 +1,6 @@
use crate::cloud::Cloud; use crate::cloud::Cloud;
use bollard::Docker;
use bollard::config::NetworkCreateRequest; use bollard::config::NetworkCreateRequest;
use bollard::Docker;
use miette::{IntoDiagnostic, Result, WrapErr}; use miette::{IntoDiagnostic, Result, WrapErr};
pub async fn clear_networks(docker: &Docker, instances: &[Cloud]) -> Result<()> { pub async fn clear_networks(docker: &Docker, instances: &[Cloud]) -> Result<()> {
@ -12,10 +12,9 @@ pub async fn clear_networks(docker: &Docker, instances: &[Cloud]) -> Result<()>
for network in networks { for network in networks {
if let Some(name) = network.name.as_deref() if let Some(name) = network.name.as_deref()
&& let Some(id) = name.strip_prefix("haze-") && let Some(id) = name.strip_prefix("haze-")
&& !instances.iter().any(|cloud| cloud.id == id) && !instances.iter().any(|cloud| cloud.id == id) {
{ docker.remove_network(name).await.ok();
docker.remove_network(name).await.ok(); }
}
} }
Ok(()) Ok(())
} }

View file

@ -1,13 +1,13 @@
use crate::config::ProxyConfig; use crate::config::ProxyConfig;
use crate::database::Database; use crate::database::Database;
use crate::image::{ImageVersion, image_version, pull_image}; use crate::image::{image_version, pull_image, ImageVersion};
use crate::network::ensure_network_exists; use crate::network::ensure_network_exists;
use crate::service::Service; use crate::service::Service;
use crate::service::ServiceTrait; use crate::service::ServiceTrait;
use bollard::Docker;
use bollard::config::{ContainerCreateBody, NetworkConnectRequest, NetworkingConfig}; use bollard::config::{ContainerCreateBody, NetworkConnectRequest, NetworkingConfig};
use bollard::models::{EndpointSettings, HostConfig}; use bollard::models::{EndpointSettings, HostConfig};
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use itertools::Itertools; use itertools::Itertools;
use maplit::hashmap; use maplit::hashmap;
use miette::{IntoDiagnostic, Report, Result, WrapErr}; use miette::{IntoDiagnostic, Report, Result, WrapErr};
@ -127,16 +127,15 @@ impl PhpVersion {
let image_version = image_version(docker, self.image()).await; let image_version = image_version(docker, self.image()).await;
let haze_version = ImageVersion::from_str(env!("CARGO_PKG_VERSION")); let haze_version = ImageVersion::from_str(env!("CARGO_PKG_VERSION"));
if let (Some(image_version), Ok(haze_version)) = (image_version, haze_version) if let (Some(image_version), Ok(haze_version)) = (image_version, haze_version)
&& image_version < haze_version && image_version < haze_version {
{ eprintln!(
eprintln!( "{}: image version is out of date, run {} to update.",
"{}: image version is out of date, run {} to update.", "Warning".red(),
"Warning".red(), "haze update".blue()
"haze update".blue() );
); eprintln!(" Haze version: {}", haze_version.bright_yellow());
eprintln!(" Haze version: {}", haze_version.bright_yellow()); eprintln!(" Image version: {}", image_version.bright_yellow());
eprintln!(" Image version: {}", image_version.bright_yellow()); }
}
let options = Some(CreateContainerOptions { let options = Some(CreateContainerOptions {
name: Some(id.to_string()), name: Some(id.to_string()),

View file

@ -1,12 +1,12 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::exec::exec; use crate::exec::exec;
use crate::image::pull_image; use crate::image::pull_image;
use crate::service::{ServiceTrait, split_cmnd}; use crate::service::{split_cmnd, ServiceTrait};
use bollard::Docker; use crate::Result;
use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig}; use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig};
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use maplit::hashmap; use maplit::hashmap;
use miette::{IntoDiagnostic, WrapErr}; use miette::{IntoDiagnostic, WrapErr};
use tokio::fs::write; use tokio::fs::write;
@ -92,9 +92,7 @@ impl ServiceTrait for ClamIcap {
split_cmnd("occ config:app:set files_antivirus av_host --value=clamav-icap"), split_cmnd("occ config:app:set files_antivirus av_host --value=clamav-icap"),
split_cmnd("occ config:app:set files_antivirus av_port --value=1344"), split_cmnd("occ config:app:set files_antivirus av_port --value=1344"),
split_cmnd("occ config:app:set files_antivirus av_icap_request_service --value=avscan"), split_cmnd("occ config:app:set files_antivirus av_icap_request_service --value=avscan"),
split_cmnd( split_cmnd("occ config:app:set files_antivirus av_icap_response_header --value=X-Infection-Found"),
"occ config:app:set files_antivirus av_icap_response_header --value=X-Infection-Found",
),
]) ])
} }
} }
@ -198,9 +196,7 @@ impl ServiceTrait for ClamIcapTls {
split_cmnd("occ config:app:set files_antivirus av_host --value=clamav-icap-tls"), split_cmnd("occ config:app:set files_antivirus av_host --value=clamav-icap-tls"),
split_cmnd("occ config:app:set files_antivirus av_port --value=1345"), split_cmnd("occ config:app:set files_antivirus av_port --value=1345"),
split_cmnd("occ config:app:set files_antivirus av_icap_request_service --value=avscan"), split_cmnd("occ config:app:set files_antivirus av_icap_request_service --value=avscan"),
split_cmnd( split_cmnd("occ config:app:set files_antivirus av_icap_response_header --value=X-Infection-Found"),
"occ config:app:set files_antivirus av_icap_response_header --value=X-Infection-Found",
),
split_cmnd("occ security:certificates:import data/icap-cert.pem"), split_cmnd("occ security:certificates:import data/icap-cert.pem"),
]) ])
} }

View file

@ -1,12 +1,12 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::image::pull_image; use crate::image::pull_image;
use crate::service::{ServiceTrait, split_cmnd}; use crate::service::{split_cmnd, ServiceTrait};
use bollard::Docker; use crate::Result;
use bollard::config::ContainerCreateBody; use bollard::config::ContainerCreateBody;
use bollard::models::{EndpointSettings, HostConfig, NetworkingConfig}; use bollard::models::{EndpointSettings, HostConfig, NetworkingConfig};
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use maplit::hashmap; use maplit::hashmap;
use miette::IntoDiagnostic; use miette::IntoDiagnostic;

View file

@ -1,12 +1,12 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::image::pull_image; use crate::image::pull_image;
use crate::service::{ServiceTrait, split_cmnd}; use crate::service::{split_cmnd, ServiceTrait};
use bollard::Docker; use crate::Result;
use bollard::config::NetworkingConfig; use bollard::config::NetworkingConfig;
use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig}; use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig};
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use maplit::hashmap; use maplit::hashmap;
use miette::IntoDiagnostic; use miette::IntoDiagnostic;

View file

@ -1,14 +1,14 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::exec::exec; use crate::exec::exec;
use crate::image::{image_exists, pull_image}; use crate::image::{image_exists, pull_image};
use crate::service::{ServiceTrait, split_cmnd}; use crate::service::{split_cmnd, ServiceTrait};
use bollard::Docker; use crate::Result;
use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig}; use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig};
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use maplit::hashmap; use maplit::hashmap;
use miette::{IntoDiagnostic, bail}; use miette::{bail, IntoDiagnostic};
use std::io::Stdout; use std::io::Stdout;
#[derive(Debug, Clone, Eq, PartialEq)] #[derive(Debug, Clone, Eq, PartialEq)]

View file

@ -1,12 +1,12 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::{HazeConfig, ProxyConfig}; use crate::config::{HazeConfig, ProxyConfig};
use crate::image::pull_image; use crate::image::pull_image;
use crate::service::{ServiceTrait, split_cmnd}; use crate::service::{split_cmnd, ServiceTrait};
use bollard::Docker; use crate::Result;
use bollard::config::NetworkingConfig; use bollard::config::NetworkingConfig;
use bollard::models::{ContainerCreateBody, ContainerState, EndpointSettings, HostConfig}; use bollard::models::{ContainerCreateBody, ContainerState, EndpointSettings, HostConfig};
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use maplit::hashmap; use maplit::hashmap;
use miette::{IntoDiagnostic, Report}; use miette::{IntoDiagnostic, Report};
use std::net::IpAddr; use std::net::IpAddr;
@ -102,9 +102,7 @@ impl ServiceTrait for Ldap {
split_cmnd("occ ldap:set-config s01 ldapBase dc=example,dc=org"), split_cmnd("occ ldap:set-config s01 ldapBase dc=example,dc=org"),
split_cmnd("occ ldap:set-config s01 ldapBaseUsers dc=example,dc=org"), split_cmnd("occ ldap:set-config s01 ldapBaseUsers dc=example,dc=org"),
split_cmnd("occ ldap:set-config s01 ldapBaseGroups dc=example,dc=org"), split_cmnd("occ ldap:set-config s01 ldapBaseGroups dc=example,dc=org"),
split_cmnd( split_cmnd("occ ldap:set-config s01 ldapLoginFilter (&(&(objectclass=inetOrgPerson))(uid=%uid))"),
"occ ldap:set-config s01 ldapLoginFilter (&(&(objectclass=inetOrgPerson))(uid=%uid))",
),
split_cmnd("occ ldap:set-config s01 ldapUserFilter ((objectclass=inetOrgPerson))"), split_cmnd("occ ldap:set-config s01 ldapUserFilter ((objectclass=inetOrgPerson))"),
split_cmnd("occ ldap:set-config s01 ldapUserFilterMode 0"), split_cmnd("occ ldap:set-config s01 ldapUserFilterMode 0"),
split_cmnd("occ ldap:set-config s01 ldapUserDisplayName sn"), split_cmnd("occ ldap:set-config s01 ldapUserDisplayName sn"),

View file

@ -1,11 +1,11 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::image::pull_image; use crate::image::pull_image;
use crate::service::{ServiceTrait, split_cmnd}; use crate::service::{split_cmnd, ServiceTrait};
use bollard::Docker; use crate::Result;
use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig}; use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig};
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use maplit::hashmap; use maplit::hashmap;
use miette::IntoDiagnostic; use miette::IntoDiagnostic;

View file

@ -1,13 +1,13 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::exec::exec; use crate::exec::exec;
use crate::image::pull_image; use crate::image::pull_image;
use crate::service::ServiceTrait; use crate::service::ServiceTrait;
use bollard::Docker; use crate::Result;
use bollard::config::NetworkingConfig; use bollard::config::NetworkingConfig;
use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig}; use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig};
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use maplit::hashmap; use maplit::hashmap;
use miette::IntoDiagnostic; use miette::IntoDiagnostic;
use std::io::Stdout; use std::io::Stdout;

View file

@ -1,13 +1,13 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::image::pull_image; use crate::image::pull_image;
use crate::service::ServiceTrait; use crate::service::ServiceTrait;
use bollard::Docker; use crate::Result;
use bollard::models::{ use bollard::models::{
ContainerCreateBody, ContainerState, EndpointSettings, HostConfig, NetworkingConfig, ContainerCreateBody, ContainerState, EndpointSettings, HostConfig, NetworkingConfig,
}; };
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use maplit::hashmap; use maplit::hashmap;
use miette::{IntoDiagnostic, Report}; use miette::{IntoDiagnostic, Report};

View file

@ -1,14 +1,14 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::exec::exec; use crate::exec::exec;
use crate::image::pull_image; use crate::image::pull_image;
use crate::service::{ServiceTrait, split_cmnd}; use crate::service::{split_cmnd, ServiceTrait};
use bollard::Docker; use crate::Result;
use bollard::models::{ use bollard::models::{
ContainerCreateBody, ContainerState, EndpointSettings, HostConfig, NetworkingConfig, ContainerCreateBody, ContainerState, EndpointSettings, HostConfig, NetworkingConfig,
}; };
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use maplit::hashmap; use maplit::hashmap;
use miette::{IntoDiagnostic, Report}; use miette::{IntoDiagnostic, Report};
use std::net::Ipv4Addr; use std::net::Ipv4Addr;

View file

@ -1,11 +1,11 @@
use std::io::stdout; use std::io::stdout;
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::database::DatabaseFamily; use crate::database::DatabaseFamily;
use crate::exec::exec; use crate::exec::exec;
use crate::service::ServiceTrait; use crate::service::ServiceTrait;
use crate::Result;
use bollard::Docker; use bollard::Docker;
use miette::Report; use miette::Report;

View file

@ -2,9 +2,9 @@ use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::image::pull_image; use crate::image::pull_image;
use crate::service::ServiceTrait; use crate::service::ServiceTrait;
use bollard::Docker;
use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig}; use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig};
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use local_ip_address::list_afinet_netifas; use local_ip_address::list_afinet_netifas;
use maplit::hashmap; use maplit::hashmap;
use miette::{IntoDiagnostic, Result}; use miette::{IntoDiagnostic, Result};

View file

@ -1,11 +1,11 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::image::pull_image; use crate::image::pull_image;
use crate::service::{ServiceTrait, split_cmnd}; use crate::service::{split_cmnd, ServiceTrait};
use bollard::Docker; use crate::Result;
use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig}; use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig};
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use maplit::hashmap; use maplit::hashmap;
use miette::IntoDiagnostic; use miette::IntoDiagnostic;

View file

@ -1,11 +1,11 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::image::pull_image; use crate::image::pull_image;
use crate::service::{ServiceTrait, split_cmnd}; use crate::service::{split_cmnd, ServiceTrait};
use bollard::Docker; use crate::Result;
use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig}; use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig};
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use maplit::hashmap; use maplit::hashmap;
use miette::{Context, IntoDiagnostic}; use miette::{Context, IntoDiagnostic};
use std::fs::{create_dir_all, write}; use std::fs::{create_dir_all, write};

View file

@ -1,14 +1,14 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::database::DatabaseFamily; use crate::database::DatabaseFamily;
use crate::service::ServiceTrait; use crate::service::ServiceTrait;
use crate::Result;
use bollard::Docker; use bollard::Docker;
use futures_util::future::try_join_all; use futures_util::future::try_join_all;
use maplit::hashmap; use maplit::hashmap;
use miette::Report; use miette::Report;
use serde_json::Value;
use serde_json::json; use serde_json::json;
use serde_json::Value;
use std::collections::HashMap; use std::collections::HashMap;
use std::convert::identity; use std::convert::identity;

View file

@ -1,11 +1,11 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::image::pull_image; use crate::image::pull_image;
use crate::service::{ServiceTrait, split_cmnd}; use crate::service::{split_cmnd, ServiceTrait};
use bollard::Docker; use crate::Result;
use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig}; use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig};
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use maplit::hashmap; use maplit::hashmap;
use miette::IntoDiagnostic; use miette::IntoDiagnostic;

View file

@ -1,11 +1,11 @@
use crate::Result;
use crate::cloud::CloudOptions; use crate::cloud::CloudOptions;
use crate::config::HazeConfig; use crate::config::HazeConfig;
use crate::image::pull_image; use crate::image::pull_image;
use crate::service::ServiceTrait; use crate::service::ServiceTrait;
use bollard::Docker; use crate::Result;
use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig}; use bollard::models::{ContainerCreateBody, EndpointSettings, HostConfig, NetworkingConfig};
use bollard::query_parameters::CreateContainerOptions; use bollard::query_parameters::CreateContainerOptions;
use bollard::Docker;
use maplit::hashmap; use maplit::hashmap;
use miette::IntoDiagnostic; use miette::IntoDiagnostic;

View file

@ -10,8 +10,8 @@ use std::io::Cursor;
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};
use std::time::Duration; use std::time::Duration;
use tokio::fs::create_dir_all; use tokio::fs::create_dir_all;
use zip::ZipArchive;
use zip::read::root_dir_common_filter; use zip::read::root_dir_common_filter;
use zip::ZipArchive;
pub struct Sources { pub struct Sources {
#[allow(dead_code)] #[allow(dead_code)]