chore(build): Allow for downloading pre-built admin ui assets (#2475)

The admin ui assets are built via a github workflow and published as
github a artifact. The artifact can be downloaded, avoiding the need to
build the assets again locally, and eliminating the need for front-end
build tools like yarn and npm.

This updates the `build-ui` target to use a new script that will attempt
to download the pre-built assets. Note that this script requires that
the `gh` cli is installed since an authenticated request is necessary to
download the workflow artifacts. If the artifact cannot be downloaded
either due to the lack of `gh` or because the artifact cannot be found,
it will fallback to using `git clone` (and will require yarn to build
the assets).

See:
    https://cli.github.com/
    https://docs.github.com/en/rest/actions/artifacts
    https://github.com/actions/upload-artifact/issues/51
This commit is contained in:
Timothy Messier authored and GitHub committed 2022-09-20 11:14:02 -04:00
1 parent 06fd086004
commit 01206eb586
5 files changed
+76 -53

No files matched your search

+6 -3
View File
@@ -64,11 +64,10 @@ fmt:
buf format -w
# Set env for all UI targets.
UI_TARGETS := update-ui-version build-ui build-ui-ifne
UI_TARGETS := update-ui-version build-ui build-ui-ifne clean-ui
# Note the extra .tmp path segment in UI_CLONE_DIR is significant and required.
$(UI_TARGETS): export UI_CLONE_DIR := internal/ui/.tmp/boundary-ui
$(UI_TARGETS): export UI_VERSION_FILE := internal/ui/VERSION
$(UI_TARGETS): export UI_ASSETS_FILE := internal/ui/assets.go
$(UI_TARGETS): export UI_DEFAULT_BRANCH := main
$(UI_TARGETS): export UI_CURRENT_COMMIT := $(shell head -n1 < "$(UI_VERSION_FILE)" | cut -d' ' -f1)
$(UI_TARGETS): export UI_COMMITISH ?=
@@ -91,7 +90,11 @@ build-ui:
else \
echo "==> Building custom UI version $(UI_COMMITISH)"; \
fi; \
./scripts/uiclone.sh && ./scripts/uigen.sh
./scripts/build-ui.sh
.PHONY: clean-ui
clean-ui:
rm -rf ${UI_CLONE_DIR}
.PHONY: build-ui-ifne
build-ui-ifne:
+3 -1
View File
@@ -90,7 +90,9 @@ for permanent installations, are detailed in our [Installation Guide](https://ww
If you have the following requirements met locally:
- Golang v1.19 or greater
- Docker
- [Boundary UI Dependencies](https://github.com/hashicorp/boundary-ui#prerequisites)
- Either the [Boundary UI Dependencies](https://github.com/hashicorp/boundary-ui#prerequisites)
for locally building the ui assets
or [gh cli](https://cli.github.com) for downloading pre-built ui assets.
You can get up and running with Boundary quickly. Simply run:
+67
View File
@@ -0,0 +1,67 @@
#!/usr/bin/env bash
set -e
if [ -z "$UI_COMMITISH" ]; then
echo "Must set UI_COMMITISH"; exit 1
fi
if [ -z "$UI_CLONE_DIR" ]; then
echo "Must set UI_CLONE_DIR"; exit 1
fi
if [ -z "$UI_VERSION_FILE" ]; then
echo "Must set UI_CLONE_DIR"; exit 1
fi
if which gh &> /dev/null; then
echo "Found gh cli, attempting to download ui assets"
UI_EDITION=$(make --no-print-directory edition)
artifact_id=$(gh api repos/hashicorp/boundary-ui/actions/artifacts | \
jq ".artifacts[] | select(.workflow_run.head_sha == \"${UI_COMMITISH}\" and .name == \"admin-ui-${UI_EDITION}\")" | \
jq -r '.id')
if [[ ${artifact_id} ]]; then
echo "Downloading artifact: ${artifact_id} for admin-ui-${UI_EDITION} ${UI_COMMITISH}"
tmp_dir=$(mktemp -d)
gh api "repos/hashicorp/boundary-ui/actions/artifacts/${artifact_id}/zip" > "${tmp_dir}/boundary-ui.zip"
trap 'rm -rf ${tmp_dir}' EXIT
# remove any previous artifact download or git clone
rm -rf "${UI_CLONE_DIR}"
mkdir -p "${UI_CLONE_DIR}/ui/admin/dist"
unzip "${tmp_dir}/boundary-ui.zip" -d "${UI_CLONE_DIR}/ui/admin/dist"
exit $?
else
echo "could not find artifact: admin-ui-${UI_EDITION} ${UI_COMMITISH}, falling back to git clone"
fi
fi
if ! which yarn &> /dev/null; then
echo "Yarn must be installed to build ui assets from a git clone.\nPlease ensure Node v14+ and Yarn v1.22.10+ are installed."
exit 1
fi
tempdir="$(dirname "${UI_CLONE_DIR}")"
mkdir -p "${tempdir}"
echo "*" > "${tempdir}/.gitignore"
if ! [ -d "${UI_CLONE_DIR}/.git" ]; then
# clear out dir, incase it was previously an artifact download
rm -rf "${UI_CLONE_DIR}"
git clone https://github.com/hashicorp/boundary-ui "${UI_CLONE_DIR}"
fi
pushd "${UI_CLONE_DIR}"
git reset --hard
git fetch origin "${UI_COMMITISH}"
git checkout "${UI_COMMITISH}"
git pull --ff-only origin "${UI_COMMITISH}"
git reset --hard "${UI_COMMITISH}"
yarn install
yarn build
popd
-31
View File
@@ -1,31 +0,0 @@
#!/bin/sh
set -e
if [ -z "$UI_COMMITISH" ]; then
echo "Must set UI_COMMITISH"; exit 1
fi
if [ -z "$UI_CLONE_DIR" ]; then
echo "Must set UI_CLONE_DIR"; exit 1
fi
if [ -z "$UI_VERSION_FILE" ]; then
echo "Must set UI_CLONE_DIR"; exit 1
fi
tempdir="$(dirname "${UI_CLONE_DIR}")"
mkdir -p "${tempdir}"
echo "*" > "${tempdir}/.gitignore"
if ! [ -d "${UI_CLONE_DIR}/.git" ]; then
git clone https://github.com/hashicorp/boundary-ui "${UI_CLONE_DIR}"
fi
cd "${UI_CLONE_DIR}"
git reset --hard
git fetch origin "${UI_COMMITISH}"
git checkout "${UI_COMMITISH}"
git pull --ff-only origin "${UI_COMMITISH}"
git reset --hard "${UI_COMMITISH}"
-18
View File
@@ -1,18 +0,0 @@
#!/bin/sh
set -e
if [ -z "$UI_CLONE_DIR" ]; then
echo "Must set UI_CLONE_DIR"; exit 1
fi
if [ -z "$UI_ASSETS_FILE" ]; then
echo "Must set UI_ASSETS_FILE"; exit 1
fi
(
cd "$UI_CLONE_DIR"
if ! (yarn install && yarn build); then
echo "Please ensure Node v14+ and Yarn v1.22.10+ are installed."
fi
)