]> git.immae.eu Git - perso/Immae/Config/Nix.git/blame - scripts/fetch_version
Reorganize files
[perso/Immae/Config/Nix.git] / scripts / fetch_version
CommitLineData
177da38b
IB
1#!/bin/bash
2
3usage() {
4 echo "$0 file.json"
6e75ec80 5 echo "$0 [-n|--name name] [-b|--branch branch_or_rev] [-f|--file out_file] [-h|--help] (-u|--url) url"
177da38b
IB
6 exit
7}
8
9branch="master"
10while [[ $# -gt 0 ]]; do
11 a="$1"
12 shift
13 case "$a" in
14 *.json)
15 file=$a
16 content=$(cat $a)
17 name="$(echo "$content" | jq -r ".meta.name")"
18 url="$(echo "$content" | jq -r ".meta.url")"
19 branch="$(echo "$content" | jq -r ".meta.branch")"
20 ;;
21 -n|--name)
22 name=$1
23 shift
24 ;;
25 -u|--url)
26 url=$1
27 shift
28 ;;
29 -b|--branch)
30 branch=$1
31 shift
32 ;;
6b53d116
IB
33 -f|--file)
34 file=$1
35 shift
36 ;;
177da38b
IB
37 -h|--help)
38 usage
39 ;;
40 esac
41done
42if [ -z "$url" ]; then
43 usage
44fi
45if [ -z "$name" ]; then
46 name=$(echo "$url" | cut -d"/" -f5)
47fi
48if [ -z "$file" ]; then
49 file=$name.json
50fi
51
52# function fetch_ledger () {
53# pushd $HOME/projets/ledger >/dev/null 2>/dev/null
54# git fetch origin
55# tag="$(git describe origin/next | sed -e "s/^v//")"
56# rev="$(git show-ref -s refs/remotes/origin/next)"
57# sha="$(nix-prefetch-url --unpack file://<(git archive --format=tar.gz HEAD) 2>/dev/null)"
58# popd >/dev/null 2>/dev/null
59# }
60
61# awk_describe='BEGIN {
62# FS = "[ /^]+"
63# while ("git ls-remote " ARGV[1] "| sort -Vk2" | getline) {
64# if (!sha)
65# sha = substr($0, 1, 7)
66# tag = $3
67# }
68# while ("curl -s " ARGV[1] "/releases/tag/" tag | getline)
69# if ($3 ~ "commits")
70# com = $2
71# printf com ? "%s-%s-g%s\n" : "%s\n", tag, com, sha
72# }'
73
6e75ec80
IB
74function get_ref () {
75 case "$1" in
76 refs/*)
77 echo "$1"
78 ;;
79 *)
80 echo "refs/heads/$1"
81 ;;
82 esac
83}
84
85function get_name () {
86 branch="$1"
87 rev="$2"
88 minirev=${rev:0:7}
89
90 case "$branch" in
91 refs/tags/*)
92 b="${branch#refs/tags/}"
93 echo "${b//\//-}"
94 ;;
95 refs/heads/*)
96 b=${branch#refs/heads/}
97 echo "$minirev-${b//\//-}"
98 ;;
99 refs/*)
100 b=${branch#refs/}
101 echo "$minirev-${b//\//-}"
102 ;;
103 *)
104 echo "$minirev-${branch//\//-}"
105 ;;
106 esac
107}
108
177da38b 109function fetch_github () {
6e75ec80
IB
110 rev="$(git ls-remote --refs $url $(get_ref $branch) | head -n1 | cut -f1)"
111 sha="$(nix-prefetch-url --unpack $url/archive/$rev.tar.gz)"
177da38b
IB
112 # Différent du git-describe et github-spécifique
113 #tag=$(echo "$awk_describe" | awk -f - $url | sed -e "s/^v//")
6e75ec80 114 tag=$(get_name $branch $rev)
177da38b
IB
115}
116
6b53d116 117function fetch_other () {
6e75ec80
IB
118 rev="$(git ls-remote --refs $url $(get_ref $branch) | head -n1 | cut -f1)"
119 sha="$(nix-prefetch-git --url $url --rev $(get_ref $branch) | jq -r '.sha256')"
120 tag=$(get_name $branch $rev)
6b53d116 121}
177da38b 122
6b53d116
IB
123case "$url" in
124 https://*github.com/*)
125 fetch_github 2>/dev/null
126 owner=$(echo "$url" | cut -d"/" -f4)
127 repo=$(echo "$url" | cut -d"/" -f5)
177da38b 128
6b53d116
IB
129 F='{
130 "tag": $tag,
131 "meta": {
132 "name": $name,
133 "url": $url,
134 "branch": $branch
135 },
136 "github": {
137 "owner": $owner,
138 "repo": $repo,
139 "rev": $rev,
140 "sha256": $sha,
141 "fetchSubmodules": true
142 }
143 }'
144 ;;
145 *)
146 fetch_other 2>/dev/null
147 F='{
148 "tag": $tag,
149 "meta": {
150 "name": $name,
151 "url": $url,
152 "branch": $branch
153 },
154 "git": {
155 "url": $url,
156 "rev": $rev,
157 "sha256": $sha,
158 "fetchSubmodules": true
159 }
160 }'
161 ;;
162esac
177da38b
IB
163
164jq -n \
165 --arg name "$name" \
166 --arg owner "$owner" \
167 --arg repo "$repo" \
168 --arg tag "$tag" \
169 --arg rev "$rev" \
170 --arg url "$url" \
171 --arg branch "$branch" \
172 --arg sha "$sha" \
173 "$F" > $file