Hi!
I am trying to package my dotnet app. To avoid having to package every nuget package I depend on as rpms I am trying to define them as sources. The problem is that when spectools -g -R myspec.spec
grabs the sources they are downloaded to files named only their version number. Collisions occur, and now I only have 26 of 61 in the directory.
On Arch there is the following syntax:
source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/${_tag}.tar.gz")
so the source file gets downloaded to a certain output file, like wget url -O myfile
.
Is there something similar in .spec files?
Note: downloading the dependencies this way does not break reproducibility as nuget packages are immutable - a given version of the package cannot be changed and will always refer to the same archive.
Previously I got help from Dotnet restore nuget packages at build
If anyone has a better idea how to package dotnet c# applications (e.g. without defining 61 sources or creating 61 rpm packages) I’m open to suggestions! I could not find examples of how others did it (package anything C# to Fedora), that would help as well.
.spec
%global debug_package %{nil}
Name: bookmark-dlp
Version: 0.4.1
Release: %autorelease
Summary: Utility program for downloading bookmarked YouTube links using yt-dlp
License: GPL-3.0-only
URL: https://github.com/Neurofibromin/bookmark-dlp
Source0: https://github.com/Neurofibromin/bookmark-dlp/archive/refs/tags/%{version}.tar.gz
Source1: https://www.nuget.org/api/v2/package/Avalonia/11.0.0
Source2: https://www.nuget.org/api/v2/package/Avalonia/11.2.3
Source3: https://www.nuget.org/api/v2/package/Avalonia.Angle.Windows.Natives/2.1.22045.20230930
...(more sources)...
Source59: https://www.nuget.org/api/v2/package/xunit.extensibility.core/2.9.3
Source60: https://www.nuget.org/api/v2/package/xunit.extensibility.execution/2.9.3
Source61: https://www.nuget.org/api/v2/package/xunit.runner.visualstudio/3.0.1
BuildRequires: gcc
BuildRequires: glibc
BuildRequires: git
BuildRequires: dotnet-sdk-9.0
BuildRequires: wget
BuildRequires: unzip
BuildRequires: desktop-file-utils
Requires: yt-dlp
Requires: glibc
Requires: libstdc++
Requires: libgcc
%description
Small utility program for downloading bookmarked YouTube links using yt-dlp
%prep
#extract Source0
tar -xf %{version}.tar.gz
mv %{version} %{name}-%{version}
cd %{name}-%{version}
export NUGET_PACKAGES=$PWD/nuget
export DOTNET_NOLOGO=true
export DOTNET_CLI_TELEMETRY_OPTOUT=true
#download and extract Source1 to Source60
mkdir -p %{_builddir}/%{name}-%{version}/nuget
pushd %{_builddir}/%{name}-%{version}/nuget
wget %{Source2} Avalonia.11.2.3.nupkg
unzip Avalonia.11.0.0.nupkg -d Avalonia/11.0.0
mv %{Source2} Avalonia.11.2.3.nupkg
unzip Avalonia.11.2.3.nupkg -d Avalonia/11.2.3
...(more extraction)...
mv %{Source59} xunit.extensibility.core.2.9.3.nupkg
unzip xunit.extensibility.core.2.9.3.nupkg -d xunit.extensibility.core/2.9.3
mv %{Source60} xunit.extensibility.execution.2.9.3.nupkg
unzip xunit.extensibility.execution.2.9.3.nupkg -d xunit.extensibility.execution/2.9.3
mv %{Source61} xunit.runner.visualstudio.3.0.1.nupkg
unzip xunit.runner.visualstudio.3.0.1.nupkg -d xunit.runner.visualstudio/3.0.1
popd
dotnet restore --locked-mode --source %{_builddir}/%{name}-%{version}/nuget bookmark-dlp.sln
%build
export MSBUILDDISABLENODEREUSE=1
dotnet publish bookmark-dlp/bookmark-dlp.csproj \
--configuration Release \
--runtime linux-x64 \
--framework net9.0 \
-o %{_builddir}/%{name}-%{version}/publish \
--verbosity quiet
%check
dotnet test ./Tests/bookmark-dlp.Tests/ \
--no-restore \
--framework net9.0 \
--verbosity quiet
%install
%define __strip /bin/true
install -d %{buildroot}%{_bindir}
install -d %{buildroot}%{_libdir}/%{name}
cp -r %{_builddir}/%{name}-%{version}/publish/* %{buildroot}%{_libdir}/%{name}/
# Install icons and create directories automatically
install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.16.png \
%{buildroot}%{_datadir}/icons/hicolor/16x16/apps/bookmark-dlp.png
install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.24.png \
%{buildroot}%{_datadir}/icons/hicolor/24x24/apps/bookmark-dlp.png
install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.32.png \
%{buildroot}%{_datadir}/icons/hicolor/32x32/apps/bookmark-dlp.png
install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.48.png \
%{buildroot}%{_datadir}/icons/hicolor/48x48/apps/bookmark-dlp.png
install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.64.png \
%{buildroot}%{_datadir}/icons/hicolor/64x64/apps/bookmark-dlp.png
install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.96.png \
%{buildroot}%{_datadir}/icons/hicolor/96x96/apps/bookmark-dlp.png
install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.128.png \
%{buildroot}%{_datadir}/icons/hicolor/128x128/apps/bookmark-dlp.png
install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.256.png \
%{buildroot}%{_datadir}/icons/hicolor/256x256/apps/bookmark-dlp.png
install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.512.png \
%{buildroot}%{_datadir}/icons/hicolor/512x512/apps/bookmark-dlp.png
install -Dm0644 %{_builddir}/%{name}-%{version}/bookmark-dlp/Assets/bookmark-dlp.svg \
%{buildroot}%{_datadir}/icons/hicolor/scalable/apps/bookmark-dlp.svg
ln -s %{_libdir}/%{name}/%{name} %{buildroot}%{_bindir}/%{name}
install -d %{buildroot}%{_datadir}/applications
install -d %{buildroot}%{_mandir}/man1
install -m 644 bookmark-dlp.1 %{buildroot}%{_mandir}/man1/
# install -m 644 bookmark-dlp.desktop %{_builddir}/usr/share/applications/
desktop-file-install \
--dir=%{buildroot}%{_datadir}/applications \
bookmark-dlp.desktop
rm -f %{buildroot}%{_libdir}/%{name}/*.pdb
rm -f %{buildroot}%{_libdir}/%{name}/*.xml
%files
%license LICENSE
%doc README.md
%{_mandir}/man1/bookmark-dlp.1.gz
%{_bindir}/%{name}
%{_libdir}/%{name}/bookmark-dlp
%{_datadir}/applications/bookmark-dlp.desktop
%{_datadir}/icons/hicolor/16x16/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/24x24/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/32x32/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/48x48/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/64x64/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/96x96/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/128x128/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/256x256/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/512x512/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/1024x1024/apps/bookmark-dlp.png
%{_datadir}/icons/hicolor/scalable/apps/bookmark-dlp.svg
%changelog
%autochangelog