Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
37 changes: 37 additions & 0 deletions .codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Codecov configuration for rawtoaces project
coverage:
precision: 2
round: down
range: "70...100"

status:
project:
default:
target: 80%
threshold: 5%
informational: true
patch:
default:
target: 70%
threshold: 5%

comment:
layout: "header,diff,files,footer"
behavior: default
require_changes: false
require_base: no
require_head: yes

github_checks:
annotations: true

ignore:
- "tests/"
- "**/test_*"
- "**/*_test.cpp"

flags:
unittests:
paths:
- "src/"
- "include/"
79 changes: 75 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# This starter workflow is for a CMake project running on multiple platforms. There is a different starter workflow if you just want a single platform.
# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml
name: CI
permissions:
contents: read

on:
push:
Expand All @@ -22,6 +24,8 @@ jobs:
os: ubuntu-latest
container: aswf/ci-osl:2022-clang11.10
vfxyear: 2022
cc_compiler: gcc
cxx_compiler: g++
cxx_std: 17
- desc: clang14
nametag: linux-vfx2022-clang14
Expand All @@ -41,7 +45,6 @@ jobs:
env:
CXX: ${{matrix.cxx_compiler}}
CC: ${{matrix.cc_compiler}}
OPENEXR_VERSION: ${{matrix.openexr_ver}}

steps:
- name: install nodejs20glibc2.17
Expand Down Expand Up @@ -138,14 +141,13 @@ jobs:

steps:
- uses: actions/checkout@v4

- name: Print
shell: bash
run: |
echo "CXX=${CXX}"
echo "matrix.cxx_compiler=${{matrix.cxx_compiler}}"
echo "matrix.cpp_compiler=${{matrix.cpp_compiler}}"
yum search ceres-solver

- name: Dependencies
shell: bash
run: |
Expand Down Expand Up @@ -278,3 +280,72 @@ jobs:
--rerun-failed
--output-on-failure
--test-dir build_config_test

gui:
name: GUI (Linux/macOS)
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-22.04
qt: qt6-base-dev
- os: macos-14
qt: qt
steps:
- uses: actions/checkout@v4
- name: Install deps (Linux)
if: startsWith(matrix.os, 'ubuntu')
run: |
sudo apt-get update
sudo apt-get install -y cmake g++ libceres-dev nlohmann-json3-dev libopencv-dev libopenimageio-dev qt6-base-dev
- name: Install deps (macOS)
if: startsWith(matrix.os, 'macos')
run: |
brew update
brew install cmake ceres-solver nlohmann-json openimageio qt
- name: Configure
run: |
if [[ "$RUNNER_OS" == "macOS" ]]; then export CMAKE_PREFIX_PATH="$(brew --prefix qt)"; fi
cmake -S . -B build -DRAWTOACES_BUILD_GUI=ON -DCMAKE_BUILD_TYPE=Release ${CMAKE_PREFIX_PATH:+-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}}
- name: Build GUI
run: cmake --build build --target rawtoaces-gui -j2
- name: Build GUI tests
run: cmake --build build/gui --target rawtoaces_gui_tests -j2
- name: Run GUI tests (offscreen)
env:
QT_QPA_PLATFORM: offscreen
run: ctest --test-dir build/gui -V

gui-windows:
name: GUI (Windows)
runs-on: windows-2022
steps:
- uses: actions/checkout@v4
- name: Setup MSVC dev env
uses: ilammy/msvc-dev-cmd@v1
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: '6.6.3'
arch: 'win64_msvc2019_64'
- name: Setup vcpkg and deps
shell: powershell
run: |
if (-not $env:VCPKG_ROOT) { echo "VCPKG_ROOT not set"; exit 1 }
& "$env:VCPKG_ROOT\vcpkg.exe" install ceres:x64-windows nlohmann-json:x64-windows openimageio:x64-windows
- name: Configure
shell: bash
run: |
cmake -S . -B build -A x64 \
-D CMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake \
-D CMAKE_BUILD_TYPE=Release \
-D RAWTOACES_BUILD_GUI=ON
- name: Build GUI
run: cmake --build build --config Release --target rawtoaces-gui -- -m:2
- name: Build GUI tests
run: cmake --build build\\gui --target rawtoaces_gui_tests --config Release -- -m:2
- name: Run GUI tests (offscreen)
env:
QT_QPA_PLATFORM: offscreen
run: ctest --test-dir build\\gui -C Release -V
3 changes: 3 additions & 0 deletions .github/workflows/clang-format-check.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
name: clang-format Check
permissions:
contents: read

on: [push, pull_request]
jobs:
formatting-check:
Expand Down
68 changes: 68 additions & 0 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Code Coverage

on:
push:
# branches: [ main, develop ]
pull_request:
# branches: [ main, develop ]

jobs:
coverage:
runs-on: macos-latest

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Needed for lcov

- name: Install OS dependencies
shell: bash
run: |
build_scripts/install_deps_mac.bash

- name: Install coverage dependencies
run: |
brew install lcov

- name: Configure CMake
run: |
mkdir build-coverage
cd build-coverage
cmake \
-DCMAKE_BUILD_TYPE=Debug \
-DENABLE_COVERAGE=ON \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_CXX_FLAGS="-g -O0" \
..

- name: Build
run: |
cd build-coverage
make -j$(sysctl -n hw.ncpu)

- name: Run tests
run: |
cd build-coverage
ctest --output-on-failure

- name: Generate coverage report
run: |
cd build-coverage
make coverage


- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN || '' }}
files: build-coverage/coverage/coverage_filtered.info
flags: unittests
name: codecov-umbrella
fail_ci_if_error: false

- name: Upload coverage report as artifact
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: build-coverage/coverage/
retention-days: 30
30 changes: 29 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,30 @@
.DS_Store
build/
build/
build-coverage/
tests/materials/*.exr

# GUI build artifacts
gui/build/
gui/compile_commands.json
gui/CMakeCache.txt

# IDE files
.vscode/
.idea/
*.code-workspace

# Temporary files
*.tmp
*.log
*.bak
*.orig
*~

# Testing files
test_files/
demo_*.sh
*_testing_guide.sh

# OS specific
Thumbs.db
.directory
Binary file added ASWF/logos/rawtoaces-horizontal-color.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
27 changes: 27 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ endforeach()

option( ENABLE_SHARED "Enable Shared Libraries" ON )
option( RTA_CENTOS7_CERES_HACK "Work around broken config in ceres-solver 1.12" OFF )
option( ENABLE_COVERAGE "Enable code coverage reporting" OFF )

if ( ENABLE_SHARED )
set ( DO_SHARED SHARED )
Expand All @@ -72,6 +73,11 @@ endif ()

include ( configure.cmake )

# Include coverage support if enabled
if( ENABLE_COVERAGE )
include( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/CodeCoverage.cmake )
endif()

#################################################
##
## Build
Expand All @@ -84,6 +90,27 @@ add_subdirectory("src/rawtoaces")
enable_testing()
add_subdirectory(tests)

# Optional: Build the Qt6 GUI application
# The GUI provides a user-friendly interface for RAWtoACES with features like:
# - Drag & drop file management with thumbnails
# - Complete parameter controls for all CLI options
# - Real-time conversion progress and logging
# - Interactive image viewer with selection mapping
# - Cross-platform support (macOS, Linux, Windows)
# Requires Qt6 (Core, Widgets, Concurrent, Network modules)
option(RAWTOACES_BUILD_GUI "Build the RAWtoACES Qt6 GUI application" OFF)
if(RAWTOACES_BUILD_GUI)
message(STATUS "RAWtoACES GUI build is enabled")
message(STATUS " - Requires Qt6 with Core, Widgets, Concurrent, Network modules")
message(STATUS " - Optional: LibRaw for RAW file thumbnails")
message(STATUS " - See gui/README.md for complete build instructions")
add_subdirectory(gui)
else()
message(STATUS "RAWtoACES GUI build is disabled")
message(STATUS " - Enable with: cmake -DRAWTOACES_BUILD_GUI=ON")
message(STATUS " - For GUI build instructions, see gui/README.md")
endif()

#################################################
##
## Install RAWTOACES.pc
Expand Down
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
# RAW to ACES Utility
<p align="center">
<img src="ASWF/logos/rawtoaces-horizontal-color.png">
</p>

[![CI](https://github.com/AcademySoftwareFoundation/rawtoaces/actions/workflows/ci.yml/badge.svg)](https://github.com/AcademySoftwareFoundation/rawtoaces/actions/workflows/ci.yml)
[![Code scanning – CodeQL](https://github.com/AcademySoftwareFoundation/rawtoaces/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/AcademySoftwareFoundation/rawtoaces/actions/workflows/github-code-scanning/codeql)
[![codecov](https://codecov.io/gh/AcademySoftwareFoundation/rawtoaces/branch/main/graph/badge.svg)](https://codecov.io/gh/AcademySoftwareFoundation/rawtoaces)

## Table of Contents
1. [Introduction](#introduction)
Expand Down Expand Up @@ -30,6 +36,7 @@ The source code contains the following:
* [`include/`](./include) - Public header files for the `rawtoaces` library
* [`src/`](./src) - Source code for the core library, utility library, and the command line tool
* [`unittest/`](./unittest) - Unit tests for `rawtoaces`
* [`gui/`](./gui) - Optional Qt GUI (see `gui/README.md` for details)

## Prerequisites

Expand Down Expand Up @@ -106,6 +113,8 @@ $ sudo cmake --install build # Optional if you want it to be accessible system w

The default process will install `librawtoaces_core_${rawtoaces_version}.dylib` and `librawtoaces_util_${rawtoaces_version}.dylib` to `/usr/local/lib`, a few header files to `/usr/local/include/rawtoaces` and a number of data files into `/usr/local/include/rawtoaces/data`.

<!-- GUI documentation is maintained under gui/README.md to keep the root README focused on the CLI and libraries. -->

#### Docker

Assuming you have [Docker](https://www.docker.com/) installed, installing and
Expand Down
Loading