From ee8ba995a746b317d94abcbaeb877f200e1cd37b Mon Sep 17 00:00:00 2001 From: David McFarland Date: Sun, 16 Oct 2022 17:47:23 -0300 Subject: buildDotnetModule: make fetch-deps find output path automatically --- doc/languages-frameworks/dotnet.section.md | 2 +- maintainers/scripts/update-dotnet-lockfiles.nix | 72 ++++++++++++++++++++++ .../blockchains/nbxplorer/util/update-common.sh | 5 +- pkgs/applications/emulators/ryujinx/updater.sh | 4 +- pkgs/applications/graphics/pinta/default.nix | 1 - pkgs/applications/misc/ArchiSteamFarm/update.sh | 4 +- .../git-credential-manager/update.sh | 3 +- .../continuous-integration/github-runner/update.sh | 2 +- pkgs/development/tools/marksman/update.sh | 2 +- pkgs/development/tools/omnisharp-roslyn/updater.sh | 4 +- pkgs/games/osu-lazer/update.sh | 4 +- pkgs/games/space-station-14-launcher/update.sh | 4 +- pkgs/servers/jackett/updater.sh | 4 +- pkgs/servers/jellyfin/update.sh | 6 +- pkgs/servers/nosql/eventstore/updater.sh | 4 +- pkgs/tools/X11/opentabletdriver/update.sh | 4 +- .../backup/discordchatexporter-cli/updater.sh | 4 +- pkgs/tools/misc/depotdownloader/update.sh | 3 +- 18 files changed, 89 insertions(+), 43 deletions(-) create mode 100644 maintainers/scripts/update-dotnet-lockfiles.nix diff --git a/doc/languages-frameworks/dotnet.section.md b/doc/languages-frameworks/dotnet.section.md index 5b94c3d7dc2..246490d67d2 100644 --- a/doc/languages-frameworks/dotnet.section.md +++ b/doc/languages-frameworks/dotnet.section.md @@ -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 diff --git a/maintainers/scripts/update-dotnet-lockfiles.nix b/maintainers/scripts/update-dotnet-lockfiles.nix new file mode 100644 index 00000000000..22ceff1ffa9 --- /dev/null +++ b/maintainers/scripts/update-dotnet-lockfiles.nix @@ -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; +} diff --git a/pkgs/applications/blockchains/nbxplorer/util/update-common.sh b/pkgs/applications/blockchains/nbxplorer/util/update-common.sh index 6346c2fa9f4..1354588a754 100755 --- a/pkgs/applications/blockchains/nbxplorer/util/update-common.sh +++ b/pkgs/applications/blockchains/nbxplorer/util/update-common.sh @@ -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) diff --git a/pkgs/applications/emulators/ryujinx/updater.sh b/pkgs/applications/emulators/ryujinx/updater.sh index 5827271138d..3aae3943aa5 100755 --- a/pkgs/applications/emulators/ryujinx/updater.sh +++ b/pkgs/applications/emulators/ryujinx/updater.sh @@ -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) diff --git a/pkgs/applications/graphics/pinta/default.nix b/pkgs/applications/graphics/pinta/default.nix index f38a9a9dcfe..2f523813a24 100644 --- a/pkgs/applications/graphics/pinta/default.nix +++ b/pkgs/applications/graphics/pinta/default.nix @@ -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; diff --git a/pkgs/applications/misc/ArchiSteamFarm/update.sh b/pkgs/applications/misc/ArchiSteamFarm/update.sh index 857474c483e..9d034a60065 100755 --- a/pkgs/applications/misc/ArchiSteamFarm/update.sh +++ b/pkgs/applications/misc/ArchiSteamFarm/update.sh @@ -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" diff --git a/pkgs/applications/version-management/git-credential-manager/update.sh b/pkgs/applications/version-management/git-credential-manager/update.sh index e1a03f296f1..a24eed3f271 100755 --- a/pkgs/applications/version-management/git-credential-manager/update.sh +++ b/pkgs/applications/version-management/git-credential-manager/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) diff --git a/pkgs/development/tools/continuous-integration/github-runner/update.sh b/pkgs/development/tools/continuous-integration/github-runner/update.sh index 3ebbfa9f507..26b54bf6ac0 100755 --- a/pkgs/development/tools/continuous-integration/github-runner/update.sh +++ b/pkgs/development/tools/continuous-integration/github-runner/update.sh @@ -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) diff --git a/pkgs/development/tools/marksman/update.sh b/pkgs/development/tools/marksman/update.sh index 0f4a416e7df..b17097e683c 100755 --- a/pkgs/development/tools/marksman/update.sh +++ b/pkgs/development/tools/marksman/update.sh @@ -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) diff --git a/pkgs/development/tools/omnisharp-roslyn/updater.sh b/pkgs/development/tools/omnisharp-roslyn/updater.sh index 1007c77fe2f..10868fbd099 100755 --- a/pkgs/development/tools/omnisharp-roslyn/updater.sh +++ b/pkgs/development/tools/omnisharp-roslyn/updater.sh @@ -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) diff --git a/pkgs/games/osu-lazer/update.sh b/pkgs/games/osu-lazer/update.sh index 1ecca32d54a..8e9849db1e1 100755 --- a/pkgs/games/osu-lazer/update.sh +++ b/pkgs/games/osu-lazer/update.sh @@ -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) diff --git a/pkgs/games/space-station-14-launcher/update.sh b/pkgs/games/space-station-14-launcher/update.sh index 8cfab508b0c..6e8b337d384 100755 --- a/pkgs/games/space-station-14-launcher/update.sh +++ b/pkgs/games/space-station-14-launcher/update.sh @@ -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) diff --git a/pkgs/servers/jackett/updater.sh b/pkgs/servers/jackett/updater.sh index d39452d2afc..1714565edd4 100755 --- a/pkgs/servers/jackett/updater.sh +++ b/pkgs/servers/jackett/updater.sh @@ -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) diff --git a/pkgs/servers/jellyfin/update.sh b/pkgs/servers/jellyfin/update.sh index bbced42742c..918b68940ca 100755 --- a/pkgs/servers/jellyfin/update.sh +++ b/pkgs/servers/jellyfin/update.sh @@ -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) diff --git a/pkgs/servers/nosql/eventstore/updater.sh b/pkgs/servers/nosql/eventstore/updater.sh index 85be2c8aa8c..77c2f733e5f 100755 --- a/pkgs/servers/nosql/eventstore/updater.sh +++ b/pkgs/servers/nosql/eventstore/updater.sh @@ -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) diff --git a/pkgs/tools/X11/opentabletdriver/update.sh b/pkgs/tools/X11/opentabletdriver/update.sh index 322350415e7..665f5ac526a 100755 --- a/pkgs/tools/X11/opentabletdriver/update.sh +++ b/pkgs/tools/X11/opentabletdriver/update.sh @@ -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) diff --git a/pkgs/tools/backup/discordchatexporter-cli/updater.sh b/pkgs/tools/backup/discordchatexporter-cli/updater.sh index 6628cceaa95..cc81761b93d 100755 --- a/pkgs/tools/backup/discordchatexporter-cli/updater.sh +++ b/pkgs/tools/backup/discordchatexporter-cli/updater.sh @@ -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) diff --git a/pkgs/tools/misc/depotdownloader/update.sh b/pkgs/tools/misc/depotdownloader/update.sh index 9e6efdfceaa..2adbb6037a9 100755 --- a/pkgs/tools/misc/depotdownloader/update.sh +++ b/pkgs/tools/misc/depotdownloader/update.sh @@ -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) -- cgit 1.4.1