Skip to content
Open
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
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ RUN echo "Hello World"
ENTRYPOINT [ "mybin" ]
```

### INCLUDE_OPTIONAL+

The same as `INCLUDE+`, but the build won't fail if the referenced file does not exist.
## Roadmap

The next features in line would be:
Expand Down
3 changes: 2 additions & 1 deletion dockerfile-plus/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ FROM rust:latest as builder
USER root

WORKDIR /rust-src
COPY . /rust-src

RUN apt update && apt upgrade -y && apt install -y gcc-x86-64-linux-gnu gcc-aarch64-linux-gnu

RUN rustup target add "$(uname -m)-unknown-linux-musl"

COPY . /rust-src

RUN --mount=type=cache,target=/rust-src/target \
--mount=type=cache,target=/root/.cargo/git \
--mount=type=cache,target=/root/.cargo/registry \
Expand Down
13 changes: 11 additions & 2 deletions dockerfile-plus/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ struct DockerfileOptions {
}

const INCLUDE_COMMAND: &str = "INCLUDE+";
const INCLUDE_OPTIONAL_COMMAND: &str = "INCLUDE_OPTIONAL+";

async fn dockerfile_trap(
mut client: LlbBridgeClient<Channel>,
Expand All @@ -127,7 +128,15 @@ async fn dockerfile_trap(
.with_context(|| format!("Could not read file \"{}\". Remember that the file path is relative to the build context, not the Dockerfile path.", file_path))?;
//recurse
for l2 in std::str::from_utf8(&bytes)?.to_string().lines() {
replace(&l2.to_string(), r, c, &ctx)? ;
replace(&l2.to_string(), r, c, &ctx)?;
}
} else if let Some(file_path) = l.trim().strip_prefix(INCLUDE_OPTIONAL_COMMAND) {
if let Ok(bytes) =
executor::block_on(read_file(c, &ctx, file_path.trim_start().to_string(), None)) {
//recurse
for l2 in std::str::from_utf8(&bytes)?.to_string().lines() {
replace(&l2.to_string(), r, c, &ctx)?;
}
}
} else {
r.push(l.to_string());
Expand All @@ -136,7 +145,7 @@ async fn dockerfile_trap(
}

for line in dockerfile_contents.lines() {
replace(&line.to_string(), &mut result, &mut client, &context_layer)? ;
replace(&line.to_string(), &mut result, &mut client, &context_layer)?;
}
let dockerfile_contents = result.join("\n");
dockerfile_frontend.solve(&dockerfile_contents).await
Expand Down