mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-25 00:12:56 +00:00
buildDotnetModule: make fetch-deps find output path automatically
This commit is contained in:
parent
9c16cea2bb
commit
ee8ba995a7
@ -123,7 +123,7 @@ To package Dotnet applications, you can use `buildDotnetModule`. This has simila
|
||||
* `dotnetPackFlags` can be used to pass flags to `dotnet pack`. Used only if `packNupkg` is set to `true`.
|
||||
* `dotnetFlags` can be used to pass flags to all of the above phases.
|
||||
|
||||
When packaging a new application, you need to fetch its dependencies. You can run `nix-build -A package.fetch-deps` to generate a script that will build a lockfile for you. After running the script you should have the location of the generated lockfile printed to the console, which can be copied to a stable directory. Then set `nugetDeps = ./deps.nix` and you're ready to build the derivation.
|
||||
When packaging a new application, you need to fetch its dependencies. Create an empty `deps.nix`, set `nugetDeps = ./deps.nix`, then run `nix-build -A package.fetch-deps` to generate a script that will build the lockfile for you.
|
||||
|
||||
Here is an example `default.nix`, using some of the previously discussed arguments:
|
||||
```nix
|
||||
|
72
maintainers/scripts/update-dotnet-lockfiles.nix
Normal file
72
maintainers/scripts/update-dotnet-lockfiles.nix
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
To run:
|
||||
|
||||
nix-shell maintainers/scripts/update-dotnet-lockfiles.nix
|
||||
|
||||
This script finds all the derivations in nixpkgs that have a 'fetch-deps'
|
||||
attribute, and runs all of them sequentially. This is useful to test changes
|
||||
to 'fetch-deps', 'nuget-to-nix', or other changes to the dotnet build
|
||||
infrastructure. Regular updates should be done through the individual packages
|
||||
update scripts.
|
||||
*/
|
||||
let
|
||||
pkgs = import ../.. {};
|
||||
|
||||
inherit (pkgs) lib;
|
||||
|
||||
packagesWith = cond: pkgs:
|
||||
let
|
||||
packagesWithInner = attrs:
|
||||
lib.unique (
|
||||
lib.concatLists (
|
||||
lib.mapAttrsToList (name: elem:
|
||||
let
|
||||
result = builtins.tryEval elem;
|
||||
in
|
||||
if result.success then
|
||||
let
|
||||
value = result.value;
|
||||
in
|
||||
if lib.isDerivation value then
|
||||
lib.optional (cond value) value
|
||||
else
|
||||
if lib.isAttrs value && (value.recurseForDerivations or false || value.recurseForRelease or false) then
|
||||
packagesWithInner value
|
||||
else []
|
||||
else []) attrs));
|
||||
in
|
||||
packagesWithInner pkgs;
|
||||
|
||||
packages =
|
||||
packagesWith (pkgs: pkgs ? fetch-deps) pkgs;
|
||||
|
||||
helpText = ''
|
||||
Please run:
|
||||
|
||||
% nix-shell maintainers/scripts/update-dotnet-lockfiles.nix
|
||||
'';
|
||||
|
||||
fetchScripts = map (p: p.fetch-deps) packages;
|
||||
|
||||
in pkgs.stdenv.mkDerivation {
|
||||
name = "nixpkgs-update-dotnet-lockfiles";
|
||||
buildCommand = ''
|
||||
echo ""
|
||||
echo "----------------------------------------------------------------"
|
||||
echo ""
|
||||
echo "Not possible to update packages using \`nix-build\`"
|
||||
echo ""
|
||||
echo "${helpText}"
|
||||
echo "----------------------------------------------------------------"
|
||||
exit 1
|
||||
'';
|
||||
shellHook = ''
|
||||
unset shellHook # do not contaminate nested shells
|
||||
set -e
|
||||
for x in $fetchScripts; do
|
||||
$x
|
||||
done
|
||||
exit
|
||||
'';
|
||||
inherit fetchScripts;
|
||||
}
|
@ -9,7 +9,6 @@ set -euo pipefail
|
||||
trap 'echo "Error at ${BASH_SOURCE[0]}:$LINENO"' ERR
|
||||
|
||||
pkgName=$1
|
||||
depsFile=$2
|
||||
|
||||
: ${getVersionFromTags:=}
|
||||
: ${refetch:=}
|
||||
@ -41,7 +40,7 @@ fi
|
||||
if [[ $newVersion == $oldVersion && ! $refetch ]]; then
|
||||
echo "nixpkgs already has the latest version $newVersion"
|
||||
echo "Run this script with env var refetch=1 to re-verify the content hash via GPG"
|
||||
echo "and to recreate $(basename "$depsFile"). This is useful for reviewing a version update."
|
||||
echo "and to recreate deps.nix. This is useful for reviewing a version update."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@ -74,4 +73,4 @@ fi
|
||||
echo
|
||||
|
||||
# Create deps file
|
||||
$(nix-build "$nixpkgs" -A $pkgName.fetch-deps --no-out-link) "$depsFile"
|
||||
$(nix-build "$nixpkgs" -A $pkgName.fetch-deps --no-out-link)
|
||||
|
@ -3,8 +3,6 @@
|
||||
set -euo pipefail
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
|
||||
DEPS_FILE="$(realpath "./deps.nix")"
|
||||
|
||||
# provide a github token so you don't get rate limited
|
||||
# if you use gh cli you can use:
|
||||
# `export GITHUB_TOKEN="$(cat ~/.config/gh/config.yml | yq '.hosts."github.com".oauth_token' -r)"`
|
||||
@ -75,4 +73,4 @@ fi
|
||||
|
||||
echo "building Nuget lockfile"
|
||||
|
||||
$(nix-build -A ryujinx.fetch-deps --no-out-link) "$DEPS_FILE"
|
||||
$(nix-build -A ryujinx.fetch-deps --no-out-link)
|
||||
|
@ -26,7 +26,6 @@ buildDotnetModule rec {
|
||||
# How-to update deps:
|
||||
# $ nix-build -A pinta.fetch-deps
|
||||
# $ ./result
|
||||
# $ cp /tmp/Pinta-deps.nix ./pkgs/applications/graphics/pinta/deps.nix
|
||||
# TODO: create update script
|
||||
nugetDeps = ./deps.nix;
|
||||
|
||||
|
@ -3,8 +3,6 @@
|
||||
set -euo pipefail
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
|
||||
deps_file="$(realpath ./deps.nix)"
|
||||
|
||||
new_version="$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s "https://api.github.com/repos/JustArchiNET/ArchiSteamFarm/releases" | jq -r 'map(select(.prerelease == false)) | .[0].tag_name')"
|
||||
old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
|
||||
|
||||
@ -22,7 +20,7 @@ if [[ "${1:-}" != "--deps-only" ]]; then
|
||||
update-source-version ArchiSteamFarm "$new_version"
|
||||
fi
|
||||
|
||||
$(nix-build -A ArchiSteamFarm.fetch-deps --no-out-link) "$deps_file"
|
||||
$(nix-build -A ArchiSteamFarm.fetch-deps --no-out-link)
|
||||
|
||||
popd
|
||||
"$asf_path/web-ui/update.sh"
|
||||
|
@ -20,5 +20,4 @@ hash="$(nix-prefetch ./.)"
|
||||
sed -i -Ee "s/hash = \"sha256-[A-Za-z0-9=]{44}\"/hash = \"${hash}\"/" default.nix
|
||||
|
||||
|
||||
nugetDeps="$(realpath ./deps.nix)"
|
||||
$(nix-build ../../../.. -A git-credential-manager.fetch-deps --no-out-link) "$nugetDeps"
|
||||
$(nix-build ../../../.. -A git-credential-manager.fetch-deps --no-out-link)
|
||||
|
@ -15,5 +15,5 @@ if [[ "$latestVersion" == "$currentVersion" ]]; then
|
||||
fi
|
||||
|
||||
update-source-version github-runner "$latestVersion"
|
||||
$(nix-build -A github-runner.fetch-deps --no-out-link) "$(dirname "$BASH_SOURCE")/deps.nix"
|
||||
$(nix-build -A github-runner.fetch-deps --no-out-link)
|
||||
|
||||
|
@ -15,4 +15,4 @@ fi
|
||||
|
||||
update-source-version marksman "$version"
|
||||
|
||||
$(nix-build -A marksman.fetch-deps --no-out-link) "$(dirname -- "${BASH_SOURCE[0]}")/deps.nix"
|
||||
$(nix-build -A marksman.fetch-deps --no-out-link)
|
||||
|
@ -6,8 +6,6 @@ set -euo pipefail
|
||||
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
|
||||
deps_file="$(realpath "./deps.nix")"
|
||||
|
||||
new_version="$(curl -s "https://api.github.com/repos/OmniSharp/omnisharp-roslyn/releases?per_page=1" | jq -r '.[0].name')"
|
||||
old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
|
||||
|
||||
@ -19,4 +17,4 @@ fi
|
||||
cd ../../../..
|
||||
update-source-version omnisharp-roslyn "${new_version//v}"
|
||||
|
||||
$(nix-build -A omnisharp-roslyn.fetch-deps --no-out-link) "$deps_file"
|
||||
$(nix-build -A omnisharp-roslyn.fetch-deps --no-out-link)
|
||||
|
@ -3,8 +3,6 @@
|
||||
set -eo pipefail
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
|
||||
deps_file="$(realpath "./deps.nix")"
|
||||
|
||||
new_version="$(curl -s "https://api.github.com/repos/ppy/osu/releases?per_page=1" | jq -r '.[0].name')"
|
||||
old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
|
||||
if [[ "$new_version" == "$old_version" ]]; then
|
||||
@ -18,4 +16,4 @@ if [[ "$1" != "--deps-only" ]]; then
|
||||
update-source-version osu-lazer "$new_version"
|
||||
fi
|
||||
|
||||
$(nix-build . -A osu-lazer.fetch-deps --no-out-link) "$deps_file"
|
||||
$(nix-build . -A osu-lazer.fetch-deps --no-out-link)
|
||||
|
@ -3,8 +3,6 @@
|
||||
set -eo pipefail
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
|
||||
deps_file="$(realpath "./deps.nix")"
|
||||
|
||||
new_version="$(curl -s "https://api.github.com/repos/space-wizards/SS14.Launcher/releases?per_page=1" | jq -r '.[0].tag_name' | sed 's/v//')"
|
||||
old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./space-station-14-launcher.nix)"
|
||||
|
||||
@ -15,4 +13,4 @@ fi
|
||||
|
||||
cd ../../..
|
||||
update-source-version space-station-14-launcher.unwrapped "$new_version"
|
||||
$(nix-build -A space-station-14-launcher.fetch-deps --no-out-link) "$deps_file"
|
||||
$(nix-build -A space-station-14-launcher.fetch-deps --no-out-link)
|
||||
|
@ -3,8 +3,6 @@
|
||||
set -eo pipefail
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
|
||||
deps_file="$(realpath "./deps.nix")"
|
||||
|
||||
new_version="$(curl -s "https://api.github.com/repos/jackett/jackett/releases?per_page=1" | jq -r '.[0].name')"
|
||||
old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
|
||||
|
||||
@ -15,4 +13,4 @@ fi
|
||||
|
||||
cd ../../..
|
||||
update-source-version jackett "${new_version//v}"
|
||||
$(nix-build -A jackett.fetch-deps --no-out-link) "$deps_file"
|
||||
$(nix-build -A jackett.fetch-deps --no-out-link)
|
||||
|
@ -11,10 +11,6 @@ if [[ "$currentVersion" == "$latestVersion" ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
pushd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
nugetDepsFile=$(realpath ./nuget-deps.nix)
|
||||
popd
|
||||
|
||||
update-source-version jellyfin "$latestVersion"
|
||||
|
||||
$(nix-build . -A jellyfin.fetch-deps --no-out-link) "$nugetDepsFile"
|
||||
$(nix-build . -A jellyfin.fetch-deps --no-out-link)
|
||||
|
@ -6,8 +6,6 @@ set -euo pipefail
|
||||
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
|
||||
deps_file="$(realpath "./deps.nix")"
|
||||
|
||||
new_version="$(curl -s "https://api.github.com/repos/EventStore/EventStore/releases/latest" | jq -r '.name')"
|
||||
new_version="${new_version#oss-v}"
|
||||
old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
|
||||
@ -20,4 +18,4 @@ fi
|
||||
cd ../../../..
|
||||
update-source-version eventstore "${new_version//v}"
|
||||
|
||||
$(nix-build -A eventstore.fetch-deps --no-out-link) "$deps_file"
|
||||
$(nix-build -A eventstore.fetch-deps --no-out-link)
|
||||
|
@ -3,8 +3,6 @@
|
||||
set -eo pipefail
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
|
||||
deps_file="$(realpath "./deps.nix")"
|
||||
|
||||
new_version="$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s "https://api.github.com/repos/OpenTabletDriver/OpenTabletDriver/releases" | jq -r 'map(select(.prerelease == false)) | .[0].tag_name' | cut -c2-)"
|
||||
old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
|
||||
|
||||
@ -23,4 +21,4 @@ sed -i ./default.nix -re "s|\"$oldDebSha256\"|\"$newDebSha256\"|"
|
||||
|
||||
pushd ../../../..
|
||||
update-source-version opentabletdriver "$new_version"
|
||||
$(nix-build -A opentabletdriver.fetch-deps --no-out-link) "$deps_file"
|
||||
$(nix-build -A opentabletdriver.fetch-deps --no-out-link)
|
||||
|
@ -3,8 +3,6 @@
|
||||
set -eo pipefail
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
|
||||
deps_file="$(realpath "./deps.nix")"
|
||||
|
||||
new_version="$(curl -s "https://api.github.com/repos/tyrrrz/DiscordChatExporter/releases?per_page=1" | jq -r '.[0].name')"
|
||||
old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
|
||||
if [[ "$new_version" == "$old_version" ]]; then
|
||||
@ -14,4 +12,4 @@ fi
|
||||
|
||||
cd ../../../..
|
||||
update-source-version discordchatexporter-cli "$new_version"
|
||||
$(nix-build -A discordchatexporter-cli.fetch-deps --no-out-link) "$deps_file"
|
||||
$(nix-build -A discordchatexporter-cli.fetch-deps --no-out-link)
|
||||
|
@ -3,7 +3,6 @@
|
||||
|
||||
set -eou pipefail
|
||||
|
||||
depsFile="$(realpath "$(dirname "${BASH_SOURCE[0]}")/deps.nix")"
|
||||
currentVersion="$(nix eval --raw -f . depotdownloader.version)"
|
||||
latestVersion="$(curl -s ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} "https://api.github.com/repos/SteamRE/DepotDownloader/releases?per_page=1" \
|
||||
| jq -r '.[].name' | cut -d' ' -f2)"
|
||||
@ -14,4 +13,4 @@ if [[ "$currentVersion" = "$latestVersion" ]]; then
|
||||
fi
|
||||
|
||||
update-source-version depotdownloader "$latestVersion"
|
||||
$(nix-build -A depotdownloader.fetch-deps --no-out-link) "$depsFile"
|
||||
$(nix-build -A depotdownloader.fetch-deps --no-out-link)
|
||||
|
Loading…
Reference in New Issue
Block a user