The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
grafana/scripts/validate-npm-packages.sh

77 lines
2.6 KiB

#!/bin/bash
# This script is used to validate the npm packages that are published to npmjs.org are in the correct format.
# It won't catch things like malformed JS or Types but it will assert that the package has
# the correct files and package.json properties.
ARTIFACTS_DIR="./npm-artifacts"
for file in "$ARTIFACTS_DIR"/*.tgz; do
echo "🔍 Checking NPM package: $file"
# get filename then strip everything after package name.
dir_name=$(basename "$file" .tgz | sed -E 's/@([a-zA-Z0-9-]+)-[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9-]+)?/\1/')
mkdir -p "./npm-artifacts/$dir_name"
tar -xzf "$file" -C "./npm-artifacts/$dir_name" --strip-components=1
# Make sure the tar wasn't empty
if [ ! -d "./npm-artifacts/$dir_name" ]; then
echo -e "❌ Failed: Empty package $dir_name.\n"
exit 1
fi
# Navigate inside the new extracted directory
pushd "./npm-artifacts/$dir_name" || exit
# Check for required files
Prometheus: Library fixes for using in external vendor DS (#82115) * fix stateSlice type errors for build, do not export stateSlice in the future * fix exports for consistency * fix package.json for rollup, update licence, keep private * rollup as devdependencies * try a different version of @testing-library/dom to try to fix the aria-query issue in drone * remove testUtils export * change @testing-library/dom version back * remove icon bundling, grafana-ui handles this * remove unused dependencies * components folder: avoid nested barrel files and use named exports * configuration folder: avoid nested barrel files and use named exports * querybuilder folder: avoid nested barrel files and use named exports * general files: use named exports * fix loader issue with promql for external ds * default to support labels match api * export things necessary for custom config auth * remove changes to core datasource.test.ts * Update packages/grafana-prometheus/package.json Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com> * remove icons script, not needed * update readme, remove references to grafana/ui * remove private property * check tests * remove private property in package.json * update changelog * update npm drone script for file checks * debug why updating test in script broke another library that had never been tested before * fix npm test for checking licenses * fix npm test for checking licenses * fix npm test for checking licenses * fix npm test for checking licenses * update license file for npm drone test * fix bash script --------- Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com>
1 year ago
check_files=("package.json" "README.md" "CHANGELOG.md")
for check_file in "${check_files[@]}"; do
if [ ! -f "$check_file" ]; then
echo -e "❌ Failed: Missing required file $check_file in package $dir_name.\n"
exit 1
fi
done
Prometheus: Library fixes for using in external vendor DS (#82115) * fix stateSlice type errors for build, do not export stateSlice in the future * fix exports for consistency * fix package.json for rollup, update licence, keep private * rollup as devdependencies * try a different version of @testing-library/dom to try to fix the aria-query issue in drone * remove testUtils export * change @testing-library/dom version back * remove icon bundling, grafana-ui handles this * remove unused dependencies * components folder: avoid nested barrel files and use named exports * configuration folder: avoid nested barrel files and use named exports * querybuilder folder: avoid nested barrel files and use named exports * general files: use named exports * fix loader issue with promql for external ds * default to support labels match api * export things necessary for custom config auth * remove changes to core datasource.test.ts * Update packages/grafana-prometheus/package.json Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com> * remove icons script, not needed * update readme, remove references to grafana/ui * remove private property * check tests * remove private property in package.json * update changelog * update npm drone script for file checks * debug why updating test in script broke another library that had never been tested before * fix npm test for checking licenses * fix npm test for checking licenses * fix npm test for checking licenses * fix npm test for checking licenses * update license file for npm drone test * fix bash script --------- Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com>
1 year ago
# Check license files
if [ -f "LICENSE_APACHE2" ] || [ -f "LICENSE_AGPL" ]; then
echo -e "Found required license file in package $dir_name.\n"
else
echo -e "❌ Failed: Missing required license file in package $dir_name.\n"
exit 1
fi
# Assert commonjs builds
if [ ! -d dist ] || [ ! -f dist/index.js ] || [ ! -f dist/index.d.ts ]; then
echo -e "❌ Failed: Missing 'dist' directory or required commonjs files in package $dir_name.\n"
exit 1
fi
if [ "$(jq -r '.main' package.json)" != "dist/index.js" ] || \
[ "$(jq -r '.types' package.json)" != "dist/index.d.ts" ]; then
echo -e "❌ Failed: Incorrect package.json properties in package $dir_name.\n"
exit 1
fi
# Assert esm builds
esm_packages=("grafana-data" "grafana-ui" "grafana-runtime" "grafana-e2e-selectors" "grafana-schema")
for esm_package in "${esm_packages[@]}"; do
if [[ "$dir_name" == "$esm_package" ]]; then
if [ ! -d dist/esm ] || [ ! -f dist/esm/index.js ]; then
echo -e "❌ Failed: Missing 'dist/esm' directory or required esm files in package $dir_name.\n"
exit 1
fi
if [ "$(jq -r '.module' package.json)" != "dist/esm/index.js" ]; then
echo -e "❌ Failed: Incorrect package.json properties in package $dir_name.\n"
exit 1
fi
fi
done
echo -e "✅ Passed: package checks for $file.\n"
popd || exit
done
echo "🚀 All NPM package checks passed! 🚀"
rm -rf "${ARTIFACTS_DIR:?}/"*/
exit 0