Skip to content

Commit 0bd4bae

Browse files
authored
Improve update script (#7556)
* Allow opening a PR against a branch * better handle pre-releases * update yarn.lock * Update upgrade-jupyterlab-dependencies.yml
1 parent 9d6f6a2 commit 0bd4bae

File tree

4 files changed

+69
-25
lines changed

4 files changed

+69
-25
lines changed

.github/workflows/upgrade-jupyterlab-dependencies.yml

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,25 @@ jobs:
3535

3636
steps:
3737
- name: Checkout code
38-
uses: actions/checkout@v3
38+
uses: actions/checkout@v4
39+
with:
40+
ref: ${{ inputs.branch || 'main' }}
3941

4042
- name: Set up Python
41-
uses: actions/setup-python@v4
43+
uses: actions/setup-python@v5
4244
with:
4345
python-version: '3.11'
4446

45-
- name: Install required dependencies
46-
run: |
47-
python -m pip install jupyterlab
48-
sudo apt-get install hub
49-
5047
- name: Install Node
5148
uses: actions/setup-node@v2
5249
with:
5350
node-version: '20.x'
5451

5552
- name: Install npm dependencies and build buildutils
5653
run: |
57-
jlpm install
54+
python -m pip install -e ".[dev]"
55+
56+
jlpm
5857
jlpm run build:utils
5958
6059
- name: Check for new releases and update

buildutils/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@
3232
"@jupyterlab/buildutils": "~4.4.0-alpha.1",
3333
"commander": "^6.2.0",
3434
"fs-extra": "^9.1.0",
35+
"semver": "^7.6.3",
3536
"typescript": "~5.0.2"
3637
},
3738
"devDependencies": {
3839
"@types/fs-extra": "^9.0.10",
3940
"@types/node": "^14.6.1",
41+
"@types/semver": "^7.5.8",
4042
"rimraf": "^3.0.2"
4143
}
4244
}

buildutils/src/get-latest-lab-version.ts

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,46 @@
1+
import * as fs from 'fs-extra';
2+
import * as semver from 'semver';
3+
4+
function convertPythonVersion(version: string): string {
5+
return version
6+
.replace('a', '-alpha')
7+
.replace('b', '-beta')
8+
.replace('rc', '-rc');
9+
}
10+
111
function extractVersionFromReleases(
212
releases: any,
3-
versionTag: string
13+
versionTag: string,
14+
currentVersion: string
415
): string | null {
5-
for (const release of releases) {
6-
const tagName: string = release['tag_name'];
7-
if (versionTag === 'latest') {
8-
if (!release['prerelease'] && !release['draft']) {
9-
return tagName;
10-
}
11-
} else if (versionTag === tagName) {
12-
return tagName;
13-
}
16+
const npmCurrentVersion = convertPythonVersion(currentVersion);
17+
const isCurrentPreRelease = semver.prerelease(npmCurrentVersion) !== null;
18+
19+
if (versionTag === 'latest') {
20+
// Find first version that is newer than current and matches pre-release criteria
21+
const release = releases.find((r: any) => {
22+
const version = r['tag_name'].substring(1); // Remove 'v' prefix for semver
23+
const npmVersion = convertPythonVersion(version);
24+
return (
25+
(isCurrentPreRelease || !r['prerelease']) &&
26+
semver.gte(npmVersion, npmCurrentVersion)
27+
);
28+
});
29+
return release ? release['tag_name'] : null;
30+
} else {
31+
// Find exact version match
32+
const release = releases.find((r: any) => r['tag_name'] === versionTag);
33+
return release ? release['tag_name'] : null;
1434
}
15-
return null;
35+
}
36+
37+
function extractCurrentJupyterLabVersion(): string {
38+
const toml = fs.readFileSync('pyproject.toml', 'utf8');
39+
const match = toml.match(/jupyterlab>=([^,]+)/);
40+
if (!match) {
41+
throw new Error('Could not find JupyterLab version in pyproject.toml');
42+
}
43+
return match[1];
1644
}
1745

1846
async function findVersion(versionTag: string): Promise<string> {
@@ -22,10 +50,14 @@ async function findVersion(versionTag: string): Promise<string> {
2250
const error_message = `Failed to fetch package.json from ${url}. HTTP status code: ${response.status}`;
2351
throw new Error(error_message);
2452
}
53+
54+
const currentVersion = extractCurrentJupyterLabVersion();
55+
2556
const releases: any = await response.json();
2657
const version: string | null = extractVersionFromReleases(
2758
releases,
28-
versionTag
59+
versionTag,
60+
currentVersion
2961
);
3062
if (version === null) {
3163
const error_message = 'Invalid release tag';

yarn.lock

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2269,9 +2269,11 @@ __metadata:
22692269
"@jupyterlab/buildutils": ~4.4.0-alpha.1
22702270
"@types/fs-extra": ^9.0.10
22712271
"@types/node": ^14.6.1
2272+
"@types/semver": ^7.5.8
22722273
commander: ^6.2.0
22732274
fs-extra: ^9.1.0
22742275
rimraf: ^3.0.2
2276+
semver: ^7.6.3
22752277
typescript: ~5.0.2
22762278
languageName: unknown
22772279
linkType: soft
@@ -6726,10 +6728,10 @@ __metadata:
67266728
languageName: node
67276729
linkType: hard
67286730

6729-
"@types/semver@npm:^7.1.0, @types/semver@npm:^7.3.12":
6730-
version: 7.5.3
6731-
resolution: "@types/semver@npm:7.5.3"
6732-
checksum: 349fdd1ab6c213bac5c991bac766bd07b8b12e63762462bb058740dcd2eb09c8193d068bb226f134661275f2022976214c0e727a4e5eb83ec1b131127c980d3e
6731+
"@types/semver@npm:^7.1.0, @types/semver@npm:^7.3.12, @types/semver@npm:^7.5.8":
6732+
version: 7.5.8
6733+
resolution: "@types/semver@npm:7.5.8"
6734+
checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663
67336735
languageName: node
67346736
linkType: hard
67356737

@@ -17660,7 +17662,7 @@ __metadata:
1766017662
languageName: node
1766117663
linkType: hard
1766217664

17663-
"semver@npm:7.5.4, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4":
17665+
"semver@npm:7.5.4":
1766417666
version: 7.5.4
1766517667
resolution: "semver@npm:7.5.4"
1766617668
dependencies:
@@ -17680,6 +17682,15 @@ __metadata:
1768017682
languageName: node
1768117683
linkType: hard
1768217684

17685+
"semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.3":
17686+
version: 7.6.3
17687+
resolution: "semver@npm:7.6.3"
17688+
bin:
17689+
semver: bin/semver.js
17690+
checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8
17691+
languageName: node
17692+
linkType: hard
17693+
1768317694
"send@npm:0.18.0":
1768417695
version: 0.18.0
1768517696
resolution: "send@npm:0.18.0"

0 commit comments

Comments
 (0)