diff --git a/.claude/skills/orca-profiles/SKILL.md b/.claude/skills/orca-profiles/SKILL.md index bb755d12fa..259564e063 100644 --- a/.claude/skills/orca-profiles/SKILL.md +++ b/.claude/skills/orca-profiles/SKILL.md @@ -91,7 +91,8 @@ Paths below are relative to this skill. Commands run from the repository root. ``` On Windows use `py -3` instead of `python3`, and `scripts\check_profile.bat -Vendor ""` - / `scripts\check_profile.bat`. Logs: `.test/check_profiles/logs/.log`. + / `scripts\check_profile.bat`. Logs land in a per-user cache dir (see + [validation.md](references/validation.md)). Id checks remain tree-wide under `--vendor`; filament-only bundles skip the default slice check. See [validation.md](references/validation.md) for flags, coverage and error remedies. 5. **Verify the changed behavior.** Slice newly added non-default processes explicitly, and diff --git a/.claude/skills/orca-profiles/references/validation.md b/.claude/skills/orca-profiles/references/validation.md index aa2a7d348d..c23b555f49 100644 --- a/.claude/skills/orca-profiles/references/validation.md +++ b/.claude/skills/orca-profiles/references/validation.md @@ -20,8 +20,11 @@ default Windows client refuses to run a checked-out `.ps1` at all. The `.ps1` fi probing `py -3`, then `python`, then `python3`; run the tool by hand with `py -3` for the same reason. Every check in the run happens even after an earlier one fails; the script exits non-zero if any did, and writes -`.test/check_profiles/logs/.log` plus, on failure, `.test/check_profiles/pr_comment.md` — the same -report CI posts on the PR. A stale `.test/check_profiles/.lock` after a crash must be removed by hand. +`logs/.log` plus, on failure, `pr_comment.md` under a per-user cache dir — the same report CI posts on the PR. +That dir is `~/Library/Caches/orca-profile-check` on macOS, `${XDG_CACHE_HOME:-~/.cache}/orca-profile-check` on Linux +and `%LOCALAPPDATA%\orca-profile-check` on Windows; it is named apart from OrcaSlicer's own per-user dirs and sits +outside the checkout, so every worktree shares one copy. `--work-dir` / `-WorkDir` overrides it. A stale `.lock` +there after a crash must be removed by hand. ## The five checks @@ -150,9 +153,10 @@ Two things it therefore does **not** enforce: Built from `src/dev-utils/OrcaSlicer_profile_validator.cpp` (`-DORCA_TOOLS=ON`). Both scripts find a local build under `build*/` — `check_profile.sh` tries Release, RelWithDebInfo, then -Debug, and `check_profile.ps1` adds MinSizeRel — else they download the nightly into -`.test/check_profiles/validator`. Pass `--download` / `-Download` to match CI exactly, since a stale -local build is used silently. Windows looks for `OrcaSlicer_profile_validator.exe`. +Debug, and `check_profile.ps1` adds MinSizeRel — else they download the nightly into the +`validator` subdirectory of the per-user cache dir (see above). Pass `--download` / `-Download` to +match CI exactly, since a stale local build is used silently. Windows looks for +`OrcaSlicer_profile_validator.exe`. If your build lives somewhere else entirely, point at it with `--validator` / `-Validator`, or set `ORCA_PROFILE_VALIDATOR` (`$env:ORCA_PROFILE_VALIDATOR` in PowerShell). diff --git a/.gitignore b/.gitignore index a2a1520fd5..b029afa180 100644 --- a/.gitignore +++ b/.gitignore @@ -52,5 +52,4 @@ internal_docs/ __pycache__/ *.pyc *.opc -/.test/ docs/superpowers/ \ No newline at end of file diff --git a/scripts/check_profile.ps1 b/scripts/check_profile.ps1 index 1aa5a11bd7..c016e8f299 100644 --- a/scripts/check_profile.ps1 +++ b/scripts/check_profile.ps1 @@ -21,8 +21,10 @@ normalize and update-index would still rewrite. Everything that has to be downloaded - the profile validator and the custom-preset fixture - archives - lands under \.test\check_profiles and is reused on the next run. That - directory also holds one log per check plus a copy of the comment CI would post on the PR. + archives - lands under a per-user cache directory (%LOCALAPPDATA%\orca-profile-check) and + is reused on the next run. Being outside the checkout, that directory is shared by every + worktree on the machine. It also holds one log per check plus a copy of the comment CI would + post on the PR. resources\profiles\user, which the validator creates as its data dir but a CI checkout never has, is moved aside for the duration of the run and restored on exit. Only one run per work @@ -60,8 +62,8 @@ Re-download the validator and fixtures instead of using the cache. .PARAMETER WorkDir - Downloads, logs and fixture trees (default: .test\check_profiles). Point it somewhere short, - such as D:\t, if a fixture tree trips Windows' 260-character path limit. + Downloads, logs and fixture trees (default: %LOCALAPPDATA%\orca-profile-check). Point it + somewhere short, such as D:\t, if a fixture tree trips Windows' 260-character path limit. .PARAMETER LogLevel Validator log level (default: 2, as in CI). @@ -212,7 +214,10 @@ if ($Vendor) { $VendorArgs = if ($Vendor) { @('-v', $Vendor) } else { @() } $VendorPyArgs = if ($Vendor) { @('--vendor', $Vendor) } else { @() } -if (-not $WorkDir) { $WorkDir = Join-Path $RepoRoot '.test\check_profiles' } +if (-not $WorkDir) { + # Per-user cache dir, so every worktree on the machine shares one set of downloads. + $WorkDir = Join-Path ([Environment]::GetFolderPath('LocalApplicationData')) 'orca-profile-check' +} $LogDir = Join-Path $WorkDir 'logs' try { New-Item -ItemType Directory -Force -Path $LogDir | Out-Null } catch { Die "cannot create ${LogDir}: $_" } $WorkDir = (Resolve-Path -LiteralPath $WorkDir).Path diff --git a/scripts/check_profile.sh b/scripts/check_profile.sh index 42e72b93f7..a6d7ca3b2e 100755 --- a/scripts/check_profile.sh +++ b/scripts/check_profile.sh @@ -7,8 +7,9 @@ # continue-on-error), then the script exits non-zero once at the end. # # Everything that has to be downloaded - the profile validator and the custom-preset fixture -# archives - lands under /.test/check_profiles/ and is reused on the next run. That -# directory also holds one log per check plus a copy of the comment CI would post on the PR. +# archives - lands under a per-user cache directory and is reused on the next run. Being outside +# the checkout, that directory is shared by every worktree on the machine. It also holds one log +# per check plus a copy of the comment CI would post on the PR. # # resources/profiles/user, which the validator creates as its data dir but a CI checkout never # has, is moved aside for the duration of the run and restored on exit. Only one run per work @@ -33,9 +34,20 @@ SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd -- "${SCRIPT_DIR}/.." && pwd)" HOST_ARCH="$(uname -m)" +HOST_OS="$(uname -s)" +case "${HOST_OS}" in + Darwin*) HOST_OS=Darwin ;; + MINGW*|MSYS*|CYGWIN*) HOST_OS=Windows ;; + Linux*) HOST_OS=Linux ;; +esac PROFILES_DIR="${REPO_ROOT}/resources/profiles" -WORK_DIR="${REPO_ROOT}/.test/check_profiles" +case "${HOST_OS}" in + Darwin) DEFAULT_WORK_DIR="${HOME}/Library/Caches/orca-profile-check" ;; + Windows) DEFAULT_WORK_DIR="${LOCALAPPDATA:-${HOME}/AppData/Local}/orca-profile-check" ;; + *) DEFAULT_WORK_DIR="${XDG_CACHE_HOME:-${HOME}/.cache}/orca-profile-check" ;; +esac +WORK_DIR="${DEFAULT_WORK_DIR}" VALIDATOR="${ORCA_PROFILE_VALIDATOR:-}" # Vendor to check, named after its .json - empty means every vendor, which is exactly what # both the validator's -v and orca_profile_tool.py check's --vendor take an empty value to mean. @@ -75,7 +87,7 @@ Options: downloaded for this platform --download ignore local builds and use the downloaded nightly validator --refresh re-download the validator and fixtures instead of using the cache - --work-dir DIR downloads, logs and fixture trees (default: .test/check_profiles) + --work-dir DIR downloads, logs and fixture trees (default: ${DEFAULT_WORK_DIR}) -l, --log-level N validator log level (default: ${LOG_LEVEL}, as in CI) -h, --help show this help @@ -304,8 +316,8 @@ EOF # holding the signed .app, Windows an .exe. download_validator() { local dest="${WORK_DIR}/validator" binary dmg app mounted app_src - case "$(uname -s)" in - Linux*) + case "${HOST_OS}" in + Linux) case "${HOST_ARCH}" in arm64|aarch64) msg "the nightly Linux validator is x86_64; build it locally for ${HOST_ARCH}" ;; esac @@ -313,7 +325,7 @@ download_validator() { fetch "${VALIDATOR_RELEASE_URL}/OrcaSlicer_profile_validator_Linux_Ubuntu2404_nightly" "${binary}" || return 1 chmod +x "${binary}" || return 1 ;; - Darwin*) + Darwin) dmg="${dest}/OrcaSlicer_profile_validator.dmg" app="${dest}/OrcaSlicer_profile_validator.app" binary="${app}/Contents/MacOS/OrcaSlicer_profile_validator" @@ -332,13 +344,13 @@ download_validator() { [ -x "${binary}" ] || { msg "no validator app inside ${dmg}"; return 1; } fi ;; - MINGW*|MSYS*|CYGWIN*) + Windows) binary="${dest}/OrcaSlicer_profile_validator.exe" fetch "${VALIDATOR_RELEASE_URL}/OrcaSlicer_profile_validator_Windows_nightly.exe" "${binary}" || return 1 chmod +x "${binary}" || return 1 ;; *) - msg "no nightly validator published for $(uname -s); build it (-DORCA_TOOLS=ON) and pass --validator" + msg "no nightly validator published for ${HOST_OS}; build it (-DORCA_TOOLS=ON) and pass --validator" return 1 ;; esac