From 3f09e2e0d115ab185bc0368ebf96801eeaa2f7b9 Mon Sep 17 00:00:00 2001 From: Yury Shvedov Date: Fri, 9 Feb 2024 10:56:16 +0300 Subject: [PATCH] [update/flake] Fix flake.lock update periodicity Check if exe binary was update first, then update all flake.lock only when exe was updated. Change-Id: I3ae7e7453cfe4ea78d1c4e598cc4a3370cd12f1d --- .github/workflows/update_packages.sh | 2 +- utility/generate_packages.sh | 27 ++++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update_packages.sh b/.github/workflows/update_packages.sh index 5234544..fa3f1ce 100644 --- a/.github/workflows/update_packages.sh +++ b/.github/workflows/update_packages.sh @@ -16,8 +16,8 @@ case $OS in "Arch Linux") echo "Arch Linux" pacman -S --noconfirm git sudo base-devel jq nix - sh ./utility/generate_packages.sh git config --global --add safe.directory "*" + sh ./utility/generate_packages.sh ;; *) echo "Operating system is not recognized." diff --git a/utility/generate_packages.sh b/utility/generate_packages.sh index a92e0b5..0f68a46 100644 --- a/utility/generate_packages.sh +++ b/utility/generate_packages.sh @@ -70,10 +70,35 @@ update_pkbuild() { sed -i "s#%exe_sha256%#$exe_sha256#g" ./PKGBUILD } +is_nix_version_2_19() { + local version re major minor + + version="$(nix --version | awk '{print $3}')" + re='([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)' + if [[ $version =~ $re ]]; then + major="${BASH_REMATCH[1]}" + minor="${BASH_REMATCH[2]}" + if [ "$major" -gt 2 ] || [ "$minor" -ge 19 ]; then + return 0 + fi + fi + return 1 +} + update_flake() { + local nixcmd="nix --extra-experimental-features nix-command --extra-experimental-features flakes" sed -i 's#\(ymExe\.url\s*=\s*\).*;#\1'"$exe_link"';#' ./flake.nix if check_dep nix; then - nix --extra-experimental-features 'nix-command flakes' flake update + # Starting from 2.19 the interface of `nix flake` command changed. See + # https://nixos.org/manual/nix/stable/release-notes/rl-2.19 + if is_nix_version_2_19; then + $nixcmd flake update ymExe + else + $nixcmd flake lock --update-input ymExe + fi + if [[ $(git status --porcelain -- flake.lock) ]]; then + $nixcmd flake update + fi else echo "flake.nix was updated, but nix is not installed to update flake.lock" fi