about summary refs log tree commit diff stats
path: root/pkgs/update_pkgs.sh
blob: 3e33b720e49d05c1c8cb06f05f63c0c457249eca (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env sh

die() {
    printf "\033[31;1mError: \033[0m%s\n" "$1"
    exit 1
}

cd "$(dirname "$0")" || die "Bug: run with the wrong first arg: '$0'!"
cd ./by-name || die "(BUG): The directory './by-name' does not exist?"

# First check if all the update scripts conform to the standard
files_with_update="$(mktemp)"
trap 'rm "$files_with_update"' EXIT

fd '^update.sh$' . --type file --extension sh --max-depth 3 | while read -r file; do
    grep -q "nix flake update" "$file" && echo "$file" >>"$files_with_update"
done

if [ "$(wc -l <"$files_with_update")" != 0 ]; then
    die "Some packages seem to try to update their flake with 'nix flake update'. This is redundant. These Packages are: $(echo && cat "$files_with_update")"
fi

# Than actually perform the update
fd . --type directory --max-depth 1 | while read -r shard; do
    cd "$shard" || die "(BUG): Shard '$shard' does not exist?"

    fd . --type directory --max-depth 1 | while read -r package; do
        cd "$package" || die "(BUG): Package '$package' does not exist?"

        if [ -x update.sh ]; then
            printf "  \033[34;1m> \033[0m\033[34;1m%s\033[0m\n" "Running '${shard}${package}update.sh' .."

            [ -f flake.nix ] && nix flake update

            direnv allow
            eval "$(direnv export bash 2>/dev/null)"
            ./update.sh "$@"
        fi
        cd - >/dev/null || die "Bug: Last dir does not exist"
    done
    cd - >/dev/null || die "Bug: Last dir does not exist"
done

# vim: ft=sh