From 48694a6bab17329db2fccad6c2458d671494fd93 Mon Sep 17 00:00:00 2001 From: Louis Ruch Date: Mon, 6 Jun 2022 11:28:24 -0700 Subject: [PATCH] bug(kms): Generate all kms plugin assets during goreleaser pre build (#216) --- .gitignore | 2 +- .goreleaser.yml | 2 +- CHANGELOG.md | 14 ++++++++++++++ Makefile | 2 +- plugins/kms/assets.go | 10 ++++------ plugins/kms/assets/README.md | 3 --- plugins/kms/assets/darwin/amd64/README.md | 3 +++ plugins/kms/assets/darwin/arm64/README.md | 3 +++ plugins/kms/assets/freebsd/386/README.md | 3 +++ plugins/kms/assets/freebsd/amd64/README.md | 3 +++ plugins/kms/assets/freebsd/arm/README.md | 3 +++ plugins/kms/assets/linux/386/README.md | 3 +++ plugins/kms/assets/linux/amd64/README.md | 3 +++ plugins/kms/assets/linux/arm/README.md | 3 +++ plugins/kms/assets/linux/arm64/README.md | 3 +++ plugins/kms/assets/windows/386/README.md | 3 +++ plugins/kms/assets/windows/amd64/README.md | 3 +++ plugins/kms/assets_darwin_amd64.go | 9 +++++++++ plugins/kms/assets_darwin_arm64.go | 9 +++++++++ plugins/kms/assets_freebsd_386.go | 9 +++++++++ plugins/kms/assets_freebsd_amd64.go | 9 +++++++++ plugins/kms/assets_freebsd_arm.go | 9 +++++++++ plugins/kms/assets_linux_386.go | 9 +++++++++ plugins/kms/assets_linux_amd64.go | 9 +++++++++ plugins/kms/assets_linux_arm.go | 9 +++++++++ plugins/kms/assets_linux_arm64.go | 9 +++++++++ plugins/kms/assets_windows_386.go | 9 +++++++++ plugins/kms/assets_windows_amd64.go | 9 +++++++++ scripts/plugins-all.sh | 20 ++++++++++++++++++++ scripts/plugins.sh | 20 +++++++++++++++----- 30 files changed, 188 insertions(+), 17 deletions(-) delete mode 100644 plugins/kms/assets/README.md create mode 100644 plugins/kms/assets/darwin/amd64/README.md create mode 100644 plugins/kms/assets/darwin/arm64/README.md create mode 100644 plugins/kms/assets/freebsd/386/README.md create mode 100644 plugins/kms/assets/freebsd/amd64/README.md create mode 100644 plugins/kms/assets/freebsd/arm/README.md create mode 100644 plugins/kms/assets/linux/386/README.md create mode 100644 plugins/kms/assets/linux/amd64/README.md create mode 100644 plugins/kms/assets/linux/arm/README.md create mode 100644 plugins/kms/assets/linux/arm64/README.md create mode 100644 plugins/kms/assets/windows/386/README.md create mode 100644 plugins/kms/assets/windows/amd64/README.md create mode 100644 plugins/kms/assets_darwin_amd64.go create mode 100644 plugins/kms/assets_darwin_arm64.go create mode 100644 plugins/kms/assets_freebsd_386.go create mode 100644 plugins/kms/assets_freebsd_amd64.go create mode 100644 plugins/kms/assets_freebsd_arm.go create mode 100644 plugins/kms/assets_linux_386.go create mode 100644 plugins/kms/assets_linux_amd64.go create mode 100644 plugins/kms/assets_linux_arm.go create mode 100644 plugins/kms/assets_linux_arm64.go create mode 100644 plugins/kms/assets_windows_386.go create mode 100644 plugins/kms/assets_windows_amd64.go create mode 100755 scripts/plugins-all.sh diff --git a/.gitignore b/.gitignore index 9678e101..3ec33e1a 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,4 @@ website/vendor *.winfile eol=crlf # Compilation outputs -/plugins/kms/assets/boundary-plugin* +/plugins/kms/assets/*/*/boundary-plugin* diff --git a/.goreleaser.yml b/.goreleaser.yml index e096bea0..34b80d96 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -7,7 +7,7 @@ archives: before: hooks: - 'go mod download' - - './scripts/plugins.sh' + - './scripts/plugins-all.sh' builds: - # Binary naming only required for Terraform CLI 0.12 binary: '{{ .ProjectName }}_v{{ .Version }}_x5' diff --git a/CHANGELOG.md b/CHANGELOG.md index 2df940c6..268320c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +## Next + +### Bug Fixes + +* The bug fix released in 1.0.8 to resolve the `plugin is nil` error only worked for + Linux AMD64. This was due to a build issue where the plugin binaries were only built for + Linux AMD64. Other platforms would receive an error similar to: + + Error: error reading wrappers from "recovery_kms_hcl": + Error configuring kms: error fetching kms plugin rpc client: + fork/exec boundary-plugin-kms-awskms.gz: exec format error + ([Issue](https://github.com/hashicorp/terraform-provider-boundary/issues/209)), + ([PR](https://github.com/hashicorp/terraform-provider-boundary/pull/216)). + ## 1.0.8 (June 1, 2022) ### Bug Fixes diff --git a/Makefile b/Makefile index 70278211..8655c73b 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ install-go: ~/.go/bin/go ./ci/goinstall.sh dev: - ./scripts/plugins.sh + GOOS=${GOOS} GOARCH=${GOARCH} ./scripts/plugins.sh mkdir -p $(INSTALL_PATH) go build -o $(INSTALL_PATH)/terraform-provider-boundary main.go diff --git a/plugins/kms/assets.go b/plugins/kms/assets.go index 7bdfd6b4..1dd81d26 100644 --- a/plugins/kms/assets.go +++ b/plugins/kms/assets.go @@ -1,19 +1,17 @@ package kms_plugin_assets import ( - "embed" "io/fs" + "path" + "runtime" ) const contentDir = "assets" -// content is our static web server content. -//go:embed assets -var content embed.FS - func FileSystem() fs.FS { // Remove the root - f, err := fs.Sub(content, contentDir) + dir := path.Join(contentDir, runtime.GOOS, runtime.GOARCH) + f, err := fs.Sub(content, dir) if err != nil { panic(err) } diff --git a/plugins/kms/assets/README.md b/plugins/kms/assets/README.md deleted file mode 100644 index 565e4181..00000000 --- a/plugins/kms/assets/README.md +++ /dev/null @@ -1,3 +0,0 @@ -This directory contains assets for kms plugins. This file in particular exists -so that the Go embed package does not throw errors when importing this module -outside of the main tree. diff --git a/plugins/kms/assets/darwin/amd64/README.md b/plugins/kms/assets/darwin/amd64/README.md new file mode 100644 index 00000000..371f4bdd --- /dev/null +++ b/plugins/kms/assets/darwin/amd64/README.md @@ -0,0 +1,3 @@ +This directory contains assets for darwin amd64 kms plugins. This file +in particular exists so that the Go embed package does not throw errors +when importing this module outside of the main tree. diff --git a/plugins/kms/assets/darwin/arm64/README.md b/plugins/kms/assets/darwin/arm64/README.md new file mode 100644 index 00000000..17bd039b --- /dev/null +++ b/plugins/kms/assets/darwin/arm64/README.md @@ -0,0 +1,3 @@ +This directory contains assets for darwin arm64 kms plugins. This file +in particular exists so that the Go embed package does not throw errors +when importing this module outside of the main tree. diff --git a/plugins/kms/assets/freebsd/386/README.md b/plugins/kms/assets/freebsd/386/README.md new file mode 100644 index 00000000..3bc12bf8 --- /dev/null +++ b/plugins/kms/assets/freebsd/386/README.md @@ -0,0 +1,3 @@ +This directory contains assets for freebsd 386 kms plugins. This file +in particular exists so that the Go embed package does not throw errors +when importing this module outside of the main tree. diff --git a/plugins/kms/assets/freebsd/amd64/README.md b/plugins/kms/assets/freebsd/amd64/README.md new file mode 100644 index 00000000..ea1a0b94 --- /dev/null +++ b/plugins/kms/assets/freebsd/amd64/README.md @@ -0,0 +1,3 @@ +This directory contains assets for freebsd amd64 kms plugins. This file +in particular exists so that the Go embed package does not throw errors +when importing this module outside of the main tree. diff --git a/plugins/kms/assets/freebsd/arm/README.md b/plugins/kms/assets/freebsd/arm/README.md new file mode 100644 index 00000000..aefb4b93 --- /dev/null +++ b/plugins/kms/assets/freebsd/arm/README.md @@ -0,0 +1,3 @@ +This directory contains assets for freebsd arm kms plugins. This file +in particular exists so that the Go embed package does not throw errors +when importing this module outside of the main tree. diff --git a/plugins/kms/assets/linux/386/README.md b/plugins/kms/assets/linux/386/README.md new file mode 100644 index 00000000..9a9d5c07 --- /dev/null +++ b/plugins/kms/assets/linux/386/README.md @@ -0,0 +1,3 @@ +This directory contains assets for linux 386 kms plugins. This file +in particular exists so that the Go embed package does not throw errors +when importing this module outside of the main tree. diff --git a/plugins/kms/assets/linux/amd64/README.md b/plugins/kms/assets/linux/amd64/README.md new file mode 100644 index 00000000..8804114f --- /dev/null +++ b/plugins/kms/assets/linux/amd64/README.md @@ -0,0 +1,3 @@ +This directory contains assets for linux amd64 kms plugins. This file +in particular exists so that the Go embed package does not throw errors +when importing this module outside of the main tree. diff --git a/plugins/kms/assets/linux/arm/README.md b/plugins/kms/assets/linux/arm/README.md new file mode 100644 index 00000000..2f1e830a --- /dev/null +++ b/plugins/kms/assets/linux/arm/README.md @@ -0,0 +1,3 @@ +This directory contains assets for linux arm kms plugins. This file +in particular exists so that the Go embed package does not throw errors +when importing this module outside of the main tree. diff --git a/plugins/kms/assets/linux/arm64/README.md b/plugins/kms/assets/linux/arm64/README.md new file mode 100644 index 00000000..a0a46e36 --- /dev/null +++ b/plugins/kms/assets/linux/arm64/README.md @@ -0,0 +1,3 @@ +This directory contains assets for linux arm64 kms plugins. This file +in particular exists so that the Go embed package does not throw errors +when importing this module outside of the main tree. diff --git a/plugins/kms/assets/windows/386/README.md b/plugins/kms/assets/windows/386/README.md new file mode 100644 index 00000000..c0ede661 --- /dev/null +++ b/plugins/kms/assets/windows/386/README.md @@ -0,0 +1,3 @@ +This directory contains assets for windows 386 kms plugins. This file +in particular exists so that the Go embed package does not throw errors +when importing this module outside of the main tree. diff --git a/plugins/kms/assets/windows/amd64/README.md b/plugins/kms/assets/windows/amd64/README.md new file mode 100644 index 00000000..6f598adc --- /dev/null +++ b/plugins/kms/assets/windows/amd64/README.md @@ -0,0 +1,3 @@ +This directory contains assets for windows amd64 kms plugins. This file +in particular exists so that the Go embed package does not throw errors +when importing this module outside of the main tree. diff --git a/plugins/kms/assets_darwin_amd64.go b/plugins/kms/assets_darwin_amd64.go new file mode 100644 index 00000000..c69da101 --- /dev/null +++ b/plugins/kms/assets_darwin_amd64.go @@ -0,0 +1,9 @@ +package kms_plugin_assets + +import ( + "embed" +) + +// content is our static kms plugin content. +//go:embed assets/darwin/amd64 +var content embed.FS diff --git a/plugins/kms/assets_darwin_arm64.go b/plugins/kms/assets_darwin_arm64.go new file mode 100644 index 00000000..f8bd4501 --- /dev/null +++ b/plugins/kms/assets_darwin_arm64.go @@ -0,0 +1,9 @@ +package kms_plugin_assets + +import ( + "embed" +) + +// content is our static kms plugin content. +//go:embed assets/darwin/arm64 +var content embed.FS diff --git a/plugins/kms/assets_freebsd_386.go b/plugins/kms/assets_freebsd_386.go new file mode 100644 index 00000000..77e1bd34 --- /dev/null +++ b/plugins/kms/assets_freebsd_386.go @@ -0,0 +1,9 @@ +package kms_plugin_assets + +import ( + "embed" +) + +// content is our static kms plugin content. +//go:embed assets/freebsd/386 +var content embed.FS diff --git a/plugins/kms/assets_freebsd_amd64.go b/plugins/kms/assets_freebsd_amd64.go new file mode 100644 index 00000000..e8fb62f8 --- /dev/null +++ b/plugins/kms/assets_freebsd_amd64.go @@ -0,0 +1,9 @@ +package kms_plugin_assets + +import ( + "embed" +) + +// content is our static kms plugin content. +//go:embed assets/freebsd/amd64 +var content embed.FS diff --git a/plugins/kms/assets_freebsd_arm.go b/plugins/kms/assets_freebsd_arm.go new file mode 100644 index 00000000..eb578a1c --- /dev/null +++ b/plugins/kms/assets_freebsd_arm.go @@ -0,0 +1,9 @@ +package kms_plugin_assets + +import ( + "embed" +) + +// content is our static kms plugin content. +//go:embed assets/freebsd/arm +var content embed.FS diff --git a/plugins/kms/assets_linux_386.go b/plugins/kms/assets_linux_386.go new file mode 100644 index 00000000..374ed928 --- /dev/null +++ b/plugins/kms/assets_linux_386.go @@ -0,0 +1,9 @@ +package kms_plugin_assets + +import ( + "embed" +) + +// content is our static kms plugin content. +//go:embed assets/linux/386 +var content embed.FS diff --git a/plugins/kms/assets_linux_amd64.go b/plugins/kms/assets_linux_amd64.go new file mode 100644 index 00000000..6dd7c9ea --- /dev/null +++ b/plugins/kms/assets_linux_amd64.go @@ -0,0 +1,9 @@ +package kms_plugin_assets + +import ( + "embed" +) + +// content is our static kms plugin content. +//go:embed assets/linux/amd64 +var content embed.FS diff --git a/plugins/kms/assets_linux_arm.go b/plugins/kms/assets_linux_arm.go new file mode 100644 index 00000000..74d402ec --- /dev/null +++ b/plugins/kms/assets_linux_arm.go @@ -0,0 +1,9 @@ +package kms_plugin_assets + +import ( + "embed" +) + +// content is our static kms plugin content. +//go:embed assets/linux/arm +var content embed.FS diff --git a/plugins/kms/assets_linux_arm64.go b/plugins/kms/assets_linux_arm64.go new file mode 100644 index 00000000..8c2cbfc0 --- /dev/null +++ b/plugins/kms/assets_linux_arm64.go @@ -0,0 +1,9 @@ +package kms_plugin_assets + +import ( + "embed" +) + +// content is our static kms plugin content. +//go:embed assets/linux/arm64 +var content embed.FS diff --git a/plugins/kms/assets_windows_386.go b/plugins/kms/assets_windows_386.go new file mode 100644 index 00000000..7199524b --- /dev/null +++ b/plugins/kms/assets_windows_386.go @@ -0,0 +1,9 @@ +package kms_plugin_assets + +import ( + "embed" +) + +// content is our static kms plugin content. +//go:embed assets/windows/386 +var content embed.FS diff --git a/plugins/kms/assets_windows_amd64.go b/plugins/kms/assets_windows_amd64.go new file mode 100644 index 00000000..3a32cd88 --- /dev/null +++ b/plugins/kms/assets_windows_amd64.go @@ -0,0 +1,9 @@ +package kms_plugin_assets + +import ( + "embed" +) + +// content is our static kms plugin content. +//go:embed assets/windows/amd64 +var content embed.FS diff --git a/scripts/plugins-all.sh b/scripts/plugins-all.sh new file mode 100755 index 00000000..82d8cb24 --- /dev/null +++ b/scripts/plugins-all.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# +# This script builds the required plugins for all supported distributions. +set -e + +# Get the parent directory of where this script is. +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done +export DIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )" + +platforms="darwin/arm64 darwin/amd64 freebsd/386 freebsd/amd64 freebsd/arm linux/386 linux/amd64 linux/arm linux/arm64 windows/386 windows/amd64" + +cd $DIR/scripts; +for platform in ${platforms} +do + split=(${platform//\// }) + goos=${split[0]} + goarch=${split[1]} + GOOS=${goos} GOARCH=${goarch} ./plugins.sh + done diff --git a/scripts/plugins.sh b/scripts/plugins.sh index afafa51c..6d779dcc 100755 --- a/scripts/plugins.sh +++ b/scripts/plugins.sh @@ -3,6 +3,16 @@ # This script builds the required plugins. set -e +if [[ -z "$GOOS" ]]; then + echo "Must provide GOOS in environment" 1>&2 + exit 1 +fi + +if [[ -z "GOARCH" ]]; then + echo "Must provide GOARCH in environment" 1>&2 + exit 1 +fi + BINARY_SUFFIX="" if [ "${GOOS}x" = "windowsx" ]; then BINARY_SUFFIX=".exe" @@ -13,16 +23,16 @@ SOURCE="${BASH_SOURCE[0]}" while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done export DIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )" -echo "==> Building kms plugins..." -rm -f $DIR/plugins/kms/assets/boundary-plugin-kms* +echo "==> Building kms plugins for ${GOOS}-${GOARCH}..." +rm -f $DIR/plugins/kms/assets/${GOOS}/${GOARCH}/boundary-plugin-kms-* for CURR_PLUGIN in $(ls $DIR/plugins/kms/mains); do echo "==> Building $CURR_PLUGIN plugin..." cd $DIR/plugins/kms/mains/$CURR_PLUGIN; - go build -v -o $DIR/plugins/kms/assets/boundary-plugin-kms-${CURR_PLUGIN}${BINARY_SUFFIX} .; + go build -v -o $DIR/plugins/kms/assets/${GOOS}/${GOARCH}/boundary-plugin-kms-${CURR_PLUGIN}${BINARY_SUFFIX} .; cd $DIR; done; -cd $DIR/plugins/kms/assets; -for CURR_PLUGIN in $(ls boundary-plugin*); do +cd $DIR/plugins/kms/assets/${GOOS}/${GOARCH}; +for CURR_PLUGIN in $(ls boundary-plugin-kms-*); do echo "==> gzip $CURR_PLUGIN plugin..." gzip -f -9 $CURR_PLUGIN; done;