aboutsummaryrefslogblamecommitdiff
path: root/fetch_version
blob: cbbeb64468ea2e7fad064cffce9480e190593705 (plain) (tree)
1
2
3
4
5



                     
                                                                                                 













                                                        
           












                



              












































                                                                                             




                                                                                 
 




                                        
 

































                               










                          
#!/bin/bash

usage() {
  echo "$0 file.json"
  echo "$0 [-n|--name name] [-b|--branch branch] [-f|--file out_file] [-h|--help] (-u|--url) url"
  exit
}

branch="master"
while [[ $# -gt 0 ]]; do
  a="$1"
  shift
  case "$a" in
    *.json)
      file=$a
      content=$(cat $a)
      name="$(echo "$content" | jq -r ".meta.name")"
      url="$(echo "$content" | jq -r ".meta.url")"
      branch="$(echo "$content" | jq -r ".meta.branch")"
      break
      ;;
    -n|--name)
      name=$1
      shift
      ;;
    -u|--url)
      url=$1
      shift
      ;;
    -b|--branch)
      branch=$1
      shift
      ;;
    -f|--file)
      file=$1
      shift
      ;;
    -h|--help)
      usage
      ;;
  esac
done
if [ -z "$url" ]; then
  usage
fi
if [ -z "$name" ]; then
  name=$(echo "$url" | cut -d"/" -f5)
fi
if [ -z "$file" ]; then
  file=$name.json
fi

# function fetch_ledger () {
#   pushd $HOME/projets/ledger >/dev/null 2>/dev/null
#   git fetch origin
#   tag="$(git describe origin/next | sed -e "s/^v//")"
#   rev="$(git show-ref -s refs/remotes/origin/next)"
#   sha="$(nix-prefetch-url --unpack file://<(git archive --format=tar.gz HEAD) 2>/dev/null)"
#   popd >/dev/null 2>/dev/null
# }

# awk_describe='BEGIN {
#   FS = "[ /^]+"
#   while ("git ls-remote " ARGV[1] "| sort -Vk2" | getline) {
#     if (!sha)
#       sha = substr($0, 1, 7)
#     tag = $3
#   }
#   while ("curl -s " ARGV[1] "/releases/tag/" tag | getline)
#     if ($3 ~ "commits")
#       com = $2
#   printf com ? "%s-%s-g%s\n" : "%s\n", tag, com, sha
# }'

function fetch_github () {
  rev="$(git ls-remote --refs $url refs/heads/$branch | head -n1 | cut -f1)"
  sha="$(nix-prefetch-url --unpack $url/archive/$branch.tar.gz)"
  # Différent du git-describe et github-spécifique
  #tag=$(echo "$awk_describe" | awk -f - $url | sed -e "s/^v//")
  tag=${rev:0:7}-$branch
}

function fetch_other () {
  rev="$(git ls-remote --refs $url refs/heads/$branch | head -n1 | cut -f1)"
  sha="$(nix-prefetch-git --url $url --rev refs/heads/$branch | jq -r '.sha256')"
  tag=${rev:0:7}-$branch
}

case "$url" in
  https://*github.com/*)
    fetch_github 2>/dev/null
    owner=$(echo "$url" | cut -d"/" -f4)
    repo=$(echo "$url" | cut -d"/" -f5)

    F='{
      "tag": $tag,
      "meta": {
        "name": $name,
        "url": $url,
        "branch": $branch
      },
      "github": {
        "owner": $owner,
        "repo": $repo,
        "rev": $rev,
        "sha256": $sha,
        "fetchSubmodules": true
      }
    }'
    ;;
  *)
    fetch_other 2>/dev/null
    F='{
      "tag": $tag,
      "meta": {
        "name": $name,
        "url": $url,
        "branch": $branch
      },
      "git": {
        "url": $url,
        "rev": $rev,
        "sha256": $sha,
        "fetchSubmodules": true
      }
    }'
    ;;
esac

jq -n \
  --arg name "$name" \
  --arg owner "$owner" \
  --arg repo "$repo" \
  --arg tag "$tag" \
  --arg rev "$rev" \
  --arg url "$url" \
  --arg branch "$branch" \
  --arg sha "$sha" \
  "$F" > $file