Skip to content

Commit a5c222e

Browse files
Merge pull request #781 from MetaCell/fix/14nov
Fix/14nov
2 parents caabc04 + a86576d commit a5c222e

23 files changed

Lines changed: 1091 additions & 224 deletions

Dockerfile

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,88 @@
1-
FROM node:14.21.3-bullseye as jsbuild
1+
FROM node:14 as jsbuild
22

3-
WORKDIR /app
4-
5-
COPY --chown=1000:1000 webapp/package.json .
6-
COPY --chown=1000:1000 webapp/yarn.lock .
3+
ENV FOLDER=netpyne
4+
RUN echo "no-cache 2023-7-14"
75

6+
WORKDIR $FOLDER/webapp
7+
COPY webapp/package.json .
8+
COPY webapp/yarn.lock .
89

910
RUN yarn install --network-timeout 1000000000
1011

11-
COPY webapp/ .
12+
COPY webapp .
1213
RUN yarn build-dev
1314

14-
1515
RUN rm -Rf node_modules/*
1616

17+
18+
1719
###
1820
FROM jupyter/base-notebook:hub-1.5.0
1921
ENV NB_UID=jovyan
2022
ENV FOLDER=netpyne
21-
ARG BUILD_ARGS=""
22-
ARG WORKSPACE_VERSION=master
23-
# ARG GEPPETTO_VERSION=development
24-
# ARG NETPYNE_VERSION=master
25-
26-
ENV FOLDER=/home/jovyan/work/NetPyNE-UI
23+
ENV NP_LFPYKIT_HEAD_FILE=/home/jovyan/nyhead.mat
2724

2825
USER root
2926

3027
RUN rm -rf /var/lib/apt/lists
3128
RUN apt-get update -qq &&\
32-
apt-get install python3-tk vim nano unzip git make libtool g++ -qq pkg-config libfreetype6-dev libpng-dev libopenmpi-dev openjdk-11-jre-headless -y -y
29+
apt-get install python3-tk vim nano unzip git make libtool g++ -qq pkg-config libfreetype6-dev libpng-dev libopenmpi-dev -y
30+
RUN apt-get install openjdk-11-jre-headless -y
3331
RUN conda install python=3.7 -y
3432

33+
3534
WORKDIR $FOLDER
36-
COPY --chown=1000:1000 requirements.txt requirements.txt
37-
RUN --mount=type=cache,target=/root/.cache python -m pip install --upgrade pip && pip install -r requirements.txt --prefer-binary
35+
COPY --chown=1000:1000 requirements.txt requirements.txt
36+
RUN --mount=type=cache,target=/root/.cache python -m pip install --upgrade pip &&\
37+
pip install -r requirements.txt --prefer-binary
38+
39+
COPY . .
40+
COPY --from=jsbuild --chown=1000:1000 $FOLDER/webapp/build webapp/build
41+
42+
# ToDo: fixme, for now remove the jupyter hub config json file because it overrides the default
43+
# and thus removes the frame ancestor cors settings
44+
RUN rm -f ~/.jupyter/*.json
45+
RUN chown $NB_UID .
46+
RUN chown $NB_UID /opt
47+
RUN rm -Rf workspace
48+
49+
USER $NB_UID
50+
51+
# sym link workspace pvc to $FOLDER
52+
RUN mkdir -p /opt/workspace
53+
RUN mkdir -p /opt/user
3854

39-
COPY --chown=jovyan:1000 . .
40-
COPY --from=jsbuild --chown=jovyan:1000 /app webapp
4155

4256

57+
58+
ENV NEURON_HOME=/opt/conda
59+
60+
61+
USER root
62+
4363
RUN jupyter nbextension install --py --symlink --sys-prefix jupyter_geppetto
4464
RUN jupyter nbextension enable --py --sys-prefix jupyter_geppetto
4565
RUN jupyter nbextension enable --py --sys-prefix widgetsnbextension
4666
RUN jupyter serverextension enable --py --sys-prefix jupyter_geppetto
4767

48-
RUN python utilities/install.py ${BUILD_ARGS} --workspace $WORKSPACE_VERSION
68+
RUN --mount=type=cache,target=/root/.cache python -m pip install --upgrade pip &&\
69+
python utilities/install.py --npm-skip --no-test
4970

50-
RUN jupyter labextension disable @jupyterlab/hub-extension
5171

52-
RUN chown $NB_UID .
53-
RUN chown -R $NB_UID workspace
72+
RUN mv workspace /opt/workspace/tutorials
73+
RUN chown -R $NB_UID /opt/workspace/tutorials
74+
RUN ln -s /opt/workspace workspace
5475

55-
# Temp fixes for eeg plots
56-
ENV NEURON_HOME=/opt/conda
57-
# For lfpykit 0.4
58-
# RUN wget -P $(pip show LFPykit | grep "Location:" | awk '{print $2"/lfpykit"}') https://www.parralab.org/nyhead/sa_nyhead.mat
59-
# For lpfykit 0.5
60-
ENV NP_LFPYKIT_HEAD_FILE=/home/jovyan/nyhead.mat
76+
RUN jupyter labextension disable @jupyterlab/hub-extension
6177
RUN wget --no-check-certificate -O $NP_LFPYKIT_HEAD_FILE https://www.parralab.org/nyhead/sa_nyhead.mat
6278

6379
USER $NB_UID
6480

81+
6582
EXPOSE 8888
6683

84+
ENTRYPOINT ["tini", "-g", "--"]
85+
86+
6787

88+
CMD ./NetPyNE-UI

jupyter_hub/Dockerfile_spawner

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ RUN /bin/bash -c "INCUBATOR_VER=${INCUBATOR_VER} source activate snakes && pip i
1616
# Clone NetPyNE-UI and install the development version
1717
RUN wget https://github.com/MetaCell/NetPyNE-UI/archive/$netpyneuiBranch.zip -q
1818
RUN unzip $netpyneuiBranch.zip
19-
WORKDIR /home/jovyan/work/NetPyNE-UI-$netpyneuiBranch/utilities
19+
WORKDIR /opt/workspace-$netpyneuiBranch/utilities
2020
RUN /bin/bash -c "source activate snakes && python --version"
2121
RUN /bin/bash -c "source activate snakes && exec python install.py branch $netpyneuiBranch"
2222
WORKDIR /home/jovyan
2323
RUN git clone https://github.com/Neurosim-lab/netpyne_workspace
2424
WORKDIR /home/jovyan/workspace
25-
RUN ln -sfn /home/jovyan/work/NetPyNE-UI-$netpyneuiBranch/netpyne_ui/tests tests
25+
RUN ln -sfn /opt/workspace-$netpyneuiBranch/netpyne_ui/tests tests
2626

2727
# Copy jupyterhub_config
28-
# RUN cp /home/jovyan/work/NetPyNE-UI-$netpyneuiBranch/jupyterhub_config.py .
28+
# RUN cp /opt/workspace-$netpyneuiBranch/jupyterhub_config.py .
2929

3030
CMD /bin/bash -c "source activate snakes && exec jupyterhub-singleuser --debug --NotebookApp.default_url=/geppetto --NotebookApp.token='' --library=netpyne_ui"

k8s/cf_values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ hub:
1111
shutdownOnLogout: true
1212
extraConfig:
1313
timing: |
14-
c.Spawner.notebook_dir = '/home/jovyan/work/NetPyNE-UI'
14+
c.Spawner.notebook_dir = '/opt/workspace'
1515
c.Spawner.default_url = '/geppetto'
1616
spawner: >-
1717
c.Spawner.args = ["--library=netpyne_ui"]

k8s/minikube_values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ hub:
2020
c.Spawner.port = 8000
2121
c.Spawner.http_timeout = 300
2222
c.Spawner.start_timeout = 300
23-
c.Spawner.notebook_dir = '/home/jovyan/work/NetPyNE-UI'
23+
c.Spawner.notebook_dir = '/opt/workspace'
2424
c.Spawner.default_url = '/geppetto'
2525
c.Spawner.debug = True
2626
c.Spawner.disable_check_xsrf=True

tests/frontend/e2e/tests/ExperimentManager_Tut#1.test.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -202,13 +202,15 @@ describe('Experiment Manager test using Tut#1', () => {
202202

203203
it('Simulate All conditions', async () => {
204204

205-
await page.waitForSelector(selectors.SIMULATE_BUTTON_SELECTOR)
206-
await click(page, selectors.SIMULATE_BUTTON_SELECTOR, { timeout: TIMEOUT });
205+
await page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR)
206+
await click(page, selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT });
207+
await page.waitForSelector(selectors.SIMULATE_NETWORK_SELECTOR)
208+
await click(page, selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT });
207209

208210
console.log('Simulating all conditions')
209-
210211
await page.waitForSelector(selectors.SIMULATE_POPUP_SELECTOR)
211212
await page.click(selectors.SIMULATE_POPUP_SELECTOR)
213+
await page.waitForSelector(selectors.CONFIRM_SIMULATE_SELECTOR)
212214
await page.click(selectors.CONFIRM_SIMULATE_SELECTOR)
213215

214216
await page.waitForTimeout(PAGE_WAIT);
@@ -217,8 +219,8 @@ describe('Experiment Manager test using Tut#1', () => {
217219
await page.click(selectors.CONFIRM_EXPERIMENT_STARTED_SELECTOR)
218220

219221
await page.waitForSelector(selectors.SIMULATION_PAGE_SELECTOR, { timeout: TIMEOUT * 2 });
220-
await page.waitForSelector(selectors.SIMULATION_LOADER_SELECTOR, { hidden: false, timeout: TIMEOUT * 2 })
221-
await page.waitForSelector(selectors.SIMULATION_LOADER_SELECTOR, { hidden: true, timeout: TIMEOUT * 5 })
222+
await page.waitForSelector(selectors.SIMULATION_LOADER_SELECTOR, { hidden: false, timeout: TIMEOUT * 5 })
223+
await page.waitForSelector(selectors.SIMULATION_LOADER_SELECTOR, { hidden: true, timeout: TIMEOUT * 10 })
222224
console.log('Experiment Simulation finished')
223225

224226
});

tests/frontend/e2e/tests/RxD.test.js

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,10 @@ describe('RxD testing', () => {
9898
console.log('Loading Tutorial #3b ...')
9999

100100
await page.waitForTimeout(PAGE_WAIT)
101-
101+
await page.waitForSelector(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT })
102102
await page.click(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT })
103-
104-
await page.click("li[id='Model 3b: Multiscale network (high IP3)']", { timeout: TIMEOUT })
103+
await page.waitForSelector(selectors.TUTORIAL_3B_SELECTOR, { timeout: TIMEOUT })
104+
await page.click(selectors.TUTORIAL_3B_SELECTOR, { timeout: TIMEOUT })
105105
await page.waitForSelector('#E')
106106
await page.waitForSelector('#I')
107107
await page.waitForTimeout(PAGE_WAIT)
@@ -123,8 +123,9 @@ describe('RxD testing', () => {
123123
await page.waitForTimeout(PAGE_WAIT * 3)
124124

125125
await page.waitForSelector('div[title="3D Representation"][aria-disabled="false"]')
126-
126+
await page.waitForSelector(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT });
127127
await page.click(selectors.MODEL_BUTTON_SELECTOR, { timeout: TIMEOUT });
128+
await page.waitForSelector(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT });
128129
await page.click(selectors.SIMULATE_NETWORK_SELECTOR, { timeout: TIMEOUT });
129130
console.log('Simulating network ...')
130131

@@ -230,11 +231,7 @@ describe('RxD testing', () => {
230231

231232
await page.waitForSelector('button[aria-selected="true"][id = "simple-tab-1"]')
232233

233-
const no_regions_text = await page.$$eval('#simple-tabpanel-1', no_regions_text => {
234-
return no_regions_text.map(no_regions_text => no_regions_text.innerText)
235-
})
236-
237-
expect(no_regions_text).toContain('There are no Species yet.')
234+
await page.waitForSelector('#ip3')
238235
console.log('Species tab opened')
239236
await page.waitForTimeout(PAGE_WAIT)
240237

tests/frontend/e2e/tests/SaveOpenFile.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ describe('Save / Open File testing', () => {
382382
return pwd_code_outputs.map(pwd_code_output => pwd_code_output.innerText)
383383
})
384384

385-
expect(first_code_output[0]).toBe("'/home/jovyan/work/NetPyNE-UI/workspace'")
385+
expect(first_code_output[0]).toBe("'/opt/workspace/workspace'")
386386

387387
const code_lines = await python_frame.$$(selectors.PYTHON_CELL_SELECTOR)
388388

@@ -398,7 +398,7 @@ describe('Save / Open File testing', () => {
398398
return cd_code_outputs.map(cd_code_output => cd_code_output.innerText)
399399
})
400400

401-
expect(second_code_output[0]).toBe("/home/jovyan/work/NetPyNE-UI/workspace/saved_models/aut_test/src\n")
401+
expect(second_code_output[0]).toBe("/opt/workspace/workspace/saved_models/aut_test/src\n")
402402

403403
const ls_code_lines = await python_frame.$$(selectors.PYTHON_CELL_SELECTOR)
404404

tests/frontend/e2e/tests/Tut#1_smoke.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ describe('Tutorial #1 for Smoke Testing', () => {
9595
console.log('Tutorial #1')
9696

9797
await page.waitForTimeout(PAGE_WAIT)
98-
98+
await page.waitForSelector(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT })
9999
await click(page, selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT })
100-
100+
await page.waitForSelector(selectors.TUTORIAL_1_SELECTOR, { timeout: TIMEOUT })
101101
await click(page, selectors.TUTORIAL_1_SELECTOR, { timeout: TIMEOUT })
102102
await page.waitForSelector(selectors.PYR_CELL_SELECTOR)
103103
await page.waitForTimeout(PAGE_WAIT)

tests/frontend/e2e/tests/Tut#2_smoke.test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,9 @@ describe('Tutorial #2 for Smoke Testing', () => {
9393
console.log('Tutorial #2')
9494

9595
await page.waitForTimeout(PAGE_WAIT)
96-
96+
await page.waitForSelector(selectors.TUTORIALS_BUTTON_SELECTOR, { visible: true })
9797
await page.click(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT })
98-
98+
await page.waitForSelector(selectors.TUTORIAL_2_SELECTOR, { visible: true })
9999
await page.click(selectors.TUTORIAL_2_SELECTOR, { timeout: TIMEOUT })
100100
await page.waitForSelector(selectors.PYR_2_CELL_SELECTOR)
101101
await page.waitForSelector(selectors.INT_CELL_SELECTOR)
@@ -225,7 +225,7 @@ describe('Tutorial #2 for Smoke Testing', () => {
225225
});
226226

227227
it('Rate Spectogram Plot', async () => {
228-
228+
await page.waitForSelector(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { visible: true })
229229
await page.click(selectors.RATE_SPECTROGRAM_PLOT_SELECTOR, { timeout: TIMEOUT })
230230
await page.waitForSelector(selectors.CANVAS_SELECTOR, { timeout: TIMEOUT })
231231

tests/frontend/e2e/tests/Tut#3a_smoke.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,10 @@ describe('Tutorial #3a for Smoke Testing', () => {
9494
console.log('Tutorial #3a')
9595

9696
await page.waitForTimeout(PAGE_WAIT)
97+
await page.waitForSelector(selectors.TUTORIALS_BUTTON_SELECTOR, { visible: true })
9798

9899
await page.click(selectors.TUTORIALS_BUTTON_SELECTOR, { timeout: TIMEOUT })
99-
100+
await page.waitForSelector(selectors.TUTORIAL_3A_SELECTOR, { visible: true })
100101
await page.click(selectors.TUTORIAL_3A_SELECTOR, { timeout: TIMEOUT })
101102
await page.waitForSelector(selectors.E_CELL_TYPE_SELECTOR)
102103
await page.waitForSelector(selectors.I_CELL_TYPE_SELECTOR)

0 commit comments

Comments
 (0)