diff --git a/local/README.md b/local/README.md new file mode 100644 index 000000000..3f870ea53 --- /dev/null +++ b/local/README.md @@ -0,0 +1,4 @@ + +# The Local Directory + +This directory is for scripts involved with building and testing Twoliter. diff --git a/local/alpha-sdk.dockerfile b/local/alpha-sdk.dockerfile new file mode 100644 index 000000000..27dd1a6bc --- /dev/null +++ b/local/alpha-sdk.dockerfile @@ -0,0 +1,3 @@ +ARG SDK +FROM $SDK +COPY build/rpms/ /twoliter/alpha/build/rpms/ diff --git a/local/alpha-sdk.sh b/local/alpha-sdk.sh new file mode 100755 index 000000000..40bf658a7 --- /dev/null +++ b/local/alpha-sdk.sh @@ -0,0 +1,131 @@ +#!/usr/bin/env bash + +# The Alpha milestone (i.e. preceding Beta) represents a version of Twoliter that can build a +# customized variant before Kits have been implemented. See: +# - https://github.com/bottlerocket-os/twoliter/issues/74 +# - https://github.com/bottlerocket-os/twoliter/issues/56 +# +# This script builds a bottlerocket variant, then copies certain contents of the Bottlerocket build +# directory into a layer added to the SDK. Twoliter's build variant command will expect these to be +# available in the SDK at `/twoliter/alpha` until Kits have been implemented. + +# The directory this script is located in. +script_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +# +# Common error handling +# + +exit_trap_cmds=() + +on_exit() { + exit_trap_cmds+=( "$1" ) +} + +run_exit_trap_cmds() { + for cmd in "${exit_trap_cmds[@]}"; do + eval "${cmd}" + done +} + +trap run_exit_trap_cmds EXIT + +warn() { + >&2 echo "Warning: $*" +} + +bail() { + if [[ $# -gt 0 ]]; then + >&2 echo "Error: $*" + fi + exit 1 +} + +usage() { + cat <&2 usage + bail "$1" +} + +# +# Parse arguments +# + +while [[ $# -gt 0 ]]; do + case $1 in + --bottlerocket-dir) + shift; bottlerocket_dir=$1 ;; + --variant) + shift; variant=$1 ;; + --arch) + shift; arch=$1 ;; + --sdk-version) + shift; sdk_version=$1 ;; + --sdk-name) + shift; sdk_name=$1 ;; + --sdk-registry) + shift; sdk_registry=$1 ;; + --tag) + shift; tag=$1 ;; + -h|--help) + usage; exit 0 ;; + *) + usage_error "Invalid option '$1'" ;; + esac + shift +done + +set -e + +[[ -n ${bottlerocket_dir} ]] || usage_error 'required: --bottlerocket-dir' +[[ -n ${bottlerocket_dir} ]] || usage_error 'required: --sdk-version' + +variant="${variant:=aws-dev}" +arch="${arch:=$(uname -m)}" +sdk_name="${sdk_name:=bottlerocket}" +sdk_registry="${sdk_registry:=public.ecr.aws/bottlerocket}" +tag="${tag:=twoliter.alpha/bottlerocket-sdk}" + +cd "${bottlerocket_dir}" + +cargo make \ + -e "BUILDSYS_VARIANT=${variant}" \ + -e "BUILDSYS_ARCH=${arch}" \ + -e "BUILDSYS_SDK_NAME=${sdk_name}" \ + -e "BUILDSYS_SDK_VERSION=${sdk_version}" \ + -e "BUILDSYS_SDK_REGISTRY=${sdk_registry}" \ + build-variant + +sdk="${sdk_registry}/${sdk_name}-sdk-${arch}:${sdk_version}" + +docker build \ + --tag "${tag}" \ + --build-arg "SDK=${sdk}" \ + --file "${script_dir}/alpha-sdk.dockerfile" \ + "${bottlerocket_dir}"