objdiff & GitHub App
Projects using objdiff can send its report.json as it is, the same file decomp.dev used.
Sending objdiff reports
POST the report to the progress API like any other report. It's detected automatically (or force it with ?format=objdiff). objdiff reports don't include a commit or a version, so pass them in the URL: ?commit=…&version=us. With every function in it the report can be several megabytes, so send it gzip-compressed:
- name: Generate progress report
run: objdiff-cli report generate -o report.json
- name: Send progress to decompilati.onl
if: github.ref == 'refs/heads/main'
run: |
gzip -kf report.json
curl --fail -sS -X POST "$BASE/api/v1/progress?commit=$GITHUB_SHA" \
-H "Authorization: Bearer ${{ secrets.DECOMP_API_KEY }}" \
-H "Content-Encoding: gzip" \
--data-binary @report.json.gz
env:
BASE: https://decompilati.onlHow the numbers are read
| objdiff | decompilati.onl |
|---|---|
| matched code | matching code |
| fuzzy match beyond matched code | partially matching code (an estimate: objdiff has no exact figure for it) |
| matched data | data |
| matched / total functions | functions |
progress_categories | areas, with their units inside |
Only JSON reports are supported, not binary protobuf ones.
The GitHub App
Instead of sending reports, you can let the site fetch them: install the GitHub App on the repository and upload the report as a GitHub Actions artifact named <version>_report. No API key is needed.
- name: Upload progress report
uses: actions/upload-artifact@v4
with:
name: us_report
path: report.jsonWhen a workflow run on the default branch finishes successfully, every <version>_report artifact in it is imported as that version (an artifact named just report goes to the unnamed version), with the run's commit.
Importing past runs
With the app installed, the project's dashboard page has an "Import history from GitHub Actions" button. It imports the report artifacts of past successful runs on the default branch, oldest first, each at the time of its run. GitHub deletes artifacts after their retention period (90 days by default); for older history, backfill through the API.