mirror of
https://github.com/newliver666/apk-reverse.git
synced 2026-09-28 21:56:59 +02:00
5aa4c97050
The PR diagnosed the same CI failure this branch had just fixed, from the other end, and two of its
three changes are kept.
.github/workflows/ci.yml KEPT. The matrix was ["3.11", "3.13"] while the frontmatter claims
Python 3.9+; it is now 3.11-3.14. Both new versions were checked here
before taking it: the gates and the full suite pass on 3.12 and 3.14.
check_commands.py KEPT. dcc.py added to EXTERNAL_SCRIPTS. This branch reached the same
conclusion structurally -- recognition by filename needs the gitignored
tools/ tree to exist -- and the explicit entry is the better belt for
the same braces, because it names the situation instead of inferring it.
Both spellings are declared: the bare dcc.py the java2c record uses
and the ./dcc.py this branch''s record uses.
its new test KEPT, with one assertion corrected. It pinned workbench-after-cd when
the workbench was present and xternal when it was not, so it asserted
one mechanism at a time -- and would have failed on any machine with
tools/ present once the declaration above exists, i.e. it was itself
machine-dependent, which is the defect the test guards. It now asserts
the property both mechanisms produce.
Verified on the merged tree, in both shapes: with tools/ present, 619 passed / 158 skipped / 25
xfailed and all five gates exit 0; with tools/ hidden to imitate a clean checkout, 596 passed / 181
skipped / 25 xfailed and all five gates still exit 0. The second shape is the one CI runs, and it is
the check that was missing when the previous commit was pushed.
91 lines
3.3 KiB
YAML
91 lines
3.3 KiB
YAML
# CI for the apk-reverse skill repository.
|
|
#
|
|
# WHAT THIS RUNS
|
|
# * the repository's own structural gates: check_repo.py, check_refs.py,
|
|
# check_budget.py, check_routing.py, and check_commands.py when it is present
|
|
# * the pytest suite: tests/unit, tests/cli, tests/integration
|
|
#
|
|
# WHAT THIS DOES NOT RUN, ON PURPOSE
|
|
# * anything needing a device, adb, frida, a rooted phone, a network peer or a
|
|
# real sample APK. Those routes are recorded experiments in tests/benchmark.md
|
|
# and their status is documented in
|
|
# docs/tool-verification/EXTENSION-test-harness.md.
|
|
# * anything about agent behaviour. Whether a model routes, classifies or
|
|
# refuses correctly is not observable from a unit test; skills/apk-reverse/
|
|
# evals/evals.json is the skeleton for that, and it has never been executed.
|
|
# * the dex_patch_bytes regression hash. Its input lives in git-ignored
|
|
# tools/_work/bench/, so that test self-skips here with a printed reason
|
|
# rather than failing. Run it locally after downloading the sample.
|
|
#
|
|
# Coverage is therefore: static structure, documentation anchors, budget, command
|
|
# references, pure parsers, CLI contracts and no-device flows. Nothing more is
|
|
# claimed.
|
|
name: ci
|
|
|
|
on:
|
|
push:
|
|
pull_request:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
test:
|
|
name: python ${{ matrix.python-version }}
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
python-version: ["3.11", "3.12", "3.13", "3.14"]
|
|
|
|
env:
|
|
PYTHONIOENCODING: utf-8
|
|
PYTHONDONTWRITEBYTECODE: "1"
|
|
# The gates spawn sibling scripts and decode their output. On a Windows
|
|
# runner the default codec is the console's (GBK here), and one script's
|
|
# --help text is not GBK-decodable, which is reported as a crash in that
|
|
# script rather than as a harness decoding problem. Pinning UTF-8 removes
|
|
# the whole class of failure on every platform.
|
|
PYTHONUTF8: "1"
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- name: Install test dependencies
|
|
# `tiktoken` is optional for the suite but not for the budget gate's *measurement*: without
|
|
# it, `check_budget.py` falls back to characters/constant, and the two paths must agree.
|
|
# Installing it here means CI exercises the real tokenizer path, and the unit test comparing
|
|
# both paths runs instead of skipping.
|
|
run: python -m pip install --upgrade pip pytest tiktoken
|
|
|
|
- name: Structural gate - repository layout
|
|
run: python check_repo.py
|
|
|
|
- name: Structural gate - documentation anchors
|
|
run: python check_refs.py
|
|
|
|
- name: Structural gate - context budget
|
|
run: python check_budget.py
|
|
|
|
- name: Structural gate - documented commands (if present)
|
|
run: |
|
|
if [ -f check_commands.py ]; then
|
|
python check_commands.py
|
|
else
|
|
echo "check_commands.py is not present in this revision; skipping."
|
|
fi
|
|
|
|
- name: Structural gate - routing inventory matches the entry point
|
|
run: python check_routing.py
|
|
|
|
- name: Regression suite
|
|
run: python -m pytest -q
|
|
|
|
- name: Summarise skipped and expected-failure coverage
|
|
if: always()
|
|
run: python -m pytest -q -ra --no-header -p no:cacheprovider 2>&1 | tail -n 40
|