18874: Merge commit '6f8dcb2b13f3058db656908fb26b09e23b527f08' into 18874-merge-wb2
authorTom Clegg <tom@curii.com>
Thu, 28 Sep 2023 15:24:01 +0000 (11:24 -0400)
committerTom Clegg <tom@curii.com>
Thu, 28 Sep 2023 15:24:01 +0000 (11:24 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

61 files changed:
1  2 
services/workbench2/Makefile
services/workbench2/cypress/integration/collection.spec.js
services/workbench2/cypress/integration/process.spec.js
services/workbench2/cypress/integration/project.spec.js
services/workbench2/cypress/integration/search.spec.js
services/workbench2/cypress/integration/sharing.spec.js
services/workbench2/cypress/integration/side-panel.spec.js
services/workbench2/cypress/integration/user-profile.spec.js
services/workbench2/cypress/integration/virtual-machine-admin.spec.js
services/workbench2/cypress/integration/workflow.spec.js
services/workbench2/cypress/support/commands.js
services/workbench2/src/common/config.ts
services/workbench2/src/index.tsx
services/workbench2/src/models/container-request.ts
services/workbench2/src/models/group.ts
services/workbench2/src/models/project.ts
services/workbench2/src/models/test-utils.ts
services/workbench2/src/models/user.ts
services/workbench2/src/models/workflow.ts
services/workbench2/src/services/auth-service/auth-service.ts
services/workbench2/src/services/common-service/common-resource-service.ts
services/workbench2/src/services/groups-service/groups-service.ts
services/workbench2/src/services/log-service/log-service.test.ts
services/workbench2/src/services/log-service/log-service.ts
services/workbench2/src/services/user-service/user-service.ts
services/workbench2/src/store/advanced-tab/advanced-tab.tsx
services/workbench2/src/store/auth/auth-action.test.ts
services/workbench2/src/store/auth/auth-middleware.ts
services/workbench2/src/store/breadcrumbs/breadcrumbs-actions.ts
services/workbench2/src/store/collections-content-address-panel/collections-content-address-middleware-service.ts
services/workbench2/src/store/context-menu/context-menu-actions.test.ts
services/workbench2/src/store/context-menu/context-menu-actions.ts
services/workbench2/src/store/process-logs-panel/process-logs-panel-actions.ts
services/workbench2/src/store/processes/processes-actions.ts
services/workbench2/src/store/resource-type-filters/resource-type-filters.test.ts
services/workbench2/src/store/resource-type-filters/resource-type-filters.ts
services/workbench2/src/store/resources/resources.test.ts
services/workbench2/src/store/resources/resources.ts
services/workbench2/src/store/run-process-panel/run-process-panel-actions.test.ts
services/workbench2/src/store/run-process-panel/run-process-panel-actions.ts
services/workbench2/src/store/shared-with-me-panel/shared-with-me-middleware-service.ts
services/workbench2/src/store/trash-panel/trash-panel-middleware-service.ts
services/workbench2/src/store/tree-picker/tree-picker-actions.ts
services/workbench2/src/store/user-profile/user-profile-actions.ts
services/workbench2/src/store/workflow-panel/workflow-panel-actions.ts
services/workbench2/src/views-components/context-menu/action-sets/workflow-action-set.ts
services/workbench2/src/views-components/context-menu/context-menu.tsx
services/workbench2/src/views-components/data-explorer/renderers.tsx
services/workbench2/src/views-components/login-form/login-form.tsx
services/workbench2/src/views-components/main-app-bar/account-menu.tsx
services/workbench2/src/views-components/side-panel-button/side-panel-button.tsx
services/workbench2/src/views/collection-panel/collection-panel.tsx
services/workbench2/src/views/group-details-panel/group-details-panel.tsx
services/workbench2/src/views/process-panel/process-details-attributes.tsx
services/workbench2/src/views/process-panel/process-io-card.tsx
services/workbench2/src/views/run-process-panel/inputs/enum-input.tsx
services/workbench2/src/views/run-process-panel/inputs/project-input.tsx
services/workbench2/src/views/run-process-panel/run-process-inputs-form.tsx
services/workbench2/src/views/user-profile-panel/user-profile-panel-root.tsx
services/workbench2/src/views/user-profile-panel/user-profile-panel.tsx
services/workbench2/tools/run-integration-tests.sh

index 7a733b6ab3aca10284363b5b52af8535779e4382,0000000000000000000000000000000000000000..d621eb3e2f8842f07518db73c1416b20c45efd0f
mode 100644,000000..100644
--- /dev/null
@@@ -1,159 -1,0 +1,158 @@@
- TARGETS?=centos7 debian10 debian11 ubuntu1804 ubuntu2004
 +# Copyright (C) The Arvados Authors. All rights reserved.
 +#
 +# SPDX-License-Identifier: Apache-2.0
 +
 +# Use bash, and run all lines in each recipe as one shell command
 +SHELL := /bin/bash
 +.ONESHELL:
 +
 +GOPATH?=~/go
 +APP_NAME?=arvados-workbench2
 +
 +# VERSION uses all the above to produce X.Y.Z.timestamp
 +# something in the lines of 1.2.0.20180612145021, this will be the package version
 +# it can be overwritten when invoking make as in make packages VERSION=1.2.0
 +VERSION?=$(shell ./version-at-commit.sh HEAD)
 +# We don't use BUILD_NUMBER at the moment, but it needs to be defined
 +BUILD_NUMBER?=0
 +GIT_COMMIT?=$(shell git rev-parse --short HEAD)
 +
 +# ITERATION is the package iteration, intended for manual change if anything non-code related
 +# changes in the package. (i.e. example config files externally added
 +ITERATION?=1
 +
-       for target in $(TARGETS) ; do \
-               mkdir -p packages/$$target
-               if [[ $$target =~ ^centos ]]; then
-                       cp -p $(RPM_FILE) packages/$$target ; \
-               else
-                       cp -p $(DEB_FILE) packages/$$target ; \
-               fi
-       done
-       rm -f $(RPM_FILE)
-       rm -f $(DEB_FILE)
++TARGETS?=centos7 rocky8 debian10 debian11 ubuntu1804 ubuntu2004
 +
 +ARVADOS_DIRECTORY?=unset
 +
 +DESCRIPTION=Arvados Workbench2 - Arvados is a free and open source platform for big data science.
 +MAINTAINER=Arvados Package Maintainers <packaging@arvados.org>
 +
 +# DEST_DIR will have the build package copied.
 +DEST_DIR=/var/www/$(APP_NAME)/workbench2/
 +
 +# Debian package file
 +DEB_FILE=$(APP_NAME)_$(VERSION)-$(ITERATION)_amd64.deb
 +
 +# redHat package file
 +RPM_FILE=$(APP_NAME)-$(VERSION)-$(ITERATION).x86_64.rpm
 +
 +export WORKSPACE?=$(shell pwd)
 +
 +.PHONY: help clean* yarn-install test build packages packages-with-version integration-tests-in-docker
 +
 +help:
 +      @echo >&2
 +      @echo >&2 "There is no default make target here.  Did you mean 'make test'?"
 +      @echo >&2
 +      @echo >&2 "More info:"
 +      @echo >&2 "  Installing              --> http://doc.arvados.org/install"
 +      @echo >&2 "  Developing/contributing --> https://dev.arvados.org"
 +      @echo >&2 "  Project home            --> https://arvados.org"
 +      @echo >&2
 +      @false
 +
 +clean-deb:
 +      rm -f $(WORKSPACE)/*.deb
 +
 +clean-rpm:
 +      rm -f $(WORKSPACE)/*.rpm
 +
 +clean-node-modules:
 +      rm -rf $(WORKSPACE)/node_modules
 +
 +clean: clean-rpm clean-deb clean-node-modules
 +
 +arvados-server-install: check-arvados-directory
 +      cd $(ARVADOS_DIRECTORY)
 +      go mod download
 +      cd cmd/arvados-server
 +      go install
 +      cd -
 +      ls -l $(GOPATH)/bin/arvados-server
 +      $(GOPATH)/bin/arvados-server install -type test
 +
 +yarn-install:
 +      yarn install
 +
 +unit-tests: yarn-install
 +      yarn test --no-watchAll --bail --ci
 +
 +integration-tests: yarn-install check-arvados-directory
 +      yarn run cypress install
 +      $(WORKSPACE)/tools/run-integration-tests.sh -a $(ARVADOS_DIRECTORY)
 +
 +integration-tests-in-docker: workbench2-build-image check-arvados-directory
 +      docker run -ti -v$(PWD):/usr/src/workbench2 -v$(ARVADOS_DIRECTORY):/usr/src/arvados -w /usr/src/workbench2 -e ARVADOS_DIRECTORY=/usr/src/arvados workbench2-build make arvados-server-install integration-tests
 +
 +unit-tests-in-docker: workbench2-build-image check-arvados-directory
 +      docker run -ti -v$(PWD):/usr/src/workbench2 -v$(ARVADOS_DIRECTORY):/usr/src/arvados -w /usr/src/workbench2 -e ARVADOS_DIRECTORY=/usr/src/arvados workbench2-build make arvados-server-install unit-tests
 +
 +test: unit-tests integration-tests
 +
 +build: yarn-install
 +      VERSION=$(VERSION) BUILD_NUMBER=$(BUILD_NUMBER) GIT_COMMIT=$(GIT_COMMIT) yarn build
 +
 +$(DEB_FILE): build
 +      fpm \
 +       -s dir \
 +       -t deb \
 +       -n "$(APP_NAME)" \
 +       -v "$(VERSION)" \
 +       --iteration "$(ITERATION)" \
 +       --vendor="The Arvados Authors" \
 +       --maintainer="$(MAINTAINER)" \
 +       --url="https://arvados.org" \
 +       --license="GNU Affero General Public License, version 3.0" \
 +       --description="$(DESCRIPTION)" \
 +       --config-files="etc/arvados/$(APP_NAME)/workbench2.example.json" \
 +      $(WORKSPACE)/build/=$(DEST_DIR) \
 +      etc/arvados/workbench2/workbench2.example.json=/etc/arvados/$(APP_NAME)/workbench2.example.json
 +
 +$(RPM_FILE): build
 +      fpm \
 +       -s dir \
 +       -t rpm \
 +       -n "$(APP_NAME)" \
 +       -v "$(VERSION)" \
 +       --iteration "$(ITERATION)" \
 +       --vendor="The Arvados Authors" \
 +       --maintainer="$(MAINTAINER)" \
 +       --url="https://arvados.org" \
 +       --license="GNU Affero General Public License, version 3.0" \
 +       --description="$(DESCRIPTION)" \
 +       --config-files="etc/arvados/$(APP_NAME)/workbench2.example.json" \
 +       $(WORKSPACE)/build/=$(DEST_DIR) \
 +      etc/arvados/workbench2/workbench2.example.json=/etc/arvados/$(APP_NAME)/workbench2.example.json
 +
 +copy: $(DEB_FILE) $(RPM_FILE)
++      for target in $(TARGETS); do \
++              mkdir -p "packages/$$target" && \
++              case "$$target" in \
++                      centos*|rocky*) cp -p "$(RPM_FILE)" "packages/$$target" ;; \
++                      debian*|ubuntu*) cp -p "$(DEB_FILE)" "packages/$$target" ;; \
++                      *) echo "Unknown copy target $$target"; exit 1 ;; \
++              esac ; \
++      done ; \
++      rm -f "$(DEB_FILE)" "$(RPM_FILE)"
 +
 +# use FPM to create DEB and RPM
 +packages: copy
 +
 +check-arvados-directory:
 +      @if test "${ARVADOS_DIRECTORY}" == "unset"; then echo "the environment variable ARVADOS_DIRECTORY must be set to the path of an arvados git checkout"; exit 1; fi
 +      @if ! test -d "${ARVADOS_DIRECTORY}"; then echo "the environment variable ARVADOS_DIRECTORY does not point at a directory"; exit 1; fi
 +
 +packages-in-docker: check-arvados-directory workbench2-build-image
 +      docker run --env ci="true" \
 +              --env ARVADOS_DIRECTORY=/tmp/arvados \
 +              --env APP_NAME=${APP_NAME} \
 +              --env ITERATION=${ITERATION} \
 +              --env TARGETS="${TARGETS}" \
 +              -w="/tmp/workbench2" \
 +              -t -v ${WORKSPACE}:/tmp/workbench2 \
 +              -v ${ARVADOS_DIRECTORY}:/tmp/arvados workbench2-build:latest \
 +              make packages
 +
 +workbench2-build-image:
 +      (cd docker && docker build -t workbench2-build .)
Simple merge
index 0000000000000000000000000000000000000000,2519155bc001d88d0084b1c4977235b7eb2db45d..2519155bc001d88d0084b1c4977235b7eb2db45d
mode 000000,100644..100644
--- /dev/null
index 68d9e357604324f2d717bb7b481d9db48bc2e5fb,0000000000000000000000000000000000000000..ece13cae1837dbaac61211ea3ceaf5b2a928d85f
mode 100755,000000..100755
--- /dev/null
@@@ -1,151 -1,0 +1,151 @@@
- yarn run wait-on --timeout 300000 https-get://localhost:${WB2_PORT} || exit 1
 +#!/bin/bash
 +# Copyright (C) The Arvados Authors. All rights reserved.
 +#
 +# SPDX-License-Identifier: AGPL-3.0
 +
 +set -e -o pipefail
 +
 +cleanup() {
 +    set -x
 +    set +e +o pipefail
 +    kill ${arvboot_PID} ${consume_stdout_PID} ${wb2_PID} ${consume_wb2_stdout_PID}
 +    wait ${arvboot_PID} ${consume_stdout_PID} ${wb2_PID} ${consume_wb2_stdout_PID} || true
 +    if [ ${CLEANUP_ARVADOS_DIR} -eq 1 ]; then
 +        rm -rf ${ARVADOS_DIR}
 +    fi
 +    echo >&2 "done"
 +}
 +
 +random_free_port() {
 +    while port=$(shuf -n1 -i $(cat /proc/sys/net/ipv4/ip_local_port_range | tr '\011' '-'))
 +    netstat -atun | grep -q ":$port\s" ; do
 +        continue
 +    done
 +    echo $port
 +}
 +
 +usage() {
 +    echo "Usage: ${0} [options]"
 +    echo "Options:"
 +    echo "  -i            Run Cypress in interactive mode."
 +    echo "  -a PATH       Arvados dir. If PATH doesn't exist, a repo clone is downloaded there."
 +    echo "  -w PATH       Workbench2 dir. Default: Current working directory"
 +    exit 0
 +}
 +
 +# Allow self-signed certs on 'wait-on'
 +export NODE_TLS_REJECT_UNAUTHORIZED=0
 +
 +ARVADOS_DIR="unset"
 +CLEANUP_ARVADOS_DIR=0
 +CYPRESS_MODE="run"
 +WB2_DIR=`pwd`
 +
 +while getopts "ia:w:" o; do
 +    case "${o}" in
 +        i)
 +            # Interactive mode
 +            CYPRESS_MODE="open"
 +            ;;
 +        a)
 +            ARVADOS_DIR=${OPTARG}
 +            ;;
 +        w)
 +            WB2_DIR=${OPTARG}
 +            ;;
 +        *)
 +            echo "Invalid Option: -$OPTARG" 1>&2
 +            usage
 +            ;;
 +    esac
 +done
 +shift $((OPTIND-1))
 +
 +if [ "${ARVADOS_DIR}" = "unset" ]; then
 +  echo "ARVADOS_DIR is unset, creating a temporary directory for new checkout"
 +  ARVADOS_DIR=`mktemp -d`
 +fi
 +
 +echo "ARVADOS_DIR is ${ARVADOS_DIR}"
 +
 +ARVADOS_LOG=${ARVADOS_DIR}/arvados.log
 +ARVADOS_CONF=${WB2_DIR}/tools/arvados_config.yml
 +VOCABULARY_CONF=${WB2_DIR}/tools/example-vocabulary.json
 +
 +if [ ! -f "${WB2_DIR}/src/index.tsx" ]; then
 +    echo "ERROR: '${WB2_DIR}' isn't workbench2's directory"
 +    usage
 +fi
 +
 +if [ ! -f ${ARVADOS_CONF} ]; then
 +    echo "ERROR: Arvados config file ${ARVADOS_CONF} not found"
 +    exit 1
 +fi
 +
 +if [ -f "${WB2_DIR}/public/config.json" ]; then
 +    echo "ERROR: Please move public/config.json file out of the way"
 +    exit 1
 +fi
 +
 +if [ ! -d "${ARVADOS_DIR}/.git" ]; then
 +    mkdir -p ${ARVADOS_DIR} || exit 1
 +    CLEANUP_ARVADOS_DIR=1
 +    echo "Downloading arvados..."
 +    git clone https://git.arvados.org/arvados.git ${ARVADOS_DIR} || exit 1
 +fi
 +
 +if [ ! -x ${GOPATH:-${HOME}/go}/bin/arvados-server ]; then
 +    echo "Building & installing arvados-server..."
 +    cd ${ARVADOS_DIR}
 +    go mod download || exit 1
 +    cd cmd/arvados-server
 +    go install
 +    cd -
 +
 +    echo "Installing dev dependencies..."
 +    ${GOPATH:-${HOME}/go}/bin/arvados-server install -type test || exit 1
 +fi
 +
 +echo "Launching arvados in test mode..."
 +TMPSUBDIR=$(mktemp -d -p /tmp | cut -d \/ -f3) # Removes the /tmp/ part for the regex below
 +TMPDIR=/tmp/${TMPSUBDIR}
 +cp ${VOCABULARY_CONF} ${TMPDIR}/voc.json
 +cp ${ARVADOS_CONF} ${TMPDIR}/arvados.yml
 +sed -i "s/VocabularyPath: \".*\"/VocabularyPath: \"\/tmp\/${TMPSUBDIR}\/voc.json\"/" ${TMPDIR}/arvados.yml
 +coproc arvboot (${GOPATH:-${HOME}/go}/bin/arvados-server boot \
 +    -type test \
 +    -source "${ARVADOS_DIR}" \
 +    -config ${TMPDIR}/arvados.yml \
 +    -no-workbench1 \
 +    -no-workbench2 \
 +    -own-temporary-database \
 +    -timeout 20m 2> ${ARVADOS_LOG})
 +trap cleanup ERR EXIT
 +
 +read controllerInfo <&"${arvboot[0]}" || exit 1
 +controllerURL=`echo "$controllerInfo" | awk '{print $1;}'`;
 +echo "Arvados up and running at ${controllerURL}"
 +IFS='/' ; read -ra controllerHostPort <<< "${controllerURL}" ; unset IFS
 +controllerHostPort=${controllerHostPort[2]}
 +
 +# Copy coproc's stdout to stderr, to ensure `arvados-server boot`
 +# doesn't get blocked trying to write stdout.
 +exec 7<&"${arvboot[0]}"; coproc consume_stdout (cat <&7 >&2)
 +
 +cd ${WB2_DIR}
 +echo "Launching workbench2..."
 +WB2_PORT=`random_free_port`
 +coproc wb2 (PORT=${WB2_PORT} \
 +    REACT_APP_ARVADOS_API_HOST=${controllerHostPort} \
 +    yarn start)
 +exec 8<&"${wb2[0]}"; coproc consume_wb2_stdout (cat <&8 >&2)
 +
 +# Wait for workbench2 to be up.
 +# Using https-get to avoid false positive 'ready' detection.
-     CYPRESS_BASE_URL=https://localhost:${WB2_PORT} \
++yarn run wait-on --timeout 300000 https-get://127.0.0.1:${WB2_PORT} || exit 1
 +
 +echo "Running tests..."
 +CYPRESS_system_token=systemusertesttoken1234567890aoeuidhtnsqjkxbmwvzpy \
 +    CYPRESS_controller_url=${controllerURL} \
++    CYPRESS_BASE_URL=https://127.0.0.1:${WB2_PORT} \
 +    yarn run cypress ${CYPRESS_MODE}