Skip to content
Merged
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
58 changes: 58 additions & 0 deletions .devcontainer/Dockerfile.template
Original file line number Diff line number Diff line change
@@ -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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want to move this to a dedicated dev/docker folder? We might want to add a dockerfile for the rest catalog server as well.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, let's move it into .devcontainer, then it will not affect other dockerfiles.


# 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
47 changes: 47 additions & 0 deletions .devcontainer/devcontainer.json.template
Original file line number Diff line number Diff line change
@@ -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
}
}
}
}
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Loading