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)