Skip to content

Commit

Permalink
Dev Container Using MCR (#21675)
Browse files Browse the repository at this point in the history
Dev container rewrite using MCR. 
Pyenv for installing and managing python versions. Fish also installed
as optional (able to view as shell option in codespaces). Also fixing
conda error. Takes care of: #21591 rewrite from: #21435 to adhere to
company policy.
  • Loading branch information
anthonykim1 authored Jul 24, 2023
1 parent 73a0e9d commit 6af959d
Show file tree
Hide file tree
Showing 7 changed files with 58 additions and 43 deletions.
32 changes: 12 additions & 20 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,26 +1,18 @@
# This image will serve as a starting point for devcontainer.json.
# Get latest image of Fedora as the base image.
FROM docker.io/library/fedora:latest
FROM mcr.microsoft.com/devcontainers/typescript-node:16-bookworm

# Install supported python versions and nodejs.
RUN dnf -y --nodocs install /usr/bin/{python3.7,python3.8,python3.9,python3.10,python3.11,git,conda,clang} && \
dnf clean all
RUN apt-get install -y wget bzip2

ENV NVM_VERSION=0.39.3
ENV NODE_VERSION=16.17.1
ENV NPM_VERSION=8.19.3

# Installation instructions from https://github.com/nvm-sh/nvm .
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v$NVM_VERSION/install.sh | bash
RUN export NVM_DIR="$HOME/.nvm" && \
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" && \
nvm install $NODE_VERSION && \
npm install -g npm@$NPM_VERSION

# For clean open source builds.
ENV DISABLE_TRANSLATIONS=true
# Run in silent mode and save downloaded script as anaconda.sh.
# Run with /bin/bash and run in silent mode to /opt/conda.
# Also get rid of installation script after finishing.
RUN wget --quiet https://repo.anaconda.com/archive/Anaconda3-2023.07-1-Linux-x86_64.sh -O ~/anaconda.sh && \
/bin/bash ~/anaconda.sh -b -p /opt/conda && \
rm ~/anaconda.sh

ENV PATH="/opt/conda/bin:$PATH"

# Sudo apt update needs to run in order for installation of fish to work .
RUN sudo apt update && \
sudo apt install fish -y


3 changes: 2 additions & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
},
// Commands to execute on container creation,start.
"postCreateCommand": "bash scripts/postCreateCommand.sh",
// Environment variable placed inside containerEnv following: https://containers.dev/implementors/json_reference/#general-properties
"onCreateCommand": "bash scripts/onCreateCommand.sh",

"containerEnv": {
"CI_PYTHON_PATH": "/workspaces/vscode-python/.venv/bin/python"
}
Expand Down
36 changes: 36 additions & 0 deletions scripts/onCreateCommand.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/bin/bash

# Install pyenv and Python versions here to avoid using shim.
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
# echo 'eval "$(pyenv init -)"' >> ~/.bashrc

export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
# eval "$(pyenv init -)" Comment this out and DO NOT use shim.
source ~/.bashrc

# Install Python via pyenv .
pyenv install 3.7:latest 3.8:latest 3.9:latest 3.10:latest 3.11:latest

# Set default Python version to 3.7 .
pyenv global 3.7.17

npm ci

# Create Virutal environment.
pyenv exec python3.7 -m venv .venv

# Activate Virtual environment.
source /workspaces/vscode-python/.venv/bin/activate

# Install required Python libraries.
npx gulp installPythonLibs

/workspaces/vscode-python/.venv/bin/python -m pip install -r build/test-requirements.txt
/workspaces/vscode-python/.venv/bin/python -m pip install -r build/smoke-test-requirements.txt
/workspaces/vscode-python/.venv/bin/python -m pip install -r build/functional-test-requirements.txt

# Below will crash codespace
# npm run compile
15 changes: 0 additions & 15 deletions scripts/postCreateCommand.sh

This file was deleted.

2 changes: 1 addition & 1 deletion src/client/common/interpreterPathService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export const isRemoteGlobalSettingCopiedKey = 'isRemoteGlobalSettingCopiedKey';
export const defaultInterpreterPathSetting: keyof IPythonSettings = 'defaultInterpreterPath';
const CI_PYTHON_PATH = getCIPythonPath();

function getCIPythonPath(): string {
export function getCIPythonPath(): string {
if (process.env.CI_PYTHON_PATH && fs.existsSync(process.env.CI_PYTHON_PATH)) {
return process.env.CI_PYTHON_PATH;
}
Expand Down
9 changes: 7 additions & 2 deletions src/test/common/interpreterPathService.unit.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@ import {
WorkspaceConfiguration,
} from 'vscode';
import { IApplicationEnvironment, IWorkspaceService } from '../../client/common/application/types';
import { defaultInterpreterPathSetting, InterpreterPathService } from '../../client/common/interpreterPathService';
import {
defaultInterpreterPathSetting,
getCIPythonPath,
InterpreterPathService,
} from '../../client/common/interpreterPathService';
import { FileSystemPaths } from '../../client/common/platform/fs-paths';
import { InterpreterConfigurationScope, IPersistentState, IPersistentStateFactory } from '../../client/common/types';
import { createDeferred, sleep } from '../../client/common/utils/async';
Expand Down Expand Up @@ -447,7 +451,8 @@ suite('Interpreter Path Service', async () => {
workspaceValue: undefined,
});
const settingValue = interpreterPathService.get(resource);
expect(settingValue).to.equal('python');

expect(settingValue).to.equal(getCIPythonPath());
});

test('If defaultInterpreterPathSetting is changed, an event is fired', async () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@ suite('pyenvs common utils - finding Python executables', () => {
<python3.8>
python3 -> sub2/sub2.2/python3
python3.7 -> sub2/sub2.1/sub2.1.1/python
python2.7 -> does-not-exist
`);
}
});
Expand All @@ -106,7 +105,6 @@ suite('pyenvs common utils - finding Python executables', () => {
// These will match.
'python',
'python2',
'python2.7',
'python3',
'python3.7',
'python3.8',
Expand Down Expand Up @@ -137,7 +135,6 @@ suite('pyenvs common utils - finding Python executables', () => {
// These will match.
'python',
'python2',
'python2.7',
'python3',
'python3.7',
'python3.8',
Expand Down Expand Up @@ -167,7 +164,6 @@ suite('pyenvs common utils - finding Python executables', () => {
// These will match.
'python',
'python2',
'python2.7',
'python3',
'python3.7',
'python3.8',
Expand Down

0 comments on commit 6af959d

Please sign in to comment.