Skip to content
This repository was archived by the owner on Feb 14, 2024. It is now read-only.

Commit 62462d1

Browse files
authored
Cache xeus-python build (#87)
* Cache xeus-python build * Add a script to build xeus_python only if the Dockerfile changed * Iterate * Iterate * Prevent making two builds in the check-release workflow check-manifest will not use our cache, it makes an isolated build, so let's not build twice... * Wrong file extension * Trigger build
1 parent 651f351 commit 62462d1

File tree

6 files changed

+120
-16
lines changed

6 files changed

+120
-16
lines changed

.github/workflows/build.yml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,26 @@ jobs:
4747
restore-keys: |
4848
yarn-
4949
50+
- name: Setup xeus-python build cache
51+
uses: actions/cache@v2
52+
with:
53+
path: |
54+
src/python_data.data
55+
src/python_data.js
56+
src/web_worker_kernel.ts
57+
src/worker.ts
58+
src/xpython_wasm.js
59+
src/xpython_wasm.wasm
60+
src/xpython_wasm.hash
61+
key: ${{ hashFiles('Dockerfile') }}
62+
5063
- name: Install dependencies
5164
run: python -m pip install -U jupyterlab~=3.1 check-manifest
65+
5266
- name: Build the extension
5367
run: |
5468
set -eux
5569
jlpm
56-
# build separately for now
57-
jlpm run build:wasm
5870
jlpm run build
5971
jlpm run eslint:check
6072
python -m pip install .
@@ -64,8 +76,6 @@ jobs:
6476
# TODO: add JupyterLite browser check
6577
# python -m jupyterlab.browser_check
6678
67-
check-manifest -v
68-
6979
pip install build
7080
python -m build --sdist
7181
cp dist/*.tar.gz jupyterlite-xeus-python.tar.gz

.github/workflows/check-release.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,6 @@ jobs:
4646
- name: Upgrade packaging dependencies
4747
run: |
4848
pip install --upgrade pip setuptools wheel jupyter-packaging~=0.10 --user
49-
- name: Install Dependencies
50-
run: |
51-
pip install .
5249
- name: Check Release
5350
uses: jupyter-server/jupyter_releaser/.github/actions/check-release@v1
5451
with:

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ python_data.js
117117
python_data.data
118118
xpython_wasm.js
119119
xpython_wasm.wasm
120+
xpython_wasm.hash
121+
122+
src/worker.ts
123+
src/web_worker_kernel.ts
120124

121125
# Labextension
122126
share

build_xeus_python.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
const { existsSync, readFileSync, writeFileSync } = require('fs');
2+
const crypto = require('crypto');
3+
const path = require('path');
4+
const { execSync } = require('child_process');
5+
6+
const VERSION_FILE_NAME = 'xpython_wasm.hash';
7+
const VERSION_FILE_PATH = path.join('src', VERSION_FILE_NAME);
8+
9+
const hashSum = crypto.createHash('sha256');
10+
11+
hashSum.update(readFileSync('Dockerfile'));
12+
const buildHash = hashSum.digest('hex');
13+
14+
let needsRebuild = true;
15+
16+
if (existsSync(VERSION_FILE_PATH)) {
17+
const currentHash = readFileSync(VERSION_FILE_PATH, {
18+
encoding: 'utf8',
19+
flag: 'r'
20+
});
21+
22+
if (currentHash === buildHash) {
23+
needsRebuild = false;
24+
}
25+
}
26+
27+
if (needsRebuild) {
28+
execSync('docker build -t jupyterlite-xeus-kernel .');
29+
30+
execSync(
31+
'docker run --rm -v $(pwd):/src -u $(id -u):$(id -g) jupyterlite-xeus-kernel copy_output.sh'
32+
);
33+
34+
writeFileSync(VERSION_FILE_PATH, buildHash);
35+
}

package.json

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,15 @@
2929
"url": "https://github.com/jupyterlite/xeus-python-kernel.git"
3030
},
3131
"scripts": {
32-
"build:dockerimage": "docker build -t jupyterlite-xeus-kernel . ",
33-
"build:dockerimage_no_cache": "docker build -t jupyterlite-xeus-kernel --no-cache . ",
34-
"build:emscripten": "echo $(pwd) && docker run --rm -v $(pwd):/src -u $(id -u):$(id -g) jupyterlite-xeus-kernel copy_output.sh",
3532
"copy-files": "copyfiles -u 1 src/xpython_wasm.wasm src/xpython_wasm.js src/python_data.js src/python_data.data lib",
36-
"build:wasm": "jlpm run build:dockerimage && jlpm run build:emscripten",
37-
"build:wasm_no_cache": "jlpm run build:dockerimage_no_cache && jlpm run build:emscripten",
3833
"build:worker": "webpack --config worker.webpack.config.js --mode=development",
34+
"build": "jlpm run build:dockerimage && jlpm run build:lib && jlpm run build:worker && jlpm run copy-files && jlpm run build:labextension:dev",
35+
"build:dockerimage": "node build_xeus_python.js",
3936
"build:worker:prod": "webpack --config worker.webpack.config.js --mode=production",
40-
"build": "jlpm run build:lib && jlpm run build:worker && jlpm run copy-files && jlpm run build:labextension:dev",
41-
"build:prod": "jlpm run clean && jlpm run build:wasm && jlpm run build:lib && jlpm run build:worker:prod && jlpm run copy-files && jlpm run build:labextension",
37+
"build:prod": "jlpm run clean && jlpm run build build:dockerimage && jlpm run build:lib && jlpm run build:worker:prod && jlpm run copy-files && jlpm run build:labextension",
4238
"build:labextension": "jupyter labextension build .",
4339
"build:labextension:dev": "jupyter labextension build --development True .",
44-
"build:lib": " jlpm run sed-worker && tsc",
40+
"build:lib": "jlpm run sed-worker && tsc",
4541
"sed-worker": "shx sed -i \"s/XEUS_KERNEL_FILE/'.\\/xpython_wasm.js'/\" src/worker.ts && shx sed -i \"s/LANGUAGE_DATA_FILE/'.\\/python_data.js'/\" src/worker.ts ",
4642
"clean": "jlpm run clean:lib",
4743
"clean:lib": "rimraf lib tsconfig.tsbuildinfo",

yarn.lock

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2433,6 +2433,18 @@ glob@^6.0.1:
24332433
once "^1.3.0"
24342434
path-is-absolute "^1.0.0"
24352435

2436+
glob@^7.0.0:
2437+
version "7.2.3"
2438+
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
2439+
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
2440+
dependencies:
2441+
fs.realpath "^1.0.0"
2442+
inflight "^1.0.4"
2443+
inherits "2"
2444+
minimatch "^3.1.1"
2445+
once "^1.3.0"
2446+
path-is-absolute "^1.0.0"
2447+
24362448
glob@^7.0.5, glob@^7.1.3, glob@^7.1.4:
24372449
version "7.2.0"
24382450
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
@@ -2755,6 +2767,11 @@ internal-slot@^1.0.3:
27552767
has "^1.0.3"
27562768
side-channel "^1.0.4"
27572769

2770+
interpret@^1.0.0:
2771+
version "1.4.0"
2772+
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
2773+
integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
2774+
27582775
interpret@^2.2.0:
27592776
version "2.2.0"
27602777
resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
@@ -2802,6 +2819,13 @@ is-core-module@^2.8.1:
28022819
dependencies:
28032820
has "^1.0.3"
28042821

2822+
is-core-module@^2.9.0:
2823+
version "2.11.0"
2824+
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
2825+
integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
2826+
dependencies:
2827+
has "^1.0.3"
2828+
28052829
is-date-object@^1.0.1:
28062830
version "1.0.5"
28072831
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
@@ -3448,7 +3472,7 @@ mini-css-extract-plugin@~1.3.2:
34483472
schema-utils "^3.0.0"
34493473
webpack-sources "^1.1.0"
34503474

3451-
"minimatch@2 || 3", minimatch@^3.0.3, minimatch@^3.0.4:
3475+
"minimatch@2 || 3", minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.1:
34523476
version "3.1.2"
34533477
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
34543478
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@@ -3474,6 +3498,11 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@~1.2.0:
34743498
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
34753499
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
34763500

3501+
minimist@^1.2.3:
3502+
version "1.2.7"
3503+
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
3504+
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==
3505+
34773506
minipass-collect@^1.0.2:
34783507
version "1.0.2"
34793508
resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
@@ -4209,6 +4238,13 @@ readable-stream@~2.3.6:
42094238
string_decoder "~1.1.1"
42104239
util-deprecate "~1.0.1"
42114240

4241+
rechoir@^0.6.2:
4242+
version "0.6.2"
4243+
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
4244+
integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==
4245+
dependencies:
4246+
resolve "^1.1.6"
4247+
42124248
rechoir@^0.7.0:
42134249
version "0.7.1"
42144250
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686"
@@ -4344,6 +4380,15 @@ resolve-from@^5.0.0:
43444380
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
43454381
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
43464382

4383+
resolve@^1.1.6:
4384+
version "1.22.1"
4385+
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
4386+
integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
4387+
dependencies:
4388+
is-core-module "^2.9.0"
4389+
path-parse "^1.0.7"
4390+
supports-preserve-symlinks-flag "^1.0.0"
4391+
43474392
resolve@^1.10.0, resolve@^1.20.0, resolve@^1.9.0:
43484393
version "1.22.0"
43494394
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
@@ -4576,6 +4621,23 @@ shell-quote@^1.6.1:
45764621
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123"
45774622
integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==
45784623

4624+
shelljs@^0.8.5:
4625+
version "0.8.5"
4626+
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c"
4627+
integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==
4628+
dependencies:
4629+
glob "^7.0.0"
4630+
interpret "^1.0.0"
4631+
rechoir "^0.6.2"
4632+
4633+
shx@^0.3.0:
4634+
version "0.3.4"
4635+
resolved "https://registry.yarnpkg.com/shx/-/shx-0.3.4.tgz#74289230b4b663979167f94e1935901406e40f02"
4636+
integrity sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==
4637+
dependencies:
4638+
minimist "^1.2.3"
4639+
shelljs "^0.8.5"
4640+
45794641
side-channel@^1.0.4:
45804642
version "1.0.4"
45814643
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"

0 commit comments

Comments
 (0)