summarylogtreecommitdiffstats
path: root/generate-pkgbuild.sh
blob: 25188eec6007ace0fa271a8628f467b76db42e1a (plain)
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/bash

set -euo pipefail

usage() {
    echo "Usage: $0 [{stable|regular|rapid}]" >&2
}

get_channel() {
  echo ${PWD##*/} | grep -Eo '\-(stable|regular|rapid)-' | tr -d '\-'
}

get_major_version() {
    curl https://cloud.google.com/feeds/gke-stable-channel-release-notes.xml \
        | sed 's/xmlns=".*"//g' \
        | xmllint --nocdata --xpath '(/feed/entry)[1]/content/text()' - \
        | rg -o 'v?(\d\.\d+)\.\d+-gke\.\d+' -r '$1' \
        | head -n 1
}

if [[ $# -eq 0 ]];
then
  readonly channel=$(get_channel)
  echo "Channel is not specified, automatically detected: $channel" >&2
  read -p "Is it correct? y/n " yn
  case $yn in
    [Yy]* ) set -- "$channel" ;;
    * ) usage; exit 0;;
  esac
else
  readonly channel=$1
fi

case $1 in
    -h)
        usage
        exit 0
        ;;
    stable | regular | rapid)
        readonly major_version=$(get_major_version $1)
        ;;
    *)
        usage
        exit 1
        ;;
esac


readonly pkgname=kubectl

readonly version=$(curl -sSL "https://gcsweb.k8s.io/gcs/kubernetes-release/release/stable-$major_version.txt")

readonly arches=$( \
    curl -sSL https://gcsweb.k8s.io/gcs/kubernetes-release/release/$version/bin/linux/ \
    | rg -o --pcre2 '(?<=/icons/dir.png"> )(\w+)' \
    | sed -r "/386|amd64|arm|arm64/!d; \
              s/386/i686/; \
              s/amd64/x86_64/; \
              s/\<arm\>/armv5 armv6h armv7h/; \
              s/arm64/aarch64/" \
    | tr '\n' ' ' \
)

cat <<EOF
# Maintainer: German Lashevich <german.lashevich@gmail.com>

pkgname=$pkgname-gke-$channel-bin
pkgver=$version
pkgrel=1
pkgdesc='Kubernetes.io client binary, compatible with the GKE version from the $channel channel'
provides=("$pkgname=$version")
conflicts=($pkgname $pkgname-bin)
arch=($arches)
url="https://github.com/kubernetes/kubectl"
license=('Apache-2.0')

package() {
  install -Dm755 "\$srcdir/$pkgname-$version" "\$pkgdir/usr/bin/kubectl"
}

EOF

for arch in $arches; do
    case $arch in
        i686)
            _arch=386
            ;;
        x86_64)
            _arch=amd64
            ;;
        arm*)
            _arch=arm
            ;;
        aarch64)
            _arch=arm64
            ;;
        *)
            echo "Unsupported architecture: $arch" >&2
            exit 1
            ;;
    esac

    base_url="https://storage.googleapis.com/kubernetes-release/release/$version/bin/linux/$_arch"

    echo "source_$arch=('$pkgname-$version::$base_url/kubectl')"
    echo "sha256sums_$arch=('$(curl -sSL $base_url/kubectl.sha256)')"
done