|
1 | 1 | #!/usr/bin/env nix-shell |
2 | | -#!nix-shell -i bash -p jq |
| 2 | +#!nix-shell -i bash -p jq gnupg |
3 | 3 | #shellcheck shell=bash |
4 | 4 |
|
5 | | -CURRENT_HASH="" |
6 | | - |
7 | | -print_hash() { |
8 | | - OS="$1" |
9 | | - CHANNEL="$2" |
10 | | - ARCH="$3" |
11 | | - VERSION="$4" |
12 | | - |
13 | | - if [[ "$OS" == "linux" ]]; then |
14 | | - if [[ "$ARCH" == "x86_64" ]]; then |
15 | | - EXT="x64.tar.gz" |
16 | | - else |
17 | | - EXT="arm64.tar.gz" |
18 | | - fi |
19 | | - URL="https://downloads.1password.com/${OS}/tar/${CHANNEL}/${ARCH}/1password-${VERSION}.${EXT}" |
| 5 | +set -euo pipefail |
| 6 | + |
| 7 | +cd -- "$(dirname "${BASH_SOURCE[0]}")" |
| 8 | + |
| 9 | +mk_url() { |
| 10 | + local \ |
| 11 | + base_url="https://downloads.1password.com" \ |
| 12 | + os="$1" \ |
| 13 | + channel="$2" \ |
| 14 | + arch="$3" \ |
| 15 | + version="$4" |
| 16 | + |
| 17 | + if [[ ${os} == "linux" ]]; then |
| 18 | + if [[ ${arch} == "x86_64" ]]; then |
| 19 | + ext="x64.tar.gz" |
20 | 20 | else |
21 | | - EXT="$ARCH.zip" |
22 | | - URL="https://downloads.1password.com/${OS}/1Password-${VERSION}-${EXT}" |
| 21 | + ext="arm64.tar.gz" |
23 | 22 | fi |
| 23 | + url="${base_url}/${os}/tar/${channel}/${arch}/1password-${version}.${ext}" |
| 24 | + else |
| 25 | + ext="${arch}.zip" |
| 26 | + url="${base_url}/mac/1Password-${version}-${ext}" |
| 27 | + fi |
| 28 | + |
| 29 | + echo "${url}" |
| 30 | +} |
24 | 31 |
|
25 | | - CURRENT_HASH=$(nix store prefetch-file "$URL" --json | jq -r '.hash') |
| 32 | +cleanup() { |
| 33 | + if [[ -f ${GPG_KEYRING-} ]]; then |
| 34 | + rm "${GPG_KEYRING}" |
| 35 | + fi |
26 | 36 |
|
27 | | - echo "$CHANNEL ${ARCH}-${OS}: $CURRENT_HASH" |
| 37 | + if [[ -f ${JSON_HEAP-} ]]; then |
| 38 | + rm "${JSON_HEAP}" |
| 39 | + fi |
28 | 40 | } |
29 | 41 |
|
30 | | -if [[ -z "$STABLE_VER" && -n "$1" ]]; then |
31 | | - STABLE_VER="$1" |
32 | | -fi |
33 | | - |
34 | | -if [[ -z "$BETA_VER" && -n "$2" ]]; then |
35 | | - BETA_VER="$2" |
36 | | -fi |
37 | | - |
38 | | -if [[ "${BETA_VER: -4}" != "BETA" ]]; then |
39 | | - BETA_VER="$BETA_VER.BETA" |
40 | | -fi |
41 | | - |
42 | | -if [[ -z "$STABLE_VER" ]]; then |
43 | | - echo "No 'STABLE_VER' environment variable provided, skipping" |
44 | | -else |
45 | | - print_hash "linux" "stable" "x86_64" "$STABLE_VER" |
46 | | - print_hash "linux" "stable" "aarch64" "$STABLE_VER" |
47 | | - print_hash "mac" "stable" "x86_64" "$STABLE_VER" |
48 | | - print_hash "mac" "stable" "aarch64" "$STABLE_VER" |
49 | | -fi |
50 | | - |
51 | | -if [[ -z "$BETA_VER" ]]; then |
52 | | - echo "No 'BETA_VER' environment variable provided, skipping" |
53 | | -else |
54 | | - print_hash "linux" "beta" "x86_64" "$BETA_VER" |
55 | | - print_hash "linux" "beta" "aarch64" "$BETA_VER" |
56 | | - print_hash "mac" "beta" "x86_64" "$BETA_VER" |
57 | | - print_hash "mac" "beta" "aarch64" "$BETA_VER" |
58 | | -fi |
| 42 | +trap cleanup EXIT |
| 43 | + |
| 44 | +# Get channel versions from versions.json |
| 45 | +declare -A version=( |
| 46 | + ["stable"]=$(jq -r '.stable.version' versions.json) |
| 47 | + ["beta"]=$(jq -r '.beta.version' versions.json) |
| 48 | +) |
| 49 | + |
| 50 | +# |
| 51 | +GPG_KEYRING=$(mktemp -t 1password.kbx.XXXXXX) |
| 52 | +gpg --no-default-keyring --keyring "${GPG_KEYRING}" \ |
| 53 | + --keyserver keyserver.ubuntu.com \ |
| 54 | + --receive-keys 3FEF9748469ADBE15DA7CA80AC2D62742012EA22 |
| 55 | + |
| 56 | +JSON_HEAP=$(mktemp -t 1password-gui.jsonheap.XXXXXX) |
| 57 | +for channel in stable beta; do |
| 58 | + for os in linux darwin; do |
| 59 | + for arch in x86_64 aarch64; do |
| 60 | + url=$(mk_url ${os} ${channel} ${arch} "${version[${channel}]}") |
| 61 | + nix store prefetch-file --json "${url}" | jq " |
| 62 | + { |
| 63 | + \"${channel}\": { |
| 64 | + \"${arch}-${os}\": { |
| 65 | + \"url\": \"${url}\", |
| 66 | + \"hash\": .hash, |
| 67 | + \"storePath\": .storePath |
| 68 | + } |
| 69 | + } |
| 70 | + }" >> "${JSON_HEAP}" |
| 71 | + |
| 72 | + # For some reason 1Password PGP signs only Linux binaries. |
| 73 | + if [[ ${os} == "linux" ]]; then |
| 74 | + gpgv --keyring "${GPG_KEYRING}" \ |
| 75 | + $(nix store prefetch-file --json "${url}.sig" | jq -r .storePath) \ |
| 76 | + $(jq -r --slurp ".[-1].[].[].storePath" "${JSON_HEAP}") |
| 77 | + fi |
| 78 | + done |
| 79 | + done |
| 80 | +done |
| 81 | + |
| 82 | +# Combine heap of hash+url objects into a single JSON object. |
| 83 | +jq --slurp 'reduce .[] as $x ({}; . * $x) | del (.[].[].storePath)' "${JSON_HEAP}" > sources.json |
0 commit comments