diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index df4c12c3b..d78d98a70 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,17 +3,17 @@ - + https://github.com/dotnet/arcade - 05d4d46d438eec2d012a0dae7a9118e5fab947af + e58820063a8754d418518bce69ca2df0e3b4ac25 - + https://github.com/dotnet/arcade - 05d4d46d438eec2d012a0dae7a9118e5fab947af + e58820063a8754d418518bce69ca2df0e3b4ac25 - + https://github.com/dotnet/arcade - 05d4d46d438eec2d012a0dae7a9118e5fab947af + e58820063a8754d418518bce69ca2df0e3b4ac25 diff --git a/eng/Versions.props b/eng/Versions.props index 61ee42782..490314eba 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -17,7 +17,7 @@ 8.0.0 6.0.36 0.2.0-alpha.24576.2 - 10.0.0-beta.25053.3 + 10.0.0-beta.25056.1 6.0.0 4.18.4 4.9.4 diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index 454fd75c7..a8c0bd3b9 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -44,6 +44,11 @@ parameters: displayName: Publish installers and checksums type: boolean default: true + + - name: requireDefaultChannels + displayName: Fail the build if there are no default channel(s) registrations for the current build + type: boolean + default: false - name: SDLValidationParameters type: object @@ -312,5 +317,6 @@ stages: -PublishingInfraVersion ${{ parameters.publishingInfraVersion }} -AzdoToken '$(System.AccessToken)' -WaitPublishingFinish true + -RequireDefaultChannels ${{ parameters.requireDefaultChannels }} -ArtifactsPublishingAdditionalParameters '${{ parameters.artifactsPublishingAdditionalParameters }}' -SymbolPublishingAdditionalParameters '${{ parameters.symbolPublishingAdditionalParameters }}' diff --git a/eng/common/cross/build-rootfs.sh b/eng/common/cross/build-rootfs.sh index 986db806e..6f49d7482 100755 --- a/eng/common/cross/build-rootfs.sh +++ b/eng/common/cross/build-rootfs.sh @@ -800,7 +800,7 @@ elif [[ -n "$__CodeName" ]]; then PYTHON=${PYTHON_EXECUTABLE:-python3} # shellcheck disable=SC2086,SC2046 - echo running "$PYTHON" "$__CrossDir/install-debs.py" --arch "$__UbuntuArch" --rootfsdir "$__RootfsDir" --artool "$AR" \ + echo running "$PYTHON" "$__CrossDir/install-debs.py" --arch "$__UbuntuArch" --mirror "$__UbuntuRepo" --rootfsdir "$__RootfsDir" --artool "$AR" \ $(echo $suites | xargs -n 1 | xargs -I {} echo -n "--suite {} ") \ $__UbuntuPackages diff --git a/eng/common/cross/install-debs.py b/eng/common/cross/install-debs.py index 697428b21..c81eb37e5 100644 --- a/eng/common/cross/install-debs.py +++ b/eng/common/cross/install-debs.py @@ -162,23 +162,35 @@ def parse_package_index(content): packages = {} aliases = {} entries = re.split(r'\n\n+', content) + for entry in entries: fields = dict(re.findall(r'^(\S+): (.+)$', entry, re.MULTILINE)) if "Package" in fields: package_name = fields["Package"] - packages[package_name] = { - "Version": fields.get("Version"), - "Filename": fields.get("Filename"), - "Depends": fields.get("Depends") - } - if "Provides" in fields: - provides_list = [x.strip() for x in fields["Provides"].split(",")] - for alias in provides_list: - # strip version specifiers - alias_name = re.sub(r'\s*\(=.*\)', '', alias) - if alias_name not in aliases: - aliases[alias_name] = [] - aliases[alias_name].append(package_name) + version = fields.get("Version") + filename = fields.get("Filename") + depends = fields.get("Depends") + provides = fields.get("Provides", None) + + # Only update if package_name is not in packages or if the new version is higher + if package_name not in packages or compare_debian_versions(version, packages[package_name]["Version"]) > 0: + packages[package_name] = { + "Version": version, + "Filename": filename, + "Depends": depends + } + + # Update aliases if package provides any alternatives + if provides: + provides_list = [x.strip() for x in provides.split(",")] + for alias in provides_list: + # Strip version specifiers + alias_name = re.sub(r'\s*\(=.*\)', '', alias) + if alias_name not in aliases: + aliases[alias_name] = [] + if package_name not in aliases[alias_name]: + aliases[alias_name].append(package_name) + return packages, aliases def install_packages(mirror, packages_info, aliases, tmp_dir, extract_dir, ar_tool, desired_packages): @@ -189,27 +201,13 @@ def install_packages(mirror, packages_info, aliases, tmp_dir, extract_dir, ar_to packages_to_download = {} for pkg in resolved_packages: - available_versions = [pkg] + if pkg in packages_info: + packages_to_download[pkg] = packages_info[pkg] if pkg in aliases: - available_versions.extend(aliases[pkg]) - - # Choose the package with the latest version - if available_versions: - best_package = max( - (p for p in available_versions if p in packages_info), - key=lambda p: ( - 1 if p == pkg else 0, - cmp_to_key(lambda p1, p2: compare_debian_versions( - packages_info[p1]["Version"], - packages_info[p2]["Version"] - ))(p) - ), - default=None - ) - - if best_package: - packages_to_download[best_package] = packages_info[best_package] + for alias in aliases[pkg]: + if alias in packages_info: + packages_to_download[alias] = packages_info[alias] asyncio.run(download_deb_files_parallel(mirror, packages_to_download, tmp_dir)) @@ -225,11 +223,11 @@ def install_packages(mirror, packages_info, aliases, tmp_dir, extract_dir, ar_to for pkg in reversed(resolved_packages): deb_file = package_to_deb_file_map.get(pkg) if deb_file and os.path.exists(deb_file): - extract_deb_file_using_dpkg(deb_file, tmp_dir, extract_dir, ar_tool) + extract_deb_file(deb_file, tmp_dir, extract_dir, ar_tool) print("All done!") -def extract_deb_file_using_dpkg(deb_file, tmp_dir, extract_dir, ar_tool): +def extract_deb_file(deb_file, tmp_dir, extract_dir, ar_tool): """Extract .deb file contents""" os.makedirs(extract_dir, exist_ok=True) @@ -270,7 +268,7 @@ def extract_deb_file_using_dpkg(deb_file, tmp_dir, extract_dir, ar_tool): raise ValueError(f"Unsupported compression format: {file_extension}") with tarfile.open(tar_file_path, mode) as tar: - tar.extractall(path=extract_dir, filter=None) + tar.extractall(path=extract_dir, filter='fully_trusted') def finalize_setup(rootfsdir): lib_dir = os.path.join(rootfsdir, 'lib') diff --git a/eng/common/post-build/publish-using-darc.ps1 b/eng/common/post-build/publish-using-darc.ps1 index 90b58e32a..a261517ef 100644 --- a/eng/common/post-build/publish-using-darc.ps1 +++ b/eng/common/post-build/publish-using-darc.ps1 @@ -5,7 +5,8 @@ param( [Parameter(Mandatory=$false)][string] $MaestroApiEndPoint = 'https://maestro.dot.net', [Parameter(Mandatory=$true)][string] $WaitPublishingFinish, [Parameter(Mandatory=$false)][string] $ArtifactsPublishingAdditionalParameters, - [Parameter(Mandatory=$false)][string] $SymbolPublishingAdditionalParameters + [Parameter(Mandatory=$false)][string] $SymbolPublishingAdditionalParameters, + [Parameter(Mandatory=$false)][string] $RequireDefaultChannels ) try { @@ -33,6 +34,10 @@ try { if ("false" -eq $WaitPublishingFinish) { $optionalParams.Add("--no-wait") | Out-Null } + + if ("true" -eq $RequireDefaultChannels) { + $optionalParams.Add("--default-channels-required") | Out-Null + } & $darc add-build-to-channel ` --id $buildId ` diff --git a/global.json b/global.json index 8286b7eea..953f27303 100644 --- a/global.json +++ b/global.json @@ -20,7 +20,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25053.3", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.25053.3" + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25056.1", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.25056.1" } }