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"
}
}