Files
openobserve/web/coverage.sh
T
Bhargav 50402cf46a fix: batch 3 package upgrade (#9755)
### **PR Type**
Enhancement


___

### **Description**
- Adjust Vitest config imports and coverage settings

- Refine coverage: add V8 provider and include patterns

- Bump Vitest, Vitest UI, and canvas mock versions

- Upgrade dotenv and remove unused type definitions


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["web/vitest.config.ts"] --> B["Import types corrected"]
  A --> C["Coverage provider & include updated"]
  D["web/package.json"] --> E["Bump Vitest & mocks versions"]
  D --> F["Upgrade dotenv & remove types"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>vitest.config.ts</strong><dd><code>Adjust Vitest config
imports and coverage</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

web/vitest.config.ts

<ul><li>Replace type import from <code>vitest/config</code> to
<code>vite</code><br> <li> Remove <code>VitestUserConfig</code> cast for
mergeConfig<br> <li> Add coverage provider <code>v8</code><br> <li>
Update coverage include pattern to
<code>src/**/*.{js,ts,vue}</code></ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9755/files#diff-c3fc010b682e68f2ed0b7b1485b8aa513443a66d500903b8dff1d65908d02aae">+4/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Dependencies</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>package.json</strong><dd><code>Upgrade devDependencies
versions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

web/package.json

<ul><li>Bump <code>@vitest/coverage-v8</code> and
<code>@vitest/ui</code> to 4.x<br> <li> Upgrade <code>vitest</code> and
<code>vitest-canvas-mock</code> versions<br> <li> Update
<code>dotenv</code> to <code>^17.2.3</code><br> <li> Remove unused
<code>@types/dompurify</code></ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/9755/files#diff-b861012a5dd72b8a9f3281b7cf09f5a779c98569d040b1bbc1db50f1b15e7cce">+5/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-12-25 19:18:59 +05:30

140 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eu -o pipefail
# Default coverage thresholds - you can override these with environment variables
export FRONTEND_COVERAGE_LINES=${FRONTEND_COVERAGE_LINES:-50}
export FRONTEND_COVERAGE_FUNCTIONS=${FRONTEND_COVERAGE_FUNCTIONS:-40}
export FRONTEND_COVERAGE_BRANCHES=${FRONTEND_COVERAGE_BRANCHES:-40}
export FRONTEND_COVERAGE_STATEMENTS=${FRONTEND_COVERAGE_STATEMENTS:-50}
usage() {
cat <<EOF
Usage: $0 [-h | --help] [<command>]
Commands:
check Run frontend tests with coverage and verify thresholds
html Generate coverage report in HTML format
show-env Show the coverage thresholds
test Run tests with coverage
help Show this help and exit
Omitted <command> defaults to 'check'.
EOF
}
cmd_test() {
npm run test:unit:coverage
}
cmd_html() {
npm run test:unit:coverage
echo "Coverage report generated in coverage/ directory"
if command -v open >/dev/null 2>&1; then
open coverage/index.html
elif command -v xdg-open >/dev/null 2>&1; then
xdg-open coverage/index.html
else
echo "Open coverage/index.html in your browser to view the report"
fi
}
cmd_show_env() {
cat <<EOF
FRONTEND_COVERAGE_LINES=$FRONTEND_COVERAGE_LINES
FRONTEND_COVERAGE_FUNCTIONS=$FRONTEND_COVERAGE_FUNCTIONS
FRONTEND_COVERAGE_BRANCHES=$FRONTEND_COVERAGE_BRANCHES
FRONTEND_COVERAGE_STATEMENTS=$FRONTEND_COVERAGE_STATEMENTS
EOF
}
cmd_check() {
echo "Running frontend tests with coverage..."
npm run test:unit:coverage
if [ -f "coverage/coverage-summary.json" ]; then
echo "Checking coverage thresholds..."
python3 <(
cat <<'EOF'
import json
import os
import sys
thresholds = {
'lines': float(os.environ['FRONTEND_COVERAGE_LINES']),
'functions': float(os.environ['FRONTEND_COVERAGE_FUNCTIONS']),
'branches': float(os.environ['FRONTEND_COVERAGE_BRANCHES']),
'statements': float(os.environ['FRONTEND_COVERAGE_STATEMENTS']),
}
try:
with open('coverage/coverage-summary.json') as f:
report = json.load(f)
totals = report['total']
exit_status = 0
for metric, threshold in thresholds.items():
actual = totals[metric]['pct']
metric_name = metric.capitalize()
if actual >= threshold:
print(f'✅ {metric_name} coverage: {actual:.2f}%', file=sys.stderr)
else:
print(
f'❌ {metric_name} coverage is below threshold: {actual:.2f}% < {threshold}%',
file=sys.stderr,
)
exit_status = 1
if exit_status == 0:
print('🎉 All coverage thresholds met!', file=sys.stderr)
else:
print('💥 Some coverage thresholds not met. Please add more tests.', file=sys.stderr)
sys.exit(exit_status)
except FileNotFoundError:
print('❌ Coverage summary file not found. Make sure tests ran successfully.', file=sys.stderr)
sys.exit(1)
except Exception as e:
print(f'❌ Error checking coverage: {e}', file=sys.stderr)
sys.exit(1)
EOF
)
else
echo "❌ Coverage summary not found. Tests may have failed."
exit 1
fi
}
main() {
case "${1:-}" in
'')
cmd_check
;;
check)
shift
cmd_check "$@"
;;
test)
shift
cmd_test "$@"
;;
html)
shift
cmd_html "$@"
;;
show-env)
cmd_show_env
;;
-h | --help | help)
usage
;;
*)
echo >&2 "Invalid argument: $1"
echo >&2 "Type '$0 --help' for usage"
exit 1
;;
esac
}
main "$@"