mirror of
https://github.com/apache/superset.git
synced 2026-04-20 08:34:37 +00:00
refactor(monorepo): move superset-ui to superset(stage 2) (#17552)
This commit is contained in:
139
superset-frontend/scripts/build.js
Normal file
139
superset-frontend/scripts/build.js
Normal file
@@ -0,0 +1,139 @@
|
||||
#!/bin/env node
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/* eslint-disable no-console */
|
||||
/**
|
||||
* Build packages/plugins filtered by globs
|
||||
*/
|
||||
process.env.PATH = `./node_modules/.bin:${process.env.PATH}`;
|
||||
|
||||
const rimraf = require('rimraf');
|
||||
const { spawnSync } = require('child_process');
|
||||
const fastGlob = require('fast-glob');
|
||||
const { argv } = require('yargs')
|
||||
.option('lint', {
|
||||
describe: 'whether to run ESLint',
|
||||
type: 'boolean',
|
||||
// lint is slow, so not turning it on by default
|
||||
default: false,
|
||||
})
|
||||
.option('babel', {
|
||||
describe: 'Whether to run Babel',
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
})
|
||||
.option('clean', {
|
||||
describe: 'Whether to clean cache',
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
})
|
||||
.option('type', {
|
||||
describe: 'Whether to run tsc',
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
});
|
||||
|
||||
const {
|
||||
_: globs,
|
||||
lint: shouldLint,
|
||||
babel: shouldRunBabel,
|
||||
clean: shouldCleanup,
|
||||
type: shouldRunTyping,
|
||||
} = argv;
|
||||
const glob = globs.length > 1 ? `{${globs.join(',')}}` : globs[0] || '*';
|
||||
|
||||
const BABEL_CONFIG = '--config-file=../../babel.config.js';
|
||||
|
||||
// packages that do not need tsc
|
||||
const META_PACKAGES = new Set(['demo', 'generator-superset']);
|
||||
|
||||
function run(cmd, options) {
|
||||
console.log(`\n>> ${cmd}\n`);
|
||||
const [p, ...args] = cmd.split(' ');
|
||||
const runner = spawnSync;
|
||||
const { status } = runner(p, args, { stdio: 'inherit', ...options });
|
||||
if (status !== 0) {
|
||||
process.exit(status);
|
||||
}
|
||||
}
|
||||
|
||||
function getPackages(packagePattern, tsOnly = false) {
|
||||
let pattern = packagePattern;
|
||||
if (pattern === '*' && !tsOnly) {
|
||||
return `@superset-ui/!(${[...META_PACKAGES].join('|')})`;
|
||||
}
|
||||
if (!pattern.includes('*')) {
|
||||
pattern = `*${pattern}`;
|
||||
}
|
||||
const packages = [
|
||||
...new Set(
|
||||
fastGlob
|
||||
.sync([
|
||||
`./node_modules/@superset-ui/${pattern}/src/**/*.${
|
||||
tsOnly ? '{ts,tsx}' : '{ts,tsx,js,jsx}'
|
||||
}`,
|
||||
])
|
||||
.map(x => x.split('/')[3])
|
||||
.filter(x => !META_PACKAGES.has(x)),
|
||||
),
|
||||
];
|
||||
if (packages.length === 0) {
|
||||
throw new Error('No matching packages');
|
||||
}
|
||||
return `@superset-ui/${
|
||||
packages.length > 1 ? `{${packages.join(',')}}` : packages[0]
|
||||
}`;
|
||||
}
|
||||
|
||||
let scope = getPackages(glob);
|
||||
|
||||
if (shouldLint) {
|
||||
run(`npm run lint --fix {packages,plugins}/${scope}/{src,test}`);
|
||||
}
|
||||
|
||||
if (shouldCleanup) {
|
||||
// these modules will be installed by `npm link` but not useful for actual build
|
||||
const dirtyModules = 'node_modules/@types/react,node_modules/@superset-ui';
|
||||
const cachePath = `./node_modules/${scope}/{lib,esm,tsconfig.tsbuildinfo,${dirtyModules}}`;
|
||||
console.log(`\n>> Cleaning up ${cachePath}`);
|
||||
rimraf.sync(cachePath);
|
||||
}
|
||||
|
||||
if (shouldRunBabel) {
|
||||
console.log('--- Run babel --------');
|
||||
const babelCommand = `lerna exec --stream --concurrency 10 --scope ${scope}
|
||||
-- babel ${BABEL_CONFIG} src --extensions ".ts,.tsx,.js,.jsx" --copy-files`;
|
||||
run(`${babelCommand} --out-dir lib`);
|
||||
|
||||
console.log('--- Run babel esm ---');
|
||||
// run again with
|
||||
run(`${babelCommand} --out-dir esm`, {
|
||||
env: { ...process.env, BABEL_OUTPUT: 'esm' },
|
||||
});
|
||||
}
|
||||
|
||||
if (shouldRunTyping) {
|
||||
console.log('--- Run tsc ---');
|
||||
// only run tsc for packages with ts files
|
||||
scope = getPackages(glob, true);
|
||||
run(`lerna exec --stream --concurrency 3 --scope ${scope} \
|
||||
-- ../../scripts/tsc.sh --build`);
|
||||
}
|
||||
90
superset-frontend/scripts/check_license.sh
Executable file
90
superset-frontend/scripts/check_license.sh
Executable file
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
|
||||
acquire_rat_jar () {
|
||||
|
||||
URL="https://repo1.maven.org/maven2/org/apache/rat/apache-rat/${RAT_VERSION}/apache-rat-${RAT_VERSION}.jar"
|
||||
|
||||
JAR="$rat_jar"
|
||||
|
||||
# Download rat launch jar if it hasn't been downloaded yet
|
||||
if [ ! -f "$JAR" ]; then
|
||||
# Download
|
||||
printf "Attempting to fetch rat\n"
|
||||
JAR_DL="${JAR}.part"
|
||||
if [ $(command -v curl) ]; then
|
||||
curl -L --silent "${URL}" > "$JAR_DL" && mv "$JAR_DL" "$JAR"
|
||||
elif [ $(command -v wget) ]; then
|
||||
wget --quiet ${URL} -O "$JAR_DL" && mv "$JAR_DL" "$JAR"
|
||||
else
|
||||
printf "You do not have curl or wget installed, please install rat manually.\n"
|
||||
exit -1
|
||||
fi
|
||||
fi
|
||||
|
||||
unzip -tq "$JAR" &> /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
# We failed to download
|
||||
rm "$JAR"
|
||||
printf "Our attempt to download rat locally to ${JAR} failed. Please install rat manually.\n"
|
||||
exit -1
|
||||
fi
|
||||
printf "Done downloading.\n"
|
||||
}
|
||||
|
||||
# Go to the project root directory
|
||||
FWDIR="$(cd "`dirname "$0"`"/..; pwd)"
|
||||
cd "$FWDIR"
|
||||
|
||||
TMP_DIR=/tmp
|
||||
|
||||
if test -x "$JAVA_HOME/bin/java"; then
|
||||
declare java_cmd="$JAVA_HOME/bin/java"
|
||||
else
|
||||
declare java_cmd=java
|
||||
fi
|
||||
|
||||
export RAT_VERSION=0.13
|
||||
export rat_jar="${TMP_DIR}"/lib/apache-rat-${RAT_VERSION}.jar
|
||||
mkdir -p ${TMP_DIR}/lib
|
||||
|
||||
|
||||
[[ -f "$rat_jar" ]] || acquire_rat_jar || {
|
||||
echo "Download failed. Obtain the rat jar manually and place it at $rat_jar"
|
||||
exit 1
|
||||
}
|
||||
|
||||
echo "Running license checks. This can take a while."
|
||||
echo "$FWDIR"/.rat-excludes
|
||||
$java_cmd -jar "$rat_jar" -E "$FWDIR"/.rat-excludes -d "$FWDIR" > rat-results.txt
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "RAT exited abnormally"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ERRORS="$(cat rat-results.txt | grep -e "??")"
|
||||
|
||||
if test ! -z "$ERRORS"; then
|
||||
echo >&2 "Could not find Apache license headers in the following files:"
|
||||
echo >&2 "$ERRORS"
|
||||
exit 1
|
||||
else
|
||||
echo -e "RAT checks passed."
|
||||
fi
|
||||
44
superset-frontend/scripts/commitlint.js
Executable file
44
superset-frontend/scripts/commitlint.js
Executable file
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Check commit messages only for the first commit in branch.
|
||||
*/
|
||||
const { execSync, spawnSync } = require('child_process');
|
||||
|
||||
const envVariable = process.argv[2] || 'GIT_PARAMS';
|
||||
|
||||
if (!envVariable || !process.env[envVariable]) {
|
||||
process.stdout.write(
|
||||
`Please provide a commit message via \`${envVariable}={Your Message}\`.\n`,
|
||||
);
|
||||
process.exit(0);
|
||||
}
|
||||
if (
|
||||
execSync('git rev-list --count HEAD ^master', {
|
||||
encoding: 'utf-8',
|
||||
}).trim() === '0'
|
||||
) {
|
||||
const { status } = spawnSync(`commitlint`, ['-E', envVariable], {
|
||||
stdio: 'inherit',
|
||||
});
|
||||
process.exit(status);
|
||||
}
|
||||
56
superset-frontend/scripts/copyAssets.js
Normal file
56
superset-frontend/scripts/copyAssets.js
Normal file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
/* eslint-disable no-console */
|
||||
const fg = require('fast-glob');
|
||||
const fs = require('fs-extra');
|
||||
|
||||
const pkgGlob = process.argv[2] || '*';
|
||||
|
||||
const packages = fg.sync([`{packages,plugins}/${pkgGlob}`], {
|
||||
onlyDirectories: true,
|
||||
});
|
||||
|
||||
console.log('Copying asset files from package {src} to {lib,esm}...');
|
||||
packages.forEach(pkg => {
|
||||
const assets = fg.sync([`${pkg}/src/**/*.{png,gif,jpg,css,geojson}`]);
|
||||
assets.forEach(filePath => {
|
||||
['lib', 'esm']
|
||||
.map(dir => filePath.replace(`${pkg}/src`, `${pkg}/${dir}`))
|
||||
.forEach(newFilePath => {
|
||||
fs.copy(filePath, newFilePath, err => {
|
||||
if (err) {
|
||||
console.error(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
if (assets.length > 0) {
|
||||
console.log(
|
||||
` Copied ${assets.length
|
||||
.toString()
|
||||
.padStart(2)} asset files for ${pkg.replace(
|
||||
'packages/superset-ui-',
|
||||
'',
|
||||
)}`,
|
||||
);
|
||||
}
|
||||
});
|
||||
71
superset-frontend/scripts/lernaVersion.sh
Executable file
71
superset-frontend/scripts/lernaVersion.sh
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
rootDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && cd .. && pwd )"
|
||||
|
||||
lernaVersionArg="$1"
|
||||
if [[ -z $lernaVersionArg ]]; then
|
||||
echo '[ERROR] Please provide argument for "lerna version".'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
currentNpm=$(npm --version)
|
||||
npmVersion=$(node -e "process.stdout.write(require('./package.json').engines.npm)");
|
||||
isSatisfiedNpm=$(node -e "process.stdout.write(require('semver').satisfies('$currentNpm', '$npmVersion').toString())");
|
||||
|
||||
currentNode=$(node --version)
|
||||
nodeVersion=$(node -e "process.stdout.write(require('./package.json').engines.node)");
|
||||
isSatisfiedNode=$(node -e "process.stdout.write(require('semver').satisfies('$currentNode', '$nodeVersion').toString())");
|
||||
|
||||
# Check node version compatible with package.json
|
||||
if [[ $isSatisfiedNode != 'true' ]]; then
|
||||
echo "[ERROR] Your node version($currentNode) is not compatible with package.json($nodeVersion)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check npm version compatible with package.json
|
||||
if [[ $isSatisfiedNpm != 'true' ]]; then
|
||||
echo "[ERROR] Your npm version($currentNpm) is not compatible with package.json($npmVersion)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ignore Lerna's tag and push
|
||||
lerna version $1 --no-push --no-git-tag-version --yes
|
||||
|
||||
if [[ -z $(git diff --stat) ]]; then
|
||||
echo '[ERROR] No changed packages to version.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get the current tag version
|
||||
tag=v$(node -e "process.stdout.write(require('./lerna.json').version)");
|
||||
message="chore: publish $tag"
|
||||
|
||||
# Update the lock file here
|
||||
rm "$rootDir/package-lock.json"
|
||||
npm i --package-lock-only
|
||||
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo '[ERROR] Can not update package-lock.json'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Auto-tag and auto-commit like usual
|
||||
git commit --all -m "${message}"
|
||||
git tag -a ${tag} -m ${tag}
|
||||
git push origin ${tag}
|
||||
git push
|
||||
26
superset-frontend/scripts/tsc.sh
Executable file
26
superset-frontend/scripts/tsc.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
startTime=$(node -e 'console.log(Date.now())')
|
||||
tscExitCode=$(tsc "$@")
|
||||
duration=$(node -e "console.log('%ss', (Date.now() - $startTime) / 1000)")
|
||||
|
||||
if [ ! "$tscExitCode" ]; then
|
||||
echo "compiled in ${duration}"
|
||||
else
|
||||
exit "$tscExitCode"
|
||||
fi
|
||||
Reference in New Issue
Block a user