diff --git a/.github/workflows/progress.yml b/.github/workflows/progress.yml index 93e9f0600..a45defac9 100644 --- a/.github/workflows/progress.yml +++ b/.github/workflows/progress.yml @@ -22,7 +22,10 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} steps: - uses: actions/checkout@v7 + with: + fetch-depth: 0 - run: python3 tools/progress.py out + - run: python3 tools/progress_history.py out - uses: actions/upload-pages-artifact@v5 with: path: out diff --git a/CMakeLists.txt b/CMakeLists.txt index c0b526313..a551fe53a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,6 +62,8 @@ if(BUILD_TESTING) ${CMAKE_CURRENT_SOURCE_DIR}/tools/tests/test_pr_overlap_dependencies.py) add_test(NAME pr_overlap_tools COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/tests/test_pr_overlap.py) + add_test(NAME progress_history COMMAND ${Python3_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/tools/tests/test_progress_history.py) add_test(NAME progress_report COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/tools/tests/test_progress.py) add_test(NAME progress_encoding COMMAND ${Python3_EXECUTABLE} diff --git a/README.md b/README.md index 1779d66e2..76dd74c31 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ Includes a [relinker](core/relinker) that converts executable to the target syst [](https://boykopovar.github.io/AnyPS5/) +[](https://boykopovar.github.io/AnyPS5/history.html) + * System libraries: percentage of the functions known to the project so far (declared in [core/libs/prx](core/libs/prx)), not of every PS5 system function. The total grows as more functions are declared. Unsupported or unexpected states strictly throw `std::runtime_error`. `what()` is printed to stderr and the process terminates. diff --git a/docs/dev/PROGRESS.md b/docs/dev/PROGRESS.md index ca20cad09..8b532eeb6 100644 --- a/docs/dev/PROGRESS.md +++ b/docs/dev/PROGRESS.md @@ -12,6 +12,10 @@ For these wrappers, the JSON group adds `shared_sources` with the source library A library with no scanned definitions and no shared sources, such as one whose `Export.cpp` only has `APS5_DUMMY_FUN` because its functions are implemented in another library, is listed as having no exports instead of `0/0`. It is left out of the map. +## History + +[`tools/progress_history.py`](../../tools/progress_history.py) measures the first-parent history of `main` with the same rules as `progress.py` and writes `history.json`, `history.svg` (shown in the README) and `history.html` (the chart with a tooltip per day plus a table, linked from the end of the progress page). It takes one point per day, at the last commit of the day, and skips commits whose tree lacks the scanned paths. The chart compacts as days accumulate: up to 31 days it labels every day, up to 150 days one label per Monday, beyond that one per month; points (and their tooltips) are drawn up to 45 days, after which the table and `history.json` keep every day. Old trees are measured with today's counting rules and instruction list, so the series is comparable but not what the page showed on that day. The workflow checks out the full history for it. + ## Comparisons Comparisons identify functions by library and name. When a head group becomes a shared-source wrapper, its previous definitions are compared under the source library's identity. Removing a duplicate implementation is reported as sharing sources, without reporting the retained functions as removed. @@ -25,6 +29,7 @@ Implemented definitions are also classified as behaviourally empty when their bo ```sh python3 tools/tests/test_progress.py python3 tools/progress.py /tmp/anyps5-progress +python3 tools/tests/test_progress_history.py ``` The regressions check that adding test callbacks leaves counts and comparisons unchanged, including when a callback shares a pending function's name or a wrapper uses shared sources. They also create a source library and a copied wrapper, move the wrapper to a shared builder, check output labels and totals, then verify real regressions and removals are still reported. With `BUILD_TESTING=ON` and Python available, CTest registers them as `progress_report`. diff --git a/tools/progress.py b/tools/progress.py index d2222e720..5139d1ec4 100644 --- a/tools/progress.py +++ b/tools/progress.py @@ -363,6 +363,7 @@ def summary(libraries, shaders): f'
The total is the AMD RDNA 1 + RDNA 2 instruction list (tools/rdna_isa.txt). ' f'An instruction is implemented when the decoder recognizes it. ' f"Decoded opcodes not present in AMD's public list are not counted: {extra}.
", + 'Progress history (one point per day).
', "