Initial import
Imported from dotnet-sig/dotnet8.0 commitecce7a2b28:ecce7a2b28Resolves: RHBZ#2224124
This commit is contained in:
		
							parent
							
								
									4ad477545c
								
							
						
					
					
						commit
						6b729e9eb3
					
				
							
								
								
									
										1
									
								
								.fmf/version
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.fmf/version
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| 1 | ||||
							
								
								
									
										27
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -0,0 +1,27 @@ | ||||
| /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 | ||||
							
								
								
									
										140
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,140 @@ | ||||
| # 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/ | ||||
							
								
								
									
										56
									
								
								build-arm64-bootstrap-tarball
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										56
									
								
								build-arm64-bootstrap-tarball
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,56 @@ | ||||
| #!/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" | ||||
							
								
								
									
										186
									
								
								build-dotnet-tarball
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										186
									
								
								build-dotnet-tarball
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,186 @@ | ||||
| #!/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}" | ||||
							
								
								
									
										135
									
								
								check-debug-symbols.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										135
									
								
								check-debug-symbols.py
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,135 @@ | ||||
| #!/usr/bin/python3 | ||||
| 
 | ||||
| """ | ||||
| Check debug symbols are present in shared object and can identify | ||||
| code. | ||||
| 
 | ||||
| It starts scanning from a directory and recursively scans all ELF | ||||
| files found in it for various symbols to ensure all debuginfo is | ||||
| present and nothing has been stripped. | ||||
| 
 | ||||
| Usage: | ||||
| 
 | ||||
| ./check-debug-symbols /path/of/dir/to/scan/ | ||||
| 
 | ||||
| 
 | ||||
| Example: | ||||
| 
 | ||||
| ./check-debug-symbols /usr/lib64 | ||||
| """ | ||||
| 
 | ||||
| # This technique was explained to me by Mark Wielaard (mjw). | ||||
| 
 | ||||
| import collections | ||||
| import os | ||||
| import re | ||||
| import subprocess | ||||
| import sys | ||||
| 
 | ||||
| ScanResult = collections.namedtuple('ScanResult', | ||||
|                                     'file_name debug_info debug_abbrev file_symbols gnu_debuglink') | ||||
| 
 | ||||
| 
 | ||||
| def scan_file(file): | ||||
|     "Scan the provided file and return a ScanResult containing results of the scan." | ||||
| 
 | ||||
|     # Test for .debug_* sections in the shared object. This is the  main test. | ||||
|     # Stripped objects will not contain these. | ||||
|     readelf_S_result = subprocess.run(['eu-readelf', '-S', file], | ||||
|                                       stdout=subprocess.PIPE, encoding='utf-8', check=True) | ||||
|     has_debug_info = any(line for line in readelf_S_result.stdout.split('\n') if '] .debug_info' in line) | ||||
| 
 | ||||
|     has_debug_abbrev = any(line for line in readelf_S_result.stdout.split('\n') if '] .debug_abbrev' in line) | ||||
| 
 | ||||
|     # Test FILE symbols. These will most likely be removed by anyting that | ||||
|     # manipulates symbol tables because it's generally useless. So a nice test | ||||
|     # that nothing has messed with symbols. | ||||
|     def contains_file_symbols(line): | ||||
|         parts = line.split() | ||||
|         if len(parts) < 8: | ||||
|             return False | ||||
|         return \ | ||||
|             parts[2] == '0' and parts[3] == 'FILE' and parts[4] == 'LOCAL' and parts[5] == 'DEFAULT' and \ | ||||
|             parts[6] == 'ABS' and re.match(r'((.*/)?[-_a-zA-Z0-9]+\.(c|cc|cpp|cxx))?', parts[7]) | ||||
| 
 | ||||
|     readelf_s_result = subprocess.run(["eu-readelf", '-s', file], | ||||
|                                       stdout=subprocess.PIPE, encoding='utf-8', check=True) | ||||
|     has_file_symbols = any(line for line in readelf_s_result.stdout.split('\n') if contains_file_symbols(line)) | ||||
| 
 | ||||
|     # Test that there are no .gnu_debuglink sections pointing to another | ||||
|     # debuginfo file. There shouldn't be any debuginfo files, so the link makes | ||||
|     # no sense either. | ||||
|     has_gnu_debuglink = any(line for line in readelf_s_result.stdout.split('\n') if '] .gnu_debuglink' in line) | ||||
| 
 | ||||
|     return ScanResult(file, has_debug_info, has_debug_abbrev, has_file_symbols, has_gnu_debuglink) | ||||
| 
 | ||||
| def is_elf(file): | ||||
|     result = subprocess.run(['file', file], stdout=subprocess.PIPE, encoding='utf-8', check=True) | ||||
|     return re.search(r'ELF 64-bit [LM]SB (?:pie )?(?:executable|shared object)', result.stdout) | ||||
| 
 | ||||
| def scan_file_if_sensible(file): | ||||
|     if is_elf(file): | ||||
|         return scan_file(file) | ||||
|     return None | ||||
| 
 | ||||
| def scan_dir(dir): | ||||
|     results = [] | ||||
|     for root, _, files in os.walk(dir): | ||||
|         for name in files: | ||||
|             result = scan_file_if_sensible(os.path.join(root, name)) | ||||
|             if result: | ||||
|                 results.append(result) | ||||
|     return results | ||||
| 
 | ||||
| def scan(file): | ||||
|     file = os.path.abspath(file) | ||||
|     if os.path.isdir(file): | ||||
|         return scan_dir(file) | ||||
|     elif os.path.isfile(file): | ||||
|         return [scan_file_if_sensible(file)] | ||||
| 
 | ||||
| def is_bad_result(result): | ||||
|     return not result.debug_info or not result.debug_abbrev or not result.file_symbols or result.gnu_debuglink | ||||
| 
 | ||||
| def print_scan_results(results, verbose): | ||||
|     # print(results) | ||||
|     for result in results: | ||||
|         file_name = result.file_name | ||||
|         found_issue = False | ||||
|         if not result.debug_info: | ||||
|             found_issue = True | ||||
|             print('error: missing .debug_info section in', file_name) | ||||
|         if not result.debug_abbrev: | ||||
|             found_issue = True | ||||
|             print('error: missing .debug_abbrev section in', file_name) | ||||
|         if not result.file_symbols: | ||||
|             found_issue = True | ||||
|             print('error: missing FILE symbols in', file_name) | ||||
|         if result.gnu_debuglink: | ||||
|             found_issue = True | ||||
|             print('error: unexpected .gnu_debuglink section in', file_name) | ||||
|         if verbose and not found_issue: | ||||
|             print('OK: ', file_name) | ||||
| 
 | ||||
| def main(args): | ||||
|     verbose = False | ||||
|     files = [] | ||||
|     for arg in args: | ||||
|         if arg == '--verbose' or arg == '-v': | ||||
|             verbose = True | ||||
|         else: | ||||
|             files.append(arg) | ||||
| 
 | ||||
|     results = [] | ||||
|     for file in files: | ||||
|         results.extend(scan(file)) | ||||
| 
 | ||||
|     print_scan_results(results, verbose) | ||||
| 
 | ||||
|     if any(is_bad_result(result) for result in results): | ||||
|         return 1 | ||||
|     return 0 | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main(sys.argv[1:])) | ||||
							
								
								
									
										13
									
								
								copr-build
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								copr-build
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,13 @@ | ||||
| #!/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}" | ||||
							
								
								
									
										14
									
								
								dotnet.sh.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								dotnet.sh.in
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | ||||
| 
 | ||||
| # Set location for AppHost lookup | ||||
| [ -z "$DOTNET_ROOT" ] && export DOTNET_ROOT=@LIBDIR@/dotnet | ||||
| 
 | ||||
| # Add dotnet tools directory to PATH | ||||
| DOTNET_TOOLS_PATH="$HOME/.dotnet/tools" | ||||
| case "$PATH" in | ||||
|     *"$DOTNET_TOOLS_PATH"* ) true ;; | ||||
|     * ) PATH="$PATH:$DOTNET_TOOLS_PATH" ;; | ||||
| esac | ||||
| 
 | ||||
| # Extract self-contained executables under HOME | ||||
| # to avoid multi-user issues from using the default '/var/tmp'. | ||||
| [ -z "$DOTNET_BUNDLE_EXTRACT_BASE_DIR" ] && export DOTNET_BUNDLE_EXTRACT_BASE_DIR="${XDG_CACHE_HOME:-"$HOME"/.cache}/dotnet_bundle_extract" | ||||
							
								
								
									
										35
									
								
								dotnet7.0.rpmlintrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								dotnet7.0.rpmlintrc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | ||||
| # 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") | ||||
| 
 | ||||
							
								
								
									
										1019
									
								
								dotnet8.0.spec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1019
									
								
								dotnet8.0.spec
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										23
									
								
								gating.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								gating.yaml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| --- !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} | ||||
							
								
								
									
										9
									
								
								release.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								release.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| { | ||||
|   "release": "8.0.0-preview.7", | ||||
|   "channel": "8.0", | ||||
|   "tag": "v8.0.0-preview.7.23375.6", | ||||
|   "sdkVersion": "8.0.100-preview.7.23376.3", | ||||
|   "runtimeVersion": "8.0.0-preview.7.23375.6", | ||||
|   "sourceRepository": "https://github.com/dotnet/dotnet", | ||||
|   "sourceVersion": "a4e1c155baee463805c5af89adb4cb1165df9ad0" | ||||
| } | ||||
							
								
								
									
										12
									
								
								roslyn-analyzers-ppc64le-apphost.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								roslyn-analyzers-ppc64le-apphost.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| diff --git a/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj b/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj
 | ||||
| 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> | ||||
| +    <UseAppHost>false</UseAppHost>
 | ||||
|    </PropertyGroup> | ||||
|    <PropertyGroup> | ||||
|      <NonShipping>true</NonShipping> | ||||
							
								
								
									
										18
									
								
								rpminspect.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								rpminspect.yaml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | ||||
| --- | ||||
| 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 | ||||
| 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 | ||||
							
								
								
									
										41
									
								
								tests/ci.fmf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								tests/ci.fmf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| summary: Basic smoke test | ||||
| provision: | ||||
|     disk: 20 | ||||
|     memory: 5120 | ||||
| prepare: | ||||
|     how: install | ||||
|     package: | ||||
|         - aspnetcore-runtime-7.0 | ||||
|         - babeltrace | ||||
|         - bash-completion | ||||
|         - bc | ||||
|         - binutils | ||||
|         - dotnet-runtime-7.0 | ||||
|         - dotnet-sdk-7.0 | ||||
|         - expect | ||||
|         - file | ||||
|         - findutils | ||||
|         - gcc-c++ | ||||
|         - git | ||||
|         - jq | ||||
|         - libstdc++-devel | ||||
|         - lldb | ||||
|         - lttng-tools | ||||
|         - 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 | ||||
							
								
								
									
										118
									
								
								update-release
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										118
									
								
								update-release
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,118 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| # Usage: | ||||
| #     ./update-release sdk-version runtime-version [--bug bug-id] [--tarball tarball-name] [--larger-rpm-release] | ||||
| 
 | ||||
| set -euo pipefail | ||||
| IFS=$'\n\t' | ||||
| 
 | ||||
| print_usage() { | ||||
|     echo " Usage:" | ||||
|     echo "     ./update-release sdk-version runtime-version [--bug bug-id] [--tarball tarball-name] [--larger-rpm-release]" | ||||
| } | ||||
| 
 | ||||
| user_provided_tarball_name="" | ||||
| 
 | ||||
| rpm_release=1 | ||||
| positional_args=() | ||||
| bug_ids=() | ||||
| while [[ "$#" -gt 0 ]]; do | ||||
|     arg="$1" | ||||
|     case "${arg}" in | ||||
|         --bug) | ||||
|             bug_ids+=("$2") | ||||
|             shift; | ||||
|             shift; | ||||
|             ;; | ||||
|         -h|--help) | ||||
|             print_usage | ||||
|             exit 0 | ||||
|             ;; | ||||
|         --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]}" | ||||
| 
 | ||||
| sdk_version=${positional_args[0]:-} | ||||
| if [[ -z ${sdk_version} ]]; then | ||||
|     echo "error: missing sdk version" | ||||
|     exit 1 | ||||
| fi | ||||
| 
 | ||||
| runtime_version=${positional_args[1]:-} | ||||
| if [[ -z ${runtime_version} ]]; then | ||||
|     echo "error: missing runtime version" | ||||
|     exit 1 | ||||
| fi | ||||
| 
 | ||||
| host_version="$runtime_version" | ||||
| 
 | ||||
| if [[ "$runtime_version" == "3.1"* ]]; then | ||||
|     tag=v${sdk_version}-SDK | ||||
| elif [[ "$runtime_version" == "6.0"* ]] || [[ "$runtime_version" == "7.0"* ]]; then | ||||
|     tag=v${sdk_version} | ||||
| else | ||||
|     tag=v${runtime_version} | ||||
| fi | ||||
| 
 | ||||
| if [[ -f "dotnet-${tag}-original.tar.gz" ]]; then | ||||
|     echo "dotnet-${tag}-original.tar.gz alredy exists, not rebuilding tarball" | ||||
| else | ||||
|     if [[ -n "${user_provided_tarball_name}" ]]; then | ||||
|         mv "$user_provided_tarball_name" "dotnet-${tag}-original.tar.gz" | ||||
|     elif [[ -f "dotnet-${sdk_version}-SDK.tar.gz" ]]; then | ||||
|         mv "dotnet-${sdk_version}-SDK.tar.gz" "dotnet-${tag}-original.tar.gz" | ||||
|     elif [[ -f "dotnet-${sdk_version}.tar.gz" ]]; then | ||||
|         mv "dotnet-${sdk_version}.tar.gz" "dotnet-${tag}-original.tar.gz" | ||||
|     elif [[ -f "dotnet-${runtime_version}.tar.gz" ]]; then | ||||
|         mv "dotnet-${runtime_version}.tar.gz" "dotnet-${tag}-original.tar.gz" | ||||
|     fi | ||||
| fi | ||||
| 
 | ||||
| if [[ ! -f "dotnet-${tag}.tar.gz" ]]; then | ||||
|     ./build-dotnet-tarball "${tag}" | ||||
| fi | ||||
| 
 | ||||
| set -x | ||||
| 
 | ||||
| sed -i -E "s|^%global host_version [[:digit:]]\.[[:digit:]]\.[[:digit:]]+|%global host_version ${host_version}|" "$spec_file" | ||||
| sed -i -E "s|^%global runtime_version [[:digit:]]\.[[:digit:]]\.[[:digit:]]+|%global runtime_version ${runtime_version}|" "$spec_file" | ||||
| sed -i -E "s|^%global sdk_version [[:digit:]]\.[[:digit:]]\.[[:digit:]][[:digit:]][[:digit:]]|%global sdk_version ${sdk_version}|" "$spec_file" | ||||
| 
 | ||||
| comment="Update to .NET SDK ${sdk_version} and Runtime ${runtime_version}" | ||||
| commit_message="$comment | ||||
| " | ||||
| for bug_id in "${bug_ids[@]}"; do | ||||
|     comment="$comment | ||||
| - Resolves: RHBZ#$bug_id" | ||||
|     commit_message="$commit_message | ||||
| Resolves: RHBZ#$bug_id" | ||||
| 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" | ||||
| 
 | ||||
| release_json_url=$(spectool -l --sources ./dotnet8.0.spec | grep release.json | cut -d' ' -f2) | ||||
| rm "$(basename "$release_json_url")" | ||||
| wget "$release_json_url" | ||||
							
								
								
									
										13
									
								
								vstest-intent-net8.0.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								vstest-intent-net8.0.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| diff --git a/src/vstest/test/Intent/Intent.csproj b/src/vstest/test/Intent/Intent.csproj
 | ||||
| index bb711c9256..6d0b199a9b 100644
 | ||||
| --- a/src/vstest/test/Intent/Intent.csproj
 | ||||
| +++ b/src/vstest/test/Intent/Intent.csproj
 | ||||
| @@ -2,7 +2,7 @@
 | ||||
|   | ||||
|    <PropertyGroup> | ||||
|      <OutputType>Exe</OutputType> | ||||
| -    <TargetFramework>net6.0</TargetFramework>
 | ||||
| +    <TargetFramework>net8.0</TargetFramework>
 | ||||
|      <ImplicitUsings>enable</ImplicitUsings> | ||||
|      <Nullable>enable</Nullable> | ||||
|    </PropertyGroup> | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user