fix(ci): recreate venv after cache restore to fix absolute symlinks
Deploy Dashboard (Dev) / Frontend Tests (push) Successful in 51s
Deploy Dashboard (Dev) / Backend Tests (push) Failing after 13m39s
Deploy Dashboard (Dev) / Build Dev Image (push) Has been skipped
Deploy Dashboard (Dev) / Deploy to Dev (push) Has been skipped

Running python3 -m venv venv over an existing cached venv recreates
the absolute symlinks and pyvenv.cfg paths so Python resolves to
the current system's python3 binary. Without this, cp -a preserves
stale symlinks from the cache source, causing venv/bin/python to
resolve to /usr/bin/python3 (system, not venv) and pytest not found.

Also switch validation to use python3 to match Ubuntu 24.04 convention.
This commit is contained in:
Gan, Jimmy
2026-06-04 23:52:40 +08:00
parent c041b0e7ec
commit b52986fed5
86 changed files with 47774 additions and 118 deletions
+176
View File
@@ -0,0 +1,176 @@
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for All files</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="prettify.css" />
<link rel="stylesheet" href="base.css" />
<link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1>All files</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">4.5% </span>
<span class="quiet">Statements</span>
<span class='fraction'>172/3818</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">53.16% </span>
<span class="quiet">Branches</span>
<span class='fraction'>42/79</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">29.31% </span>
<span class="quiet">Functions</span>
<span class='fraction'>17/58</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">4.5% </span>
<span class="quiet">Lines</span>
<span class='fraction'>172/3818</span>
</div>
</div>
<p class="quiet">
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
</p>
<template id="filterTemplate">
<div class="quiet">
Filter:
<input type="search" id="fileSearch">
</div>
</template>
</div>
<div class='status-line low'></div>
<div class="pad1">
<table class="coverage-summary">
<thead>
<tr>
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
</tr>
</thead>
<tbody><tr>
<td class="file low" data-value="src"><a href="src/index.html">src</a></td>
<td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="182" class="abs low">0/182</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs low">0/2</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="2" class="abs low">0/2</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="182" class="abs low">0/182</td>
</tr>
<tr>
<td class="file low" data-value="src/components"><a href="src/components/index.html">src/components</a></td>
<td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="301" class="abs low">0/301</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="1" class="abs low">0/1</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="301" class="abs low">0/301</td>
</tr>
<tr>
<td class="file low" data-value="src/components/opc"><a href="src/components/opc/index.html">src/components/opc</a></td>
<td data-value="0" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="393" class="abs low">0/393</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="5" class="abs low">0/5</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="5" class="abs low">0/5</td>
<td data-value="0" class="pct low">0%</td>
<td data-value="393" class="abs low">0/393</td>
</tr>
<tr>
<td class="file low" data-value="src/lib"><a href="src/lib/index.html">src/lib</a></td>
<td data-value="22.06" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 22%"></div><div class="cover-empty" style="width: 78%"></div></div>
</td>
<td data-value="22.06" class="pct low">22.06%</td>
<td data-value="562" class="abs low">124/562</td>
<td data-value="84.78" class="pct high">84.78%</td>
<td data-value="46" class="abs high">39/46</td>
<td data-value="51.72" class="pct medium">51.72%</td>
<td data-value="29" class="abs medium">15/29</td>
<td data-value="22.06" class="pct low">22.06%</td>
<td data-value="562" class="abs low">124/562</td>
</tr>
<tr>
<td class="file low" data-value="src/routes"><a href="src/routes/index.html">src/routes</a></td>
<td data-value="2.01" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 2%"></div><div class="cover-empty" style="width: 98%"></div></div>
</td>
<td data-value="2.01" class="pct low">2.01%</td>
<td data-value="2380" class="abs low">48/2380</td>
<td data-value="12" class="pct low">12%</td>
<td data-value="25" class="abs low">3/25</td>
<td data-value="9.52" class="pct low">9.52%</td>
<td data-value="21" class="abs low">2/21</td>
<td data-value="2.01" class="pct low">2.01%</td>
<td data-value="2380" class="abs low">48/2380</td>
</tr>
</tbody>
</table>
</div>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2026-05-07T04:36:12.525Z
</div>
<script src="prettify.js"></script>
<script>
window.onload = function () {
prettyPrint();
};
</script>
<script src="sorter.js"></script>
<script src="block-navigation.js"></script>
</body>
</html>