Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
158 commits
Select commit Hold shift + click to select a range
cf9126c
Add experimental remesh and material baking workflow
SashaRX Sep 10, 2026
2c5cc2b
Build native libraries (auto) [skip ci]
github-actions[bot] Sep 10, 2026
7ed571d
Remesh & Bake: keep bake alive on refresh, guard result lifecycle
Sep 11, 2026
a60e314
RemeshBaker: observe cancellation before empty-atlas check and BVH build
Sep 11, 2026
fe82689
native: bump meshoptimizer to v1.3
claude Sep 25, 2026
049f930
fix(meshopt): align SimplifySparse/ErrorAbsolute with meshoptimizer.h
claude Sep 25, 2026
43fbc2f
fix(remesh): make the Remesh & Bake tab usable from the hub UI
claude Sep 25, 2026
5655f94
Build native libraries (auto) [skip ci]
github-actions[bot] Sep 25, 2026
854203c
fix(remesh): sanitize simplified mesh before xatlas
SashaRX Sep 26, 2026
494bedb
fix(remesh): report xatlas failure stage
SashaRX Sep 26, 2026
1db8a52
test(remesh): cover scale-independent xatlas unwrap
SashaRX Sep 26, 2026
9f5afdb
Build native libraries (auto) [skip ci]
github-actions[bot] Sep 26, 2026
9ec08cd
Build native libraries (auto) [skip ci]
github-actions[bot] Sep 26, 2026
3a3e398
Merge pull request #193 from SashaRX/fix/remesh-xatlas-degenerate
SashaRX Sep 26, 2026
ad25ae6
Build native libraries (auto) [skip ci]
github-actions[bot] Sep 26, 2026
1e8a577
fix(remesh): capture Read/Write-disabled meshes and non-standard mate…
claude Sep 26, 2026
f1a861c
feat(remesh): staged pipeline with previews, adaptive simplify, UV an…
claude Sep 26, 2026
646481d
docs(remesh): describe stages, previews, hard edges and bake options
claude Sep 26, 2026
9a67e59
Build native libraries (auto) [skip ci]
github-actions[bot] Sep 26, 2026
6155be0
feat(remesh): save the result as an FBX; keep quads on re-saves; fix …
Sep 28, 2026
aa06695
chore: ignore Mimosa security-plugin runtime state
Sep 28, 2026
21031f5
fix(remesh): qualify enum names in Save so the package compiles
Sep 28, 2026
ccd811b
fix(remesh): default hard edges to UV islands and persist stage settings
Sep 28, 2026
92bb670
fix(save): sanitize mesh names and guard the output folder in SaveAll
Sep 28, 2026
5d3eb0d
feat(remesh): embed the baked maps inside the exported FBX
Sep 28, 2026
3ada6ff
fix(remesh): apply baked normal map in 3D preview, pin FBX normals/ta…
Sep 28, 2026
0f9f591
fix(remesh): pin FBX normals/tangents via importNormals/importTangents
Sep 28, 2026
f9686eb
fix(remesh): cast bake rays along a welded cage, not island-split nor…
Sep 28, 2026
b1bacb6
feat(remesh): RemeshDiag log category with bake health counters
Sep 28, 2026
ef18cc7
fix(remesh): carry the source root's world scale into the saved model
Sep 28, 2026
8587d0b
feat(remesh): normalized scale-1 saves and a remesh folder by the source
Sep 28, 2026
fbb1b9c
fix(remesh): apply normal smoothing after UV generation for all modes
Sep 28, 2026
ff98a63
fix(remesh): self-heal zero unwrap normals and report them
Sep 28, 2026
7d4fa95
feat(remesh): regenerate TNB after the UV cut with weighted normals
Sep 28, 2026
a0f6f9d
fix(remesh): pad the unwrap wire layout to the promised sixteen floats
Sep 29, 2026
0b4ab89
Build native libraries (auto) [skip ci]
github-actions[bot] Sep 29, 2026
b9bf35d
fix(remesh): scale-free split-normal gate with native-normal self-heal
Sep 29, 2026
7380b34
Build native libraries (auto) [skip ci]
github-actions[bot] Sep 29, 2026
740eeaa
feat(remesh): accept skinned sources by baking the current pose
Sep 29, 2026
5a244a2
fix(remesh): capture Read/Write-off sources, posed skinned parts, LOD…
Sep 29, 2026
b488358
feat(remesh): keep-hierarchy mode — per-node remesh and bake, saved a…
Sep 29, 2026
a98dec3
feat(remesh): front-face projection filter and a cage preview
Sep 29, 2026
e99574f
feat(remesh): beauty bake mode — one lit texture as the player sees it
Sep 29, 2026
1805b5a
fix(remesh): Unity 6 compile pass for the beauty bake and keep-hierarchy
Sep 29, 2026
fa2646f
fix(remesh): MeshData is a nested type — qualify the helper signatures
Sep 29, 2026
c187824
fix(remesh): the ambient probe evaluates through plain arrays
Sep 29, 2026
d4072fe
fix(remesh): decode Bakery lightmaps in beauty bakes
Sep 29, 2026
faf5ffc
fix(remesh): a proper smooth cage — smoothed welded directions, fold-…
Sep 29, 2026
2c72301
fix(remesh): exclude collision meshes with suffixed _COL names
Sep 29, 2026
c5e9c34
feat(remesh): flip source models to Read/Write for the capture, off a…
Sep 29, 2026
d7262fb
feat(remesh): beauty bakes reproduce the game's directional-lightmap …
Sep 29, 2026
180fb80
feat(remesh): beauty reflections and light response follow the game's…
Sep 29, 2026
f7bc85c
fix(remesh): full-system recheck of the beauty path — two API guards
Sep 29, 2026
3e1f912
fix(remesh): beauty lighting as the game shades it; smooth/angle mode…
claude Sep 30, 2026
f2170fc
refactor(remesh): split RemeshBakeTool into RemeshPipeline, RemeshExp…
claude Sep 30, 2026
01b2dbc
chore: remove a stray screenshot committed at the package root
claude Sep 30, 2026
36ade9a
fix(fbx): restore the source importer on every exit of the isolated e…
claude Sep 30, 2026
4a0415c
fix(gallery): link pages by their written name; unique names on sanit…
claude Sep 30, 2026
2aabaeb
fix(fbx): cover a throwing Phase 1 reimport in the importer restore s…
claude Sep 30, 2026
b263738
fix(remesh): compile against the real ReflectionProbe API; add the mi…
claude Sep 30, 2026
dcf7555
ci(meta-check): cover Tests/ and every tracked package-root file
claude Sep 30, 2026
e0ec687
fix(remesh): read lightmaps lazily, per renderer region, only for Bea…
claude Sep 30, 2026
e762ca3
fix(remesh): stop flipping source importers to Read/Write for the cap…
claude Sep 30, 2026
9fef2d8
feat(remesh): bounding-box source shape — a far-LOD box proxy
Sep 30, 2026
cba4e0e
feat(remesh): box-set shape — recursive box approximation
Sep 30, 2026
684bda0
fix(remesh): box set partitions by renderer — no more collapse into o…
Sep 30, 2026
f837d78
fix(remesh): one hostile mesh no longer kills the capture; blocked im…
Sep 30, 2026
3f51f48
fix(remesh): box set samples the surface and pads thin leaves
Sep 30, 2026
9f0c5b6
fix(remesh): an unsplit box is Unity's own renderer bbox; splits stay…
Sep 30, 2026
80471cb
feat(remesh): oriented-box and hull proxy shapes, part filter before …
Oct 1, 2026
e5f1336
fix(remesh): the part filter drops rods by cross-section, not sheets …
Oct 1, 2026
78edac4
feat(remesh): vertex color tints albedo by default; one shader warnin…
Oct 1, 2026
2738e4c
fix(remesh): no normal-tilt warning on heavy reductions and proxy shapes
Oct 1, 2026
a7000d9
feat(remesh): outside-in winding probe; Scene highlight of what the c…
Oct 1, 2026
1baaaa8
fix(remesh): address Codex review — stage gating, deferred dispose, c…
Oct 1, 2026
b3e0f82
feat(hub): shared 3D view behind a UV | 3D canvas switch, open to eve…
Oct 1, 2026
39884a7
perf(remesh): bounded proxy search depth with nearest fallback, order…
Oct 1, 2026
4500518
feat(hub): the 3D canvas is the UV viewer on the model
Oct 1, 2026
d088229
feat(remesh): trim the voxel remesh to the source surface
Oct 1, 2026
fefd6c7
feat(hub): canvas switch present in every state, scene-like 3D view, …
Oct 1, 2026
cc34ae6
feat(remesh): sided, fitted projection cage
Oct 1, 2026
f016591
fix(remesh): trim by orientation; result atlas in the UV canvas
Oct 1, 2026
6ecf4db
feat(remesh): two-sided source faces through trim, bake filter and probe
Oct 1, 2026
3b6730b
feat(remesh): trim mask preview, one sheet for two-sided sources, con…
Oct 1, 2026
c8d4576
refactor(remesh): vertical right panel, shared wire and UV layer on t…
Oct 2, 2026
1615c8f
refactor(geometry): one shared geometry and readback module for every…
Oct 2, 2026
576017d
feat(gpu): full-featured GPU BVH queries and a GPU projection path fo…
Oct 2, 2026
daa6ca0
perf(bvh): binned SAH build and watertight ray-triangle test, CPU and…
Oct 2, 2026
31962cf
refactor(mesh): MeshNaming, the one reader of LOD and collision namin…
Oct 2, 2026
9c1b538
refactor(mesh): MeshSplitMerge, one split-by-material and merge for b…
Oct 2, 2026
8c4d9ba
refactor(mesh): MeshAccess, MeshTransform and shared bounds math
Oct 2, 2026
5d2e1c6
refactor(assets): FbxExport and SidecarStore, the FBX pipeline and si…
Oct 2, 2026
d662ab5
refactor(uv): UvTopology, the one UV layout topology behind the canva…
Oct 2, 2026
0f3ef9d
refactor(mesh): VertexChannels, the one scalar vertex channel read an…
Oct 2, 2026
f01eafd
refactor(mesh): LodHierarchy, the one LODGroup-from-hierarchy behind …
Oct 2, 2026
fb27079
refactor(assets): TextureAssets, the one texture-from-pixels, encoder…
Oct 2, 2026
ad4cd47
fix(mesh): MeshSplitMerge keeps unreadable firsts, empty splits, cont…
Oct 2, 2026
0f5528b
Merge branch 'refactor/mesh-split-merge' into refactor/mesh-access
Oct 2, 2026
17592e1
fix(mesh): MeshAccess keeps topology, zero UV channels and float colo…
Oct 2, 2026
e943b22
Merge branch 'refactor/mesh-access' into refactor/fbx-export
Oct 2, 2026
c563d11
Merge branch 'refactor/fbx-export' into refactor/uv-topology
Oct 2, 2026
deb731e
Merge branch 'refactor/uv-topology' into refactor/vertex-channels
Oct 2, 2026
30146bc
fix(mesh): VertexChannels.WriteSubmesh leaves vertices outside the su…
Oct 2, 2026
4c85ad6
Merge branch 'refactor/vertex-channels' into refactor/lod-hierarchy
Oct 2, 2026
877c07e
fix(mesh): LodHierarchy reuses an existing LODGroup instead of derefe…
Oct 2, 2026
f192f79
Merge branch 'refactor/lod-hierarchy' into refactor/texture-assets
Oct 2, 2026
ee842d7
fix(assets): a map with no pixel buffer fails the remesh export with …
Oct 2, 2026
ea9bc73
ci: compile the C# without a Unity licence on every PR, and scan it w…
Oct 2, 2026
4cf9f0b
refactor(bench): SweepRunner and BenchmarkRunner, the benchmark as a …
Oct 2, 2026
7857a19
Diagnostics library and tab: DebugUi, BakeHealth, HierarchicalDiag, F…
Oct 2, 2026
6278d3d
compile_check: one folder per generated project so the restores do no…
Oct 2, 2026
e8a8d0b
DiagnosticsTool: no repaint request on every sidebar draw
Oct 2, 2026
016361f
compile_check: refuse the package root as --out, define FBX for Tests…
Oct 2, 2026
1ae7fab
SonarQube: one project per pull request, every open PR on demand
Oct 2, 2026
6c02a5f
SonarQube the Space way: throwaway PR projects, findings on the PR's …
Oct 2, 2026
cec8585
SonarQube: SONAR_HOST_URL from the secret first, then the variable, t…
Oct 2, 2026
e6d06a2
sonar-pr-check: fall back to HTTP Basic token auth on a 401, name the…
Oct 2, 2026
bb09ee1
sonar-pr-check: try SONAR_API_TOKEN, then SONAR_TOKEN, each with Bear…
Oct 2, 2026
b9d386a
SonarQube: rule policy — four rules off with reasons, three advisory …
Oct 2, 2026
010ffd7
MeshNaming: a match timeout on every naming regex (Sonar S6444)
Oct 2, 2026
005fe36
Merge branch 'refactor/mesh-naming' into refactor/mesh-split-merge
claude Oct 2, 2026
4c80803
MeshSplitMerge: braces on the one-line copy loops, RemoveSource drops…
Oct 2, 2026
cba23a8
Merge branch 'refactor/mesh-split-merge' into refactor/mesh-access
claude Oct 2, 2026
9b4848e
Merge branch 'refactor/mesh-access' into refactor/fbx-export
claude Oct 2, 2026
44c033c
FbxExport: one condition for the hidden-shader fallback, a reason in …
Oct 2, 2026
d96e258
Merge branch 'refactor/fbx-export' into refactor/uv-topology
claude Oct 2, 2026
c5ab92a
Merge branch 'refactor/uv-topology' into refactor/vertex-channels
claude Oct 2, 2026
d337f31
Merge branch 'refactor/vertex-channels' into refactor/lod-hierarchy
claude Oct 2, 2026
0609c0f
Merge branch 'refactor/lod-hierarchy' into refactor/texture-assets
claude Oct 2, 2026
3b79167
Merge branch 'refactor/texture-assets' into refactor/bench
claude Oct 2, 2026
7a5c2c8
Merge branch 'refactor/bench' into refactor/diagnostics
claude Oct 2, 2026
9c0f21f
Sonar cleanup of the remesh-and-bake integration: dead fields, same-v…
Oct 2, 2026
a3dfeab
SonarQube: one summary job tabulating every checked PR
Oct 2, 2026
316b37f
RemeshBakeTool: ShowWhenDone logs a failure of the discarded task ins…
Oct 2, 2026
fb27a41
SonarQube: S1075 is advisory — Unity asset paths are forward-slash st…
Oct 2, 2026
9195cb4
Sonar cleanup, second pass: shader property ids, the orbit rotation n…
Oct 2, 2026
4a11d24
RemeshSource: the material reader's Read is ReadMap (S3218) — the ren…
Oct 2, 2026
fb1dac7
Merge pull request #194 from SashaRX/refactor/mesh-naming
SashaRX Oct 2, 2026
ce558f8
Merge pull request #195 from SashaRX/refactor/mesh-split-merge
SashaRX Oct 2, 2026
5e6013a
Merge pull request #196 from SashaRX/refactor/mesh-access
SashaRX Oct 2, 2026
c1cb080
Merge pull request #197 from SashaRX/refactor/fbx-export
SashaRX Oct 2, 2026
1d76928
Merge pull request #198 from SashaRX/refactor/uv-topology
SashaRX Oct 2, 2026
390a266
Merge pull request #199 from SashaRX/refactor/vertex-channels
SashaRX Oct 2, 2026
35c3fa9
Merge pull request #200 from SashaRX/refactor/lod-hierarchy
SashaRX Oct 2, 2026
6dd1744
Merge pull request #201 from SashaRX/refactor/texture-assets
SashaRX Oct 2, 2026
7b99a79
Merge pull request #203 from SashaRX/refactor/bench
SashaRX Oct 2, 2026
646c77f
Merge pull request #204 from SashaRX/refactor/diagnostics
SashaRX Oct 2, 2026
35df330
Merge pull request #205 from SashaRX/refactor/sonar-cleanup
SashaRX Oct 2, 2026
5dbdf3f
Merge pull request #202 from SashaRX/ci/compile-check-and-sonar
SashaRX Oct 2, 2026
5cb3bd3
Sonar: Reader.ReadSurface no longer shadows RemeshSource.Capture; one…
Oct 2, 2026
25dd4db
Sonar: three more of the integration findings — two auto-properties, …
Oct 2, 2026
99dce28
Sonar: the last five integration findings — one static selection subs…
Oct 2, 2026
9d2b7f5
Codex review of the integration: Beauty lighting, URP unlit, viewport…
Oct 2, 2026
3d92448
SonarQube: S1133 is advisory — an [Obsolete] forwarder is the depreca…
Oct 2, 2026
53db6e8
3D canvas: every channel writer re-encodes the mesh, and a rebuilt me…
Oct 2, 2026
3f6df43
3D canvas: a mesh without the shading mode's data draws grey instead …
Oct 2, 2026
c64a8b4
Release 1.1.0; Sonar deletes orphan throwaway projects; the auto-bump…
Oct 2, 2026
bf87353
README and package description for 1.1.0: the nine tabs, the UV | 3D …
Oct 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .claude/skills/repo-conventions/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ Canonical conventions for the `UnityMeshLab` repository. This file overrides `_s
Located under `.github/workflows/`:

- `build-native.yml` — builds native plugin binaries (platform-specific).
- `meta-check.yml` — verifies `.meta` file coverage.
- `meta-check.yml` — *Unity Package Checks*: `.meta` file coverage, `package.json`, the CS0103 identifier heuristic, and the licence-free C# compile of `Editor/` + `Tests/` (`Tools~/compile_check.py`, .NET SDK against the NuGet Unity reference assemblies, both FBX define variants).
- `sonar-static-analysis.yml` — *SonarQube*: the compile-check build analysed with `dotnet-sonarscanner` on the self-hosted server (Community edition): `main` into the project itself with the quality gate enforced, a PR into a per-run throwaway project whose issues `Tools~/sonar-pr-check.mjs` filters to the PR's changed lines (any new finding reds the check, except the advisory rules S3776/S3267/S3358/S1075, reported only; S125/S1104/S107/S1168 are off in the begin step with their reasons). `sonar-backlog-report.yml` is the manual read-only triage report; `Tools~/sonar-mcp.sh` the read-only MCP server. Needs the `SONAR_TOKEN` secret; skips with a notice without it. Runbook: `the Sonar runbook in SashaRX/Space (docs/sonar-autofix.md; here the tools live in Tools~/ and the config in ~/.config/meshlab/)`.
- `version-bump.yml` — automates `package.json` version bumps.
- `test.yml` — EditMode test run on Unity 6000.0. License-gated: skips cleanly when no `UNITY_LICENSE`/`UNITY_SERIAL` secrets are configured. **This repository is on Unity Personal (free) tier**, and Unity disabled manual `.alf`→`.ulf` activation for Personal seats in 2024, so the test job is currently always **skipped** on GitHub-hosted runners. Local Test Runner remains the canonical pre-commit verification path. See `unity-ci-validation/SKILL.md` §License activation for the recipe and the path forward (self-hosted runner or Plus/Pro upgrade).
- `release.yml` — tag-triggered GitHub Release; verifies `v<version>` tag matches `package.json` and extracts the matching section from `CHANGELOG.md`.
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/build-native.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,14 @@ jobs:
persist-credentials: false

- name: Configure CMake
run: cmake -S 'Native~' -B build ${{ matrix.cmake_args }} -DCMAKE_BUILD_TYPE=Release
run: cmake -S 'Native~' -B build ${{ matrix.cmake_args }} -DCMAKE_BUILD_TYPE=Release -DMESHLAB_BUILD_TESTS=ON

- name: Build
run: cmake --build build --config Release

- name: Test remesh bridge
run: ctest --test-dir build -C Release --output-on-failure

- name: Upload artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
Expand Down
48 changes: 43 additions & 5 deletions .github/workflows/meta-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ on:
- 'Tools~/**'
- '*.md'
- 'package.json'
# Manual re-run on any branch (a GITHUB_TOKEN push by a workflow starts no
# pull_request run of its own, so a bot commit needs this to get its checks).
workflow_dispatch:

jobs:
meta-files:
Expand Down Expand Up @@ -55,10 +58,18 @@ jobs:
EXIT=1
fi
done
# Check all tracked files in Editor/, Plugins/, Shaders/ that need .meta.
# Native~/ and Documentation~/ are hidden from Unity by the ~ suffix
# and do NOT need .meta files.
for f in $(find Editor Plugins Shaders -type f \
# Any other tracked file at the package root is imported too (a stray
# screenshot once shipped this way); dotfiles are the only exception.
for f in $(git ls-files | grep -v '/' | grep -v '\.meta$' | grep -v '^\.'); do
if [ ! -f "${f}.meta" ]; then
echo "::error::Missing .meta file for package-root file: ${f}"
EXIT=1
fi
done
# Check all tracked files in Editor/, Plugins/, Shaders/, Tests/ that
# need .meta. Native~/, Documentation~/ and Tools~/ are hidden from
# Unity by the ~ suffix and do NOT need .meta files.
for f in $(find Editor Plugins Shaders Tests -type f \
! -name '*.meta' \
! -name '.gitkeep' \
! -name '.DS_Store' \
Expand All @@ -69,7 +80,7 @@ jobs:
fi
done
# Check for orphaned .meta files (no matching file/dir)
for m in $(find Editor Plugins Shaders -name '*.meta' 2>/dev/null); do
for m in $(find Editor Plugins Shaders Tests -name '*.meta' 2>/dev/null); do
target="${m%.meta}"
if [ ! -e "$target" ]; then
echo "::warning::Orphaned .meta file (no matching file/dir): ${m}"
Expand Down Expand Up @@ -136,3 +147,30 @@ jobs:

- name: Check for identifiers used but never declared
run: python3 'Tools~/check_undeclared_identifiers.py' Editor Tests

csharp-compile:
name: Compile C# against Unity reference assemblies
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false

- uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('Tools~/compile_check.py') }}

# The whole package type-checks here with the .NET SDK — no Unity licence —
# against the UnityEngine/UnityEditor reference assemblies from NuGet, once
# without and once with LIGHTMAP_UV_TOOL_FBX_EXPORTER. This is what the
# identifier heuristic above approximates; a real CS error of any kind fails
# the job with a file/line annotation. The four 2021-era API gaps the
# references have are bridged on copied sources (see the script header).
- name: Build Editor and Tests (both FBX define variants)
run: python3 'Tools~/compile_check.py'
47 changes: 47 additions & 0 deletions .github/workflows/sonar-backlog-report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Sonar Backlog Report — a READ-ONLY snapshot of the main project on the self-hosted
# SonarQube: every open issue grouped by rule, the security hotspots still to review,
# and how many issues are already Accepted / False positive. It is the triage input
# for deciding, rule by rule, fix / exclude in configuration / Accept / False positive.
# Nothing on the server or in the repo is changed: the job only reads the web API
# (Tools~/sonar-pr-check.mjs report) and uploads report.md + the full JSON lists.
# Modelled on SashaRX/Space's sonar-backlog-report.yml; the Sonar runbook in SashaRX/Space (docs/sonar-autofix.md; here the tools live in Tools~/ and the config in ~/.config/meshlab/)
# is the runbook.

name: Sonar Backlog Report

# Manual dispatch only: the job holds the Sonar user token, so it runs when someone with
# write access starts it, never because a branch was pushed.
on:
workflow_dispatch:

permissions: {}

env:
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL || vars.SONAR_HOST_URL || 'http://178.104.156.174:9000' }}
SONAR_PROJECT_KEY: ${{ vars.SONAR_PROJECT_KEY || 'SashaRX_UnityMeshLab' }}

jobs:
report:
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false

- name: Read the open issues and hotspots
env:
# Web API reads need a USER token — see Tools~/sonar-pr-check.mjs.
SONAR_TOKEN: ${{ secrets.SONAR_API_TOKEN || secrets.SONAR_TOKEN }}
run: |
node Tools~/sonar-pr-check.mjs report --project "$SONAR_PROJECT_KEY" \
--out-dir "$RUNNER_TEMP/sonar-backlog-report"

- name: Upload the report
uses: actions/upload-artifact@v4
with:
name: sonar-backlog-report
path: ${{ runner.temp }}/sonar-backlog-report
retention-days: 14
Loading
Loading