Files
OrcaSlicer/resources/profiles/Snapmaker/filament/Snapmaker PLA.json
SoftFever 92ea1ce57e Feat/update preset validator (#14507)
# Description

This PR expands profile validation so we can catch backward
compatibility issues with custom presets generated by older OrcaSlicer
releases. It also adds missing `renamed_from` metadata for presets that
were renamed or moved, so older user presets can resolve their original
parent names against the current system profiles.

## Background

Many users have reported missing preset issues after upgrading past
2.4.1. Investigation showed two common causes:

- preset lookup and compatibility checks did not always account for
`renamed_from`
- some renamed base presets were missing the old preset name in their
`renamed_from` metadata

The existing profile workflow validates the current system profile tree
and a single nightly-generated custom preset bundle. That is useful for
catching current profile errors, but it does not validate user presets
generated by older OrcaSlicer versions against the current system
profiles. As a result, older missing-parent compatibility gaps can slip
through.

## Changes

- Update `check_profiles.yml` to validate historical custom preset
fixtures from `OrcaSlicer/OrcaSlicer-profile-validator`.
- Download the fixture manifest from the public `fixture-archive`
release.
- Validate each `orca_custom_presets_<version>.zip` fixture
independently against the current PR's `resources/profiles`.
- Generate per-version validation logs and upload them as workflow
artifacts.
- Fail profile validation if any historical fixture version fails.
- Add missing `renamed_from` aliases for renamed/moved presets found by
the historical fixture validation.

## Profile Compatibility Fixes

This PR adds aliases for older parent names including:

- `0.20mm Bambu Support W @BBL X1C` -> `0.20mm Standard @BBL X1C`
- `Bambu PLA Impact @BBL X1C` -> `Bambu PLA Impact @System`
- `Ginger Generic rPLA` -> `Ginger Generic PLA`
- `Ginger Generic rPETG` -> `Ginger Generic PETG`
- legacy `Panchroma PLA Stain` BBL filament names -> current `Panchroma
PLA Satin` names
- legacy Elegoo casing/name variants such as `Elegoo RAPID PLA+`,
`Elegoo RAPID PETG`, `Elegoo RAPID PETG+`, and `Elegoo PETG Pro @System`

## Validation Flow

The custom preset validation step now:

1. Downloads `manifest.json` from the `fixture-archive` release.
2. Iterates over every fixture listed in the manifest.
3. Copies the current branch's `resources/profiles` into a temporary
profile tree.
4. Removes any existing `user` directory from that temporary tree.
5. Unzips exactly one historical fixture into the temporary tree.
6. Runs `OrcaSlicer_profile_validator -p <temp profile tree> -l 2`.
7. Writes a version-specific log and a consolidated summary.

This keeps validation scoped per fixture version and avoids mixing
generated user presets from different OrcaSlicer releases.

## Fixture Source

Historical fixtures are stored as public release assets in:

`OrcaSlicer/OrcaSlicer-profile-validator`, release tag `fixture-archive`

Each release asset is expected to be named like:

```text
orca_custom_presets_v2.4.1.zip
```

## Testing

Validated locally with:

- current system profile validation
- BBL filament subtype validation
- historical custom preset fixture validation
- extra profile JSON check in a clean profile tree

The affected historical fixture set passed after adding the missing
`renamed_from` aliases.

The release manifest controls which fixture versions are validated.
[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-07-06 12:27:47 +08:00

44 lines
1.4 KiB
JSON

{
"type": "filament",
"name": "Snapmaker PLA",
"renamed_from": "PolyLite PLA",
"inherits": "Snapmaker PLA @base",
"from": "system",
"setting_id": "cW1b4nGxE9yXIXJP",
"instantiation": "true",
"compatible_printers": [
"Snapmaker A250 (0.2 nozzle)",
"Snapmaker A250 (0.4 nozzle)",
"Snapmaker A250 (0.6 nozzle)",
"Snapmaker A250 (0.8 nozzle)",
"Snapmaker A250 BKit (0.2 nozzle)",
"Snapmaker A250 BKit (0.4 nozzle)",
"Snapmaker A250 BKit (0.6 nozzle)",
"Snapmaker A250 BKit (0.8 nozzle)",
"Snapmaker A250 QS+B Kit (0.2 nozzle)",
"Snapmaker A250 QS+B Kit (0.4 nozzle)",
"Snapmaker A250 QS+B Kit (0.6 nozzle)",
"Snapmaker A250 QS+B Kit (0.8 nozzle)",
"Snapmaker A250 QSKit (0.2 nozzle)",
"Snapmaker A250 QSKit (0.4 nozzle)",
"Snapmaker A250 QSKit (0.6 nozzle)",
"Snapmaker A250 QSKit (0.8 nozzle)",
"Snapmaker A350 (0.2 nozzle)",
"Snapmaker A350 (0.4 nozzle)",
"Snapmaker A350 (0.6 nozzle)",
"Snapmaker A350 (0.8 nozzle)",
"Snapmaker A350 BKit (0.2 nozzle)",
"Snapmaker A350 BKit (0.4 nozzle)",
"Snapmaker A350 BKit (0.6 nozzle)",
"Snapmaker A350 BKit (0.8 nozzle)",
"Snapmaker A350 QS+B Kit (0.2 nozzle)",
"Snapmaker A350 QS+B Kit (0.4 nozzle)",
"Snapmaker A350 QS+B Kit (0.6 nozzle)",
"Snapmaker A350 QS+B Kit (0.8 nozzle)",
"Snapmaker A350 QSKit (0.2 nozzle)",
"Snapmaker A350 QSKit (0.4 nozzle)",
"Snapmaker A350 QSKit (0.6 nozzle)",
"Snapmaker A350 QSKit (0.8 nozzle)"
]
}