This is an automated email from the ASF dual-hosted git repository.

gangwu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg-cpp.git


The following commit(s) were added to refs/heads/main by this push:
     new acd62e3  feat: add devcontainer (#313)
acd62e3 is described below

commit acd62e381d4cfd1d590a977b1e484c614326d3de
Author: Junwang Zhao <[email protected]>
AuthorDate: Fri Nov 14 10:51:39 2025 +0800

    feat: add devcontainer (#313)
---
 .devcontainer/Dockerfile.template        | 58 ++++++++++++++++++++++++++++++++
 .devcontainer/devcontainer.json.template | 47 ++++++++++++++++++++++++++
 .gitignore                               |  6 +++-
 .pre-commit-config.yaml                  |  2 +-
 README.md                                | 14 ++++++++
 5 files changed, 125 insertions(+), 2 deletions(-)

diff --git a/.devcontainer/Dockerfile.template 
b/.devcontainer/Dockerfile.template
new file mode 100644
index 0000000..5733375
--- /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 0000000..dea152b
--- /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 8cd4f4e..9e79c86 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 4ee4a0b..7a10bbb 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 7dd32a9..26bcf5a 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)

Reply via email to