mirror of
https://github.com/apache/superset.git
synced 2026-04-09 03:16:07 +00:00
[Build] Collect frontend code coverage from Cypress tests (#9555)
* build: collect code coverage from Cypress Collect frontend code coverage reports from Cypress tests and add proper tagging for all tests. * Fix bash script lint error from shellcheck * Revert Cypress to 4.3.0 to see if it fixes a failing test
This commit is contained in:
149
.github/workflows/bashlib.sh
vendored
149
.github/workflows/bashlib.sh
vendored
@@ -15,10 +15,14 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
set -e
|
||||
|
||||
GITHUB_WORKSPACE=${GITHUB_WORKSPACE:-.}
|
||||
ASSETS_MANIFEST="$GITHUB_WORKSPACE/superset/static/assets/manifest.json"
|
||||
|
||||
# Echo only when not in parallel mode
|
||||
say() {
|
||||
if [[ ${INPUT_PARALLEL^^} != 'TRUE' ]]; then
|
||||
if [[ $(echo "$INPUT_PARALLEL" | tr '[:lower:]' '[:upper:]') != 'TRUE' ]]; then
|
||||
echo "$1"
|
||||
fi
|
||||
}
|
||||
@@ -67,41 +71,27 @@ build-assets() {
|
||||
say "::endgroup::"
|
||||
}
|
||||
|
||||
npm-build() {
|
||||
if [[ $1 = '--no-cache' ]]; then
|
||||
build-assets
|
||||
build-assets-cached() {
|
||||
cache-restore assets
|
||||
if [[ -f "$ASSETS_MANIFEST" ]]; then
|
||||
echo 'Skip frontend build because static assets already exist.'
|
||||
else
|
||||
cache-restore assets
|
||||
if [[ -f $GITHUB_WORKSPACE/superset/static/assets/manifest.json ]]; then
|
||||
echo 'Skip frontend build because static assets already exist.'
|
||||
else
|
||||
build-assets
|
||||
cache-save assets
|
||||
fi
|
||||
build-assets
|
||||
cache-save assets
|
||||
fi
|
||||
}
|
||||
|
||||
cypress-install() {
|
||||
cd "$GITHUB_WORKSPACE/superset-frontend/cypress-base"
|
||||
build-instrumented-assets() {
|
||||
cd "$GITHUB_WORKSPACE/superset-frontend"
|
||||
|
||||
cache-restore cypress
|
||||
|
||||
say "::group::Install Cypress"
|
||||
npm ci
|
||||
say "::endgroup::"
|
||||
|
||||
cache-save cypress
|
||||
}
|
||||
|
||||
testdata() {
|
||||
cd "$GITHUB_WORKSPACE"
|
||||
say "::group::Load test data"
|
||||
# must specify PYTHONPATH to make `tests.superset_test_config` importable
|
||||
export PYTHONPATH="$GITHUB_WORKSPACE"
|
||||
superset db upgrade
|
||||
superset load_test_users
|
||||
superset load_examples --load-test-data
|
||||
superset init
|
||||
say "::group::Build static assets with JS instrumented for test coverage"
|
||||
cache-restore instrumented-assets
|
||||
if [[ -f "$ASSETS_MANIFEST" ]]; then
|
||||
echo 'Skip frontend build because instrumented static assets already exist.'
|
||||
else
|
||||
npm run build-instrumented -- --no-progress
|
||||
cache-save instrumented-assets
|
||||
fi
|
||||
say "::endgroup::"
|
||||
}
|
||||
|
||||
@@ -131,3 +121,100 @@ setup-mysql() {
|
||||
EOF
|
||||
say "::endgroup::"
|
||||
}
|
||||
|
||||
testdata() {
|
||||
cd "$GITHUB_WORKSPACE"
|
||||
say "::group::Load test data"
|
||||
# must specify PYTHONPATH to make `tests.superset_test_config` importable
|
||||
export PYTHONPATH="$GITHUB_WORKSPACE"
|
||||
superset db upgrade
|
||||
superset load_test_users
|
||||
superset load_examples --load-test-data
|
||||
superset init
|
||||
say "::endgroup::"
|
||||
}
|
||||
|
||||
codecov() {
|
||||
say "::group::Upload code coverage"
|
||||
local codecovScript="${HOME}/codecov.sh"
|
||||
# download bash script if needed
|
||||
if [[ ! -f "$codecovScript" ]]; then
|
||||
curl -s https://codecov.io/bash > "$codecovScript"
|
||||
fi
|
||||
bash "$codecovScript" "$@"
|
||||
say "::endgroup::"
|
||||
}
|
||||
|
||||
cypress-install() {
|
||||
cd "$GITHUB_WORKSPACE/superset-frontend/cypress-base"
|
||||
|
||||
cache-restore cypress
|
||||
|
||||
say "::group::Install Cypress"
|
||||
npm ci
|
||||
say "::endgroup::"
|
||||
|
||||
cache-save cypress
|
||||
}
|
||||
|
||||
# Run Cypress and upload coverage reports
|
||||
cypress-run() {
|
||||
cd "$GITHUB_WORKSPACE/superset-frontend/cypress-base"
|
||||
|
||||
local page=$1
|
||||
local group=${2:-Default}
|
||||
local cypress="./node_modules/.bin/cypress run"
|
||||
local browser=${CYPRESS_BROWSER:-chrome}
|
||||
|
||||
say "::group::Run Cypress for [$page]"
|
||||
if [[ -z $CYPRESS_RECORD_KEY ]]; then
|
||||
$cypress --spec "cypress/integration/$page" --browser "$browser"
|
||||
else
|
||||
# additional flags for Cypress dashboard recording
|
||||
$cypress --spec "cypress/integration/$page" --browser "$browser" --record \
|
||||
--group "$group" --tag "${GITHUB_REPOSITORY},${GITHUB_EVENT_NAME}"
|
||||
fi
|
||||
|
||||
# don't add quotes to $record because we do want word splitting
|
||||
say "::endgroup::"
|
||||
}
|
||||
|
||||
cypress-run-all() {
|
||||
# Start Flask and run it in background
|
||||
# --no-debugger means disable the interactive debugger on the 500 page
|
||||
# so errors can print to stderr.
|
||||
local flasklog="${HOME}/flask.log"
|
||||
local port=8081
|
||||
|
||||
nohup flask run --no-debugger -p $port > "$flasklog" 2>&1 < /dev/null &
|
||||
local flaskProcessId=$!
|
||||
|
||||
cypress-run "*/*"
|
||||
|
||||
# Upload code coverage separately so each page can have separate flags
|
||||
# -c will clean existing coverage reports, -F means add flags
|
||||
codecov -cF "cypress"
|
||||
|
||||
# After job is done, print out Flask log for debugging
|
||||
say "::group::Flask log for default run"
|
||||
cat "$flasklog"
|
||||
say "::endgroup::"
|
||||
|
||||
# Rerun SQL Lab tests with backend persist enabled
|
||||
export SUPERSET_CONFIG=tests.superset_test_config_sqllab_backend_persist
|
||||
|
||||
# Restart Flask with new configs
|
||||
kill $flaskProcessId
|
||||
nohup flask run --no-debugger -p $port > "$flasklog" 2>&1 < /dev/null &
|
||||
local flaskProcessId=$!
|
||||
|
||||
cypress-run "sqllab/*" "Backend persist"
|
||||
codecov -cF "cypress"
|
||||
|
||||
say "::group::Flask log for backend persist"
|
||||
cat "$flasklog"
|
||||
say "::endgroup::"
|
||||
|
||||
# make sure the program exits
|
||||
kill $flaskProcessId
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user