Skip to content
Snippets Groups Projects
Commit d260d783 authored by Simon McVittie's avatar Simon McVittie
Browse files

populate-depot: Improve version logging

parent d002b26d
No related branches found
No related tags found
1 merge request!294CI: Update populate-depot to latest version
...@@ -46,7 +46,6 @@ from typing import ( ...@@ -46,7 +46,6 @@ from typing import (
List, List,
Optional, Optional,
Sequence, Sequence,
Tuple,
) )
from debian.deb822 import ( from debian.deb822 import (
...@@ -282,6 +281,38 @@ exec "$here/run-in-steamrt" \\ ...@@ -282,6 +281,38 @@ exec "$here/run-in-steamrt" \\
''' '''
class ComponentVersion:
def __init__(self, name: str = '') -> None:
self.name = name
self.version = ''
self.runtime = ''
self.runtime_version = ''
self.comment = ''
def __str__(self) -> str:
ret = '{} version {!r}'.format(self.name, self.version)
if self.runtime or self.runtime_version:
ret = ret + ' (from {} version {})'.format(
self.runtime or '(unknown runtime)',
self.runtime_version or '(unknown)',
)
return ret
def to_tsv(self) -> str:
if self.comment:
comment = '# ' + self.comment
else:
comment = ''
return '\t'.join((
self.name, self.version,
self.runtime, self.runtime_version,
comment,
)) + '\n'
class Main: class Main:
def __init__( def __init__(
self, self,
...@@ -382,15 +413,20 @@ class Main: ...@@ -382,15 +413,20 @@ class Main:
self.runtimes.append(self.new_runtime(name, details)) self.runtimes.append(self.new_runtime(name, details))
self.versions = [] # type: List[Tuple[str, str, str]] self.versions = [] # type: List[ComponentVersion]
def new_runtime(self, name: str, details: Dict[str, Any]) -> Runtime: def new_runtime(
self,
name: str,
details: Dict[str, Any],
default_suite: str = '',
) -> Runtime:
return Runtime.from_details( return Runtime.from_details(
name, name,
details, details,
default_architecture=self.default_architecture, default_architecture=self.default_architecture,
default_include_sdk=self.default_include_sdk, default_include_sdk=self.default_include_sdk,
default_suite=self.default_suite, default_suite=default_suite or self.default_suite,
default_version=self.default_version, default_version=self.default_version,
images_uri=self.images_uri, images_uri=self.images_uri,
ssh_host=self.ssh_host, ssh_host=self.ssh_host,
...@@ -398,24 +434,29 @@ class Main: ...@@ -398,24 +434,29 @@ class Main:
) )
def run(self) -> None: def run(self) -> None:
comment = '' pv_version = ComponentVersion('pressure-vessel')
for runtime in self.runtimes: for runtime in self.runtimes:
if runtime.name == self.pressure_vessel: if runtime.name == self.pressure_vessel:
logger.info( logger.info(
'Downloading pressure-vessel from %s', runtime.name) 'Downloading pressure-vessel from %s', runtime.name)
pressure_vessel_runtime = runtime pressure_vessel_runtime = runtime
self.download_pressure_vessel(pressure_vessel_runtime) pv_version.comment = self.download_pressure_vessel(
comment = f'from {runtime.name}' pressure_vessel_runtime
)
break break
else: else:
if self.pressure_vessel.startswith('{'): if self.pressure_vessel.startswith('{'):
logger.info( logger.info(
'Downloading pressure-vessel using JSON from command-line') 'Downloading pressure-vessel using JSON from command-line')
pressure_vessel_runtime = self.new_runtime( pressure_vessel_runtime = self.new_runtime(
'scout', json.loads(self.pressure_vessel), 'scout',
json.loads(self.pressure_vessel),
default_suite='scout',
)
pv_version.comment = self.download_pressure_vessel(
pressure_vessel_runtime
) )
self.download_pressure_vessel(pressure_vessel_runtime)
elif ( elif (
os.path.isdir(self.pressure_vessel) os.path.isdir(self.pressure_vessel)
or ( or (
...@@ -430,30 +471,34 @@ class Main: ...@@ -430,30 +471,34 @@ class Main:
self.use_local_pressure_vessel(self.pressure_vessel) self.use_local_pressure_vessel(self.pressure_vessel)
pressure_vessel_runtime = self.new_runtime( pressure_vessel_runtime = self.new_runtime(
'scout', {'path': self.pressure_vessel}, 'scout', {'path': self.pressure_vessel},
default_suite='local',
) )
comment = 'from local file' pv_version.comment = 'from local file'
elif os.path.isfile(self.pressure_vessel): elif os.path.isfile(self.pressure_vessel):
logger.info( logger.info(
'Downloading pressure-vessel using JSON from %r', 'Downloading pressure-vessel using JSON from %r',
self.pressure_vessel) self.pressure_vessel)
with open(self.pressure_vessel, 'rb') as reader: with open(self.pressure_vessel, 'rb') as reader:
details = json.load(reader) details = json.load(reader)
pressure_vessel_runtime = self.new_runtime('scout', details) pressure_vessel_runtime = self.new_runtime(
self.download_pressure_vessel(pressure_vessel_runtime) 'scout',
details,
default_suite='scout',
)
pv_version.comment = self.download_pressure_vessel(
pressure_vessel_runtime
)
else: else:
logger.info( logger.info(
'Assuming %r is a suite containing pressure-vessel', 'Assuming %r is a suite containing pressure-vessel',
self.pressure_vessel) self.pressure_vessel)
pressure_vessel_runtime = self.new_runtime( pressure_vessel_runtime = self.new_runtime(
self.pressure_vessel, {}, self.pressure_vessel, {},
default_suite=self.pressure_vessel,
)
pv_version.comment = self.download_pressure_vessel(
pressure_vessel_runtime
) )
self.download_pressure_vessel(pressure_vessel_runtime)
comment = 'from {self.pressure_vessel}'
if pressure_vessel_runtime.pinned_version is not None:
comment += f' version {pressure_vessel_runtime.pinned_version}'
version = 'unknown'
for path in ('metadata/VERSION.txt', 'sources/VERSION.txt'): for path in ('metadata/VERSION.txt', 'sources/VERSION.txt'):
full = os.path.join(self.depot, 'pressure-vessel', path) full = os.path.join(self.depot, 'pressure-vessel', path)
...@@ -463,7 +508,11 @@ class Main: ...@@ -463,7 +508,11 @@ class Main:
break break
self.versions.append(('pressure-vessel', version, comment)) pv_version.runtime = pressure_vessel_runtime.suite or ''
pv_version.runtime_version = (
pressure_vessel_runtime.pinned_version or ''
)
self.versions.append(pv_version)
if self.unpack_ld_library_path: if self.unpack_ld_library_path:
logger.info( logger.info(
...@@ -496,6 +545,8 @@ class Main: ...@@ -496,6 +545,8 @@ class Main:
runtime) runtime)
self.download_runtime(runtime) self.download_runtime(runtime)
component_version = ComponentVersion(runtime.name)
version = runtime.pinned_version version = runtime.pinned_version
comment = ', '.join(sorted(runtime.runtime_files)) comment = ', '.join(sorted(runtime.runtime_files))
...@@ -503,7 +554,11 @@ class Main: ...@@ -503,7 +554,11 @@ class Main:
version = runtime.version version = runtime.version
comment += ' (from local build)' comment += ' (from local build)'
self.versions.append((runtime.name, version, comment)) component_version.version = version
component_version.runtime = runtime.suite
component_version.runtime_version = version
component_version.comment = comment
self.versions.append(component_version)
if self.unpack_runtimes: if self.unpack_runtimes:
dest = os.path.join(self.depot, runtime.name) dest = os.path.join(self.depot, runtime.name)
...@@ -663,23 +718,19 @@ class Main: ...@@ -663,23 +718,19 @@ class Main:
except (OSError, subprocess.SubprocessError): except (OSError, subprocess.SubprocessError):
version = 'unknown' version = 'unknown'
self.versions.append( component_version = ComponentVersion('SteamLinuxRuntime')
('SteamLinuxRuntime', version, 'Entry point scripts, etc.') component_version.version = version
) component_version.comment = 'Entry point scripts, etc.'
self.versions.append(component_version)
with open(os.path.join(self.depot, 'VERSIONS.txt'), 'w') as writer: with open(os.path.join(self.depot, 'VERSIONS.txt'), 'w') as writer:
writer.write('#Name\tVersion\tComment\n') writer.write(
'#Name\tVersion\t\tRuntime\tRuntime_Version\tComment\n'
for triple in sorted(self.versions): )
name, version, comment = triple
if comment:
comment = '# ' + comment
logger.info( for entry in sorted(self.versions, key=lambda v: v.to_tsv()):
'Component version: %s version %s', logger.info('Component version: %s', entry)
name, version) writer.write(entry.to_tsv())
writer.write(f'{name}\t{version}\t{comment}\n')
def use_local_pressure_vessel(self, path: str = '.') -> None: def use_local_pressure_vessel(self, path: str = '.') -> None:
pv_dir = os.path.join(self.depot, 'pressure-vessel') pv_dir = os.path.join(self.depot, 'pressure-vessel')
...@@ -694,7 +745,7 @@ class Main: ...@@ -694,7 +745,7 @@ class Main:
logger.info('%r', argv) logger.info('%r', argv)
subprocess.run(argv, check=True) subprocess.run(argv, check=True)
def download_pressure_vessel(self, runtime: Runtime) -> None: def download_pressure_vessel(self, runtime: Runtime) -> str:
filename = 'pressure-vessel-bin.tar.gz' filename = 'pressure-vessel-bin.tar.gz'
runtime.pin_version(self.opener) runtime.pin_version(self.opener)
...@@ -714,6 +765,8 @@ class Main: ...@@ -714,6 +765,8 @@ class Main:
check=True, check=True,
) )
return filename
def use_local_runtime(self, runtime: Runtime) -> None: def use_local_runtime(self, runtime: Runtime) -> None:
assert runtime.path assert runtime.path
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment