Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit b81f92e

Browse filesBrowse files
committed
feature: fallback to pre-release when no stable version is found
This allows to specify version like `3.11` or `pypy3.10` in workflows before those versions are released. This lessen the burden for users of `setup-python` by not having to modify their workflow twice: once when a pre-release is available (e.g. `3.11-dev`) and once when the first stable release is published (e.g. `3.11`)
1 parent 813f9b1 commit b81f92e
Copy full SHA for b81f92e

File tree

Expand file treeCollapse file tree

9 files changed

+346
-31
lines changed
Filter options
Expand file treeCollapse file tree

9 files changed

+346
-31
lines changed

‎__tests__/data/pypy.json

Copy file name to clipboardExpand all lines: __tests__/data/pypy.json
+85-1Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,88 @@
11
[
2+
{
3+
"pypy_version": "7.3.8rc2",
4+
"python_version": "3.8.12",
5+
"stable": false,
6+
"latest_pypy": false,
7+
"date": "2022-02-11",
8+
"files": [
9+
{
10+
"filename": "pypy3.8-v7.3.8rc2-linux32.tar.bz2",
11+
"arch": "i686",
12+
"platform": "linux",
13+
"download_url": "https://test.download.python.org/pypy/pypy3.8-v7.3.8rc2-linux32.tar.bz2"
14+
},
15+
{
16+
"filename": "pypy3.8-v7.3.8rc2-linux64.tar.bz2",
17+
"arch": "x64",
18+
"platform": "linux",
19+
"download_url": "https://test.download.python.org/pypy/pypy3.8-v7.3.8rc2-linux64.tar.bz2"
20+
},
21+
{
22+
"filename": "pypy3.8-v7.3.8rc2-darwin64.tar.bz2",
23+
"arch": "x64",
24+
"platform": "darwin",
25+
"download_url": "https://test.download.python.org/pypy/pypy3.8-v7.3.8rc2-darwin64.tar.bz2"
26+
},
27+
{
28+
"filename": "pypy3.8-v7.3.8rc2-s390x.tar.bz2",
29+
"arch": "s390x",
30+
"platform": "linux",
31+
"download_url": "https://test.download.python.org/pypy/pypy3.8-v7.3.8rc2-s390x.tar.bz2"
32+
},
33+
{
34+
"filename": "pypy3.8-v7.3.8rc2-win64.zip",
35+
"arch": "x64",
36+
"platform": "win64",
37+
"download_url": "https://test.download.python.org/pypy/pypy3.8-v7.3.8rc2-win64.zip"
38+
}
39+
]
40+
},
41+
{
42+
"pypy_version": "7.4.0rc1",
43+
"python_version": "3.6.12",
44+
"stable": false,
45+
"latest_pypy": false,
46+
"date": "2021-11-11",
47+
"files": [
48+
{
49+
"filename": "pypy3.6-v7.4.0rc1-aarch64.tar.bz2",
50+
"arch": "aarch64",
51+
"platform": "linux",
52+
"download_url": "https://test.download.python.org/pypy/pypy3.6-v7.4.0rc1-aarch64.tar.bz2"
53+
},
54+
{
55+
"filename": "pypy3.6-v7.4.0rc1-linux32.tar.bz2",
56+
"arch": "i686",
57+
"platform": "linux",
58+
"download_url": "https://test.download.python.org/pypy/pypy3.6-v7.4.0rc1-linux32.tar.bz2"
59+
},
60+
{
61+
"filename": "pypy3.6-v7.4.0rc1-linux64.tar.bz2",
62+
"arch": "x64",
63+
"platform": "linux",
64+
"download_url": "https://test.download.python.org/pypy/pypy3.6-v7.4.0rc1-linux64.tar.bz2"
65+
},
66+
{
67+
"filename": "pypy3.6-v7.4.0rc1-darwin64.tar.bz2",
68+
"arch": "x64",
69+
"platform": "darwin",
70+
"download_url": "https://test.download.python.org/pypy/pypy3.6-v7.4.0rc1-darwin64.tar.bz2"
71+
},
72+
{
73+
"filename": "pypy3.6-v7.4.0rc1-win32.zip",
74+
"arch": "x86",
75+
"platform": "win32",
76+
"download_url": "https://test.download.python.org/pypy/pypy3.6-v7.4.0rc1-win32.zip"
77+
},
78+
{
79+
"filename": "pypy3.6-v7.4.0rc1-s390x.tar.bz2",
80+
"arch": "s390x",
81+
"platform": "linux",
82+
"download_url": "https://test.download.python.org/pypy/pypy3.6-v7.4.0rc1-s390x.tar.bz2"
83+
}
84+
]
85+
},
286
{
387
"pypy_version": "7.3.3",
488
"python_version": "3.6.12",
@@ -530,4 +614,4 @@
530614
}
531615
]
532616
}
533-
]
617+
]

‎__tests__/data/versions-manifest.json

Copy file name to clipboardExpand all lines: __tests__/data/versions-manifest.json
+34-9Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,29 @@
11
[
2+
{
3+
"version": "1.2.4-beta.2",
4+
"stable": false,
5+
"release_url": "https://github.com/actions/sometool/releases/tag/1.2.4-beta.2-20200402.5",
6+
"files": [
7+
{
8+
"filename": "sometool-1.2.4-linux-x64.tar.gz",
9+
"arch": "x64",
10+
"platform": "linux",
11+
"download_url": "https://github.com/actions/sometool/releases/tag/1.2.4-beta.2-20200402.5/sometool-1.2.4-linux-x64.tar.gz"
12+
},
13+
{
14+
"filename": "sometool-1.2.4-darwin-x64.tar.gz",
15+
"arch": "x64",
16+
"platform": "darwin",
17+
"download_url": "https://github.com/actions/sometool/releases/tag/1.2.4-beta.2-20200402.5/sometool-1.2.4-darwin-x64.tar.gz"
18+
},
19+
{
20+
"filename": "sometool-1.2.4-win32-x64.tar.gz",
21+
"arch": "x64",
22+
"platform": "win32",
23+
"download_url": "https://github.com/actions/sometool/releases/tag/1.2.4-beta.2-20200402.5/sometool-1.2.4-win32-x64.tar.gz"
24+
}
25+
]
26+
},
227
{
328
"version": "1.2.3",
429
"stable": true,
@@ -25,28 +50,28 @@
2550
]
2651
},
2752
{
28-
"version": "1.2.3-beta.2",
53+
"version": "1.1.0-beta.2",
2954
"stable": false,
30-
"release_url": "https://github.com/actions/sometool/releases/tag/1.2.3-beta.2-20200402.5",
55+
"release_url": "https://github.com/actions/sometool/releases/tag/1.1.0-beta.2-20200402.5",
3156
"files": [
3257
{
33-
"filename": "sometool-1.2.3-linux-x64.tar.gz",
58+
"filename": "sometool-1.1.0-linux-x64.tar.gz",
3459
"arch": "x64",
3560
"platform": "linux",
36-
"download_url": "https://github.com/actions/sometool/releases/tag/1.2.3-beta.2-20200402.5/sometool-1.2.3-linux-x64.tar.gz"
61+
"download_url": "https://github.com/actions/sometool/releases/tag/1.1.0-beta.2-20200402.5/sometool-1.1.0-linux-x64.tar.gz"
3762
},
3863
{
39-
"filename": "sometool-1.2.3-darwin-x64.tar.gz",
64+
"filename": "sometool-1.1.0-darwin-x64.tar.gz",
4065
"arch": "x64",
4166
"platform": "darwin",
42-
"download_url": "https://github.com/actions/sometool/releases/tag/1.2.3-20200402.5/sometool-1.2.3-darwin-x64.tar.gz"
67+
"download_url": "https://github.com/actions/sometool/releases/tag/1.1.0-beta.2-20200402.5/sometool-1.1.0-darwin-x64.tar.gz"
4368
},
4469
{
45-
"filename": "sometool-1.2.3-win32-x64.tar.gz",
70+
"filename": "sometool-1.1.0-win32-x64.tar.gz",
4671
"arch": "x64",
4772
"platform": "win32",
48-
"download_url": "https://github.com/actions/sometool/releases/tag/1.2.3-20200402.5/sometool-1.2.3-win32-x64.tar.gz"
73+
"download_url": "https://github.com/actions/sometool/releases/tag/1.1.0-beta.2-20200402.5/sometool-1.1.0-win32-x64.tar.gz"
4974
}
5075
]
5176
}
52-
]
77+
]

‎__tests__/find-pypy.test.ts

Copy file name to clipboardExpand all lines: __tests__/find-pypy.test.ts
+15Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,4 +252,19 @@ describe('findPyPyVersion', () => {
252252
`PyPy version 3.7 (v7.5.x) with arch ${architecture} not found`
253253
);
254254
});
255+
256+
it('found and install successfully, pre-release fallback', async () => {
257+
spyCacheDir = jest.spyOn(tc, 'cacheDir');
258+
spyCacheDir.mockImplementation(() =>
259+
path.join(toolDir, 'PyPy', '3.8.12', architecture)
260+
);
261+
spyChmodSync = jest.spyOn(fs, 'chmodSync');
262+
spyChmodSync.mockImplementation(() => undefined);
263+
await expect(
264+
finder.findPyPyVersion('pypy3.8', architecture)
265+
).resolves.toEqual({
266+
resolvedPythonVersion: '3.8.12',
267+
resolvedPyPyVersion: '7.3.8rc2'
268+
});
269+
});
255270
});

‎__tests__/finder.test.ts

Copy file name to clipboardExpand all lines: __tests__/finder.test.ts
+56-3Lines changed: 56 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,10 @@ describe('Finder tests', () => {
5252
fs.writeFileSync(`${pythonDir}.complete`, 'hello');
5353
});
5454
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
55-
await finder.useCpythonVersion('1.2.3', 'x64');
55+
await expect(finder.useCpythonVersion('1.2.3', 'x64')).resolves.toEqual({
56+
impl: 'CPython',
57+
version: '1.2.3'
58+
});
5659
});
5760

5861
it('Finds pre-release Python version in the manifest', async () => {
@@ -67,14 +70,64 @@ describe('Finder tests', () => {
6770
const pythonDir: string = path.join(
6871
toolDir,
6972
'Python',
70-
'1.2.3-beta.2',
73+
'1.2.4-beta.2',
7174
'x64'
7275
);
7376
await io.mkdirP(pythonDir);
7477
fs.writeFileSync(`${pythonDir}.complete`, 'hello');
7578
});
7679
// This will throw if it doesn't find it in the manifest (because no such version exists)
77-
await finder.useCpythonVersion('1.2.3-beta.2', 'x64');
80+
await expect(
81+
finder.useCpythonVersion('1.2.4-beta.2', 'x64')
82+
).resolves.toEqual({
83+
impl: 'CPython',
84+
version: '1.2.4-beta.2'
85+
});
86+
});
87+
88+
it('Finds stable Python version if it is not installed, but exists in the manifest, skipping newer pre-release', async () => {
89+
const findSpy: jest.SpyInstance = jest.spyOn(tc, 'getManifestFromRepo');
90+
findSpy.mockImplementation(() => <tc.IToolRelease[]>manifestData);
91+
92+
const installSpy: jest.SpyInstance = jest.spyOn(
93+
installer,
94+
'installCpythonFromRelease'
95+
);
96+
installSpy.mockImplementation(async () => {
97+
const pythonDir: string = path.join(toolDir, 'Python', '1.2.3', 'x64');
98+
await io.mkdirP(pythonDir);
99+
fs.writeFileSync(`${pythonDir}.complete`, 'hello');
100+
});
101+
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
102+
await expect(finder.useCpythonVersion('1.2', 'x64')).resolves.toEqual({
103+
impl: 'CPython',
104+
version: '1.2.3'
105+
});
106+
});
107+
108+
it('Finds Python version if it is not installed, but exists in the manifest, pre-release fallback', async () => {
109+
const findSpy: jest.SpyInstance = jest.spyOn(tc, 'getManifestFromRepo');
110+
findSpy.mockImplementation(() => <tc.IToolRelease[]>manifestData);
111+
112+
const installSpy: jest.SpyInstance = jest.spyOn(
113+
installer,
114+
'installCpythonFromRelease'
115+
);
116+
installSpy.mockImplementation(async () => {
117+
const pythonDir: string = path.join(
118+
toolDir,
119+
'Python',
120+
'1.1.0-beta.2',
121+
'x64'
122+
);
123+
await io.mkdirP(pythonDir);
124+
fs.writeFileSync(`${pythonDir}.complete`, 'hello');
125+
});
126+
// This will throw if it doesn't find it in the cache and in the manifest (because no such version exists)
127+
await expect(finder.useCpythonVersion('1.1', 'x64')).resolves.toEqual({
128+
impl: 'CPython',
129+
version: '1.1.0-beta.2'
130+
});
78131
});
79132

80133
it('Errors if Python is not installed', async () => {

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.