version: 3 includes: build: ./scripts/tasks/Taskfile_{{OS}}.yml dotenv: - ./scripts/tasks/.env - ./scripts/tasks/.env.default tasks: # SETTINGS / CONFIGURATION settings: - 'python ./scripts/tasks/update-env.py --info' set-game-jak1: - 'python ./scripts/tasks/update-env.py --game jak1' set-game-jak2: - 'python ./scripts/tasks/update-env.py --game jak2' set-game-jak3: - 'python ./scripts/tasks/update-env.py --game jak3' set-decomp-ntscv1: desc: "aka black label" cmds: - 'python ./scripts/tasks/update-env.py --decomp_config ntscv1' set-decomp-ntscv2: desc: "aka red label" cmds: - 'python ./scripts/tasks/update-env.py --decomp_config ntscv2' set-decomp-pal: desc: "PAL region version" cmds: - 'python ./scripts/tasks/update-env.py --decomp_config pal' set-decomp-ntscjp: desc: "NTSC-J region version" cmds: - 'python ./scripts/tasks/update-env.py --decomp_config ntscjp' set-decomp-ntscko: desc: "NTSC-K region version" cmds: - 'python ./scripts/tasks/update-env.py --decomp_config ntscko' # GENERAL extract: desc: "Extracts the game's assets from './iso_data' with the set decompiler config" preconditions: - sh: test -f {{.DECOMP_BIN_RELEASE_DIR}}/decompiler{{.EXE_FILE_EXTENSION}} msg: "Couldn't locate decompiler executable in '{{.DECOMP_BIN_RELEASE_DIR}}/decompiler'" cmds: - "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler \"./decompiler/config/{{.DECOMP_CONFIG}}\" \"./iso_data\" \"./decompiler_out\" --version \"{{.DECOMP_CONFIG_VERSION}}\" --config-override '{\"decompile_code\": false, \"levels_extract\": true, \"allowed_objects\": []}'" boot-game: desc: "Boots the game, it will fail if it's not already compiled!" preconditions: - sh: test -f {{.GK_BIN_RELEASE_DIR}}/gk{{.EXE_FILE_EXTENSION}} msg: "Couldn't locate runtime executable in '{{.GK_BIN_RELEASE_DIR}}/gk'" cmds: - "{{.GK_BIN_RELEASE_DIR}}/gk -v --game {{.GAME}} -- -boot -fakeiso -debug" boot-game-retail: desc: "Boots the game without debug mode, it will fail if it's not already compiled!" preconditions: - sh: test -f {{.GK_BIN_RELEASE_DIR}}/gk{{.EXE_FILE_EXTENSION}} msg: "Couldn't locate runtime executable in '{{.GK_BIN_RELEASE_DIR}}/gk'" cmds: - "{{.GK_BIN_RELEASE_DIR}}/gk -v --game {{.GAME}} -- -boot -fakeiso" run-game: desc: "Start the game's runtime, to start the game itself the REPL is required" preconditions: - sh: test -f {{.GK_BIN_RELEASE_DIR}}/gk{{.EXE_FILE_EXTENSION}} msg: "Couldn't locate runtime executable in '{{.GK_BIN_RELEASE_DIR}}/gk'" cmds: - "{{.GK_BIN_RELEASE_DIR}}/gk -v --game {{.GAME}} -- -fakeiso -debug" # DEVELOPMENT repl: desc: "Start the REPL" preconditions: - sh: test -f {{.GOALC_BIN_RELEASE_DIR}}/goalc{{.EXE_FILE_EXTENSION}} msg: "Couldn't locate compiler executable in '{{.GOALC_BIN_RELEASE_DIR}}/goalc'" cmds: - "{{.GOALC_BIN_RELEASE_DIR}}/goalc --user-auto --game {{.GAME}}" format-json: desc: "Format code" cmds: # npm install -g prettier - cmd: npx prettier --write ./decompiler/config/jak*/**/*.jsonc ignore_error: true format: desc: "Format code" cmds: - cmd: python ./scripts/cpp/format-includes.py - cmd: python ./scripts/ci/lint-trailing-whitespace.py --fix - cmd: python ./third-party/run-clang-format/run-clang-format.py -r common decompiler game goalc test tools lsp -i - task: format-json format-gsrc: desc: "Run formatter on gsrc file" preconditions: - sh: test -f {{.FORMATTER_BIN_RELEASE_DIR}}/formatter{{.EXE_FILE_EXTENSION}} msg: "Couldn't locate formatter executable in '{{.FORMATTER_BIN_RELEASE_DIR}}/formatter'" cmds: - "{{.FORMATTER_BIN_RELEASE_DIR}}/formatter --write --file '{{.FILE}}'" # DECOMPILING decomp: cmds: - "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler \"./decompiler/config/{{.DECOMP_CONFIG}}\" \"./iso_data\" \"./decompiler_out\" --version \"{{.DECOMP_CONFIG_VERSION}}\" --config-override '{\"decompile_code\": true, \"levels_extract\": false}'" decomp-file: cmds: - "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler \"./decompiler/config/{{.DECOMP_CONFIG}}\" \"./iso_data\" \"./decompiler_out\" --version \"{{.DECOMP_CONFIG_VERSION}}\" --config-override '{\"decompile_code\": true, \"levels_extract\": false, \"allowed_objects\": [\"{{.FILE}}\"]}'" decomp-clean: cmds: - python ./scripts/tasks/clean-decomp.py --game "{{.GAME}}" lint-gsrc-file: cmds: - python ./scripts/gsrc/lint-gsrc-file.py --game {{.GAME}} --file "{{.FILE}}" update-gsrc: cmds: - python ./scripts/gsrc/update-gsrc-via-refs.py --game "{{.GAME}}" --decompiler "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler" --decompiler_config {{.DECOMP_CONFIG}} --version {{.DECOMP_CONFIG_VERSION}} update-gsrc-glob: cmds: - python ./scripts/gsrc/update-gsrc-via-refs.py --game "{{.GAME}}" --file_pattern "{{.GLOB}}" --decompiler "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler" --decompiler_config {{.DECOMP_CONFIG}} --version {{.DECOMP_CONFIG_VERSION}} update-gsrc-file: cmds: - task: decomp-file - python ./scripts/gsrc/update-from-decomp.py --game "{{.GAME}}" --file "{{.FILE}}" - task: lint-gsrc-file copy-common-naming: cmds: - python ./scripts/gsrc/copy-common-naming.py --file "{{.FILE}}" --decompiler "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler" - task: format-json copy-common-naming-from-refs: cmds: - python ./scripts/gsrc/copy-common-naming.py --update-names-from-refs --decompiler "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler" - task: format-json # ASSET RIPPING rip-textures: cmds: - "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler \"./decompiler/config/{{.DECOMP_CONFIG}}\" \"./iso_data\" \"./decompiler_out\" --version \"{{.DECOMP_CONFIG_VERSION}}\" --config-override '{\"decompile_code\": false, \"levels_extract\": true, \"save_texture_pngs\": true}'" rip-levels: cmds: - "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler \"./decompiler/config/{{.DECOMP_CONFIG}}\" \"./iso_data\" \"./decompiler_out\" --version \"{{.DECOMP_CONFIG_VERSION}}\" --config-override '{\"decompile_code\": false, \"levels_extract\": true, \"rip_levels\": true}'" rip-collision: cmds: - "{{.DECOMP_BIN_RELEASE_DIR}}/decompiler \"./decompiler/config/{{.DECOMP_CONFIG}}\" \"./iso_data\" \"./decompiler_out\" --version \"{{.DECOMP_CONFIG_VERSION}}\" --config-override '{\"decompile_code\": false, \"levels_extract\": true, \"extract_collision\": true, \"rip_collision\": true}'" # TOOLS analyze-ee-memory: cmds: - python ./scripts/tasks/extract-zip.py --file "{{.FILE}}" --out ./savestate_out/ - '{{.MEMDUMP_BIN_RELEASE_DIR}}/memory_dump_tool ./savestate_out/eeMemory.bin --output-path ./ --game {{.GAME}} > ee-analysis.log' watch-pcsx2: # python -m pip install -U "watchdog[watchmedo]" cmds: - watchmedo shell-command --drop --patterns="*.p2s" --recursive --command='task analyze-ee-memory FILE="${watch_src_path}"' "{{.SAVESTATE_DIR}}" vars: SAVESTATE_DIR: '{{default "." .SAVESTATE_DIR}}' type-search: desc: Just an example to show it running cmds: - "{{.TYPESEARCH_BIN_RELEASE_DIR}}/type_searcher --output-path ./search-results.json --game {{.GAME}} --fields '[{\"type\":\"int16\",\"offset\":2},{\"type\":\"int16\",\"offset\":4}]'" update-treesitter: desc: Updates locally built tree-sitter rules cmds: - cd ../tree-sitter-opengoal && yarn gen - python ./scripts/tasks/cp.py --src "../tree-sitter-opengoal/src/*" --dest "./third-party/tree-sitter/tree-sitter-opengoal" - python ./scripts/tasks/cp.py --src "../tree-sitter-opengoal/grammar.js" --dest "./third-party/tree-sitter/tree-sitter-opengoal" fix-translations: desc: Finds and tries to fix invalid translation Characters cmds: - python ./scripts/ci/lint-characters.py --fix lint: cmds: - python ./scripts/ci/lint-trailing-whitespace.py run-gpu-test: desc: "Runs the game's built in GPU test" preconditions: - sh: test -f {{.GK_BIN_RELEASE_DIR}}/gk{{.EXE_FILE_EXTENSION}} msg: "Couldn't locate runtime executable in '{{.GK_BIN_RELEASE_DIR}}/gk'" cmds: - "{{.GK_BIN_RELEASE_DIR}}/gk -v --gpu-test opengl --gpu-test-out-path ./gpu-test.json" # TESTS offline-tests: # ran by jenkins cmds: - '{{.OFFLINETEST_BIN_RELEASE_DIR}}/offline-test --iso_data_path "./iso_data/{{.GAME}}" --game {{.GAME}} --fail-on-cmp' offline-test-file: cmds: - '{{.OFFLINETEST_BIN_RELEASE_DIR}}/offline-test --iso_data_path "./iso_data/{{.GAME}}" --game {{.GAME}} --file {{.FILE}}' offline-tests-fast: cmds: - '{{.OFFLINETEST_BIN_RELEASE_DIR}}/offline-test --iso_data_path "./iso_data/{{.GAME}}" --game {{.GAME}} --pretty-print --num_threads 32 --dump_current_output --fail-on-cmp' # TODO - amalgamate offline-tests and this task, run twice if the previous step fails update-ref-tests: cmds: - cmd: python ./scripts/tasks/delete-file-or-folder.py --path failures - cmd: '{{.OFFLINETEST_BIN_RELEASE_DIR}}/offline-test --iso_data_path "./iso_data/{{.GAME}}" --game {{.GAME}} --pretty-print --num_threads 32 --dump_current_output --fail-on-cmp' ignore_error: true - python ./scripts/update_decomp_reference.py ./failures ./test/decompiler/reference/ --game {{.GAME}} - task: offline-tests-fast update-ref-file: cmds: - cmd: python ./scripts/tasks/delete-file-or-folder.py --path failures - cmd: '{{.OFFLINETEST_BIN_RELEASE_DIR}}/offline-test --iso_data_path "./iso_data/{{.GAME}}" --file {{.FILE}} --game {{.GAME}} --dump_current_output --fail-on-cmp' ignore_error: true - python ./scripts/update_decomp_reference.py ./failures ./test/decompiler/reference/ --game {{.GAME}} - task: offline-test-file type-test: cmds: - cmd: '{{.GOALCTEST_BIN_RELEASE_DIR}}/goalc-test --gtest_brief=0 --gtest_filter="*{{.TYPE_CONSISTENCY_TEST_FILTER}}*" --gtest_break_on_failure'