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: desc: "Format code" cmds: - cmd: python ./scripts/cpp/format-includes.py - cmd: python ./third-party/run-clang-format/run-clang-format.py -r common decompiler game goalc test tools lsp -i # npm install -g prettier - cmd: npx prettier --write ./decompiler/config/jak1/**/*.jsonc ignore_error: true - cmd: npx prettier --write ./decompiler/config/jak2/**/*.jsonc ignore_error: true format-json: desc: "Format code" cmds: # npm install -g prettier - cmd: npx prettier --write ./decompiler/config/jak1/**/*.jsonc ignore_error: true - cmd: npx prettier --write ./decompiler/config/jak2/**/*.jsonc ignore_error: true # 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 # 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 # 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-jak1: cmds: - cmd: '{{.GOALCTEST_BIN_RELEASE_DIR}}/goalc-test --gtest_brief=0 --gtest_filter="*Jak1TypeConsistency*" --gtest_break_on_failure' type-test: cmds: - cmd: '{{.GOALCTEST_BIN_RELEASE_DIR}}/goalc-test --gtest_brief=0 --gtest_filter="*Jak2TypeConsistency*" --gtest_break_on_failure'