Compare commits

..

1 Commits

Author SHA1 Message Date
1bede35916 import CS dotnet8.0-8.0.113-2.el10 2025-03-27 13:06:45 +00:00
17 changed files with 84 additions and 1174 deletions

View File

@ -1 +0,0 @@
1

89
.gitignore vendored
View File

@ -1,88 +1 @@
/dotnet-v3.1.101-SDK.tar.gz
/dotnet-v3.1.102-SDK.tar.gz
/dotnet-v3.1.103.2-SDK.tar.gz
/dotnet-v5.0.102-SDK-arm64-bootstrap.tar.gz
/dotnet-v5.0.102-SDK-x64-bootstrap.tar.gz
/dotnet-v5.0.102-SDK.tar.gz
/dotnet-v5.0.103-SDK.tar.gz
/dotnet-v5.0.104-SDK.tar.gz
/dotnet-v5.0.202-SDK.tar.gz
/dotnet-v5.0.203-SDK.tar.gz
/dotnet-v5.0.204-SDK.tar.gz
/dotnet-9e8b04bbff820c93c142f99a507a46b976f5c14c-x64-bootstrap.tar.xz
/dotnet-arm64-prebuilts-2021-10-29.tar.gz
/dotnet-s390x-prebuilts-2021-10-29.tar.gz
/dotnet-9e8b04bbff820c93c142f99a507a46b976f5c14c.tar.gz
/dotnet-v6.0.101.tar.gz
/dotnet-v6.0.102.tar.gz
/dotnet-v6.0.103.tar.gz
/dotnet-v6.0.104.tar.gz
/dotnet-v6.0.105.tar.gz
/dotnet-v7.0.100-rc.2.22477.23-x64-bootstrap.tar.xz
/dotnet-arm64-prebuilts-2022-10-12.tar.gz
/dotnet-ppc64le-prebuilts-2022-10-21.tar.gz
/dotnet-s390x-prebuilts-2022-10-12.tar.gz
/dotnet-v7.0.100.tar.gz
/dotnet-v7.0.101.tar.gz
/dotnet-v7.0.102.tar.gz
/dotnet-v8.0.0-preview.7.23375.6-x64-bootstrap.tar.xz
/dotnet-prebuilts-8.0.100-preview.6.23330.14-arm64.tar.gz
/dotnet-prebuilts-8.0.100-preview.6.23330.14-ppc64le.tar.gz
/dotnet-prebuilts-8.0.100-preview.6.23330.14-s390x.tar.gz
/dotnet-v8.0.0-rc.1.23419.4-x64-bootstrap.tar.xz
/dotnet-prebuilts-8.0.100-rc.1.23410.12-arm64.tar.gz
/dotnet-prebuilts-8.0.100-rc.1.23410.12-ppc64le.tar.gz
/dotnet-prebuilts-8.0.100-rc.1.23410.12-s390x.tar.gz
/dotnet-v8.0.0-rc.1.23419.4.tar.gz
/dotnet-v8.0.0-rc.2.23479.6.tar.gz
/dotnet-v8.0.0.tar.gz
/dotnet-v8.0.1.tar.gz
/dotnet-v8.0.2.tar.gz
/dotnet-8.0.3.tar.gz
/dotnet-8.0.3.tar.gz.sig
/dotnet-8.0.4.tar.gz
/dotnet-8.0.4.tar.gz.sig
/dotnet-8.0.5.tar.gz
/dotnet-8.0.5.tar.gz.sig
/dotnet-8.0.7.tar.gz
/dotnet-8.0.7.tar.gz.sig
/dotnet-8.0.8.tar.gz
/dotnet-8.0.8.tar.gz.sig
/dotnet-8.0.10.tar.gz
/dotnet-8.0.10.tar.gz.sig
/dotnet-8.0.11.tar.gz
/dotnet-8.0.11.tar.gz.sig
/dotnet-8.0.12.tar.gz
/dotnet-8.0.12.tar.gz.sig
/dotnet-8.0.13.tar.gz
/dotnet-8.0.13.tar.gz.sig
/dotnet-8.0.14.tar.gz
/dotnet-8.0.14.tar.gz.sig
/dotnet-8.0.15.tar.gz
/dotnet-8.0.15.tar.gz.sig
/dotnet-8.0.16.tar.gz
/dotnet-8.0.16.tar.gz.sig
/dotnet-8.0.17.tar.gz
/dotnet-8.0.17.tar.gz.sig
/dotnet-8.0.18.tar.gz
/dotnet-8.0.18.tar.gz.sig
/dotnet-8.0.119.tar.gz
/dotnet-8.0.119.tar.gz.sig
/dotnet-8.0.120.tar.gz
/dotnet-8.0.120.tar.gz.sig
/dotnet-8.0.121.tar.gz
/dotnet-8.0.121.tar.gz.sig
/dotnet-8.0.122.tar.gz
/dotnet-8.0.122.tar.gz.sig
/dotnet-8.0.123.tar.gz
/dotnet-8.0.123.tar.gz.sig
/dotnet-8.0.124.tar.gz
/dotnet-8.0.124.tar.gz.sig
/dotnet-8.0.125.tar.gz
/dotnet-8.0.125.tar.gz.sig
/dotnet-8.0.126.tar.gz
/dotnet-8.0.126.tar.gz.sig
/dotnet-8.0.127.tar.gz
/dotnet-8.0.127.tar.gz.sig
/dotnet-8.0.128.tar.gz
/dotnet-8.0.128.tar.gz.sig
dotnet-8.0.13.tar.gz

140
README.md
View File

@ -1,140 +0,0 @@
# dotnet8.0
This is the work in progress .NET 8.0 package for Fedora.
Builds for Fedora, CentOS Stream and RHEL are available from
https://copr.fedorainfracloud.org/coprs/g/dotnet-sig/dotnet-preview/
This package is maintained by the Fedora DotNet SIG (Special Interest
Group). You can find out more about the DotNet SIG at:
- https://fedoraproject.org/wiki/SIGs/DotNet
- https://fedoraproject.org/wiki/DotNet
- https://lists.fedoraproject.org/archives/list/dotnet-sig@lists.fedoraproject.org/
Please report any issues [using
bugzilla](https://bugzilla.redhat.com/enter_bug.cgi?product=Fedora&component=dotnet7.0).
# Specification
This package follows [package naming and contents suggested by
upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging),
with one exception. It installs dotnet to `/usr/lib64/dotnet` (aka
`%{_libdir}`).
# Contributing
The steps below are for the final package. Please only contribute to this
pre-release version this if you know what you are doing. Original instructions
follow.
## General Changes
1. Fork the repo.
2. Checkout the forked repository.
- `git clone ssh://$USER@pkgs.fedoraproject.org/forks/$USER/rpms/dotnet7.0.git`
- `cd dotnet7.0`
3. Make your changes. Don't forget to add a changelog.
4. Do local builds.
- `fedpkg local`
5. Fix any errors that come up and rebuild until it works locally.
6. Do builds in koji.
- `fedpkg scratch-build --srpm`
8. Commit the changes to the git repo.
- `git add` any new patches
- `git remove` any now-unnecessary patches
- `git commit -a`
- `git push`
9. Create a pull request with your changes.
10. Once the tests in the pull-request pass, and reviewers are happy, do a real
build.
- `fedpkg build`
11. For non-rawhide releases, file updates using bodhi to ship the just-built
package out to users.
- https://bodhi.fedoraproject.org/updates/new
OR
- `fedpkg update`
## Updating to an new upstream release
1. Fork the repo.
2. Checkout the forked repository.
- `git clone ssh://$USER@pkgs.fedoraproject.org/forks/$USER/rpms/dotnet7.0.git`
- `cd dotnet7.0`
3. Build the new upstream source tarball. Update the versions in the
spec file. Add a changelog. This is generally automated by the
following.
- `./update-release <sdk-version> <runtime-version>`
If this fails because of compiler errors, you might have to figure
out a fix, then add the patch in `build-dotnet-tarball` script
rather than the spec file.
4. Do local builds.
- `fedpkg local`
5. Fix any errors that come up and rebuild until it works locally. Any
patches that are needed at this point should be added to the spec file.
6. Do builds in koji.
- `fedpkg scratch-build --srpm`
7. Upload the source archive to the Fedora look-aside cache.
- `fedpkg new-sources path-to-generated-dotnet-source-tarball.tar.gz`
8. Commit the changes to the git repo.
- `git add` any new patches
- `git remove` any now-unnecessary patches
- `git commit -a`
- `git push`
9. Create a pull request with your changes.
10. Once the tests in the pull-request pass, and reviewers are happy, do a real
build.
- `fedpkg build`
11. For non-rawhide releases, file updates using bodhi to ship the just-built
package out to users.
- https://bodhi.fedoraproject.org/updates/new
OR
- `fedpkg update`
# Testing
This package uses CI tests as defined in `tests/test.yml`. Creating a
pull-request or running a build will fire off tests and flag any issues. We have
enabled gating (via `gating.yaml`) on the tests. That prevents a build
that fails any test from being released until the failures are waived.
The tests themselves are contained in this external repository:
https://github.com/redhat-developer/dotnet-regular-tests/

View File

@ -1,56 +0,0 @@
#!/bin/bash
# Usage:
# ./build-arm64-bootstrap-tarball <bootstrap-dir> [SDK-version]
set -euo pipefail
set -x
function parse-nuget-name-version-from-file() {
package=$1
filename=${package##*/}
version_suffix=$(echo "$filename" | grep -Eo '\.[[:digit:]]+.*\.nupkg')
version=$(echo "$version_suffix" | sed -Ee 's/^\.//' -e 's/\.nupkg$//')
name=${filename:0:(${#filename}-${#version_suffix})}
echo "$name" "$version"
}
bootstrap_dir=$(readlink -f "$1")
sdk_version=${2:-$(jq -r '.tools.dotnet' "$bootstrap_dir"/global.json)}
mkdir -p "dotnet-prebuilts-${sdk_version}-arm64"
pushd "dotnet-prebuilts-${sdk_version}-arm64"
# Binaries can be at one of several different URLs:
# GA releases:
if ! wget "https://dotnetcli.azureedge.net/dotnet/Sdk/${sdk_version}/dotnet-sdk-${sdk_version}-linux-arm64.tar.gz" ; then
# Preview releases:
wget "https://dotnetbuilds.azureedge.net/public/Sdk/${sdk_version}/dotnet-sdk-${sdk_version}-linux-arm64.tar.gz"
fi
for archive in "$bootstrap_dir"/prereqs/packages/archive/*.tar.gz; do
mapfile -t linux_x64_packages < <(tar tf "$archive" | grep linux-x64)
for package in "${linux_x64_packages[@]}"; do
if [[ "$package" = *'.Intermediate.'* ]]; then
continue;
fi
read -r name version < <(parse-nuget-name-version-from-file "$package")
arm_name=${name/linux-x64/linux-arm64}
# https://gist.github.com/omajid/c04b6025de49d0b7b18ab4a7e789484e
nappo download --verbose "$arm_name" "$version"
done
done
popd
tar czf "dotnet-prebuilts-${sdk_version}-arm64.tar.gz" "dotnet-prebuilts-${sdk_version}-arm64"

View File

@ -1,186 +0,0 @@
#!/bin/bash
# Usage:
# build-dotnet-tarball [--bootstrap] <tag-from-dotnet>
#
# Creates a source archive from a tag (or commit) at
# https://github.com/dotnet/dotnet
#
# Clone dotnet/dotnet, check out the tag, and build a source-tarball.
# Can also use a full git commit identifier instead of tag (not an
# abbreviated 8 character commit identifier though).
set -euo pipefail
IFS=$'\n\t'
function print_usage {
echo "Usage:"
echo "$0 [--bootstrap] <tag-from-dotnet>"
echo
echo "Creates a source archive from a tag at https://github.com/dotnet/dotnet"
echo ""
echo " --bootstrap build a source tarball usable for bootstrapping .NET"
}
function clean_dotnet_cache {
rm -rf ~/.aspnet ~/.dotnet/ ~/.nuget/ ~/.local/share/NuGet ~/.templateengine
rm -rf /tmp/NuGet /tmp/NuGetScratch /tmp/.NETCore* /tmp/.NETStandard* /tmp/.dotnet /tmp/dotnet.* /tmp/clr-debug-pipe* /tmp/Razor-Server /tmp/CoreFxPipe* /tmp/VBCSCompiler /tmp/.NETFramework*
rm -rf ~/.npm/
}
function check_bootstrap_environment {
if rpm -qa | grep dotnet ; then
echo "error: dotnet is installed. Not a good idea for bootstrapping."
exit 1
fi
if [ -d /usr/lib/dotnet ] || [ -d /usr/lib64/dotnet ] || [ -d /usr/share/dotnet ] ; then
echo "error: one of /usr/lib/dotnet /usr/lib64/dotnet or /usr/share/dotnet/ exists. Not a good idea for bootstrapping."
exit 1
fi
if command -v dotnet ; then
echo "error: dotnet is in $PATH. Not a good idea for bootstrapping."
exit 1
fi
}
function runtime_id {
source /etc/os-release
case "${ID}" in
# Remove the RHEL minor version
rhel) rid_version=${VERSION_ID%.*} ;;
*) rid_version=${VERSION_ID} ;;
esac
echo "${ID}.${rid_version}-${arch}"
}
build_bootstrap=false
declare -A archmap
archmap=(
["aarch64"]="arm64"
["amd64"]="x64"
["armv8l"]="arm"
["i386"]="x86"
["i686"]="x86"
["ppc64le"]="ppc64le"
["s390x"]="s390x"
["x86_64"]="x64"
)
arch=${archmap["$(uname -m)"]}
positional_args=()
while [[ "$#" -gt 0 ]]; do
arg="${1}"
case "${arg}" in
--bootstrap)
check_bootstrap_environment
build_bootstrap=true
shift
;;
-h|--help)
print_usage
exit 0
;;
*)
positional_args+=("$1")
shift
;;
esac
done
tag=${positional_args[0]:-}
if [[ -z ${tag} ]]; then
echo "error: missing tag to build"
exit 1
fi
set -x
dir_name="dotnet-${tag}"
unmodified_tarball_name="${dir_name}-original"
tarball_name="${dir_name}"
tarball_suffix=.tar.gz
if [[ ${build_bootstrap} == true ]]; then
unmodified_tarball_name="${unmodified_tarball_name}-${arch}-bootstrap"
tarball_name="${tarball_name}-${arch}-bootstrap"
tarball_suffix=.tar.xz
fi
if [ -f "${tarball_name}${tarball_suffix}" ]; then
echo "error: ${tarball_name}${tarball_suffix} already exists"
exit 1
fi
if [ ! -f "${unmodified_tarball_name}.tar.gz" ]; then
wget https://github.com/dotnet/dotnet/archive/refs/tags/${tag}.tar.gz
mv "${tag}.tar.gz" "${unmodified_tarball_name}.tar.gz"
#temp_dir=$(mktemp -d -p "$(pwd)" -t temp-build-dotnet-tarball-XXXXXXXXXX)
#pushd "${temp_dir}"
#mkdir dotnet
#pushd dotnet
#git init
#git remote add origin https://github.com/dotnet/dotnet
#git fetch --depth 1 origin "${tag}"
#git checkout FETCH_HEAD
#git submodule update --init --recursive
#clean_dotnet_cache
#./eng/pack-sources.sh -o "$(readlink -f ../../"${unmodified_tarball_name}.tar.gz")"
#popd
#popd
#rm -rf "${temp_dir}"
fi
tar tf "${unmodified_tarball_name}".tar.gz > .tarball_file_list
extracted_tarball_root=$(head -1 .tarball_file_list | cut -d/ -f 1)
if [[ "$extracted_tarball_root" == "."* ]]; then
echo "error: can't find main directory in the dotnet tarball"
exit 1
fi
if [[ $(grep -cv "^${extracted_tarball_root}/" .tarball_file_list) -gt 0 ]]; then
echo "error: tarball doesn't have a single main directory"
exit 1
fi
rm .tarball_file_list
rm -rf "${tarball_name}"
rm -rf "${extracted_tarball_root}"
tar xf "${unmodified_tarball_name}.tar.gz"
mv "${extracted_tarball_root}" "${tarball_name}"
pushd "${tarball_name}"
if [[ ${build_bootstrap} == true ]]; then
./prep.sh --bootstrap
else
find . -type f -iname '*.tar.gz' -delete
rm -rf .dotnet
fi
# Remove files with funny licenses and crypto implementations and
# other not-very-useful artifacts. We MUST NOT ship any files that
# have unapproved licenses and unexpected cryptographic
# implementations.
#
# We use rm -r (no -f) to make sure the operation fails if the files
# are not at the expected locations. If the files are not at the
# expected location, we need to find the new location of the files and
# delete them, or verify that upstream has already removed the files.
popd
# if [[ ${build_bootstrap} == true ]]; then
# tar -I 'xz -9 -T 0' -cf "${tarball_name}${tarball_suffix}" "${tarball_name}"
# else
# tar -czf "${tarball_name}${tarball_suffix}" "${tarball_name}"
# fi
tar -czf "${tarball_name}${tarball_suffix}" "${tarball_name}"

View File

@ -1,13 +0,0 @@
#!/bin/bash
set -euo pipefail
set -x
fedpkg --release f37 srpm 2>&1 | tee fedpkg.output
srpm_name=$(grep 'Wrote: ' fedpkg.output | cut -d' ' -f 2)
ls -alh "${srpm_name}"
copr-cli --debug build @dotnet-sig/dotnet-preview "${srpm_name}" --timeout 36000

17
dotnet-8.0.13.tar.gz.sig Normal file
View File

@ -0,0 +1,17 @@
-----BEGIN PGP SIGNATURE-----
Version: BSN Pgp v1.0.0.0
iQIcBAABCAAGBQJnmXzUAAoJEP2/U8JNtIcurM0QAK53yZwzwjwqZzH6wzy7CaYI
9rwd8r76ApWttkRv6nntYP/ZWyXVbNntAbyjNfEYRhV+3+9pPFx7iMkE3UdbNIo5
D+g21V5TBuj9nKGFW7AIJEGb2hMaZFPOZY1K5bnpx3Kfce95eiAGWFECubkEITZU
+mrIa2HknJOTS1h2PdyuJEoxqKUvWSha6fref2op2WXz+OcvVHiV+rkYtDxEq0zM
iGPFU2XfJBSkMSietPCT6Ea+H3mp1fqIPzhkkYeXi5rk6VvRnzFKosR9qdMkjAYx
/+hSFQAaPzb25A96VJf6/fcrBF4DTbpOFcysFY55vysS+AyHsQsJ+RJzqQJ76O39
1yZ+Lld/nkDzzlhQVQsA64rsufOFwaWvTqU39J3zigj259ShY2IQGSRdVfye0slj
KnjX5WJyvebKWPxsFNKEeUFaQRbCf5XSshM01guZRbtMRqKRhAoB2FTI7FuUI11N
u1YbTmoFqxb0ek4Npoifn/IOkihB3Z4gFzGQ0SGwkSxLvMmnSe0JIfBQRi8uxecV
qabxuPTA4gjymgIgiQkAlFv5pWz1lu/D2C/uJQaQ4n6yDn2UdPl7PWz2+2c5LYe3
qvTVTaZBWBdjw6EKw+a1GNAIgShhtA4JSQhye1CqLG36CJI/3UzXdXOWVdUySjLa
dTvEx337QFHRjcdRZfZ7
=gQzV
-----END PGP SIGNATURE-----

View File

@ -1,35 +0,0 @@
# Tarball is generated, no upstream URL
addFilter("W:.*invalid-url Source0: dotnet-.*tar.gz")
# macOS is the correct name
addFilter("W: spelling-error %description -l en_US macOS ->.*")
# The name of the nuget package includes NETCore
addFilter("W: spelling-error .* NETCore -> Net Core.*")
# Upstream really has no README or documentation files. They suggest using online resources.
addFilter("W: no-documentation")
# This is a script that we run; it's expected to have execute permissions
addFilter("W: strange-permission check-debug-symbols.py")
# libicu is a required dependency, but it's used via a dlopen()
addFilter("E: explicit-lib-dependency libicu")
# There's no devel package for us to place .h files
addFilter("W: devel-file-in-non-devel-package /usr/lib64/dotnet/.*\.h")
addFilter("W: devel-file-in-non-devel-package /usr/lib64/dotnet/.*\.a")
# These paths are non-standard, so we need $ORIGIN to find these libraries
addFilter("E: binary-or-shlib-defines-rpath /usr/lib64/dotnet/.*\['\$ORIGIN/netcoredeps'\]")
addFilter("E: binary-or-shlib-defines-rpath /usr/lib64/dotnet/.*\['\$ORIGIN'\]")
# We put dll files in /usr/lib/dotnet, but rpmlint somehow doesn't see it as a binary?
addFilter("W: only-non-binary-in-usr-lib")
# We use a number of zero-length files, including _._
addFilter("E: zero-length /usr/lib64/dotnet/.*/_\._")
# Upstream uses hidden files, even though we ask them not to, as much as possible
addFilter("W: hidden-file-or-dir /usr/lib64/dotnet/.*/\.version")
addFilter("W: hidden-file-or-dir /usr/lib64/dotnet/.*/\.toolsetversion")

View File

@ -12,15 +12,16 @@
# dotnet-host and netstandard-targeting-pack-2.1
%global is_latest_dotnet 0
%global host_version 8.0.28
%global runtime_version 8.0.28
%global aspnetcore_runtime_version 8.0.28
%global sdk_version 8.0.128
%global host_version 8.0.13
%global runtime_version 8.0.13
%global aspnetcore_runtime_version %{runtime_version}
%global sdk_version 8.0.113
%global sdk_feature_band_version %(echo %{sdk_version} | cut -d '-' -f 1 | sed -e 's|[[:digit:]][[:digit:]]$|00|')
%global templates_version %{runtime_version}
#%%global templates_version %%(echo %%{runtime_version} | awk 'BEGIN { FS="."; OFS="." } {print $1, $2, $3+1 }')
%global upstream_tag v8.0.128
# upstream can produce releases with a different tag than the SDK or Runtime version
%global upstream_tag v%{runtime_version}
%global upstream_tag_without_v %(echo %{upstream_tag} | sed -e 's|^v||')
%global host_rpm_version %{host_version}
@ -77,7 +78,7 @@ Source2: dotnet-prebuilts-%{bootstrap_sdk_version}-ppc64le.tar.gz
Source3: dotnet-prebuilts-%{bootstrap_sdk_version}-s390x.tar.gz
%else
Source0: https://github.com/dotnet/dotnet/archive/refs/tags/%{upstream_tag}.tar.gz#/dotnet-%{upstream_tag_without_v}.tar.gz
Source1: https://github.com/dotnet/dotnet/archive/refs/tags/%{upstream_tag}.tar.gz#/dotnet-%{upstream_tag_without_v}.tar.gz.sig
Source1: https://github.com/dotnet/dotnet/releases/download/%{upstream_tag}/dotnet-%{upstream_tag_without_v}.tar.gz.sig
Source2: https://dotnet.microsoft.com/download/dotnet/release-key-2023.asc
%endif
Source5: https://github.com/dotnet/dotnet/releases/download/%{upstream_tag}/release.json
@ -98,10 +99,6 @@ Patch4: msbuild-9449-exec-stop-setting-a-locale.patch
# digests used for the signature are not treated as fatal errors.
# https://issues.redhat.com/browse/RHEL-25254
Patch5: runtime-openssl-sha1.patch
# Backport of https://github.com/dotnet/runtime/pull/110554
# Fixes apphost hash duplication under compiler optimizations
# https://github.com/dotnet/runtime/issues/109611
Patch6: runtime-apphost-compare-noopt.patch
ExclusiveArch: aarch64 ppc64le s390x x86_64
@ -116,9 +113,7 @@ BuildRequires: dotnet-sdk-%{dotnetver}-source-built-artifacts
%endif
BuildRequires: findutils
BuildRequires: git
%if 0%{?fedora} || 0%{?rhel} > 7
BuildRequires: glibc-langpack-en
%endif
BuildRequires: gnupg2
BuildRequires: hostname
BuildRequires: krb5-devel
@ -414,7 +409,10 @@ These are not meant for general use.
%prep
%if %{without bootstrap}
# check gpg signatures only for non-bootstrap builds; bootstrap "sources" are hand-crafted
%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}'
%endif
release_json_tag=$(grep tag %{SOURCE5} | cut -d: -f2 | sed -E 's/[," ]*//g')
if [[ ${release_json_tag} != %{upstream_tag} ]]; then
@ -480,14 +478,8 @@ popd
%endif
# tar -x --strip-components=1 -f %%{SOURCE10}
# tar -x --strip-components=1 -f %%{SOURCE11}
%autopatch -p1 -M 999
# Fix bad hardcoded path in build
sed -i 's|/usr/share/dotnet|%{_libdir}/dotnet|' src/runtime/src/native/corehost/hostmisc/pal.unix.cpp
%if ! %{use_bundled_libunwind}
sed -i -E 's|( /p:BuildDebPackage=false)|\1 --cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE|' src/runtime/eng/SourceBuild.props
%endif
@ -534,6 +526,15 @@ CXXFLAGS=$(echo $CXXFLAGS | sed -e 's/ -march=z13//')
CXXFLAGS=$(echo $CXXFLAGS | sed -e 's/ -mtune=z14//')
%endif
%if 0%{?rhel} >= 10
# Workaround for https://github.com/dotnet/runtime/issues/109611
# FIXME: Remove this, and replace with upstream fix
CFLAGS=$(echo $CFLAGS | sed -e 's/-march=x86-64-v3 //')
CXXFLAGS=$(echo $CXXFLAGS | sed -e 's/-march=x86-64-v3 //')
LDFLAGS=$(echo $LDFLAGS | sed -e 's/-march=x86-64-v3 //')
%endif
export EXTRA_CFLAGS="$CFLAGS"
export EXTRA_CXXFLAGS="$CXXFLAGS"
export EXTRA_LDFLAGS="$LDFLAGS"
@ -543,36 +544,7 @@ export EXTRA_LDFLAGS="$LDFLAGS"
# suggested compile-time change doesn't work, unfortunately.
export COMPlus_LTTng=0
%ifarch ppc64le s390x
max_attempts=3
%else
max_attempts=1
%endif
function retry_until_success {
local exit_code=1
local tries=$1
shift
set +e
while [[ $exit_code != 0 ]] && [[ $tries != 0 ]]; do
(( tries = tries - 1 ))
"$@"
exit_code=$?
done
set -e
return $exit_code
}
cat >dotnet-rpm-build.sh <<EOF
#!/bin/bash
set -euo pipefail
set -x
find -depth -name 'artifacts' -type d -print -exec rm -rf {} \;
./build.sh \
VERBOSE=1 ./build.sh \
%if %{without bootstrap}
--with-sdk previously-built-dotnet \
%endif
@ -584,14 +556,7 @@ find -depth -name 'artifacts' -type d -print -exec rm -rf {} \;
/p:MinimalConsoleLogOutput=false \
/p:ContinueOnPrebuiltBaselineError=true \
/v:n \
/p:LogVerbosity=n
EOF
chmod +x dotnet-rpm-build.sh
VERBOSE=1 retry_until_success $max_attempts \
timeout 5h \
./dotnet-rpm-build.sh
/p:LogVerbosity=n \
sed -e 's|[@]LIBDIR[@]|%{_libdir}|g' %{SOURCE21} > dotnet.sh
@ -604,7 +569,7 @@ mkdir -p built-sdk
tar xf artifacts/%{runtime_arch}/Release/dotnet-sdk-%{sdk_version}-%{runtime_id}.tar.gz -C built-sdk/
# Convert hardlinks to actual copies. This takes up quite a bit of
# extra disk space, but works around RHEL issues in post-rpmbuild tools
# extra disk space, but works around issues in post-rpmbuild tools
# when they encounter hardlinks.
cp -r --preserve=mode,ownership,timestamps built-sdk/* %{buildroot}%{_libdir}/dotnet/
ls %{buildroot}%{_libdir}/dotnet
@ -703,6 +668,7 @@ rm %{buildroot}%{_libdir}/dotnet/dotnet
rm -rf %{buildroot}%{_libdir}/dotnet/packs/NETStandard.Library.Ref/2.1.0
%endif
%check
%if 0%{?fedora} > 35
# lttng in Fedora > 35 is incompatible with .NET
@ -779,161 +745,69 @@ export COMPlus_LTTng=0
%changelog
* Wed Jun 10 2026 Tom Deseyn <tdeseyn@redhat.com> - 8.0.128-2
- Update to .NET SDK 8.0.128 and Runtime 8.0.28
- Resolves: RHEL-181053
* Thu May 28 2026 Omair Majid <omajid@redhat.com> - 8.0.127-2
- Update to .NET SDK 8.0.127 and Runtime 8.0.27
- Resolves: RHEL-173921
* Fri Apr 17 2026 Omair Majid <omajid@redhat.com> - 8.0.126-2
- Update to .NET SDK 8.0.126 and Runtime 8.0.26
- Resolves: RHEL-163418
* Fri Mar 27 2026 Dominik Rehák <drehak@redhat.com> - 8.0.125-2
- Update to .NET SDK 8.0.125 and Runtime 8.0.25
- Resolves: RHEL-152932
* Wed Feb 11 2026 Omair Majid <omajid@redhat.com> - 8.0.124-2
- Update to .NET SDK 8.0.124 and Runtime 8.0.24
- Resolves: RHEL-144966
* Wed Jan 14 2026 Omair Majid <omajid@redhat.com> - 8.0.123-2
- Update to .NET SDK 8.0.123 and Runtime 8.0.23
- Resolves: RHEL-138652
* Wed Nov 12 2025 Omair Majid <omajid@redhat.com> - 8.0.122-2
- Update to .NET SDK 8.0.122 and Runtime 8.0.22
- Resolves: RHEL-125738
* Tue Oct 14 2025 Omair Majid <omajid@redhat.com> - 8.0.121-2
- Update to .NET SDK 8.0.121 and Runtime 8.0.21
- Resolves: RHEL-116867
* Wed Sep 10 2025 Omair Majid <omajid@redhat.com> - 8.0.120-2
- Update to .NET SDK 8.0.120 and Runtime 8.0.20
- Resolves: RHEL-112260
* Mon Aug 11 2025 Omair Majid <omajid@redhat.com> - 8.0.119-2
- Update to .NET SDK 8.0.119 and Runtime 8.0.19
- Resolves: RHEL-106723
* Tue Jul 08 2025 Omair Majid <omajid@redhat.com> - 8.0.118-2
- Update to .NET SDK 8.0.118 and Runtime 8.0.18
- Resolves: RHEL-100592
* Wed Jun 11 2025 Omair Majid <omajid@redhat.com> - 8.0.117-2
- Update to .NET SDK 8.0.117 and Runtime 8.0.17
- Resolves: RHEL-94417
* Tue May 13 2025 Omair Majid <omajid@redhat.com> - 8.0.116-2
- Update to .NET SDK 8.0.116 and Runtime 8.0.16
- Resolves: RHEL-89445
* Wed Apr 09 2025 Omair Majid <omajid@redhat.com> - 8.0.115-2
- Update to .NET SDK 8.0.115 and Runtime 8.0.15
- Resolves: RHEL-85276
* Tue Mar 11 2025 Omair Majid <omajid@redhat.com> - 8.0.114-2
- Update to .NET SDK 8.0.114 and Runtime 8.0.14
- Resolves: RHEL-81641
* Mon Feb 17 2025 Omair Majid <omajid@redhat.com> - 8.0.113-2
- Update to .NET SDK 8.0.113 and Runtime 8.0.13
- Resolves: RHEL-76899
- Resolves: RHEL-76900
* Thu Jan 16 2025 Omair Majid <omajid@redhat.com> - 8.0.112-2
- Update to .NET SDK 8.0.112 and Runtime 8.0.12
- Resolves: RHEL-71555
- Resolves: RHEL-71553
* Thu Nov 14 2024 Omair Majid <omajid@redhat.com> - 8.0.111-2
- Update to .NET SDK 8.0.111 and Runtime 8.0.11
- Resolves: RHEL-65367
* Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 8.0.110-4
- Bump release for October 2024 mass rebuild:
Resolves: RHEL-64018
* Fri Oct 18 2024 Omair Majid <omajid@redhat.com> - 8.0.110-3
* Mon Oct 21 2024 Omair Majid <omajid@redhat.com> - 8.0.110-3
- Disable packages provided by another .NET version
- Related: RHEL-60801
- Related: RHEL-60795
* Tue Oct 15 2024 Omair Majid <omajid@redhat.com> - 8.0.110-2
* Wed Oct 16 2024 Omair Majid <omajid@redhat.com> - 8.0.110-2
- Update to .NET SDK 8.0.110 and Runtime 8.0.10
- Resolves: RHEL-60801
- Resolves: RHEL-60795
* Wed Aug 14 2024 Omair Majid <omajid@redhat.com> - 8.0.108-2
* Mon Aug 19 2024 Omair Majid <omajid@redhat.com> - 8.0.108-2
- Update to .NET SDK 8.0.108 and Runtime 8.0.8
- Resolves: RHEL-52387
- Resolves: RHEL-52434
* Wed Jul 10 2024 Omair Majid <omajid@redhat.com> - 8.0.107-3
- Fix ownership of some missed directories
- Resolves: RHEL-47079
* Tue Jul 09 2024 Omair Majid <omajid@redhat.com> - 8.0.107-2
* Wed Aug 07 2024 Omair Majid <omajid@redhat.com> - 8.0.107-5
- Update to .NET SDK 8.0.107 and Runtime 8.0.7
- Resolves: RHEL-45323
- Related: RHEL-25950
- Related: RHEL-45214
* Wed May 15 2024 Omair Majid <omajid@redhat.com> - 8.0.105-2
- Update to .NET SDK 8.0.105 and Runtime 8.0.5
- Resolves: RHEL-35315
* Wed Jul 31 2024 Omair Majid <omajid@redhat.com> - 8.0.101-5
- Fix build
- Resolves: RHEL-25950
- Resolves: RHEL-45214
* Tue Apr 09 2024 Omair Majid <omajid@redhat.com> - 8.0.104-2
- Update to .NET SDK 8.0.104 and Runtime 8.0.4
- Resolves: RHEL-31208
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 8.0.101-5
- Bump release for June 2024 mass rebuild
* Sun Mar 31 2024 Tom Deseyn <tom.deseyn@gmail.com> - 8.0.103-3
- We disable checking the signature of the last certificate in a chain if the certificate is supposedly self-signed.
A side effect of not checking the self-signature of such a certificate is that disabled or unsupported message
digests used for the signature are not treated as fatal errors.
- Resolves: RHEL-28344
* Fri Jan 26 2024 Omair Majid <omajid@redhat.com> - 8.0.101-4
- Rebuild to add new -dbg subpackages
* Tue Mar 19 2024 Omair Majid <omajid@redhat.com> - 8.0.103-2
- Update to .NET SDK 8.0.103 and Runtime 8.0.3
- Resolves: RHEL-27553
* Wed Jan 24 2024 Fedora Release Engineering <releng@fedoraproject.org> - 8.0.101-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Tue Feb 20 2024 Tom Deseyn <tom.deseyn@gmail.com> - 8.0.102-3
- Backport MSBuild locale fix
- Resolves: RHEL-23936
* Fri Jan 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 8.0.101-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Feb 14 2024 Omair Majid <omajid@redhat.com> - 8.0.102-2
- Update to .NET SDK 8.0.102 and Runtime 8.0.2
- Resolves: RHEL-23804
* Mon Jan 29 2024 Omair Majid <omajid@redhat.com> - 8.0.101-3
- Add -dbg subpackages for symbol files
- Resolves: RHEL-23070
* Mon Jan 15 2024 Omair Majid <omajid@redhat.com> - 8.0.101-2
* Tue Jan 09 2024 Omair Majid <omajid@redhat.com> - 8.0.101-1
- Update to .NET SDK 8.0.101 and Runtime 8.0.1
- Resolves: RHEL-19803
* Wed Nov 15 2023 Omair Majid <omajid@redhat.com> - 8.0.100-3
* Tue Dec 12 2023 Omair Majid <omajid@redhat.com> - 8.0.100-2
- Enable gpg signature verification
* Sat Dec 09 2023 Omair Majid <omajid@redhat.com> - 8.0.100-1
- Update to .NET SDK 8.0.100 and Runtime 8.0.0
- Resolves: RHEL-15352
* Mon Oct 16 2023 Omair Majid <omajid@redhat.com> - 8.0.100~rc.2-0.1
- Update to .NET 8 RC 2
- Resolves: RHEL-13790
* Fri Dec 08 2023 Omair Majid <omajid@redhat.com> - 8.0.100~rc.2-0.1
- Update to .NET SDK 8.0.100 RC 2 and Runtime 8.0.0 RC 2
* Thu Sep 28 2023 Omair Majid <omajid@redhat.com> - 8.0.100~rc.1-0.4
- Disable bootstrap
- Related: RHEL-4074
* Wed Sep 27 2023 Omair Majid <omajid@redhat.com> - 8.0.100~rc.1-0.3
- Add backported patches for additional s390x issues
- Related: RHEL-4074
* Mon Sep 18 2023 Omair Majid <omajid@redhat.com> - 8.0.100~rc.1-0.2
- Add patches to fix mono and arm64 issues
- Include libmono-*.a files in the SDK
- Fix CI configuration
- Related: RHEL-4074
* Fri Dec 08 2023 Omair Majid <omajid@redhat.com> - 8.0.100~rc.1-0.2
- Add various fixes from CentOS Stream 9
* Fri Sep 15 2023 Omair Majid <omajid@redhat.com> - 8.0.100~rc.1-0.1
- Update to .NET SDK 8.0.100 RC 1 and Runtime 8.0.0 RC 1
- Resolves: RHEL-4074
* Tue Aug 22 2023 Omair Majid <omajid@redhat.com> - 8.0.100~preview.7-0.2
- Add patch to work around TypeLoadException in Mono
- Related: RHBZ#2224124
* Fri Aug 11 2023 Omair Majid <omajid@redhat.com> - 8.0.100~preview.7-0.1
- Update to .NET SDK 8.0.100 Preview 7 and Runtime 8.0.0 Preview 7

View File

@ -1,22 +0,0 @@
--- !Policy
product_versions:
- fedora-*
decision_context: bodhi_update_push_testing
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional}
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.rpminspect.static-analysis}
--- !Policy
product_versions:
- fedora-*
decision_context: bodhi_update_push_stable
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional}
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.rpminspect.static-analysis}
--- !Policy
product_versions:
- rhel-*
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}

View File

@ -1,10 +1,10 @@
{
"release": "8.0.28",
"release": "8.0.13",
"channel": "8.0",
"tag": "v8.0.128",
"sdkVersion": "8.0.128",
"runtimeVersion": "8.0.28",
"aspNetCoreVersion": "8.0.28",
"tag": "v8.0.13",
"sdkVersion": "8.0.113",
"runtimeVersion": "8.0.13",
"aspNetCoreVersion": "8.0.13",
"sourceRepository": "https://github.com/dotnet/dotnet",
"sourceVersion": "b8c15cdca7da2fa00c82bc2ee538bd88af758b8f"
"sourceVersion": "a970a1cfdd960e99b4b8b9bdc3099b943f70adde"
}

View File

@ -3,9 +3,9 @@ index 044a2aba4..b3f8f2611 100644
--- a/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj
+++ b/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj
@@ -4,6 +4,7 @@
<LangVersion>preview</LangVersion>
<Nullable>disable</Nullable>
<OutputType>Exe</OutputType>
<NoWarn>$(NoWarn);NETSDK1138</NoWarn>
+ <UseAppHost>false</UseAppHost>
</PropertyGroup>
<PropertyGroup>

View File

@ -1,20 +0,0 @@
---
inspections:
# We patch upstream a lot, no need to reject patches
patches: off
badfuncs:
allowed:
# The Mono runtime (used on s390x, for example), uses inet_addr for
# debugging (such as sending the control flow graph to a remote process).
# See runtime/src/mono/mono/mini/cfgdump.c. This isn't part of any
# standard networking facility; networking APIs are implemented/used in
# libSystem*so.
/usr/lib64/dotnet/shared/Microsoft.NETCore.App/*/libcoreclr.so:
- inet_addr
/usr/lib64/dotnet/packs/Microsoft.NETCore.App.Runtime.*/*/runtimes/*/native/libcoreclr.so:
- inet_addr
runpath:
# Upstream explicitly sets $ORIGIN/netcoredeps as an RPATH
# See https://github.com/dotnet/core/blob/main/Documentation/self-contained-linux-apps.md
allowed_origin_paths:
- /netcoredeps

View File

@ -1,46 +0,0 @@
From: Tom Deseyn <tdeseyn@redhat.com>
Subject: [PATCH] Avoid compiler optimization on embedded apphost hash
Backport of https://github.com/dotnet/runtime/pull/110554 to .NET 8.0.
---
src/runtime/src/native/corehost/corehost.cpp | 24 +++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)
--- a/src/runtime/src/native/corehost/corehost.cpp
+++ b/src/runtime/src/native/corehost/corehost.cpp
@@ -40,6 +40,19 @@
#define EMBED_HASH_LO_PART_UTF8 "74e592c2fa383d4a3960714caef0c4f2"
#define EMBED_HASH_FULL_UTF8 (EMBED_HASH_HI_PART_UTF8 EMBED_HASH_LO_PART_UTF8) // NUL terminated
+// This avoids compiler optimization which cause EMBED_HASH_HI_PART_UTF8 EMBED_HASH_LO_PART_UTF8
+// to be placed adjacent causing them to match EMBED_HASH_FULL_UTF8 when searched for replacing.
+// See https://github.com/dotnet/runtime/issues/109611 for more details.
+static bool compare_memory_nooptimization(volatile const char* a, volatile const char* b, size_t length)
+{
+ for (size_t i = 0; i < length; i++)
+ {
+ if (*a++ != *b++)
+ return false;
+ }
+ return true;
+}
+
bool is_exe_enabled_for_execution(pal::string_t* app_dll)
{
constexpr int EMBED_SZ = sizeof(EMBED_HASH_FULL_UTF8) / sizeof(EMBED_HASH_FULL_UTF8[0]);
@@ -63,11 +76,10 @@
// So use two parts of the string that will be unaffected by the edit.
size_t hi_len = (sizeof(hi_part) / sizeof(hi_part[0])) - 1;
size_t lo_len = (sizeof(lo_part) / sizeof(lo_part[0])) - 1;
-
- std::string binding(&embed[0]);
- if ((binding.size() >= (hi_len + lo_len)) &&
- binding.compare(0, hi_len, &hi_part[0]) == 0 &&
- binding.compare(hi_len, lo_len, &lo_part[0]) == 0)
+ size_t embed_len = strlen(&embed[0]);
+ if (embed_len >= (hi_len + lo_len)
+ && compare_memory_nooptimization(&embed[0], hi_part, hi_len)
+ && compare_memory_nooptimization(&embed[hi_len], lo_part, lo_len))
{
trace::error(_X("This executable is not bound to a managed DLL to execute. The binding value is: '%s'"), app_dll->c_str());
return false;

View File

@ -1,2 +1 @@
SHA512 (dotnet-8.0.128.tar.gz) = 6d405965f8d4c9afda7ac2ce33d7af7f9b6a316cf00951a447498ecf2152e2e1d6b5e4561d6535592e9fe1c5f18636547e754a00ad73ab230c8ac803f7f8b56f
SHA512 (dotnet-8.0.128.tar.gz.sig) = 1e0a506faaa7a9dfa92f9abaca33b0bc11407f1f1fc41777a7b49f55ba7305050f9611845ce4f688fd64d5874226dc00843982c2842905710036017c20fba6b0
SHA512 (dotnet-8.0.13.tar.gz) = 2b6a94dc20003803c53da6589bf633f0cea776dcaee8e616c41e2047deff9b820339d9fba37087ff69e7eee0ba41a2231321d8f518885ec46429b69f5fe65e9f

View File

@ -1,47 +0,0 @@
summary: Basic smoke test
provision:
hardware:
disk:
- size: ">= 20 GiB"
memory: ">= 5120 MiB"
prepare:
how: install
package:
- aspnetcore-runtime-8.0
- babeltrace
- bash-completion
- bc
- binutils
- dotnet-runtime-8.0
- dotnet-sdk-8.0
- expect
- file
- findutils
- gcc-c++
- git
- jq
- libstdc++-devel
- lldb
- lttng-ust
- npm
- postgresql-odbc
- postgresql-server
- procps-ng
- python3
- strace
- util-linux
- wget
- which
- zlib-devel
execute:
script:
- dotnet --info
- wget --no-verbose https://github.com/redhat-developer/dotnet-bunny/releases/latest/download/turkey.tar.gz
- tar xf turkey.tar.gz
- dotnet turkey/Turkey.dll --version
- git clone "https://github.com/redhat-developer/dotnet-regular-tests.git"
- dotnet turkey/Turkey.dll -l="$TMT_TEST_DATA" dotnet-regular-tests --timeout=1200
- dnf remove -yq 'dotnet*'
- set -x; if command -v dotnet ; then exit 1; fi
- set -x; if [ -d /usr/lib64/dotnet ]; then exit 1; fi
- set -x; if man dotnet; then exit 1; fi

View File

@ -1,327 +0,0 @@
#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
# Notes: this only works with 1xx sdks, the versions shipped in Fedora/RHEL/CentOS Stream.
print_usage() {
echo " Usage:"
echo " ./update-release [VERSION] [--bootstrap] [--bug bug-id] [--tarball tarball-name] [--release-json release-json] [--larger-rpm-release]"
echo ""
echo "VERSION can be:"
echo " - latest-release: latest release for this major.minor version of .NET (default unless --release-json and --tarball are used)"
echo " - exact version (SDK or runtime, eg, 9.0.5 or 10.0.124)"
echo " - omitted if --release-json and --tarball are used (uses local mode)"
echo " - latest-commit: the latest commit for this major.minor version of .NET"
echo ""
echo "If not specified, 'latest-release' is the default."
echo ""
echo "When done, it creates the following files:"
echo " - release.json"
echo " - git-commit-message: commit message to use with the git commit for the update"
echo ""
echo ""
echo "Options:"
echo " --bootstrap Build binary bootstrap artifacts for this release."
echo " --bug bug-id Add the named bug/issue identifier to the changelog and commit message."
echo " --tarball tarball-name Use the supplied tarball. Use with --release-json."
echo " --release-json release-json Use the supplied release.json. Use with --tarball."
echo " --larger-rpm-release Set the release to 2."
echo ""
}
download_release_json() {
version=$1
if [[ "$version" =~ ^[0-9]+\.[0-9]+$ ]]; then
# major.minor format. intentionally filter to major.minor.1xx.
cat > query <<'EOF'
[ .[] | select(.name | test("\\.NET .*\($v)(\\.1\\d{2}| (Preview|RC) \\d+)")) ]
| first
| { tag_name: .tag_name,
tarball: .tarball_url,
signature: .assets[].browser_download_url | select(. | endswith("tar.gz.sig")),
release_manifest: .assets[] | select(.name == "release.json") | .browser_download_url }
EOF
elif [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
# major.minor.patch. Might be the SDK version or Runtime version
cat > query <<'EOF'
[ .[] | select(.name | test("\\.NET .*\($v)")) ]
| first
| { tag_name: .tag_name,
tarball: .tarball_url,
signature: .assets[].browser_download_url | select(. | endswith("tar.gz.sig")),
release_manifest: .assets[] | select(.name == "release.json") | .browser_download_url }
EOF
else
echo "error: unable to parse $version"
exit 1
fi
curl https://api.github.com/repos/dotnet/dotnet/releases \
| jq --arg v "$version" --from-file query > release.metadata.github
curl -L "$(jq -r .release_manifest release.metadata.github)" -o release.json
}
assert_file_exists() {
file=$1
if [[ ! -f "${file}" ]]; then
echo "error: ${file} not found"
exit 1
fi
}
user_provided_tarball_name=""
rpm_release=1
positional_args=()
bug_ids=()
bootstrap=0
while [[ "$#" -gt 0 ]]; do
arg="$1"
case "${arg}" in
--bootstrap)
bootstrap=1
shift;
;;
--bug)
bug_ids+=("$2")
shift;
shift;
;;
-h|--help)
print_usage
exit 0
;;
--release-json)
release_json="$2"
assert_file_exists "${release_json}"
shift;
shift;
;;
--tarball)
user_provided_tarball_name="$2"
assert_file_exists "${user_provided_tarball_name}"
shift;
shift;
;;
--larger-rpm-release)
rpm_release="2"
shift;
;;
*)
positional_args+=("$1")
shift
;;
esac
done
set -x
spec_files=( ./*.spec )
spec_file="${spec_files[0]}"
assert_file_exists "$spec_file"
dotnet_major_minor_version=$spec_file
dotnet_major_minor_version=${dotnet_major_minor_version#./dotnet}
dotnet_major_minor_version=${dotnet_major_minor_version%.spec}
if ! [[ "$dotnet_major_minor_version" =~ ^[0-9]+\.[0-9]+$ ]]; then
echo "error: Unable to guess the current .NET major.minor version. Expected to get a two-digit .NET version, but got $dotnet_major_minor_version";
exit 1
fi
echo "Updating .NET $dotnet_major_minor_version"
version=${positional_args[0]:-}
sdk_version=""
created_release_json=0
if [[ ${version} == "" ]]; then
if [[ -n "${release_json:-}" ]] || [[ -n "${user_provided_tarball_name:-}" ]]; then
if [[ -n "${release_json:-}" ]] && [[ -n "${user_provided_tarball_name:-}" ]]; then
version=local
else
echo "error: please provide both --release-json and --tarball for local-only mode"
exit 1
fi
else
version=latest-release
fi
fi
if [[ ${version} == latest-release ]]; then
if [[ -n "${release_json:-}" ]]; then
echo "error: don't know how to combine upstream latest release's release.json with the locally supplied one"
exit 1
fi
download_release_json "${dotnet_major_minor_version}"
elif [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+ ]]; then # matches x.y.z (and x.y.z-preview.N, etc.)
if [[ -n "${release_json:-}" ]] && [[ -n "${user_provided_tarball_name:-}" ]] ; then
echo "error: don't know how to combine explicit upstream version with release.json and tarball"
exit 1
fi
download_release_json "${version}"
elif [[ ${version} == latest-commit ]]; then
branch=release/${dotnet_major_minor_version}.1xx
if [[ ${dotnet_major_minor_version} == 11.0 ]]; then
branch=main
fi
cat > query <<EOF
[ .[] | select(.name == "$branch") ]
| first
EOF
curl https://api.github.com/repos/dotnet/dotnet/branches \
| jq --from-file query > release.metadata.github
commit=$(jq -r .commit.sha release.metadata.github)
jq >release.json <<EOF
{
"release": "$dotnet_major_minor_version",
"channel": "$dotnet_major_minor_version",
"tag": "$commit",
"sdkVersion": "$dotnet_major_minor_version",
"runtimeVersion": "$dotnet_major_minor_version",
"aspNetCoreVersion": "$dotnet_major_minor_version",
"sourceRepository": "https://github.com/dotnet/dotnet",
"sourceVersion": "$commit"
}
EOF
cat release.json
created_release_json=1
elif [[ "${version}" == local ]]; then
cp -a "${release_json}" release.json
else
echo "error: don't know what to do"
echo ""
print_usage
exit 1
fi
cat release.json
aspnetcore_runtime_version=$(jq -r .aspNetCoreVersion release.json)
runtime_version=$(jq -r .runtimeVersion release.json)
sdk_version=$(jq -r .sdkVersion release.json)
tag=$(jq -r .tag release.json)
tag_without_v=${tag#v}
echo "Updating .NET $dotnet_major_minor_version to SDK ${sdk_version} and Runtime ${runtime_version}"
if [[ $bootstrap == 0 ]]; then
sed -i -E "s|^%bcond_with.*bootstrap$|%bcond_with bootstrap|" "$spec_file"
else
sed -i -E "s|^%bcond_with.*bootstrap$|%bcond_without bootstrap|" "$spec_file"
fi
sed -i -E "s|^%global upstream_tag .*$|%global upstream_tag ${tag}|" "$spec_file"
if [[ "$dotnet_major_minor_version" == "8.0" ]]; then
sed -i -E "s|^%global host_version .*$|%global host_version ${runtime_version}|" "$spec_file"
# other major versions set/define host_version as a variable based on runtime_version.
fi
sed -i -E "s|^%global runtime_version .*$|%global runtime_version ${runtime_version}|" "$spec_file"
sed -i -E "s|^%global aspnetcore_runtime_version .*$|%global aspnetcore_runtime_version ${aspnetcore_runtime_version}|" "$spec_file"
sed -i -E "s|^%global sdk_version .*$|%global sdk_version ${sdk_version}|" "$spec_file"
if [[ $runtime_version = *preview* ]] || [[ $runtime_version = *rc* ]]; then
# For Preview/RC releases, convert x.y.z-preview.a.b to x.y.z~preview.a.b (replace - with ~)
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Versioning/#_handling_non_sorting_versions_with_tilde_dot_and_caret
runtime_rpm_version=${runtime_version/-/\~}
aspnetcore_runtime_rpm_version=${aspnetcore_runtime_version/-/\~}
sdk_rpm_version=${sdk_version/-/\~}
sed -i -E "s|^(%global runtime_rpm_version) .*$|\1 ${runtime_rpm_version}|" "$spec_file"
sed -i -E "s|^(%global aspnetcore_runtime_rpm_version) .*$|\1 ${aspnetcore_runtime_rpm_version}|" "$spec_file"
sed -i -E "s|^(%global sdk_rpm_version) .*$|\1 ${sdk_rpm_version}|" "$spec_file"
else
# For GA releases replace rpm versions with rpm macros for the actual version
sed -i -E "s|^(%global runtime_rpm_version) .*$|\1 %{runtime_version}|" "$spec_file"
sed -i -E "s|^(%global aspnetcore_runtime_rpm_version) .*$|\1 %{aspnetcore_runtime_version}|" "$spec_file"
sed -i -E "s|^(%global sdk_rpm_version) .*$|\1 %{sdk_version}|" "$spec_file"
fi
if [[ -f "dotnet-${tag_without_v}.tar.gz" ]]; then
echo "dotnet-${tag_without_v}.tar.gz already exists, not rebuilding tarball"
elif [[ -n ${user_provided_tarball_name} ]]; then
cp -a "${user_provided_tarball_name}" "dotnet-${tag_without_v}.tar.gz"
# signature file can be located anywhere under the directory tree, so find it.
signature_name=$(basename "${user_provided_tarball_name}.sig")
user_tarball_dir=$(dirname "${user_provided_tarball_name}" )
# intentionally unquoted, since it can be blank
# shellcheck disable=SC2116,SC2086
signature_path=$(find $user_tarball_dir -iname "${signature_name}")
if [[ "${signature_path}" == "" ]]; then
echo "error: unable to find signature file for ${user_provided_tarball_name}"
exit 1
fi
cp -a "${signature_path}" "dotnet-${tag_without_v}.tar.gz.sig"
else # Download the original/pristine bits from upstream
if [[ $created_release_json == 0 ]]; then
# If we didn't create the release.json, then delete it so spectool -g can download a fresh copy
rm -f release.json
fi
spectool -g "$spec_file"
fi
# TODO add optional gpg signature verification
if [[ $bootstrap == 1 ]]; then
if [[ $dotnet_major_minor_version == 8.0 ]]; then
# TODO: create generic bootstrap support for 8.0
echo "--bootstrap not implemented for .NET 8.0"
exit 1
elif [[ $dotnet_major_minor_version == 9.0 ]]; then
# For .NET 9, we bootstrap x64 and aarch64 using Microsoft binaries, and ppc64le and s390x using custom binaries
./build-dotnet-bootstrap-tarball "$tag"
tar xf "dotnet-$tag-x64-bootstrap.tar.gz" "dotnet-$tag-x64-bootstrap/global.json"
bootstrap_sdk_version=$(jq -r .tools.dotnet "dotnet-$tag-x64-bootstrap/global.json")
sed -i -E "s|^(%global bootstrap_sdk_version) .*$|\1 ${bootstrap_sdk_version}|" "$spec_file"
spectool -g "$spec_file"
if [ -f re-build-all-bootstrap ]; then
./re-build-all-bootstrap "${tag}"
fi
else
# For .NET 10 and later, defer all bootstrapping to build-dotnet-bootstrap-tarball script
tar xf "dotnet-${tag_without_v}.tar.gz" "dotnet-${tag_without_v}/global.json"
bootstrap_sdk_version=$(jq -r .tools.dotnet "dotnet-${tag_without_v}/global.json")
sed -i -E "s|^(%global bootstrap_sdk_version) .*$|\1 ${bootstrap_sdk_version}|" "$spec_file"
./build-dotnet-bootstrap-tarball "${tag_without_v}"
if [ -f dotnet-prebuilts*ppc64le*tar.gz ]; then
file_name=$(ls -1 -t dotnet-prebuilts-*-ppc64le.tar.gz | head -1)
bootstrap_sdk_version_ppc64le_s390x=$(basename "$file_name" | sed -E -e 's/dotnet-prebuilts-//' -e 's/-ppc64le.tar.gz//')
sed -E -i "s|^%global bootstrap_sdk_version_ppc64le_s390x .*$|%global bootstrap_sdk_version_ppc64le_s390x $bootstrap_sdk_version_ppc64le_s390x|" "$spec_file"
fi
fi
fi
comment="Update to .NET SDK ${sdk_version} and Runtime ${runtime_version}"
commit_message="$comment
"
for bug_id in "${bug_ids[@]}"; do
if [[ "$bug_id" =~ ^[[:digit:]]+$ ]]; then
comment="$comment
- Resolves: RHBZ#$bug_id"
commit_message="$commit_message
Resolves: RHBZ#$bug_id"
else
comment="$comment
- Resolves: $bug_id"
commit_message="$commit_message
Resolves: $bug_id"
fi
done
echo "$commit_message" > git-commit-message
rpmdev-bumpspec --comment="$comment" "$spec_file"
# Reset release in 'Release' tag
sed -i -E 's|^Release: [[:digit:]]+%|Release: '"$rpm_release"'%|' "$spec_file"
# Reset Release in changelog comment
# See https://stackoverflow.com/questions/18620153/find-matching-text-and-replace-next-line
sed -i -E '/^%changelog$/!b;n;s/-[[:digit:]]+$/-'"$rpm_release"'/' "$spec_file"
echo "Done updating sources. Commit message in ./git-commit-message"