ui: Move to Workspaced Structure (#8994)
* ui: Add the most basic workspace root in /ui * We already have a LICENSE file in the repository root * Change directory path in build scripts ui-v2 -> ui * Make yarn install flags configurable from elsewhere * Minimal workspace root makefile * Call the new docker specific target * Update yarn in the docker build image * Reconfigure the netlify target and move to the higher makefile * Move ui-v2 -> ui/packages/consul-ui * Change repo root to refleect new folder structure * Temporarily don't hoist consul-api-double * Fixup CI configuration * Fixup lint errors * Fixup Netlify target
This commit is contained in:
parent
e4f72840ab
commit
c98130cc08
|
@ -11,7 +11,7 @@ references:
|
||||||
test-results: &TEST_RESULTS_DIR /tmp/test-results
|
test-results: &TEST_RESULTS_DIR /tmp/test-results
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
yarn: &YARN_CACHE_KEY consul-ui-v2-{{ checksum "ui-v2/yarn.lock" }}
|
yarn: &YARN_CACHE_KEY consul-ui-v3-{{ checksum "ui/packages/consul-ui/yarn.lock" }}
|
||||||
rubygem: &RUBYGEM_CACHE_KEY static-site-gems-v1-{{ checksum "Gemfile.lock" }}
|
rubygem: &RUBYGEM_CACHE_KEY static-site-gems-v1-{{ checksum "Gemfile.lock" }}
|
||||||
|
|
||||||
environment: &ENVIRONMENT
|
environment: &ENVIRONMENT
|
||||||
|
@ -559,12 +559,13 @@ jobs:
|
||||||
|
|
||||||
- run:
|
- run:
|
||||||
name: install yarn packages
|
name: install yarn packages
|
||||||
command: cd ui-v2 && yarn install
|
command: cd ui/packages/consul-ui && yarn install --focus
|
||||||
|
|
||||||
- save_cache:
|
- save_cache:
|
||||||
key: *YARN_CACHE_KEY
|
key: *YARN_CACHE_KEY
|
||||||
paths:
|
paths:
|
||||||
- ui-v2/node_modules
|
- ui/node_modules
|
||||||
|
- ui/packages/consul-ui/node_modules
|
||||||
- run: *notify-slack-failure
|
- run: *notify-slack-failure
|
||||||
|
|
||||||
# build ember so frontend tests run faster
|
# build ember so frontend tests run faster
|
||||||
|
@ -578,13 +579,13 @@ jobs:
|
||||||
- checkout
|
- checkout
|
||||||
- restore_cache:
|
- restore_cache:
|
||||||
key: *YARN_CACHE_KEY
|
key: *YARN_CACHE_KEY
|
||||||
- run: cd ui-v2 && make build-ci
|
- run: cd ui/packages/consul-ui && make build-ci
|
||||||
|
|
||||||
# saves the build to a workspace to be passed to a downstream job
|
# saves the build to a workspace to be passed to a downstream job
|
||||||
- persist_to_workspace:
|
- persist_to_workspace:
|
||||||
root: ui-v2
|
root: ui
|
||||||
paths:
|
paths:
|
||||||
- dist
|
- packages/consul-ui/dist
|
||||||
- run: *notify-slack-failure
|
- run: *notify-slack-failure
|
||||||
|
|
||||||
# build ember so frontend tests run faster
|
# build ember so frontend tests run faster
|
||||||
|
@ -604,13 +605,13 @@ jobs:
|
||||||
- checkout
|
- checkout
|
||||||
- restore_cache:
|
- restore_cache:
|
||||||
key: *YARN_CACHE_KEY
|
key: *YARN_CACHE_KEY
|
||||||
- run: cd ui-v2 && make
|
- run: cd ui && make
|
||||||
|
|
||||||
# saves the build to a workspace to be passed to a downstream job
|
# saves the build to a workspace to be passed to a downstream job
|
||||||
- persist_to_workspace:
|
- persist_to_workspace:
|
||||||
root: ui-v2
|
root: ui
|
||||||
paths:
|
paths:
|
||||||
- dist
|
- packages/consul-ui/dist
|
||||||
- run: *notify-slack-failure
|
- run: *notify-slack-failure
|
||||||
|
|
||||||
# build static-assets file
|
# build static-assets file
|
||||||
|
@ -644,10 +645,10 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: commit agent/uiserver/bindata_assetfs.go if there are UI changes
|
name: commit agent/uiserver/bindata_assetfs.go if there are UI changes
|
||||||
command: |
|
command: |
|
||||||
# check if there are any changes in ui-v2/
|
# check if there are any changes in ui/
|
||||||
# if there are, we commit the ui static asset file
|
# if there are, we commit the ui static asset file
|
||||||
# HEAD^! is shorthand for HEAD^..HEAD (parent of HEAD and HEAD)
|
# HEAD^! is shorthand for HEAD^..HEAD (parent of HEAD and HEAD)
|
||||||
if ! git diff --quiet --exit-code HEAD^! ui-v2/; then
|
if ! git diff --quiet --exit-code HEAD^! ui/; then
|
||||||
git config --local user.email "hashicorp-ci@users.noreply.github.com"
|
git config --local user.email "hashicorp-ci@users.noreply.github.com"
|
||||||
git config --local user.name "hashicorp-ci"
|
git config --local user.name "hashicorp-ci"
|
||||||
|
|
||||||
|
@ -669,9 +670,9 @@ jobs:
|
||||||
- restore_cache:
|
- restore_cache:
|
||||||
key: *YARN_CACHE_KEY
|
key: *YARN_CACHE_KEY
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: ui-v2
|
at: ui
|
||||||
- run:
|
- run:
|
||||||
working_directory: ui-v2
|
working_directory: ui/packages/consul-ui
|
||||||
command: make test-node
|
command: make test-node
|
||||||
- run: *notify-slack-failure
|
- run: *notify-slack-failure
|
||||||
|
|
||||||
|
@ -689,12 +690,12 @@ jobs:
|
||||||
- restore_cache:
|
- restore_cache:
|
||||||
key: *YARN_CACHE_KEY
|
key: *YARN_CACHE_KEY
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: ui-v2
|
at: ui
|
||||||
- run:
|
- run:
|
||||||
working_directory: ui-v2
|
working_directory: ui/packages/consul-ui
|
||||||
command: node_modules/.bin/ember exam --split=$CIRCLE_NODE_TOTAL --partition=`expr $CIRCLE_NODE_INDEX + 1` --path dist --silent -r xunit
|
command: node_modules/.bin/ember exam --split=$CIRCLE_NODE_TOTAL --partition=`expr $CIRCLE_NODE_INDEX + 1` --path dist --silent -r xunit
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: ui-v2/test-results
|
path: ui/packages/consul-ui/test-results
|
||||||
- run: *notify-slack-failure
|
- run: *notify-slack-failure
|
||||||
|
|
||||||
# run ember frontend tests
|
# run ember frontend tests
|
||||||
|
@ -711,12 +712,12 @@ jobs:
|
||||||
- restore_cache:
|
- restore_cache:
|
||||||
key: *YARN_CACHE_KEY
|
key: *YARN_CACHE_KEY
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: ui-v2
|
at: ui
|
||||||
- run:
|
- run:
|
||||||
working_directory: ui-v2
|
working_directory: ui/packages/consul-ui
|
||||||
command: node_modules/.bin/ember exam --split=$CIRCLE_NODE_TOTAL --partition=`expr $CIRCLE_NODE_INDEX + 1` --path dist --silent -r xunit
|
command: node_modules/.bin/ember exam --split=$CIRCLE_NODE_TOTAL --partition=`expr $CIRCLE_NODE_INDEX + 1` --path dist --silent -r xunit
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: ui-v2/test-results
|
path: ui/packages/consul-ui/test-results
|
||||||
- run: *notify-slack-failure
|
- run: *notify-slack-failure
|
||||||
|
|
||||||
# run ember frontend unit tests to produce coverage report
|
# run ember frontend unit tests to produce coverage report
|
||||||
|
@ -728,13 +729,13 @@ jobs:
|
||||||
- restore_cache:
|
- restore_cache:
|
||||||
key: *YARN_CACHE_KEY
|
key: *YARN_CACHE_KEY
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: ui-v2
|
at: ui
|
||||||
- run:
|
- run:
|
||||||
working_directory: ui-v2
|
working_directory: ui/packages/consul-ui
|
||||||
command: make test-coverage-ci
|
command: make test-coverage-ci
|
||||||
- run:
|
- run:
|
||||||
name: codecov ui upload
|
name: codecov ui upload
|
||||||
working_directory: ui-v2
|
working_directory: ui/packages/consul-ui
|
||||||
command: bash <(curl -s https://codecov.io/bash) -v -c -C $CIRCLE_SHA1 -F ui
|
command: bash <(curl -s https://codecov.io/bash) -v -c -C $CIRCLE_SHA1 -F ui
|
||||||
- run: *notify-slack-failure
|
- run: *notify-slack-failure
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ FROM alpine:${ALPINE_VERSION}
|
||||||
|
|
||||||
ARG NODEJS_VERSION=12.15.0-r1
|
ARG NODEJS_VERSION=12.15.0-r1
|
||||||
ARG MAKE_VERSION=4.2.1-r2
|
ARG MAKE_VERSION=4.2.1-r2
|
||||||
ARG YARN_VERSION=1.19.1
|
ARG YARN_VERSION=1.22.5
|
||||||
|
|
||||||
RUN apk update && \
|
RUN apk update && \
|
||||||
apk add nodejs=${NODEJS_VERSION} nodejs-npm=${NODEJS_VERSION} make=${MAKE_VERSION} && \
|
apk add nodejs=${NODEJS_VERSION} nodejs-npm=${NODEJS_VERSION} make=${MAKE_VERSION} && \
|
||||||
|
@ -12,4 +12,4 @@ RUN apk update && \
|
||||||
mkdir /consul-src
|
mkdir /consul-src
|
||||||
|
|
||||||
WORKDIR /consul-src
|
WORKDIR /consul-src
|
||||||
CMD make
|
CMD make dist-docker
|
||||||
|
|
|
@ -49,7 +49,7 @@ function build_ui {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local sdir="$1"
|
local sdir="$1"
|
||||||
local ui_dir="${1}/ui-v2"
|
local ui_dir="${1}/ui"
|
||||||
|
|
||||||
# parse the version
|
# parse the version
|
||||||
version=$(parse_version "${sdir}")
|
version=$(parse_version "${sdir}")
|
||||||
|
@ -89,8 +89,8 @@ function build_ui {
|
||||||
(
|
(
|
||||||
tar -c $(ls -A | grep -v "^(node_modules\|dist\|tmp)") | docker cp - ${container_id}:/consul-src &&
|
tar -c $(ls -A | grep -v "^(node_modules\|dist\|tmp)") | docker cp - ${container_id}:/consul-src &&
|
||||||
status "Running build in container" && docker start -i ${container_id} &&
|
status "Running build in container" && docker start -i ${container_id} &&
|
||||||
rm -rf ${1}/ui-v2/dist &&
|
rm -rf ${1}/ui/dist &&
|
||||||
status "Copying back artifacts" && docker cp ${container_id}:/consul-src/dist ${1}/ui-v2/dist
|
status "Copying back artifacts" && docker cp ${container_id}:/consul-src/packages/consul-ui/dist ${1}/ui/dist
|
||||||
)
|
)
|
||||||
ret=$?
|
ret=$?
|
||||||
docker rm ${container_id} > /dev/null
|
docker rm ${container_id} > /dev/null
|
||||||
|
@ -99,7 +99,7 @@ function build_ui {
|
||||||
# Check the version is baked in correctly
|
# Check the version is baked in correctly
|
||||||
if test ${ret} -eq 0
|
if test ${ret} -eq 0
|
||||||
then
|
then
|
||||||
local ui_vers=$(ui_version "${1}/ui-v2/dist/index.html")
|
local ui_vers=$(ui_version "${1}/ui/dist/index.html")
|
||||||
if test "${version}" != "${ui_vers}"
|
if test "${version}" != "${ui_vers}"
|
||||||
then
|
then
|
||||||
err "ERROR: UI version mismatch. Expecting: '${version}' found '${ui_vers}'"
|
err "ERROR: UI version mismatch. Expecting: '${version}' found '${ui_vers}'"
|
||||||
|
@ -110,7 +110,7 @@ function build_ui {
|
||||||
# Check the logo is baked in correctly
|
# Check the logo is baked in correctly
|
||||||
if test ${ret} -eq 0
|
if test ${ret} -eq 0
|
||||||
then
|
then
|
||||||
local ui_logo_type=$(ui_logo_type "${1}/ui-v2/dist/index.html")
|
local ui_logo_type=$(ui_logo_type "${1}/ui/dist/index.html")
|
||||||
if test "${logo_type}" != "${ui_logo_type}"
|
if test "${logo_type}" != "${ui_logo_type}"
|
||||||
then
|
then
|
||||||
err "ERROR: UI logo type mismatch. Expecting: '${logo_type}' found '${ui_logo_type}'"
|
err "ERROR: UI logo type mismatch. Expecting: '${logo_type}' found '${ui_logo_type}'"
|
||||||
|
@ -123,7 +123,7 @@ function build_ui {
|
||||||
then
|
then
|
||||||
rm -rf ${1}/pkg/web_ui
|
rm -rf ${1}/pkg/web_ui
|
||||||
mkdir -p ${1}/pkg
|
mkdir -p ${1}/pkg
|
||||||
cp -r ${1}/ui-v2/dist ${1}/pkg/web_ui
|
cp -r ${1}/ui/dist ${1}/pkg/web_ui
|
||||||
fi
|
fi
|
||||||
|
|
||||||
popd > /dev/null
|
popd > /dev/null
|
||||||
|
@ -316,7 +316,7 @@ function build_consul {
|
||||||
then
|
then
|
||||||
status "Copying the source from '${sdir}' to /consul"
|
status "Copying the source from '${sdir}' to /consul"
|
||||||
(
|
(
|
||||||
tar -c $(ls | grep -v "^(ui\|ui-v2\|website\|bin\|pkg\|.git)") | docker cp - ${container_id}:/consul &&
|
tar -c $(ls | grep -v "^(ui\|website\|bin\|pkg\|.git)") | docker cp - ${container_id}:/consul &&
|
||||||
status "Running build in container" &&
|
status "Running build in container" &&
|
||||||
docker start -i ${container_id} &&
|
docker start -i ${container_id} &&
|
||||||
status "Copying back artifacts" &&
|
status "Copying back artifacts" &&
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
!bin
|
||||||
|
# See https://help.github.com/ignore-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# compiled output
|
||||||
|
/dist/
|
||||||
|
/tmp/
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
/node_modules/
|
||||||
|
|
||||||
|
# misc
|
||||||
|
/.env*
|
||||||
|
/.pnp*
|
||||||
|
/.sass-cache
|
||||||
|
/connect.lock
|
||||||
|
/coverage/
|
||||||
|
/libpeerconnection.log
|
||||||
|
/npm-debug.log*
|
||||||
|
/testem.log
|
||||||
|
/yarn-error.log
|
||||||
|
|
||||||
|
# ember-try
|
||||||
|
/.node_modules.ember-try/
|
||||||
|
/bower.json.ember-try
|
||||||
|
/package.json.ember-try
|
|
@ -0,0 +1,29 @@
|
||||||
|
.PHONY: clean dist dist-docker dist-netlify
|
||||||
|
# Called from the build ui docker image
|
||||||
|
dist-docker: dist
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf ./dist
|
||||||
|
|
||||||
|
# Build a distribution of the UI using the minimal amount of dependencies
|
||||||
|
dist: clean
|
||||||
|
cd packages/consul-ui && \
|
||||||
|
CONSUL_UI_INSTALL_FLAGS=--focus \
|
||||||
|
$(MAKE)
|
||||||
|
|
||||||
|
# Build a distribution of the UI for Netlify previews.
|
||||||
|
# The distribution must be copied into the ui/ subfolder
|
||||||
|
# in order to mirror the go binary
|
||||||
|
#
|
||||||
|
# Netlify Settings:
|
||||||
|
# ---
|
||||||
|
# base-directory: ui
|
||||||
|
# build command: make dist-netlify
|
||||||
|
# publish directory: ui/dist
|
||||||
|
dist-netlify: clean
|
||||||
|
mkdir -p dist/ui && \
|
||||||
|
cd packages/consul-ui && \
|
||||||
|
CONSUL_UI_INSTALL_FLAGS=--focus \
|
||||||
|
$(MAKE) build-staging && \
|
||||||
|
mv dist/* ../../dist/ui && \
|
||||||
|
cp _redirects ../../dist/_redirects
|
|
@ -0,0 +1,60 @@
|
||||||
|
# Consul UI Monorepo
|
||||||
|
|
||||||
|
This monorepo contains multiple projects, the UI for Consul and addons and
|
||||||
|
packages used by the UI.
|
||||||
|
|
||||||
|
This top-level repository provides limited common tasks, such as installation
|
||||||
|
and commit assistance. However, most tasks must be executed from within a
|
||||||
|
subproject, e.g. running or testing.
|
||||||
|
|
||||||
|
|
||||||
|
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
||||||
|
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
||||||
|
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
|
||||||
|
|
||||||
|
- [Prerequisites](#prerequisites)
|
||||||
|
- [Installation](#installation)
|
||||||
|
- [Yarn Commands](#yarn-commands)
|
||||||
|
- [Contributing](#contributing)
|
||||||
|
- [Building ToC](#building-toc)
|
||||||
|
|
||||||
|
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
You will need the following things properly installed on your computer.
|
||||||
|
|
||||||
|
* [Git][git]
|
||||||
|
* [Node.js][node]
|
||||||
|
* [Yarn][yarn] installed globally
|
||||||
|
* [Google Chrome][chrome]
|
||||||
|
* [Firefox][firefox]
|
||||||
|
|
||||||
|
[git]: https://git-scm.com/
|
||||||
|
[node]: https://nodejs.org/
|
||||||
|
[yarn]: https://classic.yarnpkg.com/lang/en/
|
||||||
|
[chrome]: https://google.com/chrome/
|
||||||
|
[firefox]: https://firefox.com/
|
||||||
|
[yarn-workspaces]: https://classic.yarnpkg.com/en/docs/workspaces/
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
* `git clone https://github.com/hashicorp/consul.git` this repository
|
||||||
|
* `cd ui`
|
||||||
|
* `yarn`
|
||||||
|
|
||||||
|
## Yarn Commands
|
||||||
|
|
||||||
|
List of available project commands. `yarn run <command-name>`
|
||||||
|
|
||||||
|
| Command | Description |
|
||||||
|
|---------------------|---|
|
||||||
|
| doc:toc | Re-builds the ToC for this README. |
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
### Building ToC
|
||||||
|
|
||||||
|
To autogenerate a ToC (table of contents) for this README,
|
||||||
|
run `yarn doc:toc`. Please update the ToC whenever editing the structure
|
||||||
|
of README.
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"private": true,
|
||||||
|
"description": "Monorepo for Consul UI, packages and addons.",
|
||||||
|
"license": "MPL-2.0",
|
||||||
|
"author": "HashiCorp",
|
||||||
|
"workspaces": {
|
||||||
|
"packages": [
|
||||||
|
"packages/*"
|
||||||
|
],
|
||||||
|
"nohoist": [
|
||||||
|
"**/@hashicorp/consul-api-double",
|
||||||
|
"**/@hashicorp/consul-api-double/**"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"doc:toc": "doctoc README.md"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"doctoc": "^1.4.0"
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
ROOT:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
ROOT:=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||||
|
CONSUL_UI_INSTALL_FLAGS?=
|
||||||
|
|
||||||
all: build
|
all: build
|
||||||
|
|
||||||
|
@ -7,16 +8,6 @@ deps: node_modules clean
|
||||||
clean:
|
clean:
|
||||||
rm -rf ./tmp
|
rm -rf ./tmp
|
||||||
|
|
||||||
# target for netlify ui previews
|
|
||||||
# Netlify Settings
|
|
||||||
# base-directory: ui-v2
|
|
||||||
# build command: make netlify
|
|
||||||
# publish directory: ui-v2/ui-dist
|
|
||||||
netlify: build-staging
|
|
||||||
mkdir -p ui-dist/ui \
|
|
||||||
&& mv dist/* ui-dist/ui/ \
|
|
||||||
&& cp _redirects ui-dist/_redirects
|
|
||||||
|
|
||||||
build-staging: deps
|
build-staging: deps
|
||||||
yarn run build:staging
|
yarn run build:staging
|
||||||
|
|
||||||
|
@ -77,7 +68,6 @@ test-coverage-ci: deps
|
||||||
test-parallel: deps
|
test-parallel: deps
|
||||||
yarn run test:parallel
|
yarn run test:parallel
|
||||||
|
|
||||||
|
|
||||||
lint: deps
|
lint: deps
|
||||||
yarn run lint:hbs && yarn run lint:js
|
yarn run lint:hbs && yarn run lint:js
|
||||||
|
|
||||||
|
@ -88,6 +78,6 @@ steps:
|
||||||
yarn run steps:list
|
yarn run steps:list
|
||||||
|
|
||||||
node_modules: yarn.lock package.json
|
node_modules: yarn.lock package.json
|
||||||
yarn install
|
yarn install $(CONSUL_UI_INSTALL_FLAGS)
|
||||||
|
|
||||||
.PHONY: all deps build start test test-view lint format clean
|
.PHONY: all deps build start test test-view lint format clean
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue