...
1#!/usr/bin/env bash
2set -Eeuo pipefail
3
4# This script generates "get-images.sh" using Official Images tooling.
5#
6# ./bootstrap-get-images.sh > get-images.sh
7#
8# This script requires "bashbrew". To get the latest version, visit
9# https://github.com/docker-library/bashbrew/releases
10
11images=(
12 # pinned to an older BusyBox (prior to 1.36 becoming "latest") because 1.36.0 has some unresolved bugs, especially around sha256sum
13 'https://github.com/docker-library/official-images/raw/eaed422a86b43c885a0f980d48f4bbf346086a4a/library/busybox:glibc'
14
15 # pinned to an older Debian Buster which has more architectures than the latest does (Buster transitioned from the Debian Security Team to the LTS Team which supports a smaller set)
16 'https://github.com/docker-library/official-images/raw/ce10f6b60289c0c0b5de6f785528b8725f225a58/library/debian:buster-slim'
17)
18
19cat <<'EOH'
20#!/bin/bash
21
22# DO NOT EDIT! Generated by "bootstrap-get-images.sh"
23
24# This script checks if container images needed for tests (currently
25# busybox and Debian 10 "Buster") are available locally, and downloads
26# them to testdata directory if not.
27#
28# The script is self-contained/standalone and is used from a few places
29# that need to ensure the images are downloaded. Its output is suitable
30# for consumption by shell via eval (see helpers.bash).
31
32set -e -u -o pipefail
33
34# Root directory of integration tests.
35INTEGRATION_ROOT=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
36# Test data path.
37TESTDATA="${INTEGRATION_ROOT}/testdata"
38# Sanity check: $TESTDATA directory must exist.
39if [ ! -d "$TESTDATA" ]; then
40 echo "Bad TESTDATA directory: $TESTDATA. Aborting" >&2
41 exit 1
42fi
43
44function get() {
45 local dest="$1" url="$2"
46
47 [ -e "$dest" ] && return
48
49 # Sanity check: $TESTDATA directory must be writable.
50 if [ ! -w "$TESTDATA" ]; then
51 echo "TESTDATA directory ($TESTDATA) not writable. Aborting" >&2
52 exit 1
53 fi
54
55 if ! curl -o "$dest" -fsSL --retry 5 "$url"; then
56 echo "Failed to get $url" 1>&2
57 exit 1
58 fi
59}
60
61arch=$(go env GOARCH)
62if [ "$arch" = 'arm' ]; then
63 arm=$(go env GOARM)
64 : "${arm:=7}"
65 arch=${arch}v$arm
66fi
67EOH
68
69# shellcheck disable=SC2016 # this generates shell code intentionally (and many of the '$' in here are intended for "text/template" not the end shell anyhow)
70bashbrew cat --format '
71 {{- "\n" -}}
72 {{- "case $arch in\n" -}}
73
74 {{- range .TagEntry.Architectures -}}
75 {{- $repo := $.TagEntry.ArchGitRepo . | trimSuffixes ".git" -}}
76 {{- $branch := $.TagEntry.ArchGitFetch . | trimPrefixes "refs/heads/" -}}
77 {{- $commit := $.TagEntry.ArchGitCommit . -}}
78 {{- $dir := $.TagEntry.ArchDirectory . -}}
79 {{- $tarball := eq $.RepoName "debian" | ternary "rootfs.tar.xz" "busybox.tar.xz" -}}
80
81 {{ . | replace "arm64v8" "arm64" "arm32" "arm" "i386" "386" }} {{- ")\n" -}}
82 {{- "\t" -}}# {{ $repo }}/tree/{{ $branch }}{{- "\n" -}}
83 {{- "\t" -}}# {{ $repo }}/tree/{{ $commit }}/{{ $dir }}{{- "\n" -}}
84 {{- "\t" -}} url="{{ $repo }}/raw/{{ $commit }}/{{ $dir }}/{{ $tarball }}"{{- "\n" -}}
85 {{- "\t" -}} ;; {{- "\n" -}}
86 {{- "\n" -}}
87 {{- end -}}
88
89 *){{- "\n" -}}
90 {{- "\t" -}}echo >&2 "error: unsupported {{ $.RepoName }} architecture: $arch"{{- "\n" -}}
91 {{- "\t" -}}exit 1{{- "\n" -}}
92 {{- "\t" -}};;{{- "\n" -}}
93
94 {{- "esac\n" -}}
95 {{- printf `rootfs="$TESTDATA/%s-${arch}.tar.xz"` $.RepoName -}}{{- "\n" -}}
96 {{- `get "$rootfs" "$url"` -}}{{- "\n" -}}
97 {{- printf "var=%s_image\n" $.RepoName -}}
98 {{- `echo "${var^^}=$rootfs"` -}}
99' "${images[@]}"
View as plain text