Skip to content

Commit 5b587af

Browse files
committed
feat: add DevContainer setup (#28)
1 parent 62cd318 commit 5b587af

File tree

3 files changed

+106
-1
lines changed

3 files changed

+106
-1
lines changed

.devcontainer/Dockerfile

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
FROM debian:bookworm-slim
2+
3+
ENV DEBIAN_FRONTEND=noninteractive
4+
ENV PG_MAJOR=17
5+
6+
# Install system dependencies
7+
RUN apt-get update \
8+
&& apt-get install -y --no-install-recommends \
9+
ca-certificates curl gnupg apt-transport-https \
10+
build-essential git pkg-config \
11+
libreadline-dev zlib1g-dev flex bison \
12+
libxml2-dev libxslt-dev libssl-dev \
13+
libxml2-utils xsltproc ccache \
14+
clang libclang-dev \
15+
protobuf-compiler libprotobuf-dev \
16+
sudo \
17+
&& update-ca-certificates \
18+
&& sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list' \
19+
&& curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg \
20+
&& apt-get update \
21+
&& apt-get install -y --no-install-recommends \
22+
postgresql-$PG_MAJOR \
23+
postgresql-server-dev-$PG_MAJOR \
24+
postgresql-common \
25+
&& apt-get clean \
26+
&& rm -rf /var/lib/apt/lists/*
27+
28+
# Create vscode user with sudo access
29+
RUN groupadd --gid 1000 vscode \
30+
&& useradd --uid 1000 --gid 1000 -m -s /bin/bash vscode \
31+
&& echo "vscode ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/vscode \
32+
&& chmod 0440 /etc/sudoers.d/vscode \
33+
&& chown -R vscode:vscode /usr/share/postgresql /usr/lib/postgresql
34+
35+
# Switch to vscode user
36+
USER vscode
37+
WORKDIR /home/vscode
38+
39+
# Set up Rust environment for vscode user
40+
ENV RUSTUP_HOME=/home/vscode/.rustup
41+
ENV CARGO_HOME=/home/vscode/.cargo
42+
ENV PATH="/home/vscode/.cargo/bin:/usr/lib/postgresql/$PG_MAJOR/bin:${PATH}"
43+
44+
# Install Rust
45+
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable \
46+
&& . "$CARGO_HOME/env" \
47+
&& rustup component add clippy rustfmt rust-src
48+
49+
# Install cargo-pgrx
50+
ENV CARGO_PGRX_VERSION=0.16.1
51+
RUN . "$CARGO_HOME/env" \
52+
&& cargo install --force --locked cargo-pgrx@"${CARGO_PGRX_VERSION}"
53+
54+
# Initialize pgrx
55+
RUN . "$CARGO_HOME/env" \
56+
&& cargo pgrx init --pg$PG_MAJOR $(which pg_config)
57+

.devcontainer/devcontainer.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"name": "rust-dev",
3+
"build": {
4+
"dockerfile": "Dockerfile"
5+
},
6+
"features": {
7+
"ghcr.io/devcontainers/features/common-utils:2": {},
8+
"ghcr.io/devcontainers/features/docker-outside-of-docker:1": {},
9+
"ghcr.io/devcontainers/features/git:1": {},
10+
"ghcr.io/devcontainers/features/github-cli:1": {}
11+
},
12+
"customizations": {
13+
"vscode": {
14+
"settings": {
15+
"terminal.integrated.shell.linux": "/bin/bash"
16+
},
17+
"extensions": [
18+
"rust-lang.rust-analyzer",
19+
"fill-labs.dependi",
20+
"mk12.better-git-line-blame"
21+
]
22+
}
23+
},
24+
"remoteUser": "vscode",
25+
"mounts": [
26+
"source=cargo-registry,target=/usr/local/cargo/registry,type=volume"
27+
]
28+
}

README.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,27 @@
22

33
A foreign data wrapper around etcd for postgres
44

5-
## Setup
5+
## Development Setup
6+
7+
### Option 1: Using DevContainer
8+
9+
The easiest way to get started is using the provided DevContainer configuration:
10+
11+
1. **Prerequisites**
12+
- [Docker Desktop](https://www.docker.com/products/docker-desktop/) or Docker Engine
13+
- [VS Code](https://code.visualstudio.com/) with the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
14+
15+
2. **Open in DevContainer**
16+
- Open this project in VS Code
17+
- Press `F1` and select "Dev Containers: Reopen in Container"
18+
- Wait for the container to build (~4 minutes first time)
19+
20+
3. **Start Developing**
21+
- All dependencies are pre-installed (Rust, cargo-pgrx, PostgreSQL 17, protobuf)
22+
- Cargo cache volumes ensure fast rebuilds
23+
- Run `cargo pgrx run` to build and test
24+
25+
### Option 2: Manual Setup
626

727
- Install pgrx on your machine `cargo install --locked cargo-pgrx --version 0.16.1`
828
- Setup pgrx `cargo pgrx init`

0 commit comments

Comments
 (0)