From 84347beb9910ffd4c4dd416d36a5aa65e74c34f6 Mon Sep 17 00:00:00 2001 From: eabdullin Date: Fri, 14 Nov 2025 12:56:24 +0000 Subject: [PATCH] import CS dotnet10.0-10.0.100~rc.2.25502.107-0.12.el10 --- .fmf/version | 1 - .gitignore | 75 +----- README.md | 27 --- build-dotnet-bootstrap-tarball | 123 ---------- build-prebuilt-archive | 62 ----- copr-build | 18 -- ...-source-10.0.100-rc.2.25502.107.tar.gz.sig | 17 ++ gating.yaml | 23 -- rpminspect.yaml | 20 -- sources | 1 - tests/ci.fmf | 44 ---- update-release | 223 ------------------ 12 files changed, 18 insertions(+), 616 deletions(-) delete mode 100644 .fmf/version delete mode 100644 README.md delete mode 100755 build-dotnet-bootstrap-tarball delete mode 100755 build-prebuilt-archive delete mode 100755 copr-build create mode 100644 dotnet-source-10.0.100-rc.2.25502.107.tar.gz.sig delete mode 100644 gating.yaml delete mode 100644 rpminspect.yaml delete mode 100644 tests/ci.fmf delete mode 100755 update-release diff --git a/.fmf/version b/.fmf/version deleted file mode 100644 index d00491f..0000000 --- a/.fmf/version +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/.gitignore b/.gitignore index 5248323..2626604 100644 --- a/.gitignore +++ b/.gitignore @@ -1,74 +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-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.2.23479.6.tar.gz -/dotnet-8.0.0.tar.gz -/dotnet-8.0.0.tar.gz.sig -/dotnet-8.0.1.tar.gz -/dotnet-8.0.1.tar.gz.sig -/dotnet-8.0.2.tar.gz -/8.0.2.tar.gz.sig -/dotnet-v9.0.0-rc.1.24431.7-x64-bootstrap.tar.gz -/dotnet-sdk-9.0.100-preview.7.24407.12-linux-arm64.tar.gz -/dotnet-prebuilts-9.0.100-preview.7.24407.1-ppc64le.tar.gz -/dotnet-prebuilts-9.0.100-preview.7.24407.1-s390x.tar.gz -/dotnet-9.0.0-rc.1.24431.7.tar.gz -/dotnet-9.0.0-rc.1.24431.7.tar.gz.sig -/dotnet-v9.0.0-rc.2.24473.5-x64-bootstrap.tar.gz -/dotnet-sdk-9.0.100-rc.1.24452.12-linux-arm64.tar.gz -/dotnet-prebuilts-9.0.100-rc.1.24452.1-ppc64le.tar.gz -/dotnet-prebuilts-9.0.100-rc.1.24452.1-s390x.tar.gz -/dotnet-9.0.0-rc.2.24473.5.tar.gz -/dotnet-9.0.0-rc.2.24473.5.tar.gz.sig -/dotnet-9.0.0.tar.gz -/dotnet-9.0.0.tar.gz.sig -/dotnet-9.0.101.tar.gz -/dotnet-9.0.101.tar.gz.sig -/dotnet-10.0.0-preview.6.25358.103.tar.gz -/dotnet-10.0.0-preview.6.25358.103.tar.gz.sig -/dotnet-prebuilts-10.0.100-preview.6.25302.104-arm64.tar.gz -/dotnet-prebuilts-10.0.100-preview.6.25302.104-x64.tar.gz -/dotnet-prebuilts-10.0.100-preview.6.25358.103-ppc64le.tar.gz -/dotnet-prebuilts-10.0.100-preview.6.25358.103-s390x.tar.gz -/dotnet-10.0.100-preview.7.25380.108.tar.gz -/dotnet-10.0.100-preview.7.25380.108.tar.gz.sig -/dotnet-prebuilts-10.0.100-preview.7.25322.101-arm64.tar.gz -/dotnet-prebuilts-10.0.100-preview.7.25322.101-x64.tar.gz -/dotnet-prebuilts-10.0.100-preview.7.25380.108-ppc64le.tar.gz -/dotnet-prebuilts-10.0.100-preview.7.25380.108-s390x.tar.gz -/dotnet-10.0.100-rc.1.25451.107.tar.gz -/dotnet-10.0.100-rc.1.25451.107.tar.gz.sig -/dotnet-prebuilts-10.0.100-rc.1.25420.111-x64.tar.gz -/dotnet-prebuilts-10.0.100-rc.1.25420.111-arm64.tar.gz -/dotnet-prebuilts-10.0.100-rc.1.25451.107-ppc64le.tar.gz -/dotnet-prebuilts-10.0.100-rc.1.25451.107-s390x.tar.gz -/dotnet-source-10.0.100-rc.2.25502.107.tar.gz -/dotnet-source-10.0.100-rc.2.25502.107.tar.gz.sig +dotnet-source-10.0.100-rc.2.25502.107.tar.gz diff --git a/README.md b/README.md deleted file mode 100644 index 36e1ba2..0000000 --- a/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# dotnet10.0 - -The dotnet10.0 package - -This is the .NET 10.0 package for CentOS Stream/RHEL 10. - -# 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 - -Please open merge requests in dotnet10.0 repository in CentOS Stream. - -# Testing - -This package uses CI tests as defined in `tests/ci.fmf`. You can run them using -[tmt](https://tmt.readthedocs.io/en/stable/overview.html). Creating a -merge-request or running an official 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/ diff --git a/build-dotnet-bootstrap-tarball b/build-dotnet-bootstrap-tarball deleted file mode 100755 index 96b37a7..0000000 --- a/build-dotnet-bootstrap-tarball +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/bash - -# Usage: -# build-dotnet-bootstrap-tarball -# -# Creates a source archive suitable for bootstrapping -# https://github.com/dotnet/dotnet. -# -# Requires a tarball with the name "${dotnet}-${tag}.tar.gz" in current -# directory. - -set -euo pipefail -IFS=$'\n\t' - -function print_usage { - echo "Usage:" - echo "$0 |" - echo - echo "Creates a $arch bootstrap source archive from an archive of https://github.com/dotnet/dotnet" -} - -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 -} - -positional_args=() -while [[ "$#" -gt 0 ]]; do - arg="${1}" - case "${arg}" in - -h|--help) - print_usage - exit 0 - ;; - *) - positional_args+=("$1") - shift - ;; - esac -done - -check_bootstrap_environment - -tag=${positional_args[0]:-} -if [[ -z ${tag} ]]; then - echo "error: missing tag to build" - exit 1 -fi - -set -x - -tag_without_v=$(echo "${tag}" | sed -e 's|^v||') -tarball_name="dotnet-${tag_without_v}" -tarball_suffix=.tar.gz - -if [ -f "dotnet-prebuilts-${tag}-x64${tarball_suffix}" ]; then - echo "error: dotnet-prebuilts-${tag}-x64${tarball_suffix} already exists" - exit 1 -fi -if [ -f "dotnet-prebuilts-${tag}-arm64${tarball_suffix}" ]; then - echo "error: dotnet-prebuilts-${tag}-arm64${tarball_suffix} already exists" - exit 1 -fi - -for arch in arm64 x64; do - rm -rf "${tarball_name}" - tar xf "${tarball_name}${tarball_suffix}" - - pushd "${tarball_name}" - - if [[ $arch == arm64 ]]; then - ./prep-source-build.sh --bootstrap-rid linux-arm64 - else - ./prep-source-build.sh - 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. - - # rm -r $FILE_TO_REMOVE - - sdk_version=$(jq -r .tools.dotnet "global.json") - - mkdir -p "../dotnet-prebuilts-${sdk_version}-${arch}" - pushd "../dotnet-prebuilts-${sdk_version}-${arch}" - mv "../${tarball_name}/prereqs/packages/archive/Private.SourceBuilt.Artifacts.Bootstrap.tar.gz" . - wget https://builds.dotnet.microsoft.com/dotnet/Sdk/${sdk_version}/dotnet-sdk-${sdk_version}-linux-${arch}.tar.gz || \ - wget https://ci.dot.net/public/Sdk/${sdk_version}/dotnet-sdk-${sdk_version}-linux-${arch}.tar.gz - popd - - popd - - tar czf "dotnet-prebuilts-${sdk_version}-${arch}${tarball_suffix}" "dotnet-prebuilts-${sdk_version}-${arch}" - rm -rf "dotnet-prebuilts-${sdk_version}-${arch}" -done - -if [ -f rpm-crosscompile-all ] ; then - ./rpm-crosscompile-all "${tag}" -fi - diff --git a/build-prebuilt-archive b/build-prebuilt-archive deleted file mode 100755 index 9c9e2cf..0000000 --- a/build-prebuilt-archive +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash - -# Usage: -# build-prebuilt-archive architecture vmr-directory -# -# Creates an archive containing necessary bootstrapping binaries for ppc64le or -# s390x architectures from a VMR build. -# -# You need to have cloned the VMR (https://github.com/dotnet/dotnet) and -# cross-compiled it for the target architecture already. - -set -euo pipefail -IFS=$'\n\t' -set -x - -function print_usage { - echo "Usage:" - echo "$0 " - echo - echo "Creates a ppc64le or s390x bootstrap archive from a VMR build." - echo - echo "You need to have cloned the VMR (https://github.com/dotnet/dotnet) and" - echo "cross-compiled it for the target architecture already." - -} - -positional_args=() -while [[ "$#" -gt 0 ]]; do - arg="${1}" - case "${arg}" in - -h|--help) - print_usage - exit 0 - ;; - *) - positional_args+=("$1") - shift - ;; - esac -done - -arch=${positional_args[0]} # Name of the architecture. Eg, s390x or ppc64le -dir=${positional_args[1]} # Checkout of the VMR with the cross-build for the target architecture -dir=$(readlink -f "$dir") - -sdk_tarball=$(readlink -f $(find "$dir" -iname 'dotnet-sdk*'"$arch"'*tar.gz' | head -1)) - -# SDK is at VMR/artifacts/assets/Release/dotnet-sdk-9.0.100-preview.3.24165.1-linux-$arch.tar.gz. Extract the SDK version from the name. -sdk_version=$(echo "$(basename "${sdk_tarball}")" | sed -E -e 's/dotnet-sdk-//' -e "s/-linux-$arch.tar.gz//") -echo $sdk_version - -archive_name=dotnet-prebuilts-${sdk_version}-${arch} - -mkdir -p $archive_name -pushd $archive_name - -cp -av $sdk_tarball . -cp $dir/artifacts/assets/Release/Private.SourceBuilt.Artifacts.*.tar.gz . - -popd - -tar cvzf $archive_name.tar.gz $archive_name diff --git a/copr-build b/copr-build deleted file mode 100755 index bfd259e..0000000 --- a/copr-build +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -set -x - -function fedora_release { - source /etc/os-release - echo $VERSION_ID -} - -fedpkg --release f$(fedora_release) 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 diff --git a/dotnet-source-10.0.100-rc.2.25502.107.tar.gz.sig b/dotnet-source-10.0.100-rc.2.25502.107.tar.gz.sig new file mode 100644 index 0000000..ce3911a --- /dev/null +++ b/dotnet-source-10.0.100-rc.2.25502.107.tar.gz.sig @@ -0,0 +1,17 @@ +-----BEGIN PGP SIGNATURE----- +Version: BSN Pgp v1.0.0.0 + +iQIcBAABCAAGBQJo7rHRAAoJEP2/U8JNtIcuGdkP/1OHupLegdhs4Z00GzMtXuR+ +yxGqKlUOaFs6/cKpnytWOgeOqy3B9FWhuNorPmbvWOXNIVCEVVErKZOvb+ZDys6u +m5WHz9gmx7nGTVal5+vUYQP7qstt6dZAqXihxYfKkpQfj3z8l7WrNa2drxEFwrPZ +8xRYwl2SiT+HW7uzZ58u4sQoef/nyQQFrdZpHx3utpS3w9VfNlBiOcHhnHAvQDq7 +IxJbAkuyIOlvBhhsKBn2JVyoLD6+rjN24aEA+idfG/7J/r0myar3AoxSaqbUQXzn +c+/jyK3fwRW2fDXJkaiyScW58WXHm2NjZzNsrNvlcwJxVJtbVzBhnaoA5x+wH7As +YKJlPAQzg/qf7j6bDxFZ3rqEx9PK1pJ6Mgyq6xJ+Rb+Pc6J1yHnoDTpzdN9a2yz5 +eig3uO6ywTE9kAtZKP3zAaYlQhDE/7Iwra4e7eFMxH5QXylvngQ1Ia7tydOKkAHp +QAr9g/Kemhl4Pl4HCwOAdWU3didAOCq9qeWfQ8dIREllKXGNl+G96vtDdwTD1awY ++q4sB3aXDB3yaxUP4V2/XB3Udll+sUMv8z42B+5SVoQ+yTsZq5WtK9ogKzKY3+dB +Y4XCpg0Beh5U/Weud6osj9Rz0AN+LgshBkSIqSdr1oWyXaQcfvbd0okt5bQKfWzo ++OocMv0x7eATmAtyLeqf +=9ukX +-----END PGP SIGNATURE----- diff --git a/gating.yaml b/gating.yaml deleted file mode 100644 index b7ab3d1..0000000 --- a/gating.yaml +++ /dev/null @@ -1,23 +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} - - !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.other-archs.functional} diff --git a/rpminspect.yaml b/rpminspect.yaml deleted file mode 100644 index 9293249..0000000 --- a/rpminspect.yaml +++ /dev/null @@ -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 diff --git a/sources b/sources index 8958484..af8210c 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ SHA512 (dotnet-source-10.0.100-rc.2.25502.107.tar.gz) = eefa03f6e409274c3d5a29317c6e26badb991019bc9c8faa2172b7ead937032bf8829474da4dc5badfb92d33e2140c6d0121f8f996c8ec146f9efddc9b2770ca -SHA512 (dotnet-source-10.0.100-rc.2.25502.107.tar.gz.sig) = 4dec13df46b91f641630623778cd2509a0bb68b47975735f1e623a445f02648268f19dae7b4b1912ab855d099f35afd78506808f667d67d2774ef594a3af8191 diff --git a/tests/ci.fmf b/tests/ci.fmf deleted file mode 100644 index ed70370..0000000 --- a/tests/ci.fmf +++ /dev/null @@ -1,44 +0,0 @@ -summary: Basic smoke test -provision: - disk: 20 - memory: 5120 -prepare: - how: install - package: - - aspnetcore-runtime-10.0 - - babeltrace - - bash-completion - - bc - - binutils - - dotnet-runtime-10.0 - - dotnet-sdk-10.0 - - expect - - file - - findutils - - gcc-c++ - - git - - jq - - libstdc++-devel - - lldb - - 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 diff --git a/update-release b/update-release deleted file mode 100755 index 8d78649..0000000 --- a/update-release +++ /dev/null @@ -1,223 +0,0 @@ -#!/bin/bash - -# Usage: -# ./update-release runtime-version|latest-release|latest-commit [--bug bug-id] [--tarball tarball-name] [--release-json release-json] [--larger-rpm-release] - -set -euo pipefail -IFS=$'\n\t' -set -x - -print_usage() { - echo " Usage:" - echo " ./update-release runtime-version|latest-release|latest-commit [--bootstrap] [--bug bug-id] [--tarball tarball-name] [--release-json release-json] [--larger-rpm-release]" - echo "" - echo "The runtime-version parameter needs to match the github release name." - echo "For preview releases, runtime-version should be of the form '9.0 Preview 1'." -} - -download_release_json() { - version=$1 - cat > query < release.metadata.github - curl -L "$(jq -r .release_manifest release.metadata.github)" -o release.json -} - -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" - shift; - shift; - ;; - --tarball) - user_provided_tarball_name="$2" - shift; - shift; - ;; - --larger-rpm-release) - rpm_release="2" - shift; - ;; - *) - positional_args+=("$1") - shift - ;; - esac -done - -spec_files=( ./*.spec ) -spec_file="${spec_files[0]}" - -dotnet_major_minor_version=$spec_file -dotnet_major_minor_version=${dotnet_major_minor_version#./dotnet} -dotnet_major_minor_version=${dotnet_major_minor_version%.spec} - -echo "Updating .NET $dotnet_major_minor_version" - -runtime_version=${positional_args[0]:-} -sdk_version="" -tag=v${runtime_version} -created_release_json=0 - -if [[ ${runtime_version} == latest-release ]]; then - if [[ -n "${release_json:-}" ]]; then - cp -a "${release_json}" release.json - else - download_release_json "${dotnet_major_minor_version}" - fi -elif [[ ${runtime_version} == latest-commit ]]; then - cat > query < release.metadata.github - commit=$(jq -r .commit.sha release.metadata.github) - jq >release.json < 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"