v30.3-roots.1 · Commit 66: [PATCH 66/68] fix(release): validate notices and reuse proven promotion CI
ci/test/test_runner_release_notices.py
Before: ci/test/test_runner_release_notices.py · After: ci/test/test_runner_release_notices.py
File metadata
index cc48d05fdda5d000038eaf2eeae62112603f8050..09d309554a1384a37a9a8ed2cee75d76bc0862a3 100755
Download original patch · Release notes
Diff rows 1–51 of 51. Line numbers refer to the original before/after files.
+ Added− RemovedUnmarked lines are context.
Scroll the code area horizontally to read long lines. The two line-number columns refer to before and after.
ci/test/test_runner_release_notices.py
CHANGED
|
@@ -52,6 +52,8 @@ class RunnerNoticeTest(unittest.TestCase):
|
|
|
52
52
|
def execute(*args):
|
|
53
53
|
if args[0] == 'git':
|
|
54
54
|
return 'a' * 40
|
|
55
|
+
if 'print-boost_download_path' in args:
|
|
56
|
+
self.assertIn('--eval=print-boost_download_path: package=boost', args)
|
|
55
57
|
return '\n'.join(x.removeprefix('print-') + '=' + values[x.removeprefix('print-')]
|
|
56
58
|
for x in args if x.startswith('print-'))
|
|
57
59
|
with patch.object(runner, 'run', side_effect=execute):
|
|
@@ -64,13 +66,40 @@ class RunnerNoticeTest(unittest.TestCase):
|
|
|
64
66
|
with self.assertRaises(FileNotFoundError):
|
|
65
67
|
runner.depends_notices(depends, 'aarch64-linux-gnu', self.work / 'missing')
|
|
66
68
|
|
|
69
|
+
def test_actual_depends_print_uses_selected_package_version(self):
|
|
70
|
+
output = runner.run('make', '--no-print-directory', '-C', str(ROOT / 'depends'),
|
|
71
|
+
'HOST=x86_64-linux-gnu',
|
|
72
|
+
'--eval=print-boost_download_path: package=boost',
|
|
73
|
+
'print-boost_version', 'print-boost_download_path')
|
|
74
|
+
values = dict(line.split('=', 1) for line in output.splitlines())
|
|
75
|
+
self.assertEqual(values['boost_download_path'],
|
|
76
|
+
'https://github.com/boostorg/boost/releases/download/boost-' + values['boost_version'])
|
|
77
|
+
|
|
67
78
|
def test_source_hash_and_unsafe_member_fail_closed(self):
|
|
68
79
|
source, checksum = self.archive()
|
|
69
80
|
with self.assertRaisesRegex(ValueError, 'hash mismatch'):
|
|
70
81
|
runner.source_notices(source, '0' * 64, self.work / 'bad')
|
|
71
|
-
source, checksum = self.archive('../LICENSE')
|
|
72
|
-
with self.assertRaisesRegex(ValueError, 'Unsafe'):
|
|
73
|
-
runner.source_notices(source, checksum, self.work / 'bad')
|
|
82
|
+
for name in ('../LICENSE', '/LICENSE', 'source/C:/LICENSE', 'source\\LICENSE'):
|
|
83
|
+
source, checksum = self.archive(name)
|
|
84
|
+
with self.assertRaisesRegex(ValueError, 'Unsafe'):
|
|
85
|
+
runner.source_notices(source, checksum, self.work / 'bad')
|
|
86
|
+
|
|
87
|
+
def test_irrelevant_systemtap_manpage_names_are_not_written_or_followed(self):
|
|
88
|
+
source = self.work / 'systemtap.tar'
|
|
89
|
+
with tarfile.open(source, 'w') as out:
|
|
90
|
+
for name in ('systemtap-4.8/COPYING',
|
|
91
|
+
'systemtap-4.8/doc/man3/function::HZ.3stap',
|
|
92
|
+
'../irrelevant-test-data', '/absolute-test-data'):
|
|
93
|
+
entry = tarfile.TarInfo(name)
|
|
94
|
+
entry.size = 7
|
|
95
|
+
out.addfile(entry, io.BytesIO(b'license'))
|
|
96
|
+
link = tarfile.TarInfo('systemtap-4.8/LICENSE-link')
|
|
97
|
+
link.type = tarfile.SYMTYPE
|
|
98
|
+
link.linkname = '/outside/LICENSE'
|
|
99
|
+
out.addfile(link)
|
|
100
|
+
files = runner.source_notices(source, runner.sha256(source), self.work / 'selected')
|
|
101
|
+
self.assertEqual([p.relative_to(self.work / 'selected').as_posix() for p in files],
|
|
102
|
+
['systemtap-4.8/COPYING'])
|
|
74
103
|
|
|
75
104
|
def test_brew_retains_actual_receipt_matching_version_and_source(self):
|
|
76
105
|
source, checksum = self.archive()
|