diff --git a/.devcontainer/Dockerfile.template b/.devcontainer/Dockerfile.template new file mode 100644 index 000000000..57333753c --- /dev/null +++ b/.devcontainer/Dockerfile.template @@ -0,0 +1,58 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# This Dockerfile is used to build a development container for Iceberg C++. +# It is based on the Ubuntu image and installs necessary dependencies. + +FROM ubuntu:24.04 + +# Install necessary packages +RUN apt update && \ + apt install -y \ + bash-completion \ + build-essential \ + ccache \ + cmake \ + curl \ + gcc \ + g++ \ + git \ + htop \ + libboost-all-dev \ + libcurl4-openssl-dev \ + libssl-dev \ + libxml2-dev \ + lsb-release \ + meson \ + ninja-build \ + pkg-config \ + python3 \ + python3-pip \ + vim \ + wget \ + sudo \ + && rm -rf /var/lib/apt/lists/* + +# Add a user for development +RUN useradd -ms /bin/bash iceberg && \ + usermod -aG sudo iceberg && \ + echo "iceberg ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/iceberg && \ + chmod 0440 /etc/sudoers.d/iceberg + +# Switch to the iceberg user +USER iceberg +WORKDIR /home/iceberg diff --git a/.devcontainer/devcontainer.json.template b/.devcontainer/devcontainer.json.template new file mode 100644 index 000000000..dea152b76 --- /dev/null +++ b/.devcontainer/devcontainer.json.template @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +{ + "name": "Iceberg CPP Dev Container", + "build": { + "dockerfile": "Dockerfile" + }, + "runArgs": [ + "--ulimit=core=-1", + "--cap-add=SYS_ADMIN", + "--cap-add=SYS_PTRACE", + "--cap-add=PERFMON", + "--security-opt", + "seccomp=unconfined", + "--privileged" + ], + "mounts": [ + "source=${localEnv:HOME}/.ssh,target=/home/iceberg/.ssh,type=bind,readonly" + ], + "customizations": { + "vscode": { + "extensions": [ + "eamodio.gitlens" + ], + "settings": { + "editor.formatOnSave": true + } + } + } +} diff --git a/.gitignore b/.gitignore index 8cd4f4e10..9e79c86e7 100644 --- a/.gitignore +++ b/.gitignore @@ -20,12 +20,16 @@ cmake-build-debug/ cmake-build-release/ .DS_Store - # intellij files .idea # vscode files .vscode +.cache + +# devcontainer +.devcontainer/* +!.devcontainer/*.template # meson subprojects - wrap files need to be kept to let meson download # dependencies as needed, but dependencies themselves should not be versioned diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4ee4a0b83..7a10bbb63 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -33,7 +33,7 @@ repos: rev: v20.1.8 hooks: - id: clang-format - exclude: ^src/iceberg/test/resources/.*\.json$ + exclude_types: [json] - repo: https://github.com/cheshirekow/cmake-format-precommit rev: v0.6.10 diff --git a/README.md b/README.md index 7dd32a980..26bcf5a2b 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,20 @@ pre-commit install This will setup a git pre-commit-hook that is executed on each commit and will report the linting problems. To run all hooks on all files use `pre-commit run -a`. +### Dev Containers + +We provide Dev Container configuration file templates. + +To use a Dev Container as your development environment, follow the steps below, then select `Dev Containers: Reopen in Container` from VS Code's Command Palette. + +``` +cd .devcontainer +cp Dockerfile.template Dockerfile +cp devcontainer.json.template devcontainer.json +``` + +If you make improvements that could benefit all developers, please update the template files and submit a pull request. + ## License Licensed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)