mirror of https://github.com/zeldaret/botw.git
ci: Check matching functions for each push and PR build
This commit is contained in:
parent
9e6e871859
commit
fd90123f88
|
@ -25,3 +25,9 @@ jobs:
|
|||
working-directory: ./build
|
||||
- name: Build
|
||||
run: ninja -C build
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: build
|
||||
path: |
|
||||
build/uking
|
||||
data/uking_functions.csv
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
name: check
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["build"]
|
||||
types:
|
||||
- completed
|
||||
jobs:
|
||||
check-matchings:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: haya14busa/action-workflow_run-status@967ed83efa565c257675ed70cfe5231f062ddd94
|
||||
- uses: actions/checkout@v2
|
||||
- run: git submodule update --init --recursive
|
||||
- name: Install pip
|
||||
run: sudo apt update && sudo apt install -y python3-pip
|
||||
- name: Install tool dependencies
|
||||
run: sudo python3 -m pip install capstone colorama cxxfilt pyelftools gpg wget
|
||||
- name: Download executable
|
||||
run: wget https://static.zeldamods.org/botw/16A91992BBA71201E98756F3BC8F5D2F.elf.gpg
|
||||
- name: Decrypt executable
|
||||
run: gpg --quiet --batch --yes --decrypt --passphrase="${{ secrets.leo_secret }}" --output data/main.elf 16A91992BBA71201E98756F3BC8F5D2F.elf.gpg
|
||||
- name: Download artifacts
|
||||
uses: dawidd6/action-download-artifact@3cd20b2b63293848b29e22223f515baf725ed98f
|
||||
with:
|
||||
workflow: build.yml
|
||||
- name: Check matchings
|
||||
run: tools/check.py
|
|
@ -4,6 +4,7 @@ import capstone as cs
|
|||
from elftools.elf.elffile import ELFFile
|
||||
import diff_settings
|
||||
from pathlib import Path
|
||||
import sys
|
||||
from typing import Any, Dict, Set
|
||||
import utils
|
||||
|
||||
|
@ -49,7 +50,7 @@ def check_function(addr: int, size: int, name: str) -> bool:
|
|||
try:
|
||||
base_fn = get_fn_from_base_elf(addr, size)
|
||||
except KeyError:
|
||||
utils.fail(f"couldn't find base function 0x{addr:016x} for {name}")
|
||||
utils.print_error(f"couldn't find base function 0x{addr:016x} for {name}")
|
||||
return False
|
||||
|
||||
try:
|
||||
|
@ -127,14 +128,18 @@ def check_function(addr: int, size: int, name: str) -> bool:
|
|||
|
||||
|
||||
def main() -> None:
|
||||
failed = False
|
||||
for func in utils.get_functions():
|
||||
if not func.decomp_name:
|
||||
continue
|
||||
|
||||
if func.status == utils.FunctionStatus.Matching:
|
||||
if not check_function(func.addr, func.size, func.decomp_name):
|
||||
utils.fail(f"{func.decomp_name} was marked as matching but does not match")
|
||||
return
|
||||
utils.print_error(f"{func.decomp_name} was marked as matching but does not match")
|
||||
failed = True
|
||||
|
||||
if failed:
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -68,6 +68,10 @@ def warn(msg: str):
|
|||
sys.stderr.write(f"{Fore.MAGENTA}{Style.BRIGHT}warning:{Fore.RESET} {msg}{Style.RESET_ALL}\n")
|
||||
|
||||
|
||||
def fail(msg: str):
|
||||
def print_error(msg: str):
|
||||
sys.stderr.write(f"{Fore.RED}{Style.BRIGHT}error:{Fore.RESET} {msg}{Style.RESET_ALL}\n")
|
||||
|
||||
|
||||
def fail(msg: str):
|
||||
print_error(msg)
|
||||
sys.exit(1)
|
||||
|
|
Loading…
Reference in New Issue