56 lines
3 KiB
Markdown
56 lines
3 KiB
Markdown
|
|
# Release preparation (0.1.0 development prototype)
|
||
|
|
|
||
|
|
Phase 9 makes source packaging, staged install/uninstall and repeatable builds
|
||
|
|
testable. It does not turn the prototype into a production-qualified DAW. The
|
||
|
|
version remains 0.1.0; no tag, external release or binary publication is created
|
||
|
|
by `make dist` or `make release`.
|
||
|
|
|
||
|
|
## Build and package
|
||
|
|
|
||
|
|
```sh
|
||
|
|
make release
|
||
|
|
make test-install
|
||
|
|
make test-recovery test-performance
|
||
|
|
make dist
|
||
|
|
make test-release
|
||
|
|
```
|
||
|
|
|
||
|
|
release builds optimized, warning-enabled C/C++ code, tests and the optional GUI
|
||
|
|
in BUILD_DIR/release with no debug paths, a source-prefix map, deterministic ar
|
||
|
|
metadata and FLTK include/define flags rather than distribution-specific LTO
|
||
|
|
flags. It retains assertions so the test harness actually runs. dist creates
|
||
|
|
BUILD_DIR/xtc-0.1.0.tar.gz using Python's standard library. It includes only Git
|
||
|
|
indexed regular files (working-tree contents, including staged new files), plus
|
||
|
|
a source manifest; stage intended files first and check `git diff --cached`.
|
||
|
|
Untracked files, ignored build output and .git are excluded. Exported archives
|
||
|
|
can reproduce themselves without Git using SOURCE_MANIFEST.json.
|
||
|
|
|
||
|
|
Archive order, permissions, ownership, gzip filename and timestamps are normalized.
|
||
|
|
SOURCE_DATE_EPOCH defaults to 0; set an unsigned 32-bit epoch explicitly if desired.
|
||
|
|
The archive does not claim to identify a commit: release from a clean checkout
|
||
|
|
and record its commit/hash externally. Do not treat a dirty-tree archive as an
|
||
|
|
attested release. No artifact is uploaded by these targets.
|
||
|
|
|
||
|
|
test-release unpacks the source into two different temporary paths, runs release
|
||
|
|
in each, compares libxtc.a/xtc-check/optional xtc SHA-256 values, and repacks each
|
||
|
|
export to compare archive bytes. This verifies reproducibility for the same host,
|
||
|
|
compiler, flags and dependency versions. It does not promise bit-identical output
|
||
|
|
across distributions, compilers or library updates. Compiler/debug/sanitizer
|
||
|
|
build directories are intentionally separate; changing toolchain/flags in place
|
||
|
|
requires a clean directory. Python release tests require version 3.12+.
|
||
|
|
|
||
|
|
## Qualification record
|
||
|
|
|
||
|
|
Run normal core/GUI and live software JACK tests, no-JACK builds and ASan/UBSan.
|
||
|
|
GUI leak tests retain the narrow fontconfig suppression; core tests do not.
|
||
|
|
TSan recorder/publication tests complement lifecycle tests. Native API tests
|
||
|
|
verify callback failures, cleanup and retirement; they cannot certify arbitrary
|
||
|
|
extensions. See BUILD.md and tests/integration/README.md for commands.
|
||
|
|
|
||
|
|
Record versions, archive hashes, installation/consumer checks and measured timing.
|
||
|
|
Use LICENSES.md for dependency/license review and PLUGIN_HOSTING.md for the
|
||
|
|
external-hosting decision. Review RECOVERY.md for migration and process-crash
|
||
|
|
semantics. Physical devices, power loss, sustained recording/performance, user
|
||
|
|
acceptance on other distributions and binary redistribution are still separate
|
||
|
|
qualification work. There is no DEB/RPM/AppImage, bundled runtime, autosave,
|
||
|
|
external plugin host or stable shared-library extension ABI in this release.
|