diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index f56941204fe9..0bc05bce48ce 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,7 +1,7 @@ { "name": "carbon-lang", "build": { - "dockerfile": "Dockerfile", + "dockerfile": "../docker/ubuntu2204/base/Dockerfile", "args": { "TAG": "3.5.6" } diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 000000000000..38750fe958e4 --- /dev/null +++ b/docker/README.md @@ -0,0 +1,55 @@ +# Docker + + + +ubuntu:22.04 + +## Build and run image + +### Build + +Building the base image is required. + +``` +docker build -t carbon-ubuntu2204-base ./ubuntu2204/base +``` + +Build image using git repository + +```bash +docker build -t carbon-ubuntu2004 ./ubuntu2204/github +``` + +Build image using copy instruction + +```bash +docker build -f ./ubuntu2204/Dockerfile -t carbon-ubuntu2004 .. +``` + +Run image + +```bash +docker run carbon-ubuntu2004 +``` + +Run image using specific file + +```bash +docker run carbon-ubuntu2004 bazel run //explorer -- ./explorer/testdata/print/format_only.carbon +``` + +### Using a mounted volume + +Run from the repository root for PWD. + +``` +cd .. +``` + +```bash +docker run -w "/carbon-lang" -v "${PWD}:/carbon-lang" "carbon-ubuntu2004-base" bazel run "//explorer" -- "./explorer/testdata/print/format_only.carbon" +``` diff --git a/docker/ubuntu2204/Dockerfile b/docker/ubuntu2204/Dockerfile new file mode 100644 index 000000000000..5463f03b0fd4 --- /dev/null +++ b/docker/ubuntu2204/Dockerfile @@ -0,0 +1,15 @@ +# Part of the Carbon Language project, under the Apache License v2.0 with LLVM +# Exceptions. See /LICENSE for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +FROM carbon-ubuntu2204-base as carbon-ubuntu2204-build + +COPY . /carbon-lang +WORKDIR /carbon-lang + +# Build +RUN bazel build //explorer + +FROM carbon-ubuntu2204-build + +CMD ["bazel", "run", "//explorer", "--", "./explorer/testdata/print/format_only.carbon"] diff --git a/.devcontainer/Dockerfile b/docker/ubuntu2204/base/Dockerfile similarity index 96% rename from .devcontainer/Dockerfile rename to docker/ubuntu2204/base/Dockerfile index de128b284b70..1693d233640e 100644 --- a/.devcontainer/Dockerfile +++ b/docker/ubuntu2204/base/Dockerfile @@ -2,7 +2,7 @@ # Exceptions. See /LICENSE for license information. # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -FROM ubuntu:22.04 +FROM ubuntu:22.04 as carbon-ubuntu2204-base # Install apt tools: # git: Used by VS Code. @@ -21,9 +21,11 @@ RUN apt-get update && \ wget ENV PATH="/root/go/bin:${PATH}" + # Bazelisk is used for Carbon builds. RUN go install github.com/bazelbuild/bazelisk@v1.14.0 RUN ln -s /root/go/bin/bazelisk /root/go/bin/bazel + # Buildifier is used by the Bazel VS Code extension. RUN go install github.com/bazelbuild/buildtools/buildifier@5.1.0 @@ -32,6 +34,7 @@ RUN wget https://apt.llvm.org/llvm.sh RUN chmod +x llvm.sh RUN ./llvm.sh 15 all RUN rm llvm.sh + # Add the lib dir to the PATH. This helps Bazel find clang and VS Code find # clangd, without version suffixes. ENV PATH="/usr/lib/llvm-15/bin:${PATH}" diff --git a/docker/ubuntu2204/github/Dockerfile b/docker/ubuntu2204/github/Dockerfile new file mode 100644 index 000000000000..3df83a09bdc8 --- /dev/null +++ b/docker/ubuntu2204/github/Dockerfile @@ -0,0 +1,20 @@ +# Part of the Carbon Language project, under the Apache License v2.0 with LLVM +# Exceptions. See /LICENSE for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +FROM carbon-ubuntu2204-base as carbon-ubuntu2204-github-build + +# Clone git repository +RUN git clone https://github.com/carbon-language/carbon-lang + +WORKDIR /carbon-lang + +# Setup pre-commit +RUN pre-commit install + +# Build +RUN bazel build //explorer + +FROM carbon-ubuntu2204-github-build + +CMD ["bazel", "run", "//explorer", "--", "./explorer/testdata/print/format_only.carbon"] diff --git a/docs/project/contribution_tools.md b/docs/project/contribution_tools.md index 1e47663ce71f..83aad3eeb49e 100644 --- a/docs/project/contribution_tools.md +++ b/docs/project/contribution_tools.md @@ -191,7 +191,7 @@ considering if they fit your workflow. - After following the [installation instructions](https://code.visualstudio.com/docs/remote/containers#_installation), you should be prompted to use Carbon's - [devcontainer](/.devcontainer/Dockerfile) with "Reopen in + [devcontainer](/.devcontainer/devcontainer.json) with "Reopen in container". ### Manually building Clang and LLVM (not recommended)