Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
906b4f9104 | ||
|
|
9c7d563dbf | ||
|
|
743ad86f58 | ||
|
|
ebbdbd4f55 | ||
|
|
ef0d65453e |
@@ -64,6 +64,9 @@ jobs:
|
|||||||
- name: Install Node dependencies
|
- name: Install Node dependencies
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Run frontend tests
|
||||||
|
run: npm test
|
||||||
|
|
||||||
- name: Set Release Environment
|
- name: Set Release Environment
|
||||||
id: set_env
|
id: set_env
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ jobs:
|
|||||||
build-macos:
|
build-macos:
|
||||||
name: Build macOS (${{ matrix.platform.name }})
|
name: Build macOS (${{ matrix.platform.name }})
|
||||||
runs-on: ${{ matrix.platform.os }}
|
runs-on: ${{ matrix.platform.os }}
|
||||||
|
env:
|
||||||
|
XDG_CONFIG_HOME: ${{ runner.temp }}/.config
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
platform:
|
platform:
|
||||||
@@ -17,21 +19,31 @@ jobs:
|
|||||||
target: x86_64-apple-darwin
|
target: x86_64-apple-darwin
|
||||||
binary_dir: macos-x86_64
|
binary_dir: macos-x86_64
|
||||||
arch: x86_64
|
arch: x86_64
|
||||||
- name: Apple Silicon
|
# - name: Apple Silicon
|
||||||
os: macos
|
# os: macos
|
||||||
target: aarch64-apple-darwin
|
# target: aarch64-apple-darwin
|
||||||
binary_dir: macos-aarch64
|
# binary_dir: macos-aarch64
|
||||||
arch: arm64
|
# arch: arm64
|
||||||
- name: Universal (Intel + Apple Silicon)
|
# - name: Universal (Intel + Apple Silicon)
|
||||||
os: macos
|
# os: macos
|
||||||
target: universal-apple-darwin
|
# target: universal-apple-darwin
|
||||||
binary_dir: macos-universal
|
# binary_dir: macos-universal
|
||||||
arch: universal
|
# arch: universal
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Ensure workspace and git permissions
|
||||||
|
run: |
|
||||||
|
mkdir -p "${{ runner.temp }}/.config/git"
|
||||||
|
touch "${{ runner.temp }}/.config/git/ignore"
|
||||||
|
mkdir -p .git/info
|
||||||
|
touch .git/info/exclude
|
||||||
|
chmod -R u+rwX .git || true
|
||||||
|
chmod 644 .git/info/exclude || true
|
||||||
|
git config --local core.excludesFile "${{ runner.temp }}/.config/git/ignore" || true
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
@@ -47,6 +59,9 @@ jobs:
|
|||||||
- name: Install Node dependencies
|
- name: Install Node dependencies
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Run frontend tests
|
||||||
|
run: npm test
|
||||||
|
|
||||||
- name: Fetch ArgyllCMS binaries
|
- name: Fetch ArgyllCMS binaries
|
||||||
env:
|
env:
|
||||||
ARGYLL_SERVER_URL: ${{ github.server_url }}
|
ARGYLL_SERVER_URL: ${{ github.server_url }}
|
||||||
@@ -59,21 +74,6 @@ jobs:
|
|||||||
test -x "src-tauri/argyll/${{ matrix.platform.binary_dir }}/instlist"
|
test -x "src-tauri/argyll/${{ matrix.platform.binary_dir }}/instlist"
|
||||||
test -x "src-tauri/argyll/${{ matrix.platform.binary_dir }}/targen"
|
test -x "src-tauri/argyll/${{ matrix.platform.binary_dir }}/targen"
|
||||||
|
|
||||||
- name: Run Rust tests
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
CARGO_INCREMENTAL: "0"
|
|
||||||
CARGO_TARGET_DIR: "${{ runner.temp }}/cargo-target"
|
|
||||||
run: |
|
|
||||||
cd src-tauri
|
|
||||||
if [ "${{ matrix.platform.target }}" = "universal-apple-darwin" ]; then
|
|
||||||
cargo test
|
|
||||||
elif [ "${{ matrix.platform.target }}" = "aarch64-apple-darwin" ] && [ "$(uname -m)" != "arm64" ]; then
|
|
||||||
cargo test --no-run --target ${{ matrix.platform.target }}
|
|
||||||
else
|
|
||||||
cargo test --target ${{ matrix.platform.target }}
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Set Release Environment
|
- name: Set Release Environment
|
||||||
id: set_env
|
id: set_env
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
@@ -41,6 +41,9 @@ jobs:
|
|||||||
- name: Install Node dependencies
|
- name: Install Node dependencies
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Run frontend tests
|
||||||
|
run: npm test
|
||||||
|
|
||||||
- name: Fetch ArgyllCMS binaries
|
- name: Fetch ArgyllCMS binaries
|
||||||
shell: powershell
|
shell: powershell
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -35,6 +35,16 @@ jobs:
|
|||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Ensure workspace and git permissions
|
||||||
|
run: |
|
||||||
|
mkdir -p "${{ runner.temp }}/.config/git"
|
||||||
|
touch "${{ runner.temp }}/.config/git/ignore"
|
||||||
|
mkdir -p .git/info
|
||||||
|
touch .git/info/exclude
|
||||||
|
chmod -R u+rwX .git || true
|
||||||
|
chmod 644 .git/info/exclude || true
|
||||||
|
git config --local core.excludesFile "${{ runner.temp }}/.config/git/ignore" || true
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -163,9 +163,9 @@ The "Preferences" button opens the native macOS `NSPrintPanel` (not CUPS web UI
|
|||||||
- Defaults to `false` ensuring 100% out-of-the-box compatibility with stock upstream ArgyllCMS binaries.
|
- Defaults to `false` ensuring 100% out-of-the-box compatibility with stock upstream ArgyllCMS binaries.
|
||||||
- Subprocess error diagnostics in `chartread.js` capture `lastStderrLine` from `process:stderr`, auto-expanding the Process Output `<details>` panel with the stderr explanation if an unpatched binary rejects `-Y l`.
|
- Subprocess error diagnostics in `chartread.js` capture `lastStderrLine` from `process:stderr`, auto-expanding the Process Output `<details>` panel with the stderr explanation if an unpatched binary rejects `-Y l`.
|
||||||
|
|
||||||
## CI & Cross-Compilation Testing
|
## CI & Cross-Compilation
|
||||||
|
|
||||||
- macOS CI workflow lives in `.gitea/workflows/build-macos.yml`.
|
- Release packaging workflows live under `.gitea/workflows/` (`build-macos.yml`, `build-linux.yml`, `build-windows.yml`).
|
||||||
- On Intel runner hosts, cross-compiling for Apple Silicon (`aarch64-apple-darwin`) must use `cargo test --no-run --target aarch64-apple-darwin`. This validates sidecar packaging, compilation, and link correctness without attempting to execute ARM64 binaries on an Intel CPU (`Bad CPU type in executable (os error 86)`).
|
- Tag release builds focus exclusively on packaging via `npm run tauri build` without redundant debug-profile test compilations.
|
||||||
- Universal and native Intel matrix jobs run and execute full tests natively.
|
- Local/CI cross-compilation test execution for Apple Silicon (`aarch64-apple-darwin`) on Intel hosts must use `cargo test --no-run --target aarch64-apple-darwin` to avoid executing ARM64 binaries on an x86_64 CPU (`Bad CPU type in executable (os error 86)`).
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
> Modern, cross-platform native desktop application for printer profiling, powered by ArgyllCMS.
|
> Modern, cross-platform native desktop application for printer profiling, powered by ArgyllCMS.
|
||||||
|
|
||||||
[](https://git.i3omb.com/gronod/ICCery)
|
[](https://git.i3omb.com/gronod/ICCery)
|
||||||
[](https://git.i3omb.com/gronod/ICCery)
|
[](https://git.i3omb.com/gronod/ICCery)
|
||||||
[](https://tauri.app)
|
[](https://tauri.app)
|
||||||
[](LICENCE.md)
|
[](LICENCE.md)
|
||||||
|
|||||||
+5
-1
@@ -14,7 +14,7 @@ ICCery is a native, cross-platform desktop application built with:
|
|||||||
- **Frontend**: Vanilla JS (ES Modules) + HTML5/CSS3 with a modern dark theme and responsive layout.
|
- **Frontend**: Vanilla JS (ES Modules) + HTML5/CSS3 with a modern dark theme and responsive layout.
|
||||||
- **Visualization**: Three.js WebGL engine for 3D CIELAB color gamut volumes and sRGB reference comparisons.
|
- **Visualization**: Three.js WebGL engine for 3D CIELAB color gamut volumes and sRGB reference comparisons.
|
||||||
- **Engine**: ArgyllCMS command-line utilities orchestrated over isolated standard stream IPC (`stdin`, `stdout`, `stderr`).
|
- **Engine**: ArgyllCMS command-line utilities orchestrated over isolated standard stream IPC (`stdin`, `stdout`, `stderr`).
|
||||||
- **Current Version**: `v0.8.3` (Production release).
|
- **Current Version**: `v0.8.4` (Production release).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -113,6 +113,10 @@ ICCery is a native, cross-platform desktop application built with:
|
|||||||
- [x] **Custom Spectrum File Picker Dialog (#210)**: Implemented native `select_spectrum_file` command wrapping Tauri file dialog with `.sp` filter for custom FWA/OBA spectrum selection in Stage 4 profile generation.
|
- [x] **Custom Spectrum File Picker Dialog (#210)**: Implemented native `select_spectrum_file` command wrapping Tauri file dialog with `.sp` filter for custom FWA/OBA spectrum selection in Stage 4 profile generation.
|
||||||
- [x] **CGATS Dataset Import File Picker & State Synchronization (#211)**: Implemented native `select_dataset_file` command with `.ti3`, `.txt`, `.cgats`, and `.csv` filter, synchronized wizard target directory and basename upon import, and guarded against empty target states.
|
- [x] **CGATS Dataset Import File Picker & State Synchronization (#211)**: Implemented native `select_dataset_file` command with `.ti3`, `.txt`, `.cgats`, and `.csv` filter, synchronized wizard target directory and basename upon import, and guarded against empty target states.
|
||||||
|
|
||||||
|
### Maintenance & Reliability Release (`v0.8.4`)
|
||||||
|
- [x] **Atomic Verification History Persistence (#213)**: Hardened `quality_store.rs` with atomic temporary file writes (`.tmp`), explicit flush/sync, and atomic rename to prevent historical drift data loss or corruption upon unexpected system crashes.
|
||||||
|
- [x] **Frontend Unit Testing & CI Integration (#215)**: Added standard `npm test` script executing the 3 frontend test suites (`profcheck`, `chartread`, and `gamut_viewer`) and integrated automated frontend test validation into macOS, Linux, and Windows CI workflows.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 3. Future Roadmap
|
## 3. Future Roadmap
|
||||||
|
|||||||
+3
-2
@@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "iccery",
|
"name": "iccery",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.8.3",
|
"version": "0.8.4",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"fetch-argyll": "node scripts/fetch-argyll.mjs",
|
"fetch-argyll": "node scripts/fetch-argyll.mjs",
|
||||||
"tauri": "tauri"
|
"tauri": "tauri",
|
||||||
|
"test": "node src/js/profcheck.test.js && node src/js/chartread.test.js && node src/js/gamut_viewer.test.js"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tauri-apps/cli": "^2"
|
"@tauri-apps/cli": "^2"
|
||||||
|
|||||||
Generated
+1
-1
@@ -1423,7 +1423,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "iccery"
|
name = "iccery"
|
||||||
version = "0.8.3"
|
version = "0.8.4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"image",
|
"image",
|
||||||
|
|||||||
+12
-1
@@ -1,9 +1,20 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "iccery"
|
name = "iccery"
|
||||||
version = "0.8.3"
|
version = "0.8.4"
|
||||||
description = "Modern Printer Profiling UI frontend for ArgyllCMS"
|
description = "Modern Printer Profiling UI frontend for ArgyllCMS"
|
||||||
authors = ["Gordon"]
|
authors = ["Gordon"]
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
include = [
|
||||||
|
"src/**/*",
|
||||||
|
"build.rs",
|
||||||
|
"Cargo.toml",
|
||||||
|
"Cargo.lock",
|
||||||
|
"tauri.conf.json",
|
||||||
|
"capabilities/**/*",
|
||||||
|
"gen/**/*",
|
||||||
|
"icons/**/*",
|
||||||
|
"windows/**/*",
|
||||||
|
]
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,12 @@ fn main() {
|
|||||||
|
|
||||||
println!("cargo:rustc-env=BUILD_DATE={}", build_date);
|
println!("cargo:rustc-env=BUILD_DATE={}", build_date);
|
||||||
|
|
||||||
|
println!("cargo:rerun-if-changed=build.rs");
|
||||||
|
println!("cargo:rerun-if-changed=src");
|
||||||
|
println!("cargo:rerun-if-changed=tauri.conf.json");
|
||||||
|
println!("cargo:rerun-if-changed=Cargo.toml");
|
||||||
|
println!("cargo:rerun-if-changed=argyll");
|
||||||
|
|
||||||
// Validate that ArgyllCMS sidecar binaries are staged before building
|
// Validate that ArgyllCMS sidecar binaries are staged before building
|
||||||
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
|
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
|
||||||
let target_arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
|
let target_arch = std::env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://schema.tauri.app/config/2",
|
"$schema": "https://schema.tauri.app/config/2",
|
||||||
"productName": "ICCery",
|
"productName": "ICCery",
|
||||||
"version": "0.8.3",
|
"version": "0.8.4",
|
||||||
"identifier": "com.gronod.iccery",
|
"identifier": "com.gronod.iccery",
|
||||||
"build": {
|
"build": {
|
||||||
"frontendDist": "../src"
|
"frontendDist": "../src"
|
||||||
|
|||||||
Reference in New Issue
Block a user