dvsim 1.6.3__tar.gz → 1.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. {dvsim-1.6.3 → dvsim-1.7.0}/CHANGELOG.md +25 -0
  2. {dvsim-1.6.3 → dvsim-1.7.0}/PKG-INFO +1 -1
  3. {dvsim-1.6.3 → dvsim-1.7.0}/pyproject.toml +1 -1
  4. {dvsim-1.6.3 → dvsim-1.7.0}/scripts/license_check.py +6 -1
  5. dvsim-1.7.0/scripts/update_js.sh +36 -0
  6. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/cli/admin.py +3 -8
  7. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/flow/base.py +4 -4
  8. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/report/generate.py +32 -2
  9. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/templates/render.py +18 -1
  10. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/templates/reports/block_report.html +0 -46
  11. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/templates/reports/summary_report.html +10 -54
  12. dvsim-1.7.0/src/dvsim/templates/reports/wrapper.html +35 -0
  13. dvsim-1.7.0/src/dvsim/templates/static/css/bootstrap.min.css +6 -0
  14. dvsim-1.7.0/src/dvsim/templates/static/css/style.css +16 -0
  15. dvsim-1.7.0/src/dvsim/templates/static/js/bootstrap.bundle.min.js +7 -0
  16. dvsim-1.7.0/src/dvsim/templates/static/js/htmx.min.js +1 -0
  17. {dvsim-1.6.3 → dvsim-1.7.0}/uv.lock +1 -1
  18. {dvsim-1.6.3 → dvsim-1.7.0}/.envrc +0 -0
  19. {dvsim-1.6.3 → dvsim-1.7.0}/.github/actions/lowrisc_ci_app_get_token/action.yml +0 -0
  20. {dvsim-1.6.3 → dvsim-1.7.0}/.github/workflows/ci.yml +0 -0
  21. {dvsim-1.6.3 → dvsim-1.7.0}/.github/workflows/release.yml +0 -0
  22. {dvsim-1.6.3 → dvsim-1.7.0}/.gitignore +0 -0
  23. {dvsim-1.6.3 → dvsim-1.7.0}/.python-version +0 -0
  24. {dvsim-1.6.3 → dvsim-1.7.0}/CLA +0 -0
  25. {dvsim-1.6.3 → dvsim-1.7.0}/CONTRIBUTING.md +0 -0
  26. {dvsim-1.6.3 → dvsim-1.7.0}/LICENSE +0 -0
  27. {dvsim-1.6.3 → dvsim-1.7.0}/NOTICE +0 -0
  28. {dvsim-1.6.3 → dvsim-1.7.0}/README.md +0 -0
  29. {dvsim-1.6.3 → dvsim-1.7.0}/SECURITY.md +0 -0
  30. {dvsim-1.6.3 → dvsim-1.7.0}/doc/architecture.png +0 -0
  31. {dvsim-1.6.3 → dvsim-1.7.0}/doc/design_doc.md +0 -0
  32. {dvsim-1.6.3 → dvsim-1.7.0}/doc/glossary.md +0 -0
  33. {dvsim-1.6.3 → dvsim-1.7.0}/doc/opentitan-logo.png +0 -0
  34. {dvsim-1.6.3 → dvsim-1.7.0}/doc/testplanner.md +0 -0
  35. {dvsim-1.6.3 → dvsim-1.7.0}/flake.lock +0 -0
  36. {dvsim-1.6.3 → dvsim-1.7.0}/flake.nix +0 -0
  37. {dvsim-1.6.3 → dvsim-1.7.0}/ruff-ci.toml +0 -0
  38. {dvsim-1.6.3 → dvsim-1.7.0}/scripts/lint_commits.py +0 -0
  39. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/__init__.py +0 -0
  40. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/cli/__init__.py +0 -0
  41. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/cli/run.py +0 -0
  42. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/examples/testplanner/common_testplan.hjson +0 -0
  43. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/examples/testplanner/foo_dv_doc.md +0 -0
  44. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/examples/testplanner/foo_sim_results.hjson +0 -0
  45. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/examples/testplanner/foo_testplan.hjson +0 -0
  46. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/flow/__init__.py +0 -0
  47. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/flow/cdc.py +0 -0
  48. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/flow/factory.py +0 -0
  49. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/flow/formal.py +0 -0
  50. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/flow/hjson.py +0 -0
  51. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/flow/lint.py +0 -0
  52. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/flow/one_shot.py +0 -0
  53. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/flow/rdc.py +0 -0
  54. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/flow/sim.py +0 -0
  55. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/flow/syn.py +0 -0
  56. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/job/__init__.py +0 -0
  57. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/job/data.py +0 -0
  58. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/job/deploy.py +0 -0
  59. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/job/time.py +0 -0
  60. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/launcher/__init__.py +0 -0
  61. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/launcher/base.py +0 -0
  62. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/launcher/factory.py +0 -0
  63. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/launcher/fake.py +0 -0
  64. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/launcher/local.py +0 -0
  65. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/launcher/lsf.py +0 -0
  66. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/launcher/nc.py +0 -0
  67. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/launcher/sge/__init__.py +0 -0
  68. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/launcher/sge/engine.py +0 -0
  69. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/launcher/sge/launcher.py +0 -0
  70. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/launcher/sge/qsubopts.py +0 -0
  71. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/launcher/slurm.py +0 -0
  72. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/linting/__init__.py +0 -0
  73. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/linting/parser.py +0 -0
  74. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/logging.py +0 -0
  75. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/modes.py +0 -0
  76. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/msg_bucket.py +0 -0
  77. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/msg_buckets.py +0 -0
  78. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/regression.py +0 -0
  79. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/report/__init__.py +0 -0
  80. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/report/data.py +0 -0
  81. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/scheduler.py +0 -0
  82. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/sim_results.py +0 -0
  83. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/templates/__init__.py +0 -0
  84. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/templates/reports/__init__.py +0 -0
  85. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/templates/reports/redirect.html +0 -0
  86. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/test.py +0 -0
  87. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/testplan.py +0 -0
  88. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/testplanner.py +0 -0
  89. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/tool/__init__.py +0 -0
  90. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/tool/ascentlint.py +0 -0
  91. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/tool/meridianrdc.py +0 -0
  92. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/tool/sim.py +0 -0
  93. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/tool/utils.py +0 -0
  94. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/tool/vcs.py +0 -0
  95. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/tool/verilator.py +0 -0
  96. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/tool/xcelium.py +0 -0
  97. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/utils/__init__.py +0 -0
  98. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/utils/check.py +0 -0
  99. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/utils/fs.py +0 -0
  100. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/utils/git.py +0 -0
  101. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/utils/hjson.py +0 -0
  102. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/utils/json.py +0 -0
  103. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/utils/status_printer.py +0 -0
  104. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/utils/subprocess.py +0 -0
  105. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/utils/timer.py +0 -0
  106. {dvsim-1.6.3 → dvsim-1.7.0}/src/dvsim/utils/wildcards.py +0 -0
  107. {dvsim-1.6.3 → dvsim-1.7.0}/tests/__init__.py +0 -0
  108. {dvsim-1.6.3 → dvsim-1.7.0}/tests/job/__init__.py +0 -0
  109. {dvsim-1.6.3 → dvsim-1.7.0}/tests/job/test_deploy.py +0 -0
  110. {dvsim-1.6.3 → dvsim-1.7.0}/tests/job/test_time.py +0 -0
  111. {dvsim-1.6.3 → dvsim-1.7.0}/tests/test_cli.py +0 -0
  112. {dvsim-1.6.3 → dvsim-1.7.0}/tests/tool/__init__.py +0 -0
  113. {dvsim-1.6.3 → dvsim-1.7.0}/tests/tool/test_utils.py +0 -0
  114. {dvsim-1.6.3 → dvsim-1.7.0}/tests/tool/test_vcs.py +0 -0
  115. {dvsim-1.6.3 → dvsim-1.7.0}/tests/utils/__init__.py +0 -0
  116. {dvsim-1.6.3 → dvsim-1.7.0}/tests/utils/test_fs.py +0 -0
  117. {dvsim-1.6.3 → dvsim-1.7.0}/tests/utils/test_git.py +0 -0
  118. {dvsim-1.6.3 → dvsim-1.7.0}/tests/utils/test_wildcards.py +0 -0
@@ -2,6 +2,31 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v1.7.0 (2025-12-19)
6
+
7
+ ### Features
8
+
9
+ - Block results report HTMX
10
+ ([`e4522bd`](https://github.com/lowRISC/dvsim/commit/e4522bdca05b012c0d7f95c2583cc7e290f263ed))
11
+
12
+ - CORS
13
+ ([`d6fc380`](https://github.com/lowRISC/dvsim/commit/d6fc3802d5a2ce7f13e26a9861df5d432c22156d))
14
+
15
+ - Create htmx wrapper for the summary page
16
+ ([`7690af4`](https://github.com/lowRISC/dvsim/commit/7690af48f5727fdc8fe863670eb3c06ba46d37bc))
17
+
18
+ - Local copies of the js/css deps to enable sandboxed builds
19
+ ([`dc18f96`](https://github.com/lowRISC/dvsim/commit/dc18f9671b3a2e58865ff697aac6b86b30672e30))
20
+
21
+ ### Refactoring
22
+
23
+ - Create a higher level function to generate all reports
24
+ ([`ca9cc18`](https://github.com/lowRISC/dvsim/commit/ca9cc188ca9f4098adcd4559adcaa71e4884e1d1))
25
+
26
+ - Report use the local css/js
27
+ ([`182e9cb`](https://github.com/lowRISC/dvsim/commit/182e9cbfaf0857cf295c1e04cc616e33aa6a81be))
28
+
29
+
5
30
  ## v1.6.3 (2025-12-05)
6
31
 
7
32
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dvsim
3
- Version: 1.6.3
3
+ Version: 1.7.0
4
4
  Summary: DV system
5
5
  Author: lowRISC contributors (OpenTitan project)
6
6
  License-File: LICENSE
@@ -8,7 +8,7 @@
8
8
 
9
9
  [project]
10
10
  name = "dvsim"
11
- version = "1.6.3"
11
+ version = "1.7.0"
12
12
  description = "DV system"
13
13
  authors = [{name = "lowRISC contributors (OpenTitan project)"}]
14
14
  readme = "README.md"
@@ -25,7 +25,12 @@ IGNORE_NAMES = [
25
25
  "CHANGELOG.md",
26
26
  ]
27
27
 
28
- IGNORE_SUFFIXES = [".lock"]
28
+ IGNORE_SUFFIXES = [
29
+ ".lock", # lock files are generated files
30
+ ".min.js", # Vendored in JS files
31
+ ".bundle.min.js", # Vendored in JS files
32
+ ".min.css", # Vendored in CSS files
33
+ ]
29
34
 
30
35
  OPTIONAL_TRAILING_NEWLINE = [".nix", ".md"]
31
36
 
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright lowRISC contributors (OpenTitan project).
3
+ # Licensed under the Apache License, Version 2.0, see LICENSE for details.
4
+ # SPDX-License-Identifier: Apache-2.0
5
+
6
+ # Find the Git repository root directory
7
+ GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
8
+
9
+ if [ -z "$GIT_ROOT" ]; then
10
+ echo "Error: This script must be run from within a Git repository."
11
+ exit 1
12
+ fi
13
+
14
+ # Define the target directory relative to the Git root
15
+ TARGET_DIR="$GIT_ROOT/src/dvsim/templates/static"
16
+
17
+ # Create the directory (and any missing parents) if it doesn't exist
18
+ mkdir -p "$TARGET_DIR/css" "$TARGET_DIR/js"
19
+ echo "Downloading latest Bootstrap and htmx to $TARGET_DIR..."
20
+
21
+ # Bootstrap CSS (latest 5.x)
22
+ curl -L -o "$TARGET_DIR/css/bootstrap.min.css" \
23
+ https://cdn.jsdelivr.net/npm/bootstrap@5/dist/css/bootstrap.min.css
24
+
25
+ # Bootstrap JS Bundle (includes Popper, latest 5.x)
26
+ curl -L -o "$TARGET_DIR/js/bootstrap.bundle.min.js" \
27
+ https://cdn.jsdelivr.net/npm/bootstrap@5/dist/js/bootstrap.bundle.min.js
28
+
29
+ # htmx (latest version via @latest tag)
30
+ curl -L -o "$TARGET_DIR/js/htmx.min.js" \
31
+ https://cdn.jsdelivr.net/npm/htmx.org@latest/dist/htmx.min.js
32
+
33
+ echo "Done! Files saved to:"
34
+ echo " - $TARGET_DIR/css/bootstrap.min.css"
35
+ echo " - $TARGET_DIR/js/bootstrap.bundle.min.js"
36
+ echo " - $TARGET_DIR/js/htmx.min.js"
@@ -8,9 +8,6 @@ from pathlib import Path
8
8
 
9
9
  import click
10
10
 
11
- from dvsim.report.data import ResultsSummary
12
- from dvsim.report.generate import gen_block_report
13
-
14
11
 
15
12
  @click.group()
16
13
  def cli() -> None:
@@ -38,11 +35,9 @@ def report() -> None:
38
35
  )
39
36
  def gen(json_path: Path, output_dir: Path) -> None:
40
37
  """Generate a report from a existing results JSON."""
41
- from dvsim.report.generate import gen_summary_report
38
+ from dvsim.report.data import ResultsSummary
39
+ from dvsim.report.generate import gen_reports
42
40
 
43
41
  results: ResultsSummary = ResultsSummary.load(path=json_path)
44
42
 
45
- gen_summary_report(summary=results, path=output_dir)
46
-
47
- for flow_result in results.flow_results.values():
48
- gen_block_report(flow_result, path=output_dir)
43
+ gen_reports(summary=results, path=output_dir)
@@ -21,7 +21,7 @@ from dvsim.job.data import CompletedJobStatus
21
21
  from dvsim.launcher.factory import get_launcher_cls
22
22
  from dvsim.logging import log
23
23
  from dvsim.report.data import FlowResults, IPMeta, ResultsSummary
24
- from dvsim.report.generate import gen_block_report, gen_summary_report
24
+ from dvsim.report.generate import gen_block_report, gen_reports
25
25
  from dvsim.scheduler import Scheduler
26
26
  from dvsim.utils import (
27
27
  find_and_substitute_wildcards,
@@ -480,7 +480,7 @@ class FlowCfg(ABC):
480
480
 
481
481
  all_flow_results[block_result_index] = flow_results
482
482
 
483
- # Write results to the report area.
483
+ # Generate the block's JSON/HTML reports to the report area.
484
484
  gen_block_report(
485
485
  results=flow_results,
486
486
  path=reports_dir,
@@ -511,8 +511,8 @@ class FlowCfg(ABC):
511
511
  report_path=reports_dir,
512
512
  )
513
513
 
514
- # Write results to the report area.
515
- gen_summary_report(
514
+ # Generate all the JSON/HTML reports to the report area.
515
+ gen_reports(
516
516
  summary=results_summary,
517
517
  path=reports_dir,
518
518
  )
@@ -8,10 +8,11 @@ from pathlib import Path
8
8
 
9
9
  from dvsim.logging import log
10
10
  from dvsim.report.data import FlowResults, ResultsSummary
11
- from dvsim.templates.render import render_template
11
+ from dvsim.templates.render import render_static, render_template
12
12
 
13
13
  __all__ = (
14
14
  "gen_block_report",
15
+ "gen_reports",
15
16
  "gen_summary_report",
16
17
  )
17
18
 
@@ -61,8 +62,23 @@ def gen_summary_report(summary: ResultsSummary, path: Path) -> None:
61
62
  # Save the JSON version
62
63
  (path / "index.json").write_text(summary.model_dump_json())
63
64
 
65
+ # Generate style CSS
66
+ for name in (
67
+ "css/style.css",
68
+ "css/bootstrap.min.css",
69
+ "js/bootstrap.bundle.min.js",
70
+ "js/htmx.min.js",
71
+ ):
72
+ output = path / name
73
+
74
+ output.parent.mkdir(parents=True, exist_ok=True)
75
+ output.write_text(render_static(path=name))
76
+
77
+ # HTMX wrapper
78
+ (path / "index.html").write_text(render_template(path="reports/wrapper.html"))
79
+
64
80
  # Generate HTML report
65
- (path / "index.html").write_text(
81
+ (path / "summary.html").write_text(
66
82
  render_template(
67
83
  path="reports/summary_report.html",
68
84
  data={
@@ -70,3 +86,17 @@ def gen_summary_report(summary: ResultsSummary, path: Path) -> None:
70
86
  },
71
87
  ),
72
88
  )
89
+
90
+
91
+ def gen_reports(summary: ResultsSummary, path: Path) -> None:
92
+ """Generate a full set of reports for the given regression run.
93
+
94
+ Args:
95
+ summary: overview of the block results
96
+ path: output directory path
97
+
98
+ """
99
+ gen_summary_report(summary=summary, path=path)
100
+
101
+ for flow_result in summary.flow_results.values():
102
+ gen_block_report(results=flow_result, path=path)
@@ -9,6 +9,7 @@ DVSim. Templates can be referenced relative to this directory.
9
9
  """
10
10
 
11
11
  from collections.abc import Mapping
12
+ from importlib import resources
12
13
 
13
14
  from jinja2 import Environment, PackageLoader, select_autoescape
14
15
 
@@ -17,6 +18,22 @@ __all__ = ("render_template",)
17
18
  _env: Environment | None = None
18
19
 
19
20
 
21
+ def render_static(path: str) -> str:
22
+ """Render static files packaged with DVSim.
23
+
24
+ Args:
25
+ path: relative path to the DVSim template directory
26
+
27
+ Returns:
28
+ string containing the static file content
29
+
30
+ """
31
+ return resources.read_text(
32
+ "dvsim",
33
+ f"templates/static/{path}",
34
+ )
35
+
36
+
20
37
  def render_template(path: str, data: Mapping[str, object] | None = None) -> str:
21
38
  """Render a template packaged with DVSim.
22
39
 
@@ -38,4 +55,4 @@ def render_template(path: str, data: Mapping[str, object] | None = None) -> str:
38
55
 
39
56
  template = _env.get_template(path)
40
57
 
41
- return template.render(data)
58
+ return template.render(data or {})
@@ -4,52 +4,12 @@
4
4
  # SPDX-License-Identifier: Apache-2.0
5
5
 
6
6
  -->
7
-
8
7
  {% set block = results.block %}
9
8
  {% set tool = results.tool %}
10
9
  {% set timestamp = results.timestamp %}
11
10
  {% set stages = results.stages %}
12
11
  {% set coverage = results.coverage %}
13
12
  {% set failed_jobs = results.failed_jobs %}
14
-
15
- <!doctype html>
16
- <html lang="en">
17
- <head>
18
- <meta charset="utf-8">
19
- <meta name="viewport" content="width=device-width, initial-scale=1">
20
- <title>{{ block.name }} Simulation Results</title>
21
- <script src="https://unpkg.com/htmx.org@2.0.4"></script>
22
- <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"
23
- rel="stylesheet"
24
- integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH"
25
- crossorigin="anonymous">
26
- <style>
27
- td.c0 { color: #ffffff; background-color: #EF5757; }
28
- td.c1 { color: #ffffff; background-color: #EF6D57; }
29
- td.c2 { color: #000000; background-color: #EF8357; }
30
- td.c3 { color: #000000; background-color: #EF9957; }
31
- td.c4 { color: #000000; background-color: #EFAF57; }
32
- td.c5 { color: #000000; background-color: #EFC557; }
33
- td.c6 { color: #000000; background-color: #EFDB57; }
34
- td.c7 { color: #000000; background-color: #ECEF57; }
35
- td.c8 { color: #000000; background-color: #D6EF57; }
36
- td.c9 { color: #000000; background-color: #C0EF57; }
37
- td.c10 { color: #000000; background-color: #57EF57; }
38
- </style>
39
- </head>
40
- <body>
41
-
42
- <nav class="navbar navbar-expand-lg bg-body-tertiary">
43
- <div class="container-fluid">
44
- <a class="navbar-brand" href="#">Nightly Reports</a>
45
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse"
46
- data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
47
- aria-expanded="false" aria-label="Toggle navigation">
48
- <span class="navbar-toggler-icon"></span>
49
- </button>
50
- </div>
51
- </nav>
52
-
53
13
  <div class="container-md">
54
14
  <div class="row">
55
15
  <div class="col">
@@ -262,9 +222,3 @@
262
222
  </div>
263
223
  </div>
264
224
  </div>
265
-
266
- <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"
267
- integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz"
268
- crossorigin="anonymous"></script>
269
- </body>
270
- </html>
@@ -4,49 +4,9 @@
4
4
  # SPDX-License-Identifier: Apache-2.0
5
5
 
6
6
  -->
7
-
8
7
  {% set top = summary.top %}
9
8
  {% set timestamp = summary.timestamp %}
10
-
11
- <!doctype html>
12
- <html lang="en">
13
- <head>
14
- <meta charset="utf-8">
15
- <meta name="viewport" content="width=device-width, initial-scale=1">
16
- <title>{{ top.name }} Simulation Results</title>
17
- <script src="https://unpkg.com/htmx.org@2.0.4"></script>
18
- <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"
19
- rel="stylesheet"
20
- integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH"
21
- crossorigin="anonymous">
22
- <style>
23
- td.c0 { color: #ffffff; background-color: #EF5757; }
24
- td.c1 { color: #ffffff; background-color: #EF6D57; }
25
- td.c2 { color: #000000; background-color: #EF8357; }
26
- td.c3 { color: #000000; background-color: #EF9957; }
27
- td.c4 { color: #000000; background-color: #EFAF57; }
28
- td.c5 { color: #000000; background-color: #EFC557; }
29
- td.c6 { color: #000000; background-color: #EFDB57; }
30
- td.c7 { color: #000000; background-color: #ECEF57; }
31
- td.c8 { color: #000000; background-color: #D6EF57; }
32
- td.c9 { color: #000000; background-color: #C0EF57; }
33
- td.c10 { color: #000000; background-color: #57EF57; }
34
- </style>
35
- </head>
36
- <body>
37
-
38
- <nav class="navbar navbar-expand-lg bg-body-tertiary">
39
- <div class="container-fluid">
40
- <a class="navbar-brand" href="#">Nightly Reports</a>
41
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse"
42
- data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent"
43
- aria-expanded="false" aria-label="Toggle navigation">
44
- <span class="navbar-toggler-icon"></span>
45
- </button>
46
- </div>
47
- </nav>
48
-
49
- <div class="container-md">
9
+ <div class="container-md">
50
10
  <div class="row">
51
11
  <div class="col">
52
12
  {% if breadcrumbs %}
@@ -77,25 +37,25 @@
77
37
  {{ timestamp.strftime("%d/%m/%Y %H:%M:%S") }}
78
38
  </span>
79
39
  <a class="badge text-bg-secondary link-underline link-underline-opacity-0"
80
- href="{{ top.url }}">
40
+ href="{{ top.url }}">
81
41
  sha: {{ top.commit[:7] }}
82
42
  </a>
83
43
  <a class="badge text-bg-secondary link-underline link-underline-opacity-0"
84
- href="index.json">json</a>
44
+ href="index.json">json</a>
85
45
  <span class="badge text-bg-secondary">
86
46
  Branch: {{ top.branch }}
87
47
  </span>
88
48
  </div>
89
49
  </div>
90
50
 
91
- {% macro coverage_cell(cov, kind) %}
51
+ {% macro coverage_cell(cov, kind) %}
92
52
  {% if cov and cov|attr(kind) is not none %}
93
53
  {% set value = cov|attr(kind) %}
94
54
  <td class="c{{ (value / 10)|int }}">{{ "%.2f"|format(value) }}</td>
95
55
  {% else %}
96
56
  <td class="text-muted">-</td>
97
57
  {% endif %}
98
- {% endmacro %}
58
+ {% endmacro %}
99
59
 
100
60
  <div class="row py-3">
101
61
  <div class="col">
@@ -132,10 +92,12 @@
132
92
  {% for block_name in summary.flow_results.keys()|sort %}
133
93
  {% set flow = summary.flow_results[block_name] %}
134
94
  <tr>
135
- <td>
136
- <a href="{{ block_name }}.html">
95
+ <td class="btn"
96
+ hx-get="{{ block_name }}.html"
97
+ hx-trigger="click"
98
+ hx-push-url="true"
99
+ hx-target="#report-content">
137
100
  {{ block_name | upper }}
138
- </a>
139
101
  </td>
140
102
  <td>{{ flow.passed }}</td>
141
103
  <td>{{ flow.total }}</td>
@@ -163,9 +125,3 @@
163
125
  </div>
164
126
  </div>
165
127
  </div>
166
-
167
- <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"
168
- integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz"
169
- crossorigin="anonymous"></script>
170
- </body>
171
- </html>
@@ -0,0 +1,35 @@
1
+ <!--
2
+ # Copyright lowRISC contributors (OpenTitan project).
3
+ # Licensed under the Apache License, Version 2.0, see LICENSE for details.
4
+ # SPDX-License-Identifier: Apache-2.0
5
+
6
+ -->
7
+ <!DOCTYPE html>
8
+ <html lang="en">
9
+ <head>
10
+ <meta charset="utf-8">
11
+ <meta name="viewport" content="width=device-width, initial-scale=1">
12
+ <title>Simulation Results</title>
13
+ <script src="js/htmx.min.js"></script>
14
+ <script>
15
+ htmx.config.selfRequestsOnly = false;
16
+ </script>
17
+ <link href="css/bootstrap.min.css" rel="stylesheet">
18
+ <link href="css/style.css" rel="stylesheet">
19
+ </head>
20
+ <body>
21
+
22
+ <nav class="navbar navbar-expand-lg bg-body-tertiary">
23
+ <div class="container-fluid">
24
+ <a class="navbar-brand" href="#">Nightly Reports</a>
25
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
26
+ <span class="navbar-toggler-icon"></span>
27
+ </button>
28
+ </div>
29
+ </nav>
30
+
31
+ <div id="report-content" hx-get="summary.html" hx-trigger="load" hx-request='{"noHeaders": true}' hx-target="#report-content"></div>
32
+
33
+ <script src="js/bootstrap.bundle.min.js"></script>
34
+ </body>
35
+ </html>