v0.9.0 — Infrastructure & Hardening#36
Merged
Merged
Conversation
Move frontend/macos/bridge/ to a new top-level bridge/ directory, sibling to libew/ewpresenter/frontend, since the bridge is plain C++20 with no macOS-specific code and is consumed by both the macOS Swift frontend and ewpresenter/tests/test_bridge.cpp. - Root CMakeLists.txt now builds bridge/ unconditionally instead of gating it behind if(APPLE). - ewpresenter/tests/CMakeLists.txt: test_bridge is no longer gated behind if(APPLE) either, since nothing in the bridge or its test depends on macOS APIs. Updated its include path. - frontend/macos/CMakeLists.txt: updated the bridge include paths to point at the new top-level bridge/ directory. - Updated AGENTS.md, README.md, and frontend/macos/README.md to document the new bridge/ location. Co-Authored-By: Oz <oz-agent@warp.dev>
Add frontend/windows/ewcalc-winui/ewcalc-winui/Package.appxmanifest declaring package Identity, Properties, Applications, and Capabilities for the single-project MSIX WinUI 3 app. Existing Assets/ logo and splash images already satisfy the referenced sizes. Wire scripts/build-windows.ps1's -Package flow into the build-windows CI job on tagged and manual (workflow_dispatch) runs, uploading the unsigned .msix as a workflow artifact for the release job to attach. Make build-windows.ps1's makeappx invocation pack from the "AppX" staging subfolder when present (per single-project MSIX build output), falling back to the bin root otherwise. Document MSIX packaging and signing in frontend/windows/ewcalc-winui/README.md, including how to generate a matching self-signed certificate for local/test packaging and the requirement for a trusted cert for public distribution. Co-Authored-By: Oz <oz-agent@warp.dev>
Add three independent, parallel jobs to .github/workflows/ci.yml, all running on ubuntu-24.04: - sanitizers: build libew/ewpresenter/tests with ASan+UBSan and run ctest under instrumentation. - static-analysis: run clang-tidy (using .clang-tidy) and cppcheck against libew/ewpresenter sources. - coverage: build with Clang source-based coverage instrumentation, run ctest, generate an HTML report (uploaded as a CI artifact), and fail if libew+ewpresenter line coverage drops below 75%. Add EWCALC_BUILD_COVERAGE CMake option to gate coverage instrumentation flags (GCC --coverage or Clang -fprofile-instr-generate/-fcoverage-mapping) so they aren't hardcoded in the workflow YAML. Fix .clang-tidy: the previous config's Checks value enabled zero checks (verified with --list-checks), so clang-tidy was a silent no-op. Enable clang-diagnostic-*, clang-analyzer-*, bugprone-*, performance-*, and portability-* with three documented suppressions: the existing bugprone-exception-escape (confirmed still warranted), plus new suppressions for bugprone-easily-swappable-parameters (physics functions legitimately take several same-typed double parameters) and portability-avoid-pragma-once (conflicts with the project's #pragma once convention). Fix the one resulting real clang-tidy finding: restrict PresenterBase's default constructor to the Derived CRTP type (bugprone-crtp-constructor-accessibility), and suppress a cppcheck false positive in formatter.cpp's negative-zero normalization (the value == 0.0 / value = 0.0 idiom flips the IEEE-754 sign bit, so it is not a no-op despite cppcheck flagging it as duplicateConditionalAssign). Co-Authored-By: Oz <oz-agent@warp.dev>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements the v0.9.0 — Infrastructure & Hardening milestone: relocates the C bridge to a platform-agnostic top-level component, adds sanitizer/static-analysis/coverage CI jobs, and adds Windows MSIX packaging.
Closes #22
Closes #23
Closes #24
Closes #25
Changes
#22 — Relocate C bridge
frontend/macos/bridge/to top-levelbridge/(sibling tolibew/ewpresenter/frontend).CMakeLists.txtnow builds the bridge unconditionally instead of gating itif(APPLE); thetest_bridgegate was also lifted since the bridge has no macOS-specific code.ewpresenter/tests/CMakeLists.txt,frontend/macos/CMakeLists.txt,AGENTS.md, and READMEs to reflect the new location.#23 — Sanitizer + static-analysis CI jobs
sanitizers(ASan/UBSan) andstatic-analysis(clang-tidy + cppcheck) jobs to.github/workflows/ci.yml..clang-tidy, which was a silent no-op (its prior rule syntax enabled zero checks against an empty base set). It now enablesclang-diagnostic-*,clang-analyzer-*,bugprone-*,performance-*,portability-*with three documented suppressions.clang-tidyfinding surfaced by the corrected config (bugprone-crtp-constructor-accessibilityinPresenterBase).#25 — Coverage reporting
coverageCI job (Clang/llvm-cov) and anEWCALC_BUILD_COVERAGECMake option gating instrumentation flags.libew+ewpresenter); the plan's initial 80% proposal would have failed on day one, so the threshold was set with margin below the measured baseline.#24 — Windows MSIX packaging
Package.appxmanifestfor the WinUI 3 app; verified existingAssets/images already satisfy required sizes.-Packageinto the CI Windows job with MSIX artifact upload (thereleasejob already expectedartifacts/**/*.msix).frontend/windows/ewcalc-winui/README.md.scripts/build-windows.ps1:makeappxnow packs from theAppXstaging subfolder when present (per Microsoft's single-project MSIX build layout), falling back to the bin root otherwise.Validation
cteston macOS after each merge: 13/13 tests pass.clang-tidy(final config): 0 findings.cppcheck(warning/style/performance/portability): 0 findings..github/workflows/ci.ymlvalidated as well-formed YAML.Known caveats (need verification on non-macOS hosts / real CI)
gcovcoverage path (EWCALC_BUILD_COVERAGEon non-Clang toolchains) is implemented but unvalidated locally — only the Clang/llvm-cov path was exercised.makeappxstaging-path fix) is unvalidated — no Windows/MSBuild/makeappx toolchain was available. Needs a Windows CI run or manual Windows build to confirm-Packageproduces a working.msix.Identity/Publishervalues (OldCrow.EWCalculator/CN=Gary Wolfman) should be confirmed before any real signing or Store submission, sincePublishermust exactly match the signing certificate'sSubject.Artifacts
Plan: ewcalc v0.9.0 — Infrastructure & Hardening
Conversation
Co-Authored-By: Oz oz-agent@warp.dev