Skip to content

release: v2.0.0 — cross-platform CI, docs, and CLI enhancements#42

Open
airprofly wants to merge 38 commits into
mainfrom
release/airprofly_02-v2.0.0
Open

release: v2.0.0 — cross-platform CI, docs, and CLI enhancements#42
airprofly wants to merge 38 commits into
mainfrom
release/airprofly_02-v2.0.0

Conversation

@airprofly

Copy link
Copy Markdown
Owner

Why

This release brings v2.0.0 of the backer project, focusing on maturing the cross-platform CI pipeline (especially Windows packaging), overhauling documentation for the course report, and adding minor CLI quality-of-life improvements.

What

CI & Cross-Platform (37 commits)

  • Windows packaging: Bundle OpenSSL DLLs and VC++ runtime, enable Qt6 GUI builds via aqtinstall/vcpkg, configure windeployqt
  • Docker: Add GHCR tags with docker-bake.hcl, enable Docker layer caching, fix compose interference
  • Release automation: Auto-delete existing tags before creating releases, fix publish workflow failures
  • Cross-platform: Replace POSIX strptime with standard std::get_time, detect OpenSSL DLL versions dynamically
  • Cache isolation: Add runner.os to CI cache keys to prevent cross-platform cache pollution

Documentation (5 files added, 2 modified)

  • UML diagrams: Add class, component, layers, sequence (backup), and use-case diagrams in PlantUML source (docs/diagrams/src/)
  • README overhaul: Restructure with feature score table, update project directory tree, add architecture diagram
  • Course report: Add presentation outline (docs/ppt.md), update requirements specification with scoring
  • .gitignore: Tidy up patterns for logs/ and output/ directories

CLI

  • Human-readable dates: Support --mtime-before and --mtime-after with formats like 2026-07-01 and 7 days ago (cross-platform via std::get_time)

Testing

  • CI pipeline passes on Linux (GCC/Clang), macOS (AppleClang), and Windows (MSVC)
  • Qt6 GUI builds verified on all three platforms (not automatically tested at runtime)
  • Release packaging verified with OpenSSL DLL bundling and windeployqt
  • Docker multi-stage build validated

airprofly and others added 30 commits July 12, 2026 20:59
…dle OpenSSL DLLs on Windows

- fix docker-bake.hcl: add REGISTRY variable (ghcr.io/airprofly/backer)
  so HCL generates correct GHCR tags; drop :latest tag per request
- fix docker-publish.yml: remove redundant --set override, let HCL
  resolve REGISTRY from env var directly
- fix publish-release.yml: install OpenSSL + Qt6 on macOS (brew) and
  Windows (choco), enable BUILD_GUI=ON, package backer-gui alongside
  backer-cli
- fix publish-release.yml: bundle libcrypto-3-x64.dll and
  libssl-3-x64.dll into Windows ZIP to fix "missing DLL" popup
- fix FetchQt6.cmake: add macOS/Windows platform detection (aqtinstall),
  fix Qt6_DIR path to use detected arch instead of hardcoded gcc_64
- add REGISTRY variable in docker-bake.hcl for configurable image tag
- remove --set tag override from docker-publish.yml (now handled by HCL)
- Linux: gracefully handle missing backer-gui (Qt6 download failed)
- Windows: disable GUI build (Qt6 not installed on runner)
- Docker: remove image field from docker-compose.yml to avoid overriding HCL tags
Switch Windows Qt6 installation from aqtinstall to vcpkg to unify
dependency management with OpenSSL. Add vcpkg binary cache to speed
up subsequent builds.
Qt 6.5.0 provides win64_msvc2019_64, not win64_msvc2022_64.
MSVC 2019 binaries are ABI-compatible with MSVC 2022.

Also pass -DQt6_DIR explicitly to cmake for reliable discovery.
Cache vcpkg compiled packages at %LOCALAPPDATA%\vcpkg\archives
to skip recompilation on subsequent runs.
qtbase is the default package, not a module. The --modules flag
causes aqtinstall to fail with 'packages not found' error.
Replace manual aqtinstall with jurplel/install-qt-action@v4 which
handles download, path setup, and caching automatically.
- Replace vcpkg static OpenSSL with choco install (faster, simpler)
- Use jurplel/install-qt-action for Qt6
- Add windeployqt for automatic DLL packaging
- Remove vcpkg toolchain and triplet from cmake
Add cache: 'true' to install-qt-action to skip re-downloading Qt6
on subsequent runs.
install-qt-action adds Qt bin to PATH, no need for manual path
construction.
System Qt6 from apt may have different version than FetchQt6.cmake
expects, causing path conflicts. Disable auto-download to use the
system package directly.
FetchQt6.cmake auto-download conflicts with system-installed Qt6
on Linux (apt), macOS (brew), and Windows (install-qt-action).
Set QT6_AUTO_DOWNLOAD=OFF to use the pre-installed Qt6 directly.
CMakeCache.txt contains absolute paths. Without runner.os in the key,
macOS could restore Linux cache (different HOME paths), causing
'CMakeCache.txt directory is different' errors.
windeployqt successfully copies all DLLs but returns non-zero on
translation file warnings. Use ; if ($LASTEXITCODE) to downgrade
to a warning instead of failing the entire package step.
Auto-downloaded Qt6 6.5.0 conflicts with system Qt6 6.2.4 from apt,
causing 'Qt6Gui could not be found' errors in FetchQt6.cmake.
Add Qt6 installation and -DBUILD_GUI=ON to macOS and Windows CI
jobs to ensure GUI builds are tested across all platforms.
windeployqt returns non-zero on translation file issues but
successfully copies all DLLs. Reset LASTEXITCODE to 0 to prevent
PowerShell from propagating the error.
windeployqt only bundles Qt dependencies. Manually copy
libcrypto-3-x64.dll and libssl-3-x64.dll from choco's OpenSSL
installation to ensure the runtime has the correct SSL libraries.
OpenSSL 4.x uses libcrypto-40.dll/libssl-40.dll, not
libcrypto-3-x64.dll/libssl-3-x64.dll (3.x naming).
airprofly and others added 8 commits July 15, 2026 01:27
- add parseTimeOption helper accepting YYYY-MM-DD or YYYY-MM-DD HH:MM:SS
- simplify setup-testdata.sh to minimal special-file test data
- slim down usage docs to match current feature scope
- append a scoring table covering all basic and extended features (total: 158)
…s-platform

strptime is a POSIX function unavailable on MSVC (Windows). Replace with
std::get_time (C++11, all platforms) + istringstream for identical parsing
behavior of YYYY-MM-DD[ HH:MM:SS] format.

Co-Authored-By: Claude <noreply@anthropic.com>
- rewrite README with project structure tree, cleaner build instructions, and feature score summary
- add 5 PlantUML diagrams: class, component, layers, sequence, and use-case
- update requirements.md with course background and team member info
- add presentation outline in docs/ppt.md
- update .gitignore to track logs and ignore node_modules/diagram dist
- reflect new files: docker-bake.hcl, cppcheck, usage docs, diagrams/images
- update CI/CD description and reorganize entry order for clarity
The Windows CLI binary (backer-cli.exe) dynamically links against the
MSVC runtime (/MD), but the release zip only contained OpenSSL DLLs
and Qt DLLs — the VC++ runtime DLLs (vcruntime140.dll, msvcp140.dll,
concrt140.dll, etc.) were missing. On machines without the Visual C++
Redistributable pre-installed, the executable fails to launch with a
"VCRUNTIME140.dll not found" error.

Add a packaging step that locates the VC++ CRT DLLs via vswhere from
Visual Studio redist directory and copies them into the release zip.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant