build-labels 0.0.74 → 0.0.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8e07ba52e792206553d99181964dcba23b52eb2f2b79e76a4ba3cab25eea5c85
4
- data.tar.gz: b460ec4c2511d350b0280ccbd00fa2f513f862008f200a1ce0955c13ec45ddf1
3
+ metadata.gz: 184e1d17e16a503f83dab878c391b8e8571c2ac71285ef697cebb75936dd556c
4
+ data.tar.gz: 4e9c5be493bbfda785871547691f8aa6110842917aa8277056bc671be6dd834b
5
5
  SHA512:
6
- metadata.gz: 4b413f2d86c5572cf6d26a3a8e61e692f68d8c6d784c6d3e6abdcffc2e78cd7d39e987ba6edfca6d8bc123a509b933a8facc94a5ba8c70e3ebcd7b77e0ce88f0
7
- data.tar.gz: 06deac4c012f1da1e4f2ddf5d9a9b454666f87b15c3c4a9568093c61191d9322538fa36bac7d7c58cc0288488962424d1ae0bf7ea5c33a292d8f2feee37db5df
6
+ metadata.gz: ad03e9efa477f1772d0c62e293f7775087620c53ab126eff6d833332f4a4d4cc1eef606968cf4035bac9fd2d1d56dfc2e820ed131961bdf2cac62194daca5d23
7
+ data.tar.gz: 05da2dd8fec543a246af8aaf0cca3f6b6450d68fecc0d87703d310c6e5aeedc8a5aa719d5c666c03ba715581b3b075d228e0dce8d9fe288bf21458ed8d0b6d04
@@ -6,16 +6,121 @@ exec "sh", "-eux", "-c", shell, "sh", *ARGV
6
6
  __END__
7
7
  set -eux
8
8
 
9
- # Dockerfile:
10
- #FROM ruby:3.4.4-slim-bookworm AS base
11
- #FROM ruby:3.2.10-alpine AS base
12
- ## RUN gem install build-labels:0.0.71
13
- #RUN install-docker-static
9
+ docker_major=""
10
+ docker_version_prefix=""
11
+
12
+ usage() {
13
+ cat <<'USAGE'
14
+ Usage: install-docker-static [VERSION_PREFIX] [--docker-major N]
15
+
16
+ Options:
17
+ VERSION_PREFIX Install latest Docker version matching prefix
18
+ (e.g., 28, 28.5, 28.5.2)
19
+ -m, --major, --docker-major N Install latest Docker version within major N
20
+ -h, --help Show this help
21
+ USAGE
22
+ }
23
+
24
+ parse_args() {
25
+ while [ "$#" -gt 0 ]; do
26
+ case "$1" in
27
+ -m|--major|--docker-major)
28
+ if [ -z "${2:-}" ]; then
29
+ echo "Missing value for $1" >&2
30
+ usage
31
+ exit 1
32
+ fi
33
+ docker_major="$2"
34
+ shift 2
35
+ ;;
36
+ -h|--help)
37
+ usage
38
+ exit 0
39
+ ;;
40
+ *)
41
+ if [ -z "$docker_version_prefix" ]; then
42
+ docker_version_prefix="$1"
43
+ shift
44
+ else
45
+ echo "Unexpected argument: $1" >&2
46
+ usage
47
+ exit 1
48
+ fi
49
+ ;;
50
+ esac
51
+ done
52
+
53
+ if [ -n "$docker_version_prefix" ] && [ -n "$docker_major" ]; then
54
+ echo "Specify either VERSION_PREFIX or --docker-major, not both." >&2
55
+ exit 1
56
+ fi
57
+
58
+ if [ -n "$docker_major" ]; then
59
+ case "$docker_major" in
60
+ *[!0-9]*)
61
+ echo "Invalid major version: $docker_major" >&2
62
+ exit 1
63
+ ;;
64
+ esac
65
+ fi
66
+
67
+ if [ -n "$docker_version_prefix" ]; then
68
+ case "$docker_version_prefix" in
69
+ *[!0-9.]*|*.*.*.*)
70
+ echo "Invalid version prefix: $docker_version_prefix" >&2
71
+ exit 1
72
+ ;;
73
+ esac
74
+ fi
75
+ }
76
+
77
+ detect_arch() {
78
+ arch="$(uname -m)"
79
+ case "$arch" in
80
+ x86_64|amd64)
81
+ docker_arch="x86_64"
82
+ buildx_arch="amd64"
83
+ ;;
84
+ aarch64|arm64)
85
+ docker_arch="aarch64"
86
+ buildx_arch="arm64"
87
+ ;;
88
+ armv7l|armv7)
89
+ docker_arch="armhf"
90
+ buildx_arch="arm-v7"
91
+ ;;
92
+ armv6l|armv6)
93
+ docker_arch="armel"
94
+ buildx_arch="arm-v6"
95
+ ;;
96
+ ppc64le)
97
+ docker_arch="ppc64le"
98
+ buildx_arch="ppc64le"
99
+ ;;
100
+ s390x)
101
+ docker_arch="s390x"
102
+ buildx_arch="s390x"
103
+ ;;
104
+ *)
105
+ echo "Unsupported architecture: $arch" >&2
106
+ exit 1
107
+ ;;
108
+ esac
109
+ }
110
+
111
+ # Dockerfile example:
112
+ # # FROM ruby:3.4.4-slim-bookworm AS base
113
+ # FROM ruby:3.2.10-alpine AS base
114
+ # # RUN gem install build-labels:0.0.71
115
+ # RUN install-docker-static
116
+ # # Or pin to latest Docker within a major (or prefix):
117
+ # # RUN install-docker-static 28
118
+ # # RUN install-docker-static 28.5
14
119
  #
15
- #RUN docker -v
16
- ## docker build --network=host --progress=plain .
120
+ # RUN docker -v
121
+ # # docker build --network=host --progress=plain .
17
122
 
18
- # TODO:
123
+ # TODO: look for simpler script
19
124
  # RUN apk add --no-cache ca-certificates curl tar \
20
125
  # && arch="$(uname -m)" \
21
126
  # && case "$arch" in x86_64|amd64) a=x86_64;; aarch64|arm64) a=aarch64;; *) exit 1;; esac \
@@ -26,28 +131,36 @@ set -eux
26
131
  # && docker -v
27
132
 
28
133
  install_docker_static() {
29
- arch="$(uname -m)"
30
- case "$arch" in
31
- x86_64|amd64) docker_arch="x86_64" ;;
32
- aarch64|arm64) docker_arch="aarch64" ;;
33
- armv7l|armv7) docker_arch="armhf" ;;
34
- armv6l|armv6) docker_arch="armel" ;;
35
- ppc64le) docker_arch="ppc64le" ;;
36
- s390x) docker_arch="s390x" ;;
37
- *)
38
- echo "Unsupported architecture: $arch" >&2
39
- exit 1
40
- ;;
41
- esac
134
+ detect_arch
42
135
  base_url="https://download.docker.com/linux/static/stable/$docker_arch/"
43
- latest_version="$(
136
+ versions="$(
44
137
  curl -fsSL "$base_url" \
45
138
  | sed -n 's/.*docker-\([0-9.][0-9.]*\)\.tgz.*/\1/p' \
46
- | sort -t. -k1,1n -k2,2n -k3,3n -k4,4n \
47
- | tail -n 1
139
+ | sort -t. -k1,1n -k2,2n -k3,3n -k4,4n
48
140
  )"
141
+ if [ -n "$docker_version_prefix" ]; then
142
+ latest_version="$(
143
+ printf '%s\n' "$versions" \
144
+ | awk -v p="$docker_version_prefix" 'index($0, p ".")==1 || $0==p' \
145
+ | tail -n 1
146
+ )"
147
+ elif [ -n "$docker_major" ]; then
148
+ latest_version="$(
149
+ printf '%s\n' "$versions" \
150
+ | awk -F. -v m="$docker_major" '$1==m' \
151
+ | tail -n 1
152
+ )"
153
+ else
154
+ latest_version="$(printf '%s\n' "$versions" | tail -n 1)"
155
+ fi
49
156
  if [ -z "$latest_version" ]; then
50
- echo "Unable to determine latest Docker version from $base_url" >&2
157
+ if [ -n "$docker_version_prefix" ]; then
158
+ echo "Unable to determine latest Docker version matching $docker_version_prefix from $base_url" >&2
159
+ elif [ -n "$docker_major" ]; then
160
+ echo "Unable to determine latest Docker version for major $docker_major from $base_url" >&2
161
+ else
162
+ echo "Unable to determine latest Docker version from $base_url" >&2
163
+ fi
51
164
  exit 1
52
165
  fi
53
166
  tmp_dir="$(mktemp -d)"
@@ -57,14 +170,40 @@ install_docker_static() {
57
170
  rm -rf "$tmp_dir"
58
171
  }
59
172
 
173
+ install_buildx() {
174
+ detect_arch
175
+ buildx_version="${BUILDX_VERSION:-}"
176
+ if [ -z "$buildx_version" ]; then
177
+ buildx_version="$(
178
+ curl -fsSL https://api.github.com/repos/docker/buildx/releases/latest \
179
+ | sed -n 's/.*"tag_name": "\(v[0-9.]*\)".*/\1/p' \
180
+ | head -n 1
181
+ )"
182
+ fi
183
+ if [ -z "$buildx_version" ]; then
184
+ echo "Unable to determine latest buildx version" >&2
185
+ exit 1
186
+ fi
187
+ plugin_dir="/usr/local/lib/docker/cli-plugins"
188
+ mkdir -p "$plugin_dir"
189
+ curl -fsSL \
190
+ -o "$plugin_dir/docker-buildx" \
191
+ "https://github.com/docker/buildx/releases/download/${buildx_version}/buildx-${buildx_version}.linux-${buildx_arch}"
192
+ chmod 0755 "$plugin_dir/docker-buildx"
193
+ }
194
+
195
+ parse_args "$@"
196
+
60
197
  if command -v apt-get >/dev/null 2>&1; then
61
198
  apt-get update
62
199
  apt-get install -y --no-install-recommends git ca-certificates curl tar
63
200
  install_docker_static
201
+ install_buildx
64
202
  rm -rf /var/lib/apt/lists/*
65
203
  elif command -v apk >/dev/null 2>&1; then
66
204
  apk add --no-cache git ca-certificates curl tar
67
205
  install_docker_static
206
+ install_buildx
68
207
  else
69
208
  echo "Unsupported package manager: expected apt or apk." >&2
70
209
  exit 1
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module BuildLabels
2
2
  class Builder
3
- VERSION = '0.0.74'
3
+ VERSION = '0.0.76'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: build-labels
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.74
4
+ version: 0.0.76
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artyom B
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-01-16 00:00:00.000000000 Z
11
+ date: 2026-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake