Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/basic/flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
pkgs = nixpkgs.legacyPackages.${system};
in {
devShells.${system}.default = pkgs.mkShell {
buildInputs = [
packages = [
(nix-dotnet.lib.${system}.mkDotnet {
globalJsonPath = ./global.json;
workloads = [];
Expand Down
2 changes: 1 addition & 1 deletion examples/multi-sdk/flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
pkgs = nixpkgs.legacyPackages.${system};
in {
devShells.${system}.default = pkgs.mkShell {
buildInputs = [
packages = [
(nix-dotnet.lib.${system}.mkDotnet {
sdkVersion = "10.0.103";
outputHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
Expand Down
2 changes: 1 addition & 1 deletion examples/with-workloads/flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
pkgs = nixpkgs.legacyPackages.${system};
in {
devShells.${system}.default = pkgs.mkShell {
buildInputs = [
packages = [
(nix-dotnet.lib.${system}.mkDotnet {
globalJsonPath = ./global.json;
workloads = ["android" "maui"];
Expand Down
18 changes: 9 additions & 9 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,22 @@
pkgs = nixpkgs.legacyPackages.${system};
dotnet = import ./src/nix-dotnet.nix {inherit pkgs;};
sdkOutputHashes = {
aarch64-darwin = "sha256-QrDQHIjGxhQu0dqbXFw5idaQ74G6qml0xoNPX+rbEPs=";
aarch64-darwin = "sha256-YxvVtFxTcXR982ar15JUpKhv05WQ4AE4+xH1wxk3yz4=";
aarch64-linux = "sha256-t4lHygbZMs2Mdry+rqSgSxhXWubWrC3uj1iIogyBE/U=";
x86_64-darwin = "sha256-bWnl7oDH6ywF2iwFlQ+b1NZ6f5JvRtauaqIQIlz4Mzg=";
x86_64-linux = "sha256-zavpTqfPO/x1YFvGww+QBzyK70eGi50TaA5wkaGziFg=";
x86_64-darwin = "sha256-LX1c87zNmSv/ylVsOWoe9cySVotLeoQ2m05mW6ooT8E=";
x86_64-linux = "sha256-kp0avinB5M1ZpWbdBBArpdsMVdRXqDX3FPF2lSBnWt0=";
};
workloadOutputHashes = {
aarch64-darwin = "sha256-PXo7/caO02xsbx2qWcUIXtyvvr2ePifPdvMVzO9+JUE=";
aarch64-darwin = "sha256-PPi+v18l/RAY9AtC92wPJapHfXHHUNYFcjHjmB3GkZM=";
aarch64-linux = "sha256-IOo5a1RSjnouRl79Xru01XYdqtiNXS+pgrCa1Fx4+sI=";
x86_64-darwin = "sha256-gJPf567EoBmF22ANZX9qFEA/wtZHU/+GBd6rbaj9VUQ=";
x86_64-linux = "sha256-R6+gCgcfrTv1NYQyI0/3YXmjDRvvooPEOjCR59WSpfk=";
x86_64-darwin = "sha256-7KqU4jd0twDkplMjtaBSVFv/iYwYG1rDoflyKyZwaFE=";
x86_64-linux = "sha256-fvgGMjgceFxb4SpkAZVbxlFD3xBGoc8eehSXdn9OLgA=";
};
multiSdkOutputHashes = {
aarch64-darwin = "sha256-McAAMwZCOfvdOKOCjNRKYmpWbdtUQfz03WdoAJImv5c=";
aarch64-darwin = "sha256-+hbEyapmxU8+JLahaIhv47vyNgyvP51QZJsSIEWx9lg=";
aarch64-linux = "sha256-olZbB/1rbLs587K9NQXBQ9o2pQH0WSTUjaBORlJVD+4=";
x86_64-darwin = "sha256-5DNjlU1VCJs3Soqemq4gU3YdEFXvIol30qad0udUiuU=";
x86_64-linux = "sha256-3LAIxMUQYqrnEaOAoYA/seSFZuE1pyVL97TjC891VCs=";
x86_64-darwin = "sha256-mHNWI7TtbIKXZSlcrxQFSjmU9f+3Em4u2lqIKSmBiso=";
x86_64-linux = "sha256-qIqid6wnv4OBC5BuvvZL1FvFXKge7k1PzrdqXpIk5fc=";
};
outputHashFor = hashes:
if builtins.hasAttr system hashes
Expand Down
22 changes: 20 additions & 2 deletions src/nix-dotnet.nix
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@

for entry in "$out/.runtime"/*; do
name="$(basename "$entry")"
if [ "$name" != "dotnet" ]; then
if [ "$name" != "bin" ] && [ "$name" != "dotnet" ]; then
ln -s ".runtime/$name" "$out/$name"
fi
done
Expand All @@ -62,11 +62,19 @@
'#!${pkgs.bash}/bin/bash' \
'export LD_LIBRARY_PATH="${dotnetLibraryPath}''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"' \
'script_dir="$(cd "$(dirname "$0")" && pwd)"' \
'export DOTNET_ROOT="$script_dir/.runtime"' \
'export DOTNET_ROOT="$script_dir"' \
'exec "$script_dir/.runtime/dotnet" "$@"' \
> "$out/dotnet"
chmod +x "$out/dotnet"

mkdir -p "$out/bin"
printf '%s\n' \
'#!${pkgs.bash}/bin/bash' \
'sdk_root="$(cd "$(dirname "$0")/.." && pwd)"' \
'exec "$sdk_root/dotnet" "$@"' \
> "$out/bin/dotnet"
chmod +x "$out/bin/dotnet"

chmod -R a-w "$out"

runHook postInstall
Expand Down Expand Up @@ -214,6 +222,15 @@
rm -f global.json
''}

mkdir -p "$out/bin" "$out/nix-support"

ln -s ../dotnet "$out/bin/dotnet"

cat > "$out/nix-support/setup-hook" <<'EOF'
dotnetSdkRoot="$(cd "$(dirname "''${BASH_SOURCE[0]}")/.." && pwd)"
export DOTNET_ROOT="$dotnetSdkRoot"
EOF

echo "Installation complete"
echo "SDK Version: $($out/dotnet --version)"

Expand Down Expand Up @@ -247,6 +264,7 @@
homepage = "https://dotnet.microsoft.com/";
license = licenses.mit;
maintainers = [];
mainProgram = "dotnet";
platforms = platforms.all;
};
};
Expand Down
5 changes: 1 addition & 4 deletions tests/integration-multi-sdk-test.nix
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,12 @@ in
nativeBuildInputs = [
pkgs.cacert
pkgs.gnugrep
dotnetSdk
];

DOTNET_ROOT = "${dotnetSdk}";

buildPhase = ''
runHook preBuild

export PATH="${dotnetSdk}:$PATH"

export DOTNET_CLI_HOME="$PWD/.dotnet-cli-home"
export NUGET_PACKAGES="$PWD/.nuget/packages"
export NUGET_HTTP_CACHE_PATH="$PWD/.nuget/http-cache"
Expand Down
23 changes: 16 additions & 7 deletions tests/integration-test.nix
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,14 @@ in

src = ./integration;

nativeBuildInputs = [pkgs.cacert];

# Configure .NET CLI environment (absolute paths required)
DOTNET_ROOT = "${dotnetSdk}";
nativeBuildInputs = [
pkgs.cacert
dotnetSdk
];

buildPhase = ''
runHook preBuild

# Add dotnet to PATH
export PATH="${dotnetSdk}:$PATH"

# Use absolute paths for .NET CLI environment
export DOTNET_CLI_HOME="$PWD/.dotnet-cli-home"
export NUGET_PACKAGES="$PWD/.nuget/packages"
Expand All @@ -35,9 +32,21 @@ in
mkdir -p "$DOTNET_CLI_HOME" "$NUGET_PACKAGES" "$NUGET_HTTP_CACHE_PATH" "$HOME"

echo "=== Integration Test: Building .NET Project ==="
echo "dotnet on PATH: $(command -v dotnet)"
echo "DOTNET_ROOT: $DOTNET_ROOT"
echo "SDK Version: $(dotnet --version)"
echo ""

if [ "$(command -v dotnet)" != "${dotnetSdk}/bin/dotnet" ]; then
echo "ERROR: dotnet did not resolve to the mkDotnet package"
exit 1
fi

if [ "$DOTNET_ROOT" != "${dotnetSdk}" ]; then
echo "ERROR: DOTNET_ROOT was not exported by the setup hook"
exit 1
fi

# Restore NuGet packages
echo "Step 1: Restoring NuGet packages..."
dotnet restore TestSolution.slnx --locked-mode
Expand Down
5 changes: 1 addition & 4 deletions tests/integration-workload-test.nix
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,12 @@ in
nativeBuildInputs = [
pkgs.cacert
pkgs.gnugrep
dotnetSdk
];

DOTNET_ROOT = "${dotnetSdk}";

buildPhase = ''
runHook preBuild

export PATH="${dotnetSdk}:$PATH"

export DOTNET_CLI_HOME="$PWD/.dotnet-cli-home"
export NUGET_PACKAGES="$PWD/.nuget/packages"
export NUGET_HTTP_CACHE_PATH="$PWD/.nuget/http-cache"
Expand Down
15 changes: 6 additions & 9 deletions tests/integration/flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
dotnet = import ../../src/nix-dotnet.nix {inherit pkgs;};
sdkOutputHash =
if system == "aarch64-darwin"
then "sha256-QrDQHIjGxhQu0dqbXFw5idaQ74G6qml0xoNPX+rbEPs="
then "sha256-YxvVtFxTcXR982ar15JUpKhv05WQ4AE4+xH1wxk3yz4="
else if system == "x86_64-linux"
then "sha256-zavpTqfPO/x1YFvGww+QBzyK70eGi50TaA5wkaGziFg="
then "sha256-kp0avinB5M1ZpWbdBBArpdsMVdRXqDX3FPF2lSBnWt0="
else throw "No outputHash configured for system ${system}";

dotnetSdk = dotnet.mkDotnet {
Expand All @@ -32,17 +32,14 @@

src = ./.;

nativeBuildInputs = [pkgs.cacert];

# Configure .NET CLI environment
DOTNET_ROOT = "${dotnetSdk}";
nativeBuildInputs = [
pkgs.cacert
dotnetSdk
];

buildPhase = ''
runHook preBuild

# Add dotnet to PATH
export PATH="${dotnetSdk}:$PATH"

# Use absolute paths for .NET CLI environment
export DOTNET_CLI_HOME="$PWD/.dotnet-cli-home"
export NUGET_PACKAGES="$PWD/.nuget/packages"
Expand Down
5 changes: 5 additions & 0 deletions tests/unit.nix
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,11 @@ in {
expected = "dotnet-sdk-android";
};

testMkDotnetMainProgram = {
expr = (mkDotnetFrom validGlobalJson [] validOutputHash).meta.mainProgram;
expected = "dotnet";
};

testMkDotnetPassthruWorkloads = {
expr =
(mkDotnetFrom validGlobalJson [
Expand Down
Loading