-
Notifications
You must be signed in to change notification settings - Fork 27
CHORE: Create devcontainer for repo #147
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
Changes from all commits
a93e2ff
2383b7b
1f50584
6f79cd2
1e4c8cc
92b1c1f
78d129f
b5e940a
306ae47
386b81b
9dd343b
19f635e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,69 @@ | ||
| # Use Python 3.10 with Debian Bullseye as the base image | ||
| FROM mcr.microsoft.com/devcontainers/python:3.10-bullseye | ||
|
|
||
| # Set environment variables | ||
| ENV DEBIAN_FRONTEND=noninteractive | ||
| ENV PYTHONPATH=/workspaces/mssql-python | ||
| ENV CMAKE_BUILD_TYPE=Debug | ||
|
|
||
| # Install system dependencies | ||
| RUN apt-get update && apt-get install -y \ | ||
| # Build tools | ||
| build-essential \ | ||
| cmake \ | ||
| pkg-config \ | ||
| ninja-build \ | ||
| # Additional tools | ||
| curl \ | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. the pre-installations are part of the post-create script as well.. just checking, can we maybe remove things from either here or post-create? there might be any redundancies which can add to build time There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Good catch. I will remove the redundant dependencies from Post-create. |
||
| wget \ | ||
| git \ | ||
| vim \ | ||
| nano \ | ||
| htop \ | ||
| tree \ | ||
| jq \ | ||
| # Clean up | ||
| && apt-get clean \ | ||
| && rm -rf /var/lib/apt/lists/* | ||
|
|
||
| # Install Microsoft ODBC Driver for SQL Server | ||
| RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \ | ||
| && curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list \ | ||
| && apt-get update \ | ||
| && ACCEPT_EULA=Y apt-get install -y msodbcsql18 \ | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same for odbc installation |
||
| && ACCEPT_EULA=Y apt-get install -y mssql-tools18 \ | ||
| && apt-get clean \ | ||
| && rm -rf /var/lib/apt/lists/* | ||
|
|
||
| # Add mssql-tools to PATH | ||
| ENV PATH="$PATH:/opt/mssql-tools18/bin" | ||
|
|
||
| # Upgrade pip and install common Python development tools | ||
| RUN python -m pip install --upgrade pip setuptools wheel \ | ||
| && pip install \ | ||
| black \ | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we have the minimum requirements available in |
||
| flake8 \ | ||
| mypy \ | ||
| isort \ | ||
| pre-commit \ | ||
| twine \ | ||
| build \ | ||
| wheel \ | ||
| "pybind11[global]" \ | ||
| pytest-xdist \ | ||
| pytest-mock \ | ||
| "coverage[toml]" | ||
|
|
||
| # Set the default user to vscode (created by the base image) | ||
| USER vscode | ||
|
|
||
| # Set the working directory | ||
| WORKDIR /workspaces/mssql-python | ||
|
|
||
| # Add helpful aliases to .bashrc | ||
| RUN echo 'alias ll="ls -alF"' >> ~/.bashrc \ | ||
| && echo 'alias la="ls -A"' >> ~/.bashrc \ | ||
| && echo 'alias l="ls -CF"' >> ~/.bashrc | ||
|
|
||
| # Default command | ||
| CMD ["/bin/bash"] | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,76 @@ | ||
| { | ||
| "name": "MSSQL Python Driver", | ||
| "build": { | ||
| "dockerfile": "Dockerfile", | ||
| "context": "." | ||
| }, | ||
| // Configure tool-specific properties. | ||
| "customizations": { | ||
| // Configure properties specific to VS Code. | ||
| "vscode": { | ||
| // Set *default* container specific settings.json values on container create. | ||
| "settings": { | ||
| "python.defaultInterpreterPath": "/usr/local/bin/python", | ||
| "python.linting.enabled": true, | ||
| "python.linting.pylintEnabled": true, | ||
| "python.formatting.autopep8Path": "/usr/local/py-utils/bin/autopep8", | ||
| "python.formatting.blackPath": "/usr/local/py-utils/bin/black", | ||
| "python.formatting.yapfPath": "/usr/local/py-utils/bin/yapf", | ||
| "python.linting.banditPath": "/usr/local/py-utils/bin/bandit", | ||
| "python.linting.flake8Path": "/usr/local/py-utils/bin/flake8", | ||
| "python.linting.mypyPath": "/usr/local/py-utils/bin/mypy", | ||
| "python.linting.pycodestylePath": "/usr/local/py-utils/bin/pycodestyle", | ||
| "python.linting.pydocstylePath": "/usr/local/py-utils/bin/pydocstyle", | ||
| "python.linting.pylintPath": "/usr/local/py-utils/bin/pylint", | ||
| "cmake.configureOnOpen": false | ||
| }, | ||
| // Add the IDs of extensions you want installed when the container is created. | ||
| "extensions": [ | ||
| "ms-python.python", | ||
| "ms-python.vscode-pylance", | ||
| "ms-python.pylint", | ||
| "ms-toolsai.jupyter", | ||
| "ms-vscode.cmake-tools", | ||
| "ms-vscode.cpptools", | ||
| "ms-vscode.cpptools-extension-pack", | ||
| "github.copilot", | ||
| "github.copilot-chat", | ||
| "ms-vscode.test-adapter-converter", | ||
| "littlefoxteam.vscode-python-test-adapter", | ||
| "ms-azuretools.vscode-docker", | ||
| "ms-mssql.mssql" | ||
| ] | ||
| } | ||
| }, | ||
| // Features to add to the dev container. More info: https://containers.dev/features. | ||
| "features": { | ||
| "ghcr.io/devcontainers/features/git:1": {}, | ||
| "ghcr.io/devcontainers/features/github-cli:1": {}, | ||
| "ghcr.io/devcontainers/features/docker-in-docker:2": {}, | ||
| "ghcr.io/devcontainers/features/common-utils:2": { | ||
| "installZsh": true, | ||
| "configureZshAsDefaultShell": true, | ||
| "installOhMyZsh": true, | ||
| "upgradePackages": true, | ||
| "username": "vscode", | ||
| "userUid": "automatic", | ||
| "userGid": "automatic" | ||
| } | ||
| }, | ||
| // Use 'forwardPorts' to make a list of ports inside the container available locally. | ||
| "forwardPorts": [], | ||
| // Use 'postCreateCommand' to run commands after the container is created. | ||
| "postCreateCommand": "bash .devcontainer/post-create.sh", | ||
| // Use 'postStartCommand' to run commands after the container starts. | ||
| "postStartCommand": "", | ||
| // Configure tool-specific properties. | ||
| "remoteUser": "vscode", | ||
| // Set container environment variables | ||
| "containerEnv": { | ||
| "PYTHONPATH": "/workspaces/mssql-python", | ||
| "CMAKE_BUILD_TYPE": "Debug" | ||
| }, | ||
| // Mount the project directory | ||
| "workspaceMount": "source=${localWorkspaceFolder},target=/workspaces/mssql-python,type=bind,consistency=cached", | ||
| "workspaceFolder": "/workspaces/mssql-python" | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,85 @@ | ||
| #!/bin/bash | ||
|
|
||
| # Post-create script for MSSQL Python Driver devcontainer | ||
| set -e | ||
|
|
||
| echo "🚀 Setting up MSSQL Python Driver development environment..." | ||
|
|
||
| # Update package lists | ||
| echo "📦 Updating package lists..." | ||
| sudo apt-get update | ||
|
|
||
| # Install system dependencies required for the project | ||
| echo "🔧 Installing system dependencies..." | ||
| sudo apt-get install -y \ | ||
| python3 \ | ||
| python3-pip \ | ||
| python3-venv \ | ||
| python3-full \ | ||
| cmake \ | ||
| curl \ | ||
| wget \ | ||
| gnupg \ | ||
| software-properties-common \ | ||
| build-essential \ | ||
| python3-dev \ | ||
| pybind11-dev | ||
|
|
||
| export TZ=UTC | ||
| ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone | ||
|
|
||
| # Install Microsoft ODBC Driver for SQL Server (required for mssql connectivity) | ||
| echo "🗄️ Installing Microsoft ODBC Driver for SQL Server..." | ||
| curl -sSL -O https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb | ||
| sudo dpkg -i packages-microsoft-prod.deb || true | ||
| rm packages-microsoft-prod.deb | ||
|
|
||
| sudo apt-get update | ||
| # Install the driver | ||
| ACCEPT_EULA=Y sudo apt-get install -y msodbcsql18 | ||
| # optional: for bcp and sqlcmd | ||
| ACCEPT_EULA=Y sudo apt-get install -y mssql-tools18 | ||
| # optional: for unixODBC development headers | ||
| sudo apt-get install -y unixodbc-dev | ||
|
|
||
| # Create a Python virtual environment | ||
| echo "🐍 Creating Python virtual environment..." | ||
| python3 -m venv /workspaces/mssql-python/opt/venv | ||
| source /workspaces/mssql-python/opt/venv/bin/activate | ||
|
|
||
| python -m pip install --upgrade pip | ||
|
|
||
| # Make the virtual environment globally available | ||
| echo 'source /workspaces/mssql-python/opt/venv/bin/activate' >> ~/.bashrc | ||
|
|
||
| # Install project dependencies | ||
| echo "📚 Installing project dependencies..." | ||
| pip install -r requirements.txt | ||
|
|
||
| # Create useful aliases | ||
| echo "⚡ Setting up aliases..." | ||
| cat >> ~/.bashrc << 'EOF' | ||
|
|
||
| # MSSQL Python Driver aliases | ||
| alias ll='ls -alF' | ||
| alias la='ls -A' | ||
| alias l='ls -CF' | ||
| alias clean='find . -type f -name "*.pyc" -delete && find . -type d -name "__pycache__" -delete' | ||
|
|
||
| EOF | ||
|
|
||
| # Set up git configuration (if not already configured) | ||
| echo "🔧 Configuring git..." | ||
| if [ -z "$(git config --global user.name)" ]; then | ||
| echo "Git user name not set. You may want to configure it with:" | ||
| echo " git config --global user.name 'Your Name'" | ||
| fi | ||
| if [ -z "$(git config --global user.email)" ]; then | ||
| echo "Git user email not set. You may want to configure it with:" | ||
| echo " git config --global user.email 'your.email@example.com'" | ||
| fi | ||
|
|
||
| # Display information about the environment | ||
| echo "" | ||
| echo "✅ Development environment setup complete!" | ||
|
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,115 @@ | ||
| # Git | ||
| .git | ||
| .gitignore | ||
| .gitattributes | ||
|
|
||
| # Python | ||
| __pycache__ | ||
| *.pyc | ||
| *.pyo | ||
| *.pyd | ||
| .Python | ||
| env | ||
| pip-log.txt | ||
| pip-delete-this-directory.txt | ||
| .tox | ||
| .coverage | ||
| .coverage.* | ||
| .cache | ||
| nosetests.xml | ||
| coverage.xml | ||
| *.cover | ||
| *.log | ||
| .mypy_cache | ||
| .pytest_cache | ||
| .hypothesis | ||
|
|
||
| # Distribution / packaging | ||
| build/ | ||
| develop-eggs/ | ||
| dist/ | ||
| downloads/ | ||
| eggs/ | ||
| .eggs/ | ||
| lib/ | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. safer to remove lib/ from here as well since lib dirs are present inside odbc directory |
||
| lib64/ | ||
| parts/ | ||
| sdist/ | ||
| var/ | ||
| wheels/ | ||
| *.egg-info/ | ||
| .installed.cfg | ||
| *.egg | ||
|
|
||
| # PyInstaller | ||
| *.manifest | ||
| *.spec | ||
|
|
||
| # Installer logs | ||
| pip-log.txt | ||
saurabh500 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| # Unit test / coverage reports | ||
| htmlcov/ | ||
| .coverage | ||
saurabh500 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| .coverage.* | ||
saurabh500 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| nosetests.xml | ||
| coverage.xml | ||
| *.cover | ||
| .hypothesis/ | ||
|
|
||
| # Translations | ||
| *.mo | ||
| *.pot | ||
|
|
||
| # Documentation | ||
| docs/_build/ | ||
|
|
||
| # PyBuilder | ||
| target/ | ||
|
|
||
| # IDEs | ||
| .vscode/ | ||
| .idea/ | ||
| *.swp | ||
| *.swo | ||
| *~ | ||
|
|
||
| # OS | ||
| .DS_Store | ||
| .DS_Store? | ||
| ._* | ||
| .Spotlight-V100 | ||
| .Trashes | ||
| ehthumbs.db | ||
| Thumbs.db | ||
|
|
||
| # Temporary files | ||
| *.tmp | ||
| *.temp | ||
| *.log | ||
saurabh500 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| # Node.js (if any) | ||
| node_modules/ | ||
| npm-debug.log* | ||
|
|
||
| # CMake | ||
| CMakeCache.txt | ||
| CMakeFiles/ | ||
| cmake_install.cmake | ||
| Makefile | ||
| *.cmake | ||
|
|
||
| # Build artifacts | ||
| *.so | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. the .so files for linux odbc, .dylib files for macos odbc and .dll files for windows odbc are needed for build and execution. putting this in gitignore will skip them and remove that from build context. we might need to remove these files from dockerignore. |
||
| *.dll | ||
| *.dylib | ||
| *.pdb | ||
| *.obj | ||
| *.exe | ||
|
|
||
| # Test results | ||
| test-results/ | ||
| .pytest_cache/ | ||
saurabh500 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| # Azure DevOps | ||
| .azure/ | ||