Skip to content

Add devcontainer configuration for YDB Python SDK #585

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Apr 23, 2025
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
8 changes: 8 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
FROM mcr.microsoft.com/devcontainers/python:3.12-bookworm

# [Optional] Uncomment if you want to install more tools
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
# && apt-get -y install --no-install-recommends <your-pkg>

# [Optional] Uncomment if you want to install ydb cli
RUN curl -fsSL https://raw.githubusercontent.com/ydb-platform/ydb/refs/heads/main/ydb/apps/ydb/install/install.sh | bash
6 changes: 6 additions & 0 deletions .devcontainer/commands/initialize.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/bash
set -e

git config --local format.signoff true
git config --local user.name "$(git config user.name)"
git config --local user.email "$(git config user.email)"
27 changes: 27 additions & 0 deletions .devcontainer/commands/postCreate.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/bin/bash
set -e

if git config --get commit.gpgsign | grep -q true; then
git config --global gpg.format ssh
git config --global gpg.ssh.defaultKeyCommand 'ssh-add -L'
git config --global gpg.ssh.allowedSigners '~/.ssh/allowed_signers'
fi

# Set up YDB profile if ydb cli exists
if which ydb > /dev/null 2>&1; then
ENDPOINT=$(echo ${YDB_CONNECTION_STRING_SECURE:-$YDB_CONNECTION_STRING} | awk -F/ '{print $1 "//" $3}')
DATABASE=$(echo ${YDB_CONNECTION_STRING_SECURE:-$YDB_CONNECTION_STRING} | cut -d/ -f4-)
CA_FILE_OPTION=""

if [ -n "$YDB_SSL_ROOT_CERTIFICATES_FILE" ]; then
ENDPOINT="${ENDPOINT/grpc:/grpcs:}"
CA_FILE_OPTION="--ca-file ${YDB_SSL_ROOT_CERTIFICATES_FILE}"
fi

ydb config profile replace local \
--endpoint "$ENDPOINT" \
--database "/$DATABASE" \
$CA_FILE_OPTION

ydb config profile activate local
fi
11 changes: 11 additions & 0 deletions .devcontainer/commands/postStart.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/bash
set -e


# Install dependencies
pip install -r requirements.txt
# Install ydb package
pip install -e .
# Install tox for CI
pip install tox

51 changes: 51 additions & 0 deletions .devcontainer/compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
volumes:
ydb-data:
# driver: local
# driver_opts:
# type: tmpfs
# device: tmpfs
# o: size=80g
ydb-certs:

services:
sdk:
build:
context: .
dockerfile: Dockerfile
hostname: sdk

volumes:
- ydb-certs:/ydb_certs
- ../:/workspaces/ydb-python-sdk:cached

environment:
- YDB_IMAGE_VERSION=24.3
- YDB_CREDENTIALS_USER=root
- YDB_CREDENTIALS_PASSWORD=1234
- YDB_CONNECTION_STRING=grpc://ydb:2136/local
- YDB_CONNECTION_STRING_SECURE=grpcs://ydb:2135/local
- YDB_SSL_ROOT_CERTIFICATES_FILE=/ydb_certs/ca.pem

# Overrides default command so things don't shut down after the process ends.
command: sleep infinity

ydb:
image: ghcr.io/ydb-platform/local-ydb:24.3
restart: unless-stopped
hostname: ydb
platform: linux/amd64

ports:
- 2135:2135
- 2136:2136
- 8765:8765

volumes:
- ydb-data:/ydb_data
- ydb-certs:/ydb_certs

environment:
- YDB_USE_IN_MEMORY_PDISKS=true
- GRPC_TLS_PORT=2135
- GRPC_PORT=2136
- MON_PORT=8765
54 changes: 54 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
{
"name": "Python & YDB",
"service": "sdk",
"dockerComposeFile": "compose.yml",
"workspaceFolder": "/workspaces/ydb-python-sdk",
// Allows the container to use ptrace, which is useful for debugging.
"capAdd": [
"SYS_PTRACE"
],
// Disables seccomp, which can be necessary for some debugging tools to function correctly.
"securityOpt": [
"seccomp=unconfined"
],
// Features to add to the dev container. More info: https://containers.dev/features.
"features": {
"ghcr.io/devcontainers/features/git": {},
"ghcr.io/devcontainers/features/common-utils": {},
"ghcr.io/devcontainers/features/github-cli:1": {}
},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [
2135,
2136,
8765,
9090,
9464
],
// Use 'initializeCommand' to run commands before the container is created.
"initializeCommand": "chmod +x .devcontainer/commands/initialize.sh && .devcontainer/commands/initialize.sh",
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": "chmod +x .devcontainer/commands/postCreate.sh && .devcontainer/commands/postCreate.sh",
// Use 'postStartCommand' to run commands after the container is started.
"postStartCommand": "chmod +x .devcontainer/commands/postStart.sh && .devcontainer/commands/postStart.sh",
// Configure tool-specific properties.
"customizations": {
"vscode": {
"extensions": [
"ms-python.autopep8",
"ms-python.debugpy",
"ms-python.flake8",
"ms-python.isort",
"ms-python.pylint",
"ms-python.python",
"ms-python.vscode-pylance",
"ms-python.vscode-python-envs"
]
}
},
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
"remoteUser": "root",
"mounts": [
"source=${localEnv:HOME}/.ssh/id_ed25519_signing,target=/root/.ssh/id_ed25519_signing,type=bind,readonly"
]
}
Loading