python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / pkgs / common-updater / unstable-updater.nix
blobf8944222a8d586310022f9ccd9bb799b48be159c
1 { lib
2 , writeShellScript
3 , coreutils
4 , git
5 , nix
6 , common-updater-scripts
7 }:
9 # This is an updater for unstable packages that should always use the latest
10 # commit.
11 { url ? null # The git url, if empty it will be set to src.gitRepoUrl
12 , branch ? null
13 , stableVersion ? false # Use version format according to RFC 107 (i.e. LAST_TAG+date=YYYY-MM-DD)
14 , tagPrefix ? "" # strip this prefix from a tag name when using stable version
17 let
18   updateScript = writeShellScript "unstable-update-script.sh" ''
19     set -ex
21     url=""
22     branch=""
23     use_stable_version=""
24     tag_prefix=""
26     while (( $# > 0 )); do
27         flag="$1"
28         shift 1
29         case "$flag" in
30           --url=*)
31             url="''${flag#*=}"
32             ;;
33           --branch=*)
34             branch="''${flag#*=}"
35             ;;
36           --use-stable-version)
37             use_stable_version=1
38             ;;
39           --tag-prefix=*)
40             tag_prefix="''${flag#*=}"
41             ;;
42           *)
43             echo "$0: unknown option ‘''${flag}’"
44             exit 1
45             ;;
46         esac
47     done
49     # By default we set url to src.gitRepoUrl
50     if [[ -z "$url" ]]; then
51         url="$(${nix}/bin/nix-instantiate $systemArg --eval -E \
52                    "with import ./. {}; $UPDATE_NIX_ATTR_PATH.src.gitRepoUrl" \
53             | tr -d '"')"
54     fi
56     # Get info about HEAD from a shallow git clone
57     tmpdir="$(${coreutils}/bin/mktemp -d)"
59     cloneArgs=(
60       --bare
61       --depth=1
62     )
64     if [[ -n "$branch" ]]; then
65         cloneArgs+=(--branch="$branch")
66     fi
68     ${git}/bin/git clone "''${cloneArgs[@]}" "$url" "$tmpdir"
70     pushd "$tmpdir"
71     commit_date="$(${git}/bin/git show -s --pretty='format:%cs')"
72     commit_sha="$(${git}/bin/git show -s --pretty='format:%H')"
73     if [[ -z "$use_stable_version" ]]; then
74         new_version="unstable-$commit_date"
75     else
76         depth=100
77         while (( $depth < 10000 )); do
78             last_tag="$(${git}/bin/git describe --tags --abbrev=0 2> /dev/null || true)"
79             if [[ -n "$last_tag" ]]; then
80                 break
81             fi
82             ${git}/bin/git fetch --depth="$depth" --tags
83             depth=$(( $depth * 2 ))
84         done
85         if [[ -z "$last_tag" ]]; then
86             echo "Cound not found a tag within last 10000 commits" > /dev/stderr
87             exit 1
88         fi
89         if [[ -n "$tag_prefix" ]]; then
90           last_tag="''${last_tag#$tag_prefix}"
91         fi
92         new_version="$last_tag+date=$commit_date"
93     fi
94     popd
95     # ${coreutils}/bin/rm -rf "$tmpdir"
97     # update the nix expression
98     ${common-updater-scripts}/bin/update-source-version \
99         "$UPDATE_NIX_ATTR_PATH" \
100         "$new_version" \
101         --rev="$commit_sha"
102   '';
104 in [
105   updateScript
106   "--url=${builtins.toString url}"
107 ] ++ lib.optionals (branch != null) [
108   "--branch=${branch}"
109 ] ++ lib.optionals stableVersion [
110   "--use-stable-version"
111   "--tag-prefix=${tagPrefix}"