├── .gitattributes ├── .github ├── CODEOWNERS ├── dependabot.yml └── workflows │ ├── go.yml │ ├── go_releaser.yml │ ├── golangci_lint.yml │ └── npm.yml ├── .gitignore ├── .golangci.yml ├── .goreleaser.yml ├── CONTRIBUTING.md ├── LICENSE.md ├── Makefile ├── README.md ├── dev-doc ├── README.md ├── build.md ├── debug.md ├── quality-metrics.md └── release.md ├── doc ├── tcr.md ├── tcr_check.md ├── tcr_config.md ├── tcr_config_reset.md ├── tcr_config_save.md ├── tcr_config_show.md ├── tcr_info.md ├── tcr_log.md ├── tcr_mob.md ├── tcr_one-shot.md ├── tcr_retro.md ├── tcr_solo.md ├── tcr_stats.md └── tcr_web.md ├── examples ├── README.md ├── cpp-bazel │ ├── .bazelrc │ ├── .bazelversion │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── cpp.yml │ │ └── toolchain │ │ │ └── bazel.yml │ ├── BUILD.bazel │ ├── README.md │ ├── WORKSPACE.bazel │ ├── bazel │ │ ├── BUILD.bazel │ │ └── windows_dll_library.bzl │ ├── include │ │ ├── HelloWorld.hpp │ │ └── config.hpp │ ├── src │ │ └── HelloWorld.cpp │ ├── tcrw │ └── test │ │ └── HelloWorldTest.cpp ├── cpp-cmake │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── cpp.yml │ │ └── toolchain │ │ │ └── cmake.yml │ ├── CMakeLists.txt │ ├── README.md │ ├── cmake │ │ ├── CPM.cmake │ │ └── FindGoogleTest.cmake │ ├── cmake_easy_setup.sh │ ├── include │ │ ├── HelloWorld.hpp │ │ └── config.hpp │ ├── src │ │ └── HelloWorld.cpp │ ├── tcrw │ └── test │ │ └── HelloWorldTest.cpp ├── csharp-dotnet │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── csharp.yml │ │ └── toolchain │ │ │ └── dotnet.yml │ ├── HelloWorld.sln │ ├── README.md │ ├── src │ │ └── HelloWorld │ │ │ ├── HelloWorld.csproj │ │ │ └── HelloWorldClass.cs │ ├── tcrw │ └── tests │ │ └── HelloWorld │ │ ├── HelloWorld.Test.csproj │ │ └── HelloWorldClassTest.cs ├── elixir-mix │ ├── .formatter.exs │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── elixir.yml │ │ └── toolchain │ │ │ └── mix.yml │ ├── README.md │ ├── lib │ │ └── hello_world.ex │ ├── mix.exs │ ├── mix.lock │ ├── tcrw │ └── test │ │ ├── hello_world_test.exs │ │ └── test_helper.exs ├── go-bazel │ ├── .bazelrc │ ├── .bazelversion │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── go.yml │ │ └── toolchain │ │ │ └── bazel.yml │ ├── BUILD.bazel │ ├── README.md │ ├── WORKSPACE.bazel │ ├── go.mod │ ├── go.sum │ ├── src │ │ ├── BUILD.bazel │ │ ├── hello_world.go │ │ └── hello_world_test.go │ └── tcrw ├── go-go-tools │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── go.yml │ │ └── toolchain │ │ │ └── go-tools.yml │ ├── README.md │ ├── go.mod │ ├── go.sum │ ├── src │ │ ├── hello_world.go │ │ └── hello_world_test.go │ └── tcrw ├── go-gotestsum │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── go.yml │ │ └── toolchain │ │ │ └── gotestsum.yml │ ├── README.md │ ├── go.mod │ ├── go.sum │ ├── src │ │ ├── hello_world.go │ │ └── hello_world_test.go │ └── tcrw ├── go-make │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── go.yml │ │ └── toolchain │ │ │ └── make.yml │ ├── Makefile │ ├── README.md │ ├── go.mod │ ├── go.sum │ ├── src │ │ ├── hello_world.go │ │ └── hello_world_test.go │ └── tcrw ├── go.work ├── go.work.sum ├── haskell-stack │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── haskell.yml │ │ └── toolchain │ │ │ └── stack.yml │ ├── README.md │ ├── hello-world.cabal │ ├── package.yaml │ ├── src │ │ └── HelloWorld.hs │ ├── stack.yaml │ ├── stack.yaml.lock │ ├── tcrw │ └── test │ │ └── Tests.hs ├── java-bazel │ ├── .bazelrc │ ├── .bazelversion │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── java.yml │ │ └── toolchain │ │ │ └── bazel.yml │ ├── BUILD.bazel │ ├── README.md │ ├── WORKSPACE.bazel │ ├── src │ │ ├── main │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── HelloWorld.java │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── example │ │ │ └── HelloWorldTest.java │ └── tcrw ├── java-gradle-wrapper │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── java.yml │ │ └── toolchain │ │ │ └── gradle-wrapper.yml │ ├── README.md │ ├── build.gradle │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── settings.gradle │ ├── src │ │ ├── main │ │ │ └── java │ │ │ │ └── HelloWorld.java │ │ └── test │ │ │ └── java │ │ │ └── HelloWorldTest.java │ └── tcrw ├── java-gradle │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── java.yml │ │ └── toolchain │ │ │ └── gradle.yml │ ├── README.md │ ├── build.gradle │ ├── settings.gradle │ ├── src │ │ ├── main │ │ │ └── java │ │ │ │ └── HelloWorld.java │ │ └── test │ │ │ └── java │ │ │ └── HelloWorldTest.java │ └── tcrw ├── java-make │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── java.yml │ │ └── toolchain │ │ │ └── make.yml │ ├── Makefile │ ├── README.md │ ├── src │ │ ├── main │ │ │ └── java │ │ │ │ └── HelloWorld.java │ │ └── test │ │ │ └── java │ │ │ └── HelloWorldTest.java │ └── tcrw ├── java-maven-wrapper │ ├── .gitignore │ ├── .mvn │ │ └── wrapper │ │ │ └── maven-wrapper.properties │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── java.yml │ │ └── toolchain │ │ │ └── maven-wrapper.yml │ ├── README.md │ ├── mvnw │ ├── mvnw.cmd │ ├── pom.xml │ ├── src │ │ ├── main │ │ │ └── java │ │ │ │ └── HelloWorld.java │ │ └── test │ │ │ └── java │ │ │ └── HelloWorldTest.java │ └── tcrw ├── java-maven │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── java.yml │ │ └── toolchain │ │ │ └── maven.yml │ ├── README.md │ ├── pom.xml │ ├── src │ │ ├── main │ │ │ └── java │ │ │ │ └── HelloWorld.java │ │ └── test │ │ │ └── java │ │ │ └── HelloWorldTest.java │ └── tcrw ├── javascript-yarn │ ├── .gitignore │ ├── .nvmrc │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── javascript.yml │ │ └── toolchain │ │ │ └── yarn.yml │ ├── README.md │ ├── jest.config.js │ ├── package.json │ ├── src │ │ └── helloWorld.js │ ├── tcrw │ ├── test │ │ └── helloWorld.spec.js │ └── yarn.lock ├── kotlin-gradle-wrapper │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── kotlin.yml │ │ └── toolchain │ │ │ └── gradle-wrapper.yml │ ├── README.md │ ├── build.gradle.kts │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── settings.gradle.kts │ ├── src │ │ ├── main │ │ │ └── kotlin │ │ │ │ └── HelloWorld.kt │ │ └── test │ │ │ └── kotlin │ │ │ └── HelloWorldTest.kt │ └── tcrw ├── kotlin-gradle │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── kotlin.yml │ │ └── toolchain │ │ │ └── gradle.yml │ ├── README.md │ ├── build.gradle.kts │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── settings.gradle.kts │ ├── src │ │ ├── main │ │ │ └── kotlin │ │ │ │ └── HelloWorld.kt │ │ └── test │ │ │ └── kotlin │ │ │ └── HelloWorldTest.kt │ └── tcrw ├── kotlin-maven-wrapper │ ├── .gitignore │ ├── .mvn │ │ └── wrapper │ │ │ └── maven-wrapper.properties │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── kotlin.yml │ │ └── toolchain │ │ │ └── maven-wrapper.yml │ ├── README.md │ ├── mvnw │ ├── mvnw.cmd │ ├── pom.xml │ ├── src │ │ ├── main │ │ │ └── kotlin │ │ │ │ └── HelloWorld.kt │ │ └── test │ │ │ └── kotlin │ │ │ └── HelloWorldTest.kt │ └── tcrw ├── kotlin-maven │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── kotlin.yml │ │ └── toolchain │ │ │ └── maven.yml │ ├── README.md │ ├── pom.xml │ ├── src │ │ ├── main │ │ │ └── kotlin │ │ │ │ └── HelloWorld.kt │ │ └── test │ │ │ └── kotlin │ │ │ └── HelloWorldTest.kt │ └── tcrw ├── php-phpunit │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── php.yml │ │ └── toolchain │ │ │ └── phpunit.yml │ ├── README.md │ ├── composer.json │ ├── composer.lock │ ├── phpunit.xml.dist │ ├── src │ │ └── HelloWorld.php │ ├── tcrw │ └── tests │ │ └── HelloWorldTest.php ├── python-bazel │ ├── .bazelrc │ ├── .bazelversion │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── python.yml │ │ └── toolchain │ │ │ └── bazel.yml │ ├── BUILD.bazel │ ├── README.md │ ├── WORKSPACE.bazel │ ├── pyproject.toml │ ├── requirements.txt │ ├── src │ │ └── hello_world │ │ │ ├── __init__.py │ │ │ └── hello_world.py │ ├── tcrw │ └── tests │ │ └── test_hello_world.py ├── python-pytest │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── python.yml │ │ └── toolchain │ │ │ └── pytest.yml │ ├── README.md │ ├── pyproject.toml │ ├── requirements.txt │ ├── setup.py │ ├── src │ │ └── hello_world │ │ │ ├── __init__.py │ │ │ └── hello_world.py │ ├── start_python_venv.sh │ ├── tcrw │ └── tests │ │ └── test_hello_world.py ├── rust-cargo │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── rust.yml │ │ └── toolchain │ │ │ └── cargo.yml │ ├── Cargo.lock │ ├── Cargo.toml │ ├── README.md │ ├── src │ │ └── lib.rs │ ├── tcrw │ └── tests │ │ └── lib_test.rs ├── rust-nextest │ ├── .config │ │ └── nextest.toml │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── rust.yml │ │ └── toolchain │ │ │ └── nextest.yml │ ├── Cargo.lock │ ├── Cargo.toml │ ├── README.md │ ├── src │ │ └── lib.rs │ ├── tcrw │ └── tests │ │ └── lib_test.rs ├── scala-sbt │ ├── .gitignore │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── scala.yml │ │ └── toolchain │ │ │ └── sbt.yml │ ├── README.md │ ├── build.sbt │ ├── src │ │ ├── main │ │ │ └── scala │ │ │ │ └── HelloWorld.scala │ │ └── test │ │ │ └── scala │ │ │ └── HelloWorldTest.scala │ └── tcrw ├── tcr │ ├── .gitignore │ ├── tcr.sh │ └── version.txt └── typescript-yarn │ ├── .gitignore │ ├── .nvmrc │ ├── .tcr │ ├── config.yml │ ├── language │ │ └── typescript.yml │ └── toolchain │ │ └── yarn.yml │ ├── README.md │ ├── jest.config.js │ ├── package-lock.json │ ├── package.json │ ├── src │ └── HelloWorld.ts │ ├── tcrw │ ├── test │ └── HelloWorld.spec.ts │ ├── tsconfig.json │ └── yarn.lock ├── sonar-project.properties ├── src ├── LICENSE.md ├── Makefile ├── checker │ ├── check_config_files.go │ ├── check_config_files_test.go │ ├── check_directories.go │ ├── check_directories_test.go │ ├── check_git.go │ ├── check_git_test.go │ ├── check_language.go │ ├── check_language_test.go │ ├── check_mob.go │ ├── check_mob_test.go │ ├── check_p4.go │ ├── check_p4_test.go │ ├── check_toolchain.go │ ├── check_toolchain_test.go │ ├── check_variant.go │ ├── check_variant_test.go │ ├── check_vcs.go │ ├── check_vcs_test.go │ ├── model │ │ ├── check_group.go │ │ ├── check_group_test.go │ │ ├── check_point.go │ │ ├── check_point_test.go │ │ ├── check_status.go │ │ └── check_status_test.go │ ├── runner.go │ └── runner_test.go ├── cli │ ├── menu.go │ ├── menu_test.go │ ├── print.go │ ├── print_test.go │ ├── terminal.go │ ├── terminal_test.go │ ├── terminal_ui.go │ ├── terminal_ui_test.go │ ├── terminal_unix.go │ └── terminal_windows.go ├── cmd │ ├── check.go │ ├── config.go │ ├── info.go │ ├── log.go │ ├── mob.go │ ├── one_shot.go │ ├── retro.go │ ├── root.go │ ├── solo.go │ ├── stats.go │ └── web.go ├── config │ ├── param_auto_push.go │ ├── param_base_dir.go │ ├── param_config_dir.go │ ├── param_git_remote.go │ ├── param_language.go │ ├── param_message_suffix.go │ ├── param_mob_timer_duration.go │ ├── param_polling_period.go │ ├── param_port_number.go │ ├── param_toolchain.go │ ├── param_trace.go │ ├── param_variant.go │ ├── param_vcs.go │ ├── param_work_dir.go │ ├── settings.go │ ├── tcr_config.go │ ├── tcr_config_test.go │ ├── type_bool.go │ ├── type_duration.go │ ├── type_int.go │ └── type_string.go ├── desktop │ ├── browser.go │ ├── browser_test.go │ ├── notification.go │ ├── notification_test.go │ └── notification_test_util.go ├── engine │ ├── commit_message.go │ ├── commit_message_test.go │ ├── session_info.go │ ├── tcr.go │ ├── tcr_test.go │ └── tcr_test_fake.go ├── events │ ├── aggregates.go │ ├── aggregates_test.go │ ├── dated_tcr_event.go │ ├── dated_tcr_event_test.go │ ├── dated_tcr_event_test_data_builder.go │ ├── tcr_event.go │ ├── tcr_event_test.go │ ├── tcr_event_test_data_builder.go │ ├── tcr_events.go │ ├── tcr_events_test.go │ ├── utils.go │ ├── value_and_ratio.go │ ├── value_and_ratio_test.go │ ├── value_evolution.go │ ├── value_evolution_test.go │ ├── yaml.go │ └── yaml_test.go ├── filesystem │ ├── io_utils.go │ ├── io_utils_test.go │ ├── sourcetree.go │ ├── sourcetree_impl.go │ ├── sourcetree_impl_test.go │ └── sourcetree_test_fake.go ├── go.mod ├── go.sum ├── http │ ├── api │ │ ├── build_info.go │ │ ├── build_info_test.go │ │ ├── context.go │ │ ├── controls.go │ │ ├── controls_test.go │ │ ├── roles.go │ │ ├── roles_test.go │ │ ├── session_info.go │ │ ├── session_info_test.go │ │ ├── timer.go │ │ └── timer_test.go │ ├── static.go │ ├── static │ │ ├── .gitignore │ │ └── index.html │ ├── static_test.go │ ├── web_ui_server.go │ ├── web_ui_server_test.go │ └── ws │ │ ├── context.go │ │ ├── context_test.go │ │ ├── websocket.go │ │ └── websocket_test.go ├── language │ ├── built-in │ │ ├── cpp.yml │ │ ├── csharp.yml │ │ ├── elixir.yml │ │ ├── go.yml │ │ ├── haskell.yml │ │ ├── java.yml │ │ ├── javascript.yml │ │ ├── kotlin.yml │ │ ├── php.yml │ │ ├── python.yml │ │ ├── rust.yml │ │ ├── scala.yml │ │ └── typescript.yml │ ├── built_in.go │ ├── built_in_test.go │ ├── built_in_test_data │ │ ├── cpp.go │ │ ├── csharp.go │ │ ├── elixir.go │ │ ├── go.go │ │ ├── haskell.go │ │ ├── java.go │ │ ├── javascript.go │ │ ├── kotlin.go │ │ ├── php.go │ │ ├── python.go │ │ ├── rust.go │ │ ├── scala.go │ │ ├── test_helper.go │ │ └── typescript.go │ ├── config.go │ ├── config_test.go │ ├── file_tree_filter.go │ ├── file_tree_filter_test.go │ ├── file_tree_filter_test_data_builder.go │ ├── file_tree_filter_unix_test.go │ ├── file_tree_filter_windows_test.go │ ├── filesystem.go │ ├── filesystem_test.go │ ├── language.go │ ├── language_test.go │ ├── language_test_data_builder.go │ ├── language_test_fake.go │ ├── language_test_helper.go │ ├── register.go │ └── register_test.go ├── main.go ├── params │ ├── params.go │ └── params_test_data_builder.go ├── report │ ├── reporter.go │ ├── reporter_test.go │ ├── reporter_test_util.go │ ├── role_event │ │ ├── message.go │ │ └── message_test.go │ ├── text │ │ ├── message.go │ │ └── message_test.go │ └── timer_event │ │ ├── message.go │ │ ├── message_test.go │ │ ├── time_format.go │ │ └── time_format_test.go ├── retro │ ├── retrospective.go │ ├── retrospective_test.go │ └── template │ │ └── retro.md ├── role │ ├── driver.go │ ├── driver_test.go │ ├── navigator.go │ ├── navigator_test.go │ ├── role.go │ └── role_test.go ├── runmode │ ├── check.go │ ├── check_test.go │ ├── log.go │ ├── log_test.go │ ├── mob.go │ ├── mob_test.go │ ├── one_shot.go │ ├── one_shot_test.go │ ├── retro.go │ ├── retro_test.go │ ├── runmode.go │ ├── runmode_test.go │ ├── solo.go │ ├── solo_test.go │ ├── stats.go │ └── stats_test.go ├── settings │ ├── build_info.go │ ├── build_info_test.go │ ├── defaults.go │ └── features.go ├── stats │ ├── printer.go │ └── printer_test.go ├── status │ ├── status.go │ └── status_test.go ├── tcr-local ├── tcr-local-p4 ├── tcrw ├── testdata │ └── java │ │ ├── .mvn │ │ └── wrapper │ │ │ └── maven-wrapper.properties │ │ ├── .tcr │ │ ├── config.yml │ │ ├── language │ │ │ └── java.yml │ │ └── toolchain │ │ │ ├── gradle-wrapper.yml │ │ │ ├── gradle.yml │ │ │ ├── maven-wrapper.yml │ │ │ └── maven.yml │ │ ├── build.gradle │ │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── mvnw │ │ ├── mvnw.cmd │ │ ├── pom.xml │ │ ├── settings.gradle │ │ └── src │ │ ├── main │ │ └── java │ │ │ └── Dummy.java │ │ └── test │ │ └── java │ │ └── DummyTest.java ├── timer │ ├── current_state.go │ ├── current_state_test.go │ ├── mob_turn_countdown.go │ ├── mob_turn_countdown_test.go │ ├── periodic_reminder.go │ └── periodic_reminder_test.go ├── toolchain │ ├── built-in │ │ ├── bazel.yml │ │ ├── cargo.yml │ │ ├── cmake.yml │ │ ├── dotnet.yml │ │ ├── go-tools.yml │ │ ├── gotestsum.yml │ │ ├── gradle-wrapper.yml │ │ ├── gradle.yml │ │ ├── make.yml │ │ ├── maven-wrapper.yml │ │ ├── maven.yml │ │ ├── mix.yml │ │ ├── nextest.yml │ │ ├── phpunit.yml │ │ ├── pytest.yml │ │ ├── sbt.yml │ │ ├── stack.yml │ │ └── yarn.yml │ ├── built_in.go │ ├── built_in_test.go │ ├── built_in_test_data │ │ ├── bazel.go │ │ ├── cargo.go │ │ ├── cmake.go │ │ ├── dotnet.go │ │ ├── go_tools.go │ │ ├── gotestsum.go │ │ ├── gradle.go │ │ ├── gradle_unix.go │ │ ├── gradle_windows.go │ │ ├── make.go │ │ ├── maven.go │ │ ├── maven_unix.go │ │ ├── maven_windows.go │ │ ├── mix.go │ │ ├── nextest.go │ │ ├── phpunit.go │ │ ├── phpunit_unix.go │ │ ├── phpunit_windows.go │ │ ├── pytest.go │ │ ├── sbt.go │ │ ├── stack.go │ │ ├── test_helper.go │ │ └── yarn.go │ ├── command │ │ ├── command.go │ │ ├── command_runner.go │ │ ├── command_runner_test.go │ │ ├── command_test.go │ │ └── command_test_data_builder.go │ ├── config.go │ ├── config_test.go │ ├── filesystem.go │ ├── register.go │ ├── register_test.go │ ├── smoke_test.go │ ├── test_stats.go │ ├── toolchain.go │ ├── toolchain_test.go │ ├── toolchain_test_data_builder.go │ ├── toolchain_test_fake.go │ └── toolchain_test_helper.go ├── ui │ ├── multicaster.go │ ├── multicaster_test.go │ ├── user_interface.go │ └── user_interface_test_fake.go ├── utils │ ├── path.go │ ├── path_test.go │ ├── path_windows_test.go │ ├── simple_trace.go │ ├── simple_trace_test.go │ ├── test_helper.go │ ├── yaml.go │ └── yaml_test.go ├── variant │ ├── variant.go │ └── variant_test.go ├── vcs │ ├── factory │ │ ├── vcs_factory.go │ │ └── vcs_factory_test.go │ ├── fake │ │ └── vcs_test_fake.go │ ├── file_diff.go │ ├── file_diff_test.go │ ├── git │ │ ├── git_command.go │ │ ├── git_command_test.go │ │ ├── git_command_test_stub.go │ │ ├── git_impl.go │ │ └── git_impl_test.go │ ├── p4 │ │ ├── p4_command.go │ │ ├── p4_command_test.go │ │ ├── p4_command_test_stub.go │ │ ├── p4_impl.go │ │ ├── p4_impl_test.go │ │ └── p4_impl_windows_test.go │ ├── shell │ │ ├── command.go │ │ ├── command_impl.go │ │ ├── command_impl_test.go │ │ ├── command_test_stub.go │ │ ├── shell.go │ │ ├── shell_unix.go │ │ ├── shell_unix_test.go │ │ ├── shell_windows.go │ │ └── shell_windows_test.go │ ├── vcs.go │ ├── vcs_log_item.go │ └── vcs_log_item_test.go └── xunit │ ├── go_junit_ingesters_wrapper.go │ ├── go_junit_ingesters_wrapper_test.go │ ├── parser.go │ └── parser_test.go ├── tcr-doc ├── LICENSE.md ├── Makefile ├── gen_doc.go ├── go.mod └── go.sum ├── tools ├── .tcr │ ├── config.yml │ ├── language │ │ └── go.yml │ └── toolchain │ │ ├── go-tools.yml │ │ └── gotestsum.yml ├── scripts │ ├── dependency-graph.sh │ └── release.sh └── tcr │ ├── .gitignore │ ├── tcr-local-p4.sh │ ├── tcr-local.sh │ ├── tcr.sh │ ├── tcr_go.md │ ├── verify-tcr-examples.sh │ └── version.txt ├── variants-doc ├── mmd │ ├── generate_png.bash │ ├── variant-btcr.mmd │ ├── variant-introspective.mmd │ ├── variant-original.mmd │ └── variant-relaxed.mmd └── tcr_variants.md └── webapp ├── .editorconfig ├── .eslintrc.json ├── .gitignore ├── Makefile ├── README.md ├── angular.json ├── karma.conf.js ├── package-lock.json ├── package.json ├── spec └── support │ └── jasmine.json ├── src ├── app │ ├── app.component.css │ ├── app.component.html │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.config.ts │ ├── app.routes.ts │ ├── components │ │ ├── footer │ │ │ ├── footer.component.css │ │ │ ├── footer.component.html │ │ │ ├── footer.component.spec.ts │ │ │ └── footer.component.ts │ │ ├── header │ │ │ ├── header.component.css │ │ │ ├── header.component.html │ │ │ ├── header.component.spec.ts │ │ │ └── header.component.ts │ │ ├── home │ │ │ ├── home.component.css │ │ │ ├── home.component.html │ │ │ ├── home.component.spec.ts │ │ │ └── home.component.ts │ │ ├── tcr-about │ │ │ ├── tcr-about.component.css │ │ │ ├── tcr-about.component.html │ │ │ ├── tcr-about.component.spec.ts │ │ │ └── tcr-about.component.ts │ │ ├── tcr-console │ │ │ ├── tcr-console.component.css │ │ │ ├── tcr-console.component.html │ │ │ ├── tcr-console.component.spec.ts │ │ │ └── tcr-console.component.ts │ │ ├── tcr-controls │ │ │ ├── tcr-controls.component.css │ │ │ ├── tcr-controls.component.html │ │ │ ├── tcr-controls.component.spec.ts │ │ │ └── tcr-controls.component.ts │ │ ├── tcr-role │ │ │ ├── tcr-role.component.css │ │ │ ├── tcr-role.component.html │ │ │ ├── tcr-role.component.spec.ts │ │ │ └── tcr-role.component.ts │ │ ├── tcr-roles │ │ │ ├── tcr-roles.component.css │ │ │ ├── tcr-roles.component.html │ │ │ ├── tcr-roles.component.spec.ts │ │ │ └── tcr-roles.component.ts │ │ ├── tcr-session-info │ │ │ ├── tcr-session-info.component.css │ │ │ ├── tcr-session-info.component.html │ │ │ ├── tcr-session-info.component.spec.ts │ │ │ └── tcr-session-info.component.ts │ │ ├── tcr-timer │ │ │ ├── tcr-timer.component.css │ │ │ ├── tcr-timer.component.html │ │ │ ├── tcr-timer.component.spec.ts │ │ │ └── tcr-timer.component.ts │ │ └── tcr-trace │ │ │ ├── tcr-trace.component.css │ │ │ ├── tcr-trace.component.html │ │ │ ├── tcr-trace.component.spec.ts │ │ │ └── tcr-trace.component.ts │ ├── interfaces │ │ ├── tcr-build-info.ts │ │ ├── tcr-message.ts │ │ ├── tcr-role.ts │ │ ├── tcr-session-info.ts │ │ └── tcr-timer.ts │ ├── pipes │ │ ├── format-timer.pipe.spec.ts │ │ ├── format-timer.pipe.ts │ │ ├── on-off.pipe.spec.ts │ │ ├── on-off.pipe.ts │ │ ├── show-empty.pipe.spec.ts │ │ ├── show-empty.pipe.ts │ │ ├── variant-description.pipe.spec.ts │ │ ├── variant-description.pipe.ts │ │ ├── variant-image-path.pipe.spec.ts │ │ └── variant-image-path.pipe.ts │ └── services │ │ ├── tcr-build-info.service.spec.ts │ │ ├── tcr-build-info.service.ts │ │ ├── tcr-controls.service.spec.ts │ │ ├── tcr-controls.service.ts │ │ ├── tcr-message.service.spec.ts │ │ ├── tcr-message.service.ts │ │ ├── tcr-session-info.service.spec.ts │ │ ├── tcr-session-info.service.ts │ │ ├── tcr-timer.service.spec.ts │ │ ├── tcr-timer.service.ts │ │ ├── trc-roles.service.spec.ts │ │ ├── trc-roles.service.ts │ │ ├── websocket.service.spec.ts │ │ └── websocket.service.ts ├── assets │ └── images │ │ ├── variant-btcr.png │ │ ├── variant-introspective.png │ │ ├── variant-original.png │ │ └── variant-relaxed.png ├── favicon.ico ├── index.html ├── main.ts ├── proxy.conf.json └── styles.css ├── tsconfig.app.json ├── tsconfig.json └── tsconfig.spec.json /.gitattributes: -------------------------------------------------------------------------------- 1 | *.go text eol=lf 2 | 3 | # Prevents Maven wrapper from failing when launched from git bash on a Windows box 4 | maven-wrapper.properties text eol=lf 5 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # These owners will be the default owners for everything in 2 | # the repo. Unless a later match takes precedence, 3 | # they will be requested for review when someone opens a pull request. 4 | * @mengdaming @aatwi @philou 5 | -------------------------------------------------------------------------------- /.github/workflows/go_releaser.yml: -------------------------------------------------------------------------------- 1 | name: Go release 2 | 3 | permissions: 4 | contents: write 5 | actions: write 6 | id-token: write 7 | 8 | on: 9 | push: 10 | tags: 11 | - '*' 12 | workflow_dispatch: 13 | inputs: { } 14 | 15 | jobs: 16 | goreleaser: 17 | runs-on: ubuntu-latest 18 | defaults: 19 | run: 20 | shell: bash 21 | steps: 22 | - name: Checkout 23 | uses: actions/checkout@v4 24 | with: 25 | fetch-depth: 0 26 | - name: Set up Go 27 | uses: actions/setup-go@v5 28 | with: 29 | go-version: '1.24' 30 | check-latest: true 31 | cache-dependency-path: src/go.mod 32 | - name: Setup node.js 33 | uses: actions/setup-node@v4 34 | with: 35 | node-version: '22' 36 | cache: 'npm' 37 | cache-dependency-path: webapp/package-lock.json 38 | - name: Run npm install 39 | working-directory: webapp 40 | run: npm ci 41 | - name: Run goreleaser 42 | uses: goreleaser/goreleaser-action@v6 43 | with: 44 | # either 'goreleaser' (default) or 'goreleaser-pro' 45 | distribution: goreleaser 46 | version: 2 47 | args: release --clean 48 | env: 49 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 50 | # Your GoReleaser Pro key, if you are using the 'goreleaser-pro' distribution 51 | # GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} 52 | -------------------------------------------------------------------------------- /.github/workflows/golangci_lint.yml: -------------------------------------------------------------------------------- 1 | name: Go lint 2 | 3 | permissions: 4 | contents: read 5 | actions: write 6 | 7 | on: 8 | push: 9 | tags: 10 | - v* 11 | workflow_dispatch: 12 | inputs: { } 13 | 14 | jobs: 15 | golangci: 16 | strategy: 17 | matrix: 18 | go: [ '1.24' ] 19 | os: [ macos-latest, windows-latest, ubuntu-latest ] 20 | name: lint 21 | runs-on: ${{ matrix.os }} 22 | defaults: 23 | run: 24 | shell: bash 25 | steps: 26 | - uses: actions/checkout@v4 27 | - uses: actions/setup-go@v5 28 | with: 29 | go-version: ${{ matrix.go }} 30 | check-latest: true 31 | cache-dependency-path: src/go.mod 32 | 33 | - name: golangci-lint 34 | uses: golangci/golangci-lint-action@v8 35 | with: 36 | # Required: the version of golangci-lint is required and must be specified 37 | # without patch version: we always use the latest patch version. 38 | version: v2.1 39 | # Optional: working directory, useful for mono-repos 40 | working-directory: src 41 | 42 | # Optional: golangci-lint command line arguments. 43 | args: --build-tags=test_helper 44 | 45 | # Optional: show only new issues if it's a pull request. The default value is `false`. 46 | # only-new-issues: true 47 | -------------------------------------------------------------------------------- /.github/workflows/npm.yml: -------------------------------------------------------------------------------- 1 | name: NPM build and test 2 | 3 | permissions: 4 | contents: read 5 | actions: write 6 | 7 | on: 8 | push: 9 | branches: 10 | - '**' 11 | paths: 12 | - "webapp/**" 13 | pull_request: 14 | branches: [ main ] 15 | workflow_dispatch: 16 | inputs: { } 17 | 18 | jobs: 19 | 20 | build: 21 | runs-on: ubuntu-latest 22 | defaults: 23 | run: 24 | shell: bash 25 | working-directory: webapp 26 | strategy: 27 | matrix: 28 | node-version: [ 22 ] 29 | steps: 30 | - uses: actions/checkout@v4 31 | with: 32 | fetch-depth: 0 33 | 34 | - name: Skip duplicate actions 35 | uses: fkirc/skip-duplicate-actions@v5.3.1 36 | 37 | - name: Setup node.js version ${{ matrix.node-version }} 38 | uses: actions/setup-node@v4 39 | with: 40 | node-version: ${{ matrix.node-version }} 41 | cache: 'npm' 42 | cache-dependency-path: webapp/package-lock.json 43 | 44 | - name: Run npm install 45 | run: npm ci 46 | 47 | - name: Run tests 48 | run: npm test 49 | 50 | - name: Run linter 51 | run: npm run lint 52 | -------------------------------------------------------------------------------- /.goreleaser.yml: -------------------------------------------------------------------------------- 1 | # This is goreleaser configuration for releasing tcr application. 2 | # Make sure to check the documentation at http://goreleaser.com 3 | version: 2 4 | project_name: tcr 5 | before: 6 | hooks: 7 | - make tidy 8 | - make -C webapp build 9 | builds: 10 | - id: "tcr" 11 | dir: src 12 | binary: tcr 13 | env: 14 | - CGO_ENABLED=0 15 | - CONFIG_PKG=github.com/murex/tcr/settings 16 | ldflags: 17 | - -s -w 18 | - -X {{.Env.CONFIG_PKG}}.BuildVersion={{.Version}} 19 | - -X {{.Env.CONFIG_PKG}}.BuildOs={{.Os}} 20 | - -X {{.Env.CONFIG_PKG}}.BuildArch={{.Arch}} 21 | - -X {{.Env.CONFIG_PKG}}.BuildCommit={{.Commit}} 22 | - -X {{.Env.CONFIG_PKG}}.BuildDate={{.Date}} 23 | - -X {{.Env.CONFIG_PKG}}.BuildAuthor=murex 24 | goos: 25 | - linux 26 | - windows 27 | - darwin 28 | goarch: 29 | - "386" 30 | - amd64 31 | - arm64 32 | archives: 33 | - name_template: >- 34 | {{ .ProjectName }}_ 35 | {{- .Version }}_ 36 | {{- title .Os }}_ 37 | {{- if eq .Arch "amd64" }}x86_64 38 | {{- else if eq .Arch "386" }}i386 39 | {{- else }}{{ .Arch }}{{ end }} 40 | checksum: 41 | name_template: 'checksums.txt' 42 | snapshot: 43 | version_template: "{{.Tag}}-snapshot" 44 | changelog: 45 | sort: asc 46 | filters: 47 | exclude: 48 | - '^docs:' 49 | - '^test:' 50 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # How to contribute to this repository 2 | 3 | We welcome contributions to this repository! 4 | 5 | The `main` branch of this repository contains the latest stable changes. 6 | 7 | Pull requests should be submitted against the latest head of `main`. 8 | 9 | See [here](https://github.com/murex/contribution) for contribution agreement and guidelines. 10 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | Copyright (c) 2022 Murex 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: default 2 | default: build doc ; 3 | 4 | # Modules that can be built into an executable 5 | BUILD_MODULES = webapp src 6 | .PHONY: $(BUILD_MODULES) 7 | 8 | # Documentation modules 9 | DOC_MODULES = tcr-doc 10 | .PHONY: $(DOC_MODULES) 11 | 12 | # Modules with a main package 13 | MAIN_MODULES = $(BUILD_MODULES) $(DOC_MODULES) 14 | # Production modules 15 | PROD_MODULES = $(BUILD_MODULES) 16 | 17 | # Module dependencies 18 | src: webapp 19 | tcr-doc: src 20 | 21 | # Convenience target for automating release preparation 22 | .PHONY: prepare 23 | prepare: deps tidy lint build doc test 24 | 25 | .PHONY: deps tidy vet lint 26 | deps tidy vet lint: $(MAIN_MODULES) 27 | @for module in $^; do \ 28 | echo "- make $@ $$module"; \ 29 | $(MAKE) -C $$module $@; \ 30 | done 31 | 32 | .PHONY: test test-short cov 33 | test test-short cov: $(PROD_MODULES) 34 | @for module in $^; do \ 35 | echo "- make $@ $$module"; \ 36 | $(MAKE) -C $$module $@; \ 37 | done 38 | 39 | .PHONY: build download run 40 | build download run: $(BUILD_MODULES) 41 | @for module in $^; do \ 42 | echo "- make $@ $$module"; \ 43 | $(MAKE) -C $$module $@; \ 44 | done 45 | 46 | .PHONY: doc 47 | doc: $(DOC_MODULES) 48 | @for module in $^; do \ 49 | echo "- make $@ $$module"; \ 50 | $(MAKE) -C $$module $@; \ 51 | done 52 | 53 | .PHONY: release 54 | release: 55 | @goreleaser $(GORELEASER_ARGS) 56 | 57 | .PHONY: snapshot 58 | snapshot: GORELEASER_ARGS= --clean --snapshot 59 | snapshot: release 60 | -------------------------------------------------------------------------------- /dev-doc/README.md: -------------------------------------------------------------------------------- 1 | # TCR Development Documentation 2 | 3 | This directory provides details related to TCR development activities. 4 | 5 | - [Building TCR](./build.md) 6 | - [Debugging TCR](./debug.md) 7 | - [Releasing a new TCR version](./release.md) 8 | - [Browsing TCR Quality Metrics](./quality-metrics.md) 9 | 10 | -------------------------------------------------------------------------------- /dev-doc/debug.md: -------------------------------------------------------------------------------- 1 | # Debugging TCR 2 | 3 | ## Running and debugging From GoLand or IntelliJ 4 | 5 | There is run configuration in [.run](../.run) directory to launch or debug tcr from 6 | the IDE on the [src/testdata/java](../src/testdata/java) sample. 7 | 8 | ## Running and debugging another IDE 9 | 10 | If you are using another IDE, use the following config: 11 | 12 | - Working Directory: [src](../src) 13 | - Command: `go run . -b ./testdata/java -w ./testdata/java -c ./testdata/java` 14 | 15 | ## Attaching a debugger to a running TCR instance 16 | 17 | If you are using IntelliJ or GoLand, you can refer to 18 | [this page](https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html) 19 | for details on how to build and run a Go application and attach a debugger. 20 | 21 | -------------------------------------------------------------------------------- /dev-doc/quality-metrics.md: -------------------------------------------------------------------------------- 1 | # TCR Quality Metrics 2 | 3 | TCR quality metrics are updated automatically through GitHub actions (push-triggered). 4 | 5 | ## Test Coverage on Coveralls 6 | 7 | [![Coveralls](https://coveralls.io/repos/github/murex/TCR/badge.svg?branch=main)](https://coveralls.io/github/murex/TCR?branch=main) 8 | 9 | ## Quality Gate on Sonar Cloud 10 | 11 | [![sonarcloud](https://sonarcloud.io/api/project_badges/measure?project=murex_TCR&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=murex_TCR) 12 | 13 | -------------------------------------------------------------------------------- /dev-doc/release.md: -------------------------------------------------------------------------------- 1 | # Releasing a new TCR version 2 | 3 | We use [GoReleaser](https://goreleaser.com/) for releasing new TCR versions. 4 | 5 | ## Versioning Rules 6 | 7 | TCR release versions comply with [Semantic Versioning rules](https://semver.org/). 8 | 9 | ## Release Branch 10 | 11 | All TCR releases are published on GitHub's `main` branch. 12 | 13 | ## Release Preparation 14 | 15 | - [ ] Update dependencies and run sanity checks: `make prepare` 16 | - [ ] Commit all changes on the `main` branch 17 | - [ ] Push the changes to GitHub and [wait until all GitHub Actions are green](https://github.com/murex/TCR/actions) 18 | - [ ] Create the release tag: `git tag -m "" -a vX.Y.Z` 19 | - [ ] Verify that everything is ready for GoReleaser: `make snapshot` 20 | 21 | ## Releasing 22 | 23 | The creation of the new release is triggered by pushing the newly created release tag to GitHub repository 24 | 25 | - [ ] Push the release tag: `git push origin vX.Y.Z` 26 | - [ ] [Wait until all GitHub Actions are green](https://github.com/murex/TCR/actions) 27 | - [ ] Open [TCR Release page](https://github.com/murex/TCR/releases) and verify that the new release is there 28 | - [ ] Edit the release notes document, and insert a `Summary` section at the top, listing the main changes included in 29 | this release. You may take a look at previous release notes if unsure what should go in there. 30 | -------------------------------------------------------------------------------- /examples/cpp-bazel/.bazelrc: -------------------------------------------------------------------------------- 1 | build --action_env=BAZEL_CXXOPTS="-std=c++17" 2 | test --test_output=errors 3 | -------------------------------------------------------------------------------- /examples/cpp-bazel/.bazelversion: -------------------------------------------------------------------------------- 1 | 6.2.0 2 | -------------------------------------------------------------------------------- /examples/cpp-bazel/.gitignore: -------------------------------------------------------------------------------- 1 | bazel-*/ 2 | -------------------------------------------------------------------------------- /examples/cpp-bazel/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: cpp 9 | toolchain: bazel 10 | -------------------------------------------------------------------------------- /examples/cpp-bazel/.tcr/language/cpp.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: bazel 3 | compatible-with: [ bazel ] 4 | source-files: 5 | directories: [ src, include ] 6 | patterns: [ '(?i)^.*\.c(c|pp)?$', '(?i)^.*\.h(h|pp)?$' ] 7 | test-files: 8 | directories: [ test ] 9 | patterns: [ '(?i)^.*\.c(c|pp)?$', '(?i)^.*\.h(h|pp)?$' ] 10 | -------------------------------------------------------------------------------- /examples/cpp-bazel/.tcr/toolchain/bazel.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: bazel 5 | arguments: [ build, "..." ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: bazel 10 | arguments: [ test, "..." ] 11 | test-result-dir: bazel-testlogs 12 | -------------------------------------------------------------------------------- /examples/cpp-bazel/BUILD.bazel: -------------------------------------------------------------------------------- 1 | load("//bazel:windows_dll_library.bzl", "windows_dll_library") 2 | 3 | windows_dll_library( 4 | name = "hello-world-win-lib", 5 | srcs = glob(["src/**/*.cpp"]), 6 | hdrs = glob(["include/**/*.hpp"]), 7 | copts = ["-DHELLO_WORLD_EXPORTS"], 8 | includes = ["include"], 9 | target_compatible_with = ["@platforms//os:windows"], 10 | visibility = ["//visibility:public"], 11 | ) 12 | 13 | cc_library( 14 | name = "hello-world-unix-lib", 15 | srcs = glob(["src/**/*.cpp"]), 16 | hdrs = glob(["include/**/*.hpp"]), 17 | copts = ["-DHELLO_WORLD_EXPORTS"], 18 | includes = ["include"], 19 | target_compatible_with = select({ 20 | "@platforms//os:osx": [], 21 | "@platforms//os:linux": [], 22 | "//conditions:default": ["@platforms//:incompatible"], 23 | }), 24 | visibility = ["//visibility:public"], 25 | ) 26 | 27 | cc_test( 28 | name = "hello-world-tests", 29 | srcs = glob(["test/**/*.cpp"]), 30 | includes = ["include"], 31 | deps = select({ 32 | "@platforms//os:linux": [":hello-world-unix-lib"], 33 | "@platforms//os:osx": [":hello-world-unix-lib"], 34 | "@platforms//os:windows": [":hello-world-win-lib"], 35 | }) + [ 36 | "@gtest//:gtest_main", 37 | ], 38 | ) 39 | -------------------------------------------------------------------------------- /examples/cpp-bazel/WORKSPACE.bazel: -------------------------------------------------------------------------------- 1 | workspace(name = "hello_world_cpp") 2 | 3 | load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") 4 | 5 | http_archive( 6 | name = "gtest", 7 | sha256 = "24564e3b712d3eb30ac9a85d92f7d720f60cc0173730ac166f27dda7fed76cb2", 8 | strip_prefix = "googletest-release-1.12.1", 9 | url = "https://github.com/google/googletest/archive/release-1.12.1.zip", 10 | ) 11 | -------------------------------------------------------------------------------- /examples/cpp-bazel/bazel/BUILD.bazel: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murex/TCR/b4a8708da217fdfc9be7ec2514a4a31df9097e54/examples/cpp-bazel/bazel/BUILD.bazel -------------------------------------------------------------------------------- /examples/cpp-bazel/include/HelloWorld.hpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | class HELLO_WORLD_API HelloWorld 6 | { 7 | public: 8 | std::string sayHello(const std::string name); 9 | }; 10 | -------------------------------------------------------------------------------- /examples/cpp-bazel/include/config.hpp: -------------------------------------------------------------------------------- 1 | #ifndef HELLO_WORLD_CONFIG 2 | #define HELLO_WORLD_CONFIG 3 | 4 | #ifdef _MSC_VER 5 | #ifdef HELLO_WORLD_EXPORTS 6 | #define HELLO_WORLD_API __declspec(dllexport) 7 | #else 8 | #define HELLO_WORLD_API __declspec(dllimport) 9 | #endif 10 | #else 11 | #define HELLO_WORLD_API 12 | #endif 13 | 14 | #endif // HELLO_WORLD_CONFIG 15 | -------------------------------------------------------------------------------- /examples/cpp-bazel/src/HelloWorld.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | std::string HelloWorld::sayHello(const std::string name) 6 | { 7 | return "Hello " + name + "!"; 8 | } 9 | -------------------------------------------------------------------------------- /examples/cpp-bazel/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/cpp-bazel/test/HelloWorldTest.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | TEST(HelloWorld, sayHello) 6 | { 7 | HelloWorld helloWorld; 8 | EXPECT_EQ("Hello Sue!", helloWorld.sayHello("Sue")); 9 | } 10 | -------------------------------------------------------------------------------- /examples/cpp-cmake/.gitignore: -------------------------------------------------------------------------------- 1 | build/** 2 | -------------------------------------------------------------------------------- /examples/cpp-cmake/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: cpp 9 | toolchain: cmake 10 | -------------------------------------------------------------------------------- /examples/cpp-cmake/.tcr/language/cpp.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: cmake 3 | compatible-with: [ cmake ] 4 | source-files: 5 | directories: [ src, include ] 6 | patterns: [ '(?i)^.*\.c(c|pp)?$', '(?i)^.*\.h(h|pp)?$' ] 7 | test-files: 8 | directories: [ test ] 9 | patterns: [ '(?i)^.*\.c(c|pp)?$', '(?i)^.*\.h(h|pp)?$' ] 10 | -------------------------------------------------------------------------------- /examples/cpp-cmake/cmake/FindGoogleTest.cmake: -------------------------------------------------------------------------------- 1 | # Fetch googletest 2 | 3 | CPMFindPackage( 4 | NAME googletest 5 | GITHUB_REPOSITORY google/googletest 6 | GIT_TAG main 7 | OPTIONS "INSTALL_GTEST OFF" "gtest_force_shared_crt" "BUILD_GMOCK OFF" 8 | ) 9 | -------------------------------------------------------------------------------- /examples/cpp-cmake/include/HelloWorld.hpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | class HELLO_WORLD_API HelloWorld 6 | { 7 | public: 8 | std::string sayHello(const std::string name); 9 | }; 10 | -------------------------------------------------------------------------------- /examples/cpp-cmake/include/config.hpp: -------------------------------------------------------------------------------- 1 | #ifndef HELLO_WORLD_CONFIG 2 | #define HELLO_WORLD_CONFIG 3 | 4 | #ifdef _MSC_VER 5 | #ifdef HELLO_WORLD_EXPORTS 6 | #define HELLO_WORLD_API __declspec(dllexport) 7 | #else 8 | #define HELLO_WORLD_API __declspec(dllimport) 9 | #endif 10 | #else 11 | #define HELLO_WORLD_API 12 | #endif 13 | 14 | #endif // HELLO_WORLD_CONFIG 15 | -------------------------------------------------------------------------------- /examples/cpp-cmake/src/HelloWorld.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | std::string HelloWorld::sayHello(const std::string name) 6 | { 7 | return "Hello " + name + "!"; 8 | } 9 | -------------------------------------------------------------------------------- /examples/cpp-cmake/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/cpp-cmake/test/HelloWorldTest.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | TEST(HelloWorld, sayHello) 6 | { 7 | HelloWorld helloWorld; 8 | EXPECT_EQ("Hello Sue!", helloWorld.sayHello("Sue")); 9 | } 10 | -------------------------------------------------------------------------------- /examples/csharp-dotnet/.gitignore: -------------------------------------------------------------------------------- 1 | bin/ 2 | obj/ 3 | TestResults/ 4 | .vs/ -------------------------------------------------------------------------------- /examples/csharp-dotnet/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: csharp 9 | toolchain: dotnet 10 | -------------------------------------------------------------------------------- /examples/csharp-dotnet/.tcr/language/csharp.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: dotnet 3 | compatible-with: [dotnet] 4 | source-files: 5 | directories: [src] 6 | patterns: ['(?i)^.*\.cs(x)?$'] 7 | test-files: 8 | directories: [tests] 9 | patterns: ['(?i)^.*\.cs(x)?$'] 10 | -------------------------------------------------------------------------------- /examples/csharp-dotnet/.tcr/toolchain/dotnet.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: dotnet 5 | arguments: [ build ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: dotnet 10 | arguments: [ test, "--no-build", "--logger=junit" ] 11 | test-result-dir: tests 12 | -------------------------------------------------------------------------------- /examples/csharp-dotnet/src/HelloWorld/HelloWorld.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net6.0 5 | HelloWorld 6 | enable 7 | enable 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /examples/csharp-dotnet/src/HelloWorld/HelloWorldClass.cs: -------------------------------------------------------------------------------- 1 | namespace HelloWorld 2 | { 3 | public class HelloWorldClass 4 | { 5 | public static string SayHello(string name) 6 | { 7 | return "Hello " + name + "!"; 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /examples/csharp-dotnet/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/csharp-dotnet/tests/HelloWorld/HelloWorld.Test.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net8.0 5 | global 6 | enable 7 | 8 | false 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | runtime; build; native; contentfiles; analyzers; buildtransitive 18 | all 19 | 20 | 21 | runtime; build; native; contentfiles; analyzers; buildtransitive 22 | all 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /examples/csharp-dotnet/tests/HelloWorld/HelloWorldClassTest.cs: -------------------------------------------------------------------------------- 1 | using Xunit; 2 | 3 | namespace HelloWorld; 4 | 5 | public class HelloWorldClassTest 6 | { 7 | [Fact] 8 | public void SayHello() 9 | { 10 | Assert.Equal("Hello Sue!", HelloWorldClass.SayHello("Sue")); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/elixir-mix/.formatter.exs: -------------------------------------------------------------------------------- 1 | # Used by "mix format" 2 | [ 3 | inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] 4 | ] 5 | -------------------------------------------------------------------------------- /examples/elixir-mix/.gitignore: -------------------------------------------------------------------------------- 1 | # The directory Mix will write compiled artifacts to. 2 | /_build/ 3 | 4 | # If you run "mix test --cover", coverage assets end up here. 5 | /cover/ 6 | 7 | # The directory Mix downloads your dependencies sources to. 8 | /deps/ 9 | 10 | # Where third-party dependencies like ExDoc output generated docs. 11 | /doc/ 12 | 13 | # Ignore .fetch files in case you like to edit your project deps locally. 14 | /.fetch 15 | 16 | # If the VM crashes, it generates a dump, let's ignore it too. 17 | erl_crash.dump 18 | 19 | # Also ignore archive artifacts (built via "mix archive.build"). 20 | *.ez 21 | 22 | # Temporary files, for example, from tests. 23 | /tmp/ 24 | -------------------------------------------------------------------------------- /examples/elixir-mix/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: elixir 9 | toolchain: mix 10 | -------------------------------------------------------------------------------- /examples/elixir-mix/.tcr/language/elixir.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: mix 3 | compatible-with: [ mix ] 4 | source-files: 5 | directories: [ lib ] 6 | patterns: [ '(?i)^.*\.ex(s)?$' ] 7 | test-files: 8 | directories: [ test ] 9 | patterns: [ '(?i)^.*\.ex(s)?$' ] 10 | -------------------------------------------------------------------------------- /examples/elixir-mix/.tcr/toolchain/mix.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: mix 5 | arguments: [ do, deps.get, +, test, --color, --exclude, test ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: mix 10 | arguments: [ test, --color ] 11 | test-result-dir: _build/test/lib 12 | -------------------------------------------------------------------------------- /examples/elixir-mix/lib/hello_world.ex: -------------------------------------------------------------------------------- 1 | defmodule HelloWorld do 2 | 3 | def say_hello(name), do: "Hello #{name}!" 4 | 5 | end 6 | -------------------------------------------------------------------------------- /examples/elixir-mix/mix.exs: -------------------------------------------------------------------------------- 1 | defmodule HelloWorld.MixProject do 2 | use Mix.Project 3 | 4 | def project do 5 | [ 6 | app: :hello_world, 7 | version: "0.1.0", 8 | elixir: "~> 1.14", 9 | start_permanent: Mix.env() == :prod, 10 | deps: deps() 11 | ] 12 | end 13 | 14 | def cli do 15 | [ 16 | default_env: :test 17 | ] 18 | end 19 | 20 | # Run "mix help compile.app" to learn about applications. 21 | def application do 22 | [ 23 | extra_applications: [:logger] 24 | ] 25 | end 26 | 27 | # Run "mix help deps" to learn about dependencies. 28 | defp deps do 29 | [ 30 | {:junit_formatter, "~> 3.4", only: [:test]}, 31 | ] 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /examples/elixir-mix/mix.lock: -------------------------------------------------------------------------------- 1 | %{ 2 | "junit_formatter": {:hex, :junit_formatter, "3.4.0", "d0e8db6c34dab6d3c4154c3b46b21540db1109ae709d6cf99ba7e7a2ce4b1ac2", [:mix], [], "hexpm", "bb36e2ae83f1ced6ab931c4ce51dd3dbef1ef61bb4932412e173b0cfa259dacd"}, 3 | } 4 | -------------------------------------------------------------------------------- /examples/elixir-mix/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/elixir-mix/test/hello_world_test.exs: -------------------------------------------------------------------------------- 1 | defmodule HelloWorldTest do 2 | use ExUnit.Case 3 | 4 | test "say hello" do 5 | assert HelloWorld.say_hello("Sue") == "Hello Sue!" 6 | end 7 | 8 | end 9 | -------------------------------------------------------------------------------- /examples/elixir-mix/test/test_helper.exs: -------------------------------------------------------------------------------- 1 | ExUnit.configure formatters: [JUnitFormatter, ExUnit.CLIFormatter] 2 | ExUnit.start() 3 | -------------------------------------------------------------------------------- /examples/go-bazel/.bazelrc: -------------------------------------------------------------------------------- 1 | test --test_output=errors --test_arg=-test.v 2 | -------------------------------------------------------------------------------- /examples/go-bazel/.bazelversion: -------------------------------------------------------------------------------- 1 | 6.2.0 2 | -------------------------------------------------------------------------------- /examples/go-bazel/.gitignore: -------------------------------------------------------------------------------- 1 | bazel-*/ 2 | -------------------------------------------------------------------------------- /examples/go-bazel/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: go 9 | toolchain: bazel 10 | -------------------------------------------------------------------------------- /examples/go-bazel/.tcr/language/go.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: bazel 3 | compatible-with: [ bazel ] 4 | source-files: 5 | directories: [ . ] 6 | patterns: [ '(?i)^.*\.go$' ] 7 | test-files: 8 | directories: [ . ] 9 | patterns: [ '(?i)^.*_test\.go$' ] 10 | -------------------------------------------------------------------------------- /examples/go-bazel/.tcr/toolchain/bazel.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: bazel 5 | arguments: [ build, "..." ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: bazel 10 | arguments: [ test, "..." ] 11 | test-result-dir: bazel-testlogs 12 | -------------------------------------------------------------------------------- /examples/go-bazel/BUILD.bazel: -------------------------------------------------------------------------------- 1 | load("@bazel_gazelle//:def.bzl", "gazelle") 2 | 3 | # gazelle:prefix github.com/murex/tcr/examples/go-bazel 4 | gazelle(name = "gazelle") 5 | -------------------------------------------------------------------------------- /examples/go-bazel/go.mod: -------------------------------------------------------------------------------- 1 | module example/go-bazel 2 | 3 | go 1.24.0 4 | 5 | require github.com/stretchr/testify v1.10.0 6 | 7 | require ( 8 | github.com/davecgh/go-spew v1.1.1 // indirect 9 | github.com/pmezard/go-difflib v1.0.0 // indirect 10 | gopkg.in/yaml.v3 v3.0.1 // indirect 11 | ) 12 | -------------------------------------------------------------------------------- /examples/go-bazel/go.sum: -------------------------------------------------------------------------------- 1 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 2 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 3 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 4 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 5 | github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= 6 | github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 7 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= 8 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 9 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 10 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 11 | -------------------------------------------------------------------------------- /examples/go-bazel/src/BUILD.bazel: -------------------------------------------------------------------------------- 1 | load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") 2 | 3 | go_library( 4 | name = "helloworld", 5 | srcs = ["hello_world.go"], 6 | importpath = "github.com/murex/tcr/examples/go-bazel/src", 7 | visibility = ["//visibility:public"], 8 | ) 9 | 10 | go_test( 11 | name = "helloworld_test", 12 | size = "small", 13 | srcs = ["hello_world_test.go"], 14 | embed = [":helloworld"], 15 | deps = ["@com_github_stretchr_testify//assert"], 16 | ) 17 | -------------------------------------------------------------------------------- /examples/go-bazel/src/hello_world.go: -------------------------------------------------------------------------------- 1 | package helloworld 2 | 3 | func sayHello(name string) string { 4 | return "Hello " + name + "!" 5 | } 6 | -------------------------------------------------------------------------------- /examples/go-bazel/src/hello_world_test.go: -------------------------------------------------------------------------------- 1 | package helloworld 2 | 3 | import ( 4 | "github.com/stretchr/testify/assert" 5 | "testing" 6 | ) 7 | 8 | func Test_say_hello(t *testing.T) { 9 | assert.Equal(t, "Hello Sue!", sayHello("Sue")) 10 | } 11 | -------------------------------------------------------------------------------- /examples/go-bazel/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/go-go-tools/.gitignore: -------------------------------------------------------------------------------- 1 | build/** -------------------------------------------------------------------------------- /examples/go-go-tools/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: go 9 | toolchain: go-tools 10 | -------------------------------------------------------------------------------- /examples/go-go-tools/.tcr/language/go.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: go-tools 3 | compatible-with: [ go-tools ] 4 | source-files: 5 | directories: [ . ] 6 | patterns: [ '(?i)^.*\.go$' ] 7 | test-files: 8 | directories: [ . ] 9 | patterns: [ '(?i)^.*_test\.go$' ] 10 | -------------------------------------------------------------------------------- /examples/go-go-tools/.tcr/toolchain/go-tools.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: go 5 | arguments: [ test, "-count=0", ./... ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: go 10 | arguments: [ test, -short, ./... ] 11 | test-result-dir: . 12 | -------------------------------------------------------------------------------- /examples/go-go-tools/go.mod: -------------------------------------------------------------------------------- 1 | module example/go-go-tools 2 | 3 | go 1.24.0 4 | 5 | require github.com/stretchr/testify v1.10.0 6 | 7 | require ( 8 | github.com/davecgh/go-spew v1.1.1 // indirect 9 | github.com/pmezard/go-difflib v1.0.0 // indirect 10 | gopkg.in/yaml.v3 v3.0.1 // indirect 11 | ) 12 | -------------------------------------------------------------------------------- /examples/go-go-tools/go.sum: -------------------------------------------------------------------------------- 1 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 2 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 3 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 4 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 5 | github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= 6 | github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 7 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= 8 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 9 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 10 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 11 | -------------------------------------------------------------------------------- /examples/go-go-tools/src/hello_world.go: -------------------------------------------------------------------------------- 1 | package helloworld 2 | 3 | func sayHello(name string) string { 4 | return "Hello " + name + "!" 5 | } 6 | -------------------------------------------------------------------------------- /examples/go-go-tools/src/hello_world_test.go: -------------------------------------------------------------------------------- 1 | package helloworld 2 | 3 | import ( 4 | "github.com/stretchr/testify/assert" 5 | "testing" 6 | ) 7 | 8 | func Test_say_hello(t *testing.T) { 9 | assert.Equal(t, "Hello Sue!", sayHello("Sue")) 10 | } 11 | -------------------------------------------------------------------------------- /examples/go-go-tools/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/go-gotestsum/.gitignore: -------------------------------------------------------------------------------- 1 | build/** 2 | /**/_test_results/ -------------------------------------------------------------------------------- /examples/go-gotestsum/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: go 9 | toolchain: gotestsum 10 | -------------------------------------------------------------------------------- /examples/go-gotestsum/.tcr/language/go.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: gotestsum 3 | compatible-with: [ gotestsum ] 4 | source-files: 5 | directories: [ . ] 6 | patterns: [ '(?i)^.*\.go$' ] 7 | test-files: 8 | directories: [ . ] 9 | patterns: [ '(?i)^.*_test\.go$' ] 10 | -------------------------------------------------------------------------------- /examples/go-gotestsum/.tcr/toolchain/gotestsum.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: go 5 | arguments: [ test, "-count=0", ./... ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: go 10 | arguments: [ tool, gotestsum, "--format", "pkgname", "--junitfile", "_test_results/output.xml", "--", "-short", ./... ] 11 | test-result-dir: _test_results 12 | -------------------------------------------------------------------------------- /examples/go-gotestsum/go.mod: -------------------------------------------------------------------------------- 1 | module example/go-gotestsum 2 | 3 | go 1.24.0 4 | 5 | tool gotest.tools/gotestsum 6 | 7 | require github.com/stretchr/testify v1.10.0 8 | 9 | require ( 10 | github.com/bitfield/gotestdox v0.2.2 // indirect 11 | github.com/davecgh/go-spew v1.1.1 // indirect 12 | github.com/dnephin/pflag v1.0.7 // indirect 13 | github.com/fatih/color v1.16.0 // indirect 14 | github.com/fsnotify/fsnotify v1.7.0 // indirect 15 | github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect 16 | github.com/mattn/go-colorable v0.1.13 // indirect 17 | github.com/mattn/go-isatty v0.0.20 // indirect 18 | github.com/pmezard/go-difflib v1.0.0 // indirect 19 | golang.org/x/mod v0.16.0 // indirect 20 | golang.org/x/sync v0.6.0 // indirect 21 | golang.org/x/sys v0.18.0 // indirect 22 | golang.org/x/term v0.18.0 // indirect 23 | golang.org/x/text v0.14.0 // indirect 24 | golang.org/x/tools v0.19.0 // indirect 25 | gopkg.in/yaml.v3 v3.0.1 // indirect 26 | gotest.tools/gotestsum v1.12.0 // indirect 27 | ) 28 | 29 | 30 | -------------------------------------------------------------------------------- /examples/go-gotestsum/src/hello_world.go: -------------------------------------------------------------------------------- 1 | package helloworld 2 | 3 | func sayHello(name string) string { 4 | return "Hello " + name + "!" 5 | } 6 | -------------------------------------------------------------------------------- /examples/go-gotestsum/src/hello_world_test.go: -------------------------------------------------------------------------------- 1 | package helloworld 2 | 3 | import ( 4 | "github.com/stretchr/testify/assert" 5 | "testing" 6 | ) 7 | 8 | func Test_say_hello(t *testing.T) { 9 | assert.Equal(t, "Hello Sue!", sayHello("Sue")) 10 | } 11 | -------------------------------------------------------------------------------- /examples/go-gotestsum/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/go-make/.gitignore: -------------------------------------------------------------------------------- 1 | build/** 2 | /**/_test_results/ -------------------------------------------------------------------------------- /examples/go-make/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: go 9 | toolchain: make 10 | -------------------------------------------------------------------------------- /examples/go-make/.tcr/language/go.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: make 3 | compatible-with: [ make ] 4 | source-files: 5 | directories: [ . ] 6 | patterns: [ '(?i)^.*\.go$' ] 7 | test-files: 8 | directories: [ . ] 9 | patterns: [ '(?i)^.*_test\.go$' ] 10 | -------------------------------------------------------------------------------- /examples/go-make/.tcr/toolchain/make.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: make 5 | arguments: [ build ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: make 10 | arguments: [ test ] 11 | test-result-dir: . 12 | -------------------------------------------------------------------------------- /examples/go-make/Makefile: -------------------------------------------------------------------------------- 1 | # ---------------------------------------------------------------------------- 2 | # Example Makefile for Go language 3 | # ---------------------------------------------------------------------------- 4 | 5 | .PHONY: build 6 | build: 7 | @go test -count=0 ./... 8 | 9 | .PHONY: test 10 | test: 11 | @go test -short ./... 12 | -------------------------------------------------------------------------------- /examples/go-make/go.mod: -------------------------------------------------------------------------------- 1 | module example/go-make 2 | 3 | go 1.24.0 4 | 5 | require github.com/stretchr/testify v1.10.0 6 | 7 | require ( 8 | github.com/davecgh/go-spew v1.1.1 // indirect 9 | github.com/pmezard/go-difflib v1.0.0 // indirect 10 | gopkg.in/yaml.v3 v3.0.1 // indirect 11 | ) 12 | -------------------------------------------------------------------------------- /examples/go-make/go.sum: -------------------------------------------------------------------------------- 1 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 2 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 3 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 4 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 5 | github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= 6 | github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= 7 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= 8 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 9 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 10 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 11 | -------------------------------------------------------------------------------- /examples/go-make/src/hello_world.go: -------------------------------------------------------------------------------- 1 | package helloworld 2 | 3 | func sayHello(name string) string { 4 | return "Hello " + name + "!" 5 | } 6 | -------------------------------------------------------------------------------- /examples/go-make/src/hello_world_test.go: -------------------------------------------------------------------------------- 1 | package helloworld 2 | 3 | import ( 4 | "github.com/stretchr/testify/assert" 5 | "testing" 6 | ) 7 | 8 | func Test_say_hello(t *testing.T) { 9 | assert.Equal(t, "Hello Sue!", sayHello("Sue")) 10 | } 11 | -------------------------------------------------------------------------------- /examples/go-make/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/go.work: -------------------------------------------------------------------------------- 1 | go 1.24.0 2 | 3 | use ( 4 | go-bazel 5 | go-go-tools 6 | go-gotestsum 7 | go-make 8 | ) 9 | -------------------------------------------------------------------------------- /examples/go.work.sum: -------------------------------------------------------------------------------- 1 | github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= 2 | github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= 3 | github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= 4 | github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= 5 | github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= 6 | github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= 7 | github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= 8 | golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= 9 | golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= 10 | golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2 h1:IRJeR9r1pYWsHKTRe/IInb7lYvbBVIqOgsX/u0mbOWY= 11 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= 12 | gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= 13 | -------------------------------------------------------------------------------- /examples/haskell-stack/.gitignore: -------------------------------------------------------------------------------- 1 | # haskell downloaded or generated stuff 2 | .stack-work/ 3 | -------------------------------------------------------------------------------- /examples/haskell-stack/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: haskell 9 | toolchain: stack 10 | -------------------------------------------------------------------------------- /examples/haskell-stack/.tcr/language/haskell.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: stack 3 | compatible-with: [ stack ] 4 | source-files: 5 | directories: [ src ] 6 | patterns: [ '(?i)^.*\.hs$' ] 7 | test-files: 8 | directories: [ test ] 9 | patterns: [ '(?i)^.*\.hs$' ] 10 | -------------------------------------------------------------------------------- /examples/haskell-stack/.tcr/toolchain/stack.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: stack 5 | arguments: [ build ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: stack 10 | arguments: [ test, --color, always, --test-arguments=--format=progress ] 11 | test-result-dir: .stack-work/report 12 | -------------------------------------------------------------------------------- /examples/haskell-stack/hello-world.cabal: -------------------------------------------------------------------------------- 1 | cabal-version: 1.12 2 | 3 | -- This file has been generated from package.yaml by hpack version 0.36.0. 4 | -- 5 | -- see: https://github.com/sol/hpack 6 | 7 | name: hello-world 8 | version: 1.0.0.0 9 | build-type: Simple 10 | 11 | library 12 | exposed-modules: 13 | HelloWorld 14 | other-modules: 15 | Paths_hello_world 16 | hs-source-dirs: 17 | src 18 | ghc-options: -Wall 19 | build-depends: 20 | base 21 | default-language: Haskell2010 22 | 23 | test-suite test 24 | type: exitcode-stdio-1.0 25 | main-is: Tests.hs 26 | other-modules: 27 | Paths_hello_world 28 | hs-source-dirs: 29 | test 30 | build-depends: 31 | base 32 | , hello-world 33 | , hspec 34 | default-language: Haskell2010 35 | -------------------------------------------------------------------------------- /examples/haskell-stack/package.yaml: -------------------------------------------------------------------------------- 1 | name: hello-world 2 | version: 1.0.0.0 3 | 4 | dependencies: 5 | - base 6 | 7 | library: 8 | exposed-modules: HelloWorld 9 | source-dirs: src 10 | ghc-options: -Wall 11 | # dependencies: 12 | # - foo # List here the packages you 13 | # - bar # want to use in your solution. 14 | 15 | tests: 16 | test: 17 | main: Tests.hs 18 | source-dirs: test 19 | dependencies: 20 | - hello-world 21 | - hspec 22 | -------------------------------------------------------------------------------- /examples/haskell-stack/src/HelloWorld.hs: -------------------------------------------------------------------------------- 1 | module HelloWorld (sayHello) where 2 | 3 | sayHello :: String -> String 4 | sayHello name = "Hello, " ++ name ++ "!" 5 | -------------------------------------------------------------------------------- /examples/haskell-stack/stack.yaml: -------------------------------------------------------------------------------- 1 | resolver: lts-21.25 2 | -------------------------------------------------------------------------------- /examples/haskell-stack/stack.yaml.lock: -------------------------------------------------------------------------------- 1 | # This file was autogenerated by Stack. 2 | # You should not edit this file by hand. 3 | # For more information, please see the documentation at: 4 | # https://docs.haskellstack.org/en/stable/lock_files 5 | 6 | packages: [] 7 | snapshots: 8 | - completed: 9 | sha256: a81fb3877c4f9031e1325eb3935122e608d80715dc16b586eb11ddbff8671ecd 10 | size: 640086 11 | url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/25.yaml 12 | original: lts-21.25 13 | -------------------------------------------------------------------------------- /examples/haskell-stack/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/haskell-stack/test/Tests.hs: -------------------------------------------------------------------------------- 1 | import Test.Hspec (Spec, it, shouldBe) 2 | import Test.Hspec.Runner (configFailFast, defaultConfig, hspecWith) 3 | 4 | import HelloWorld (sayHello) 5 | 6 | main :: IO () 7 | main = hspecWith defaultConfig {configFailFast = True} specs 8 | 9 | specs :: Spec 10 | specs = it "say hello" $ 11 | sayHello "Sue" `shouldBe` "Hello, Sue!" 12 | -------------------------------------------------------------------------------- /examples/java-bazel/.bazelrc: -------------------------------------------------------------------------------- 1 | build --java_language_version=17 2 | test --test_output=errors 3 | -------------------------------------------------------------------------------- /examples/java-bazel/.bazelversion: -------------------------------------------------------------------------------- 1 | 6.2.0 2 | -------------------------------------------------------------------------------- /examples/java-bazel/.gitignore: -------------------------------------------------------------------------------- 1 | bazel-*/ 2 | -------------------------------------------------------------------------------- /examples/java-bazel/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: java 9 | toolchain: bazel 10 | -------------------------------------------------------------------------------- /examples/java-bazel/.tcr/language/java.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: bazel 3 | compatible-with: [ bazel ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.java$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.java$' ] 10 | -------------------------------------------------------------------------------- /examples/java-bazel/.tcr/toolchain/bazel.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: bazel 5 | arguments: [ build, "..." ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: bazel 10 | arguments: [ test, "..." ] 11 | test-result-dir: bazel-testlogs 12 | -------------------------------------------------------------------------------- /examples/java-bazel/BUILD.bazel: -------------------------------------------------------------------------------- 1 | load("@rules_jvm_external//:defs.bzl", "artifact") 2 | load("@contrib_rules_jvm//java:defs.bzl", "JUNIT5_DEPS", "java_test_suite") 3 | 4 | java_library( 5 | name = "hello-world", 6 | srcs = glob(["src/main/java/**"]), 7 | ) 8 | 9 | java_test_suite( 10 | name = "hello-world-tests", 11 | srcs = glob(["src/test/java/**/*.java"]), 12 | runner = "junit5", 13 | test_suffixes = ["Test.java"], 14 | runtime_deps = JUNIT5_DEPS, 15 | deps = [ 16 | ":hello-world", 17 | artifact("org.junit.jupiter:junit-jupiter-api"), 18 | artifact("org.junit.jupiter:junit-jupiter-params"), 19 | ], 20 | ) 21 | -------------------------------------------------------------------------------- /examples/java-bazel/src/main/java/com/example/HelloWorld.java: -------------------------------------------------------------------------------- 1 | package com.example; 2 | 3 | class HelloWorld { 4 | static String sayHello(String name) { 5 | return "Hello " + name + "!"; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /examples/java-bazel/src/test/java/com/example/HelloWorldTest.java: -------------------------------------------------------------------------------- 1 | package com.example; 2 | 3 | import static org.junit.jupiter.api.Assertions.assertEquals; 4 | import org.junit.jupiter.api.Test; 5 | 6 | public class HelloWorldTest { 7 | 8 | @Test 9 | public void sayHello() { 10 | assertEquals("Hello Sue!", HelloWorld.sayHello("Sue")); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/java-bazel/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/java-gradle-wrapper/.gitignore: -------------------------------------------------------------------------------- 1 | build/** 2 | .gradle/** -------------------------------------------------------------------------------- /examples/java-gradle-wrapper/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: java 9 | toolchain: gradle-wrapper 10 | -------------------------------------------------------------------------------- /examples/java-gradle-wrapper/.tcr/language/java.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: gradle-wrapper 3 | compatible-with: [ gradle-wrapper ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.java$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.java$' ] 10 | -------------------------------------------------------------------------------- /examples/java-gradle-wrapper/.tcr/toolchain/gradle-wrapper.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: ./gradlew 5 | arguments: [ build, testClasses, -x, test ] 6 | - os: [ windows ] 7 | arch: [ "386", amd64, arm64 ] 8 | command: .\gradlew.bat 9 | arguments: [ build, testClasses, -x, test ] 10 | test: 11 | - os: [ darwin, linux ] 12 | arch: [ "386", amd64, arm64 ] 13 | command: ./gradlew 14 | arguments: [ test ] 15 | - os: [ windows ] 16 | arch: [ "386", amd64, arm64 ] 17 | command: .\gradlew.bat 18 | arguments: [ test ] 19 | test-result-dir: build/test-results/test 20 | 21 | -------------------------------------------------------------------------------- /examples/java-gradle-wrapper/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java' 3 | id 'java-library' 4 | id 'com.adarshr.test-logger' version '4.0.0' 5 | } 6 | 7 | java { 8 | toolchain { 9 | languageVersion = JavaLanguageVersion.of(17) 10 | } 11 | } 12 | 13 | repositories { 14 | mavenCentral() 15 | } 16 | 17 | dependencies { 18 | testImplementation("org.junit.jupiter:junit-jupiter:5.13.0") 19 | testRuntimeOnly("org.junit.platform:junit-platform-launcher") 20 | } 21 | 22 | test { 23 | useJUnitPlatform() 24 | testLogging { 25 | events "passed", "skipped", "failed" 26 | } 27 | } 28 | 29 | tasks.withType(JavaCompile).configureEach { 30 | options.encoding = 'UTF-8' 31 | } 32 | 33 | testlogger { 34 | theme = 'standard' 35 | showExceptions = true 36 | showStackTraces = true 37 | showFullStackTraces = false 38 | showCauses = true 39 | slowThreshold = 5000 40 | showSummary = true 41 | showSimpleNames = false 42 | showPassed = true 43 | showSkipped = true 44 | showFailed = true 45 | showStandardStreams = false 46 | showPassedStandardStreams = true 47 | showSkippedStandardStreams = true 48 | showFailedStandardStreams = true 49 | logLevel = 'lifecycle' 50 | } 51 | -------------------------------------------------------------------------------- /examples/java-gradle-wrapper/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murex/TCR/b4a8708da217fdfc9be7ec2514a4a31df9097e54/examples/java-gradle-wrapper/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /examples/java-gradle-wrapper/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /examples/java-gradle-wrapper/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'HelloWorld' 2 | -------------------------------------------------------------------------------- /examples/java-gradle-wrapper/src/main/java/HelloWorld.java: -------------------------------------------------------------------------------- 1 | class HelloWorld { 2 | static String sayHello(String name) { 3 | return "Hello " + name + "!"; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /examples/java-gradle-wrapper/src/test/java/HelloWorldTest.java: -------------------------------------------------------------------------------- 1 | import static org.junit.jupiter.api.Assertions.assertEquals; 2 | import org.junit.jupiter.api.Test; 3 | 4 | public class HelloWorldTest { 5 | 6 | @Test 7 | public void sayHello() { 8 | assertEquals("Hello Sue!", HelloWorld.sayHello("Sue")); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /examples/java-gradle-wrapper/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/java-gradle/.gitignore: -------------------------------------------------------------------------------- 1 | build/** -------------------------------------------------------------------------------- /examples/java-gradle/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: java 9 | toolchain: gradle 10 | -------------------------------------------------------------------------------- /examples/java-gradle/.tcr/language/java.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: gradle 3 | compatible-with: [ gradle ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.java$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.java$' ] 10 | -------------------------------------------------------------------------------- /examples/java-gradle/.tcr/toolchain/gradle.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: gradle 5 | arguments: [ build, testClasses, -x, test ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: gradle 10 | arguments: [ test ] 11 | test-result-dir: build/test-results/test 12 | -------------------------------------------------------------------------------- /examples/java-gradle/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java' 3 | id 'java-library' 4 | id 'com.adarshr.test-logger' version '4.0.0' 5 | } 6 | 7 | java { 8 | toolchain { 9 | languageVersion = JavaLanguageVersion.of(17) 10 | } 11 | } 12 | 13 | repositories { 14 | mavenCentral() 15 | } 16 | 17 | dependencies { 18 | testImplementation("org.junit.jupiter:junit-jupiter:5.13.0") 19 | testRuntimeOnly("org.junit.platform:junit-platform-launcher") 20 | } 21 | 22 | test { 23 | useJUnitPlatform() 24 | testLogging { 25 | events "passed", "skipped", "failed" 26 | } 27 | } 28 | 29 | tasks.withType(JavaCompile).configureEach { 30 | options.encoding = 'UTF-8' 31 | } 32 | 33 | testlogger { 34 | theme = 'standard' 35 | showExceptions = true 36 | showStackTraces = true 37 | showFullStackTraces = false 38 | showCauses = true 39 | slowThreshold = 5000 40 | showSummary = true 41 | showSimpleNames = false 42 | showPassed = true 43 | showSkipped = true 44 | showFailed = true 45 | showStandardStreams = false 46 | showPassedStandardStreams = true 47 | showSkippedStandardStreams = true 48 | showFailedStandardStreams = true 49 | logLevel = 'lifecycle' 50 | } 51 | -------------------------------------------------------------------------------- /examples/java-gradle/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'HelloWorld' 2 | -------------------------------------------------------------------------------- /examples/java-gradle/src/main/java/HelloWorld.java: -------------------------------------------------------------------------------- 1 | class HelloWorld { 2 | static String sayHello(String name) { 3 | return "Hello " + name + "!"; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /examples/java-gradle/src/test/java/HelloWorldTest.java: -------------------------------------------------------------------------------- 1 | import static org.junit.jupiter.api.Assertions.assertEquals; 2 | import org.junit.jupiter.api.Test; 3 | 4 | public class HelloWorldTest { 5 | 6 | @Test 7 | public void sayHello() { 8 | assertEquals("Hello Sue!", HelloWorld.sayHello("Sue")); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /examples/java-gradle/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/java-make/.gitignore: -------------------------------------------------------------------------------- 1 | build/** 2 | -------------------------------------------------------------------------------- /examples/java-make/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: java 9 | toolchain: make 10 | -------------------------------------------------------------------------------- /examples/java-make/.tcr/language/java.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: make 3 | compatible-with: [ make ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.java$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.java$' ] 10 | -------------------------------------------------------------------------------- /examples/java-make/.tcr/toolchain/make.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: make 5 | arguments: [ build ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: make 10 | arguments: [ test ] 11 | test-result-dir: . 12 | -------------------------------------------------------------------------------- /examples/java-make/src/main/java/HelloWorld.java: -------------------------------------------------------------------------------- 1 | class HelloWorld { 2 | static String sayHello(String name) { 3 | return "Hello " + name + "!"; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /examples/java-make/src/test/java/HelloWorldTest.java: -------------------------------------------------------------------------------- 1 | import static org.junit.jupiter.api.Assertions.assertEquals; 2 | import org.junit.jupiter.api.Test; 3 | 4 | public class HelloWorldTest { 5 | 6 | @Test 7 | public void sayHello() { 8 | assertEquals("Hello Sue!", HelloWorld.sayHello("Sue")); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /examples/java-make/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/java-maven-wrapper/.gitignore: -------------------------------------------------------------------------------- 1 | target/** 2 | .mvn/wrapper/maven-wrapper.jar 3 | -------------------------------------------------------------------------------- /examples/java-maven-wrapper/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | wrapperVersion=3.3.2 18 | distributionType=only-script 19 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip 20 | 21 | -------------------------------------------------------------------------------- /examples/java-maven-wrapper/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: java 9 | toolchain: maven-wrapper 10 | -------------------------------------------------------------------------------- /examples/java-maven-wrapper/.tcr/language/java.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: maven-wrapper 3 | compatible-with: [ maven-wrapper ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.java$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.java$' ] 10 | -------------------------------------------------------------------------------- /examples/java-maven-wrapper/.tcr/toolchain/maven-wrapper.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: ./mvnw 5 | arguments: [ test-compile ] 6 | - os: [ windows ] 7 | arch: [ "386", amd64, arm64 ] 8 | command: .\mvnw.cmd 9 | arguments: [ test-compile ] 10 | test: 11 | - os: [ darwin, linux ] 12 | arch: [ "386", amd64, arm64 ] 13 | command: ./mvnw 14 | arguments: [ test ] 15 | - os: [ windows ] 16 | arch: [ "386", amd64, arm64 ] 17 | command: .\mvnw.cmd 18 | arguments: [ test ] 19 | test-result-dir: target/surefire-reports 20 | -------------------------------------------------------------------------------- /examples/java-maven-wrapper/src/main/java/HelloWorld.java: -------------------------------------------------------------------------------- 1 | class HelloWorld { 2 | static String sayHello(String name) { 3 | return "Hello " + name + "!"; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /examples/java-maven-wrapper/src/test/java/HelloWorldTest.java: -------------------------------------------------------------------------------- 1 | import static org.junit.jupiter.api.Assertions.assertEquals; 2 | import org.junit.jupiter.api.Test; 3 | 4 | public class HelloWorldTest { 5 | 6 | @Test 7 | public void sayHello() { 8 | assertEquals("Hello Sue!", HelloWorld.sayHello("Sue")); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /examples/java-maven-wrapper/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/java-maven/.gitignore: -------------------------------------------------------------------------------- 1 | target/** 2 | -------------------------------------------------------------------------------- /examples/java-maven/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: java 9 | toolchain: maven 10 | -------------------------------------------------------------------------------- /examples/java-maven/.tcr/language/java.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: maven 3 | compatible-with: [ maven ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.java$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.java$' ] 10 | -------------------------------------------------------------------------------- /examples/java-maven/.tcr/toolchain/maven.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: mvn 5 | arguments: [ test-compile ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: mvn 10 | arguments: [ test ] 11 | test-result-dir: target/surefire-reports 12 | -------------------------------------------------------------------------------- /examples/java-maven/src/main/java/HelloWorld.java: -------------------------------------------------------------------------------- 1 | class HelloWorld { 2 | static String sayHello(String name) { 3 | return "Hello " + name + "!"; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /examples/java-maven/src/test/java/HelloWorldTest.java: -------------------------------------------------------------------------------- 1 | import static org.junit.jupiter.api.Assertions.assertEquals; 2 | import org.junit.jupiter.api.Test; 3 | 4 | public class HelloWorldTest { 5 | 6 | @Test 7 | public void sayHello() { 8 | assertEquals("Hello Sue!", HelloWorld.sayHello("Sue")); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /examples/java-maven/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/javascript-yarn/.gitignore: -------------------------------------------------------------------------------- 1 | **/node_modules/ 2 | **/test_results/ 3 | .pnp.* 4 | .yarn/ 5 | .yarnrc.yml 6 | -------------------------------------------------------------------------------- /examples/javascript-yarn/.nvmrc: -------------------------------------------------------------------------------- 1 | lts/* 2 | -------------------------------------------------------------------------------- /examples/javascript-yarn/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: javascript 9 | toolchain: yarn 10 | -------------------------------------------------------------------------------- /examples/javascript-yarn/.tcr/language/javascript.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: yarn 3 | compatible-with: [yarn] 4 | source-files: 5 | directories: [src] 6 | patterns: ['(?i)^.*\.js$'] 7 | test-files: 8 | directories: [test] 9 | patterns: ['(?i)^.*\.js$'] -------------------------------------------------------------------------------- /examples/javascript-yarn/.tcr/toolchain/yarn.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [darwin, linux, windows] 3 | arch: ["386", amd64, arm64] 4 | command: yarn 5 | arguments: [jest, --testNamePattern=DO-NOT-RUN-ANYTHING, --silent] 6 | test: 7 | - os: [darwin, linux, windows] 8 | arch: ["386", amd64, arm64] 9 | command: yarn 10 | arguments: [jest] 11 | test-result-dir: test_results -------------------------------------------------------------------------------- /examples/javascript-yarn/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "reporters": [ "default", "jest-junit" ] 3 | }; -------------------------------------------------------------------------------- /examples/javascript-yarn/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hello-world", 3 | "version": "1.0.0", 4 | "description": "Javascript + Yarn example for TCR", 5 | "author": "Murex", 6 | "license": "MIT", 7 | "devDependencies": { 8 | "@types/jest": "^29.5.14", 9 | "@types/node": "^22.15.29", 10 | "jest": "^29.7.0", 11 | "jest-junit": "^16.0.0", 12 | "yarn-upgrade-all": "^0.7.5" 13 | }, 14 | "scripts": { 15 | "test": "jest --watchAll" 16 | }, 17 | "jest-junit": { 18 | "outputDirectory": "./test_results" 19 | }, 20 | "packageManager": "yarn@4.7.0" 21 | } 22 | -------------------------------------------------------------------------------- /examples/javascript-yarn/src/helloWorld.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | function sayHello(name) { 4 | return "Hello " + name + "!"; 5 | } 6 | 7 | module.exports = sayHello; 8 | -------------------------------------------------------------------------------- /examples/javascript-yarn/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/javascript-yarn/test/helloWorld.spec.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const sayHello = require("../src/helloWorld"); 4 | 5 | describe("Hello World", () => { 6 | it("should say hello to Joe", () => { 7 | expect(sayHello("Joe")).toBe("Hello Joe!"); 8 | }); 9 | }); 10 | -------------------------------------------------------------------------------- /examples/kotlin-gradle-wrapper/.gitignore: -------------------------------------------------------------------------------- 1 | build/** -------------------------------------------------------------------------------- /examples/kotlin-gradle-wrapper/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: kotlin 9 | toolchain: gradle-wrapper 10 | -------------------------------------------------------------------------------- /examples/kotlin-gradle-wrapper/.tcr/language/kotlin.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: gradle-wrapper 3 | compatible-with: [ gradle-wrapper ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.kt$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.kt$' ] 10 | -------------------------------------------------------------------------------- /examples/kotlin-gradle-wrapper/.tcr/toolchain/gradle-wrapper.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: ./gradlew 5 | arguments: [ build, testClasses, -x, test ] 6 | - os: [ windows ] 7 | arch: [ "386", amd64, arm64 ] 8 | command: .\gradlew.bat 9 | arguments: [ build, testClasses, -x, test ] 10 | test: 11 | - os: [ darwin, linux ] 12 | arch: [ "386", amd64, arm64 ] 13 | command: ./gradlew 14 | arguments: [ test ] 15 | - os: [ windows ] 16 | arch: [ "386", amd64, arm64 ] 17 | command: .\gradlew.bat 18 | arguments: [ test ] 19 | test-result-dir: build/test-results/test 20 | -------------------------------------------------------------------------------- /examples/kotlin-gradle-wrapper/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import com.adarshr.gradle.testlogger.TestLoggerExtension 2 | import com.adarshr.gradle.testlogger.TestLoggerPlugin 3 | import com.adarshr.gradle.testlogger.theme.ThemeType 4 | 5 | plugins { 6 | kotlin("jvm") version "2.1.21" 7 | id("com.adarshr.test-logger") version "4.0.0" 8 | } 9 | 10 | kotlin { 11 | jvmToolchain { 12 | languageVersion.set(JavaLanguageVersion.of(17)) 13 | } 14 | } 15 | 16 | repositories { 17 | mavenCentral() 18 | } 19 | 20 | dependencies { 21 | testImplementation(kotlin("test")) 22 | } 23 | 24 | tasks.test { 25 | useJUnitPlatform() 26 | } 27 | 28 | group = "com.murex.tcr.example" 29 | version = "1.0-SNAPSHOT" 30 | 31 | testlogger { 32 | theme = ThemeType.STANDARD 33 | showExceptions = true 34 | showStackTraces = true 35 | showFullStackTraces = false 36 | showCauses = true 37 | slowThreshold = 2000 38 | showSummary = true 39 | showSimpleNames = false 40 | showPassed = true 41 | showSkipped = true 42 | showFailed = true 43 | showStandardStreams = false 44 | showPassedStandardStreams = true 45 | showSkippedStandardStreams = true 46 | showFailedStandardStreams = true 47 | logLevel = LogLevel.LIFECYCLE 48 | } 49 | -------------------------------------------------------------------------------- /examples/kotlin-gradle-wrapper/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murex/TCR/b4a8708da217fdfc9be7ec2514a4a31df9097e54/examples/kotlin-gradle-wrapper/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /examples/kotlin-gradle-wrapper/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /examples/kotlin-gradle-wrapper/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | rootProject.name = "HelloWorld" 2 | -------------------------------------------------------------------------------- /examples/kotlin-gradle-wrapper/src/main/kotlin/HelloWorld.kt: -------------------------------------------------------------------------------- 1 | class HelloWorld { 2 | fun sayHello(name: String) = "Hello $name!" 3 | } 4 | -------------------------------------------------------------------------------- /examples/kotlin-gradle-wrapper/src/test/kotlin/HelloWorldTest.kt: -------------------------------------------------------------------------------- 1 | import kotlin.test.Test 2 | import kotlin.test.assertEquals 3 | 4 | class HelloWorldTest { 5 | @Test 6 | fun sayHello() { 7 | val helloWorld = HelloWorld() 8 | assertEquals("Hello Sue!", helloWorld.sayHello("Sue")) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /examples/kotlin-gradle-wrapper/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/kotlin-gradle/.gitignore: -------------------------------------------------------------------------------- 1 | build/** -------------------------------------------------------------------------------- /examples/kotlin-gradle/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: kotlin 9 | toolchain: gradle 10 | -------------------------------------------------------------------------------- /examples/kotlin-gradle/.tcr/language/kotlin.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: gradle 3 | compatible-with: [ gradle ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.kt$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.kt$' ] 10 | -------------------------------------------------------------------------------- /examples/kotlin-gradle/.tcr/toolchain/gradle.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: gradle 5 | arguments: [ build, testClasses, -x, test ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: gradle 10 | arguments: [ test ] 11 | test-result-dir: build/test-results/test 12 | -------------------------------------------------------------------------------- /examples/kotlin-gradle/build.gradle.kts: -------------------------------------------------------------------------------- 1 | import com.adarshr.gradle.testlogger.TestLoggerExtension 2 | import com.adarshr.gradle.testlogger.TestLoggerPlugin 3 | import com.adarshr.gradle.testlogger.theme.ThemeType 4 | 5 | plugins { 6 | kotlin("jvm") version "2.1.21" 7 | id("com.adarshr.test-logger") version "4.0.0" 8 | } 9 | 10 | kotlin { 11 | jvmToolchain { 12 | languageVersion.set(JavaLanguageVersion.of(17)) 13 | } 14 | } 15 | 16 | repositories { 17 | mavenCentral() 18 | } 19 | 20 | dependencies { 21 | testImplementation(kotlin("test")) 22 | } 23 | 24 | tasks.test { 25 | useJUnitPlatform() 26 | } 27 | 28 | group = "com.murex.tcr.example" 29 | version = "1.0-SNAPSHOT" 30 | 31 | testlogger { 32 | theme = ThemeType.STANDARD 33 | showExceptions = true 34 | showStackTraces = true 35 | showFullStackTraces = false 36 | showCauses = true 37 | slowThreshold = 2000 38 | showSummary = true 39 | showSimpleNames = false 40 | showPassed = true 41 | showSkipped = true 42 | showFailed = true 43 | showStandardStreams = false 44 | showPassedStandardStreams = true 45 | showSkippedStandardStreams = true 46 | showFailedStandardStreams = true 47 | logLevel = LogLevel.LIFECYCLE 48 | } 49 | -------------------------------------------------------------------------------- /examples/kotlin-gradle/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murex/TCR/b4a8708da217fdfc9be7ec2514a4a31df9097e54/examples/kotlin-gradle/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /examples/kotlin-gradle/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /examples/kotlin-gradle/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | rootProject.name = "HelloWorld" 2 | -------------------------------------------------------------------------------- /examples/kotlin-gradle/src/main/kotlin/HelloWorld.kt: -------------------------------------------------------------------------------- 1 | class HelloWorld { 2 | fun sayHello(name: String) = "Hello $name!" 3 | } 4 | -------------------------------------------------------------------------------- /examples/kotlin-gradle/src/test/kotlin/HelloWorldTest.kt: -------------------------------------------------------------------------------- 1 | import kotlin.test.Test 2 | import kotlin.test.assertEquals 3 | 4 | class HelloWorldTest { 5 | @Test 6 | fun sayHello() { 7 | val helloWorld = HelloWorld() 8 | assertEquals("Hello Sue!", helloWorld.sayHello("Sue")) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /examples/kotlin-gradle/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/kotlin-maven-wrapper/.gitignore: -------------------------------------------------------------------------------- 1 | target/** -------------------------------------------------------------------------------- /examples/kotlin-maven-wrapper/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | wrapperVersion=3.3.2 18 | distributionType=only-script 19 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip 20 | -------------------------------------------------------------------------------- /examples/kotlin-maven-wrapper/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: kotlin 9 | toolchain: maven-wrapper 10 | -------------------------------------------------------------------------------- /examples/kotlin-maven-wrapper/.tcr/language/kotlin.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: maven-wrapper 3 | compatible-with: [ maven-wrapper ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.kt$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.kt$' ] 10 | -------------------------------------------------------------------------------- /examples/kotlin-maven-wrapper/.tcr/toolchain/maven-wrapper.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [darwin, linux] 3 | arch: ["386", amd64, arm64] 4 | command: ./mvnw 5 | arguments: [test-compile] 6 | - os: [windows] 7 | arch: ["386", amd64, arm64] 8 | command: .\mvnw.cmd 9 | arguments: [test-compile] 10 | test: 11 | - os: [darwin, linux] 12 | arch: ["386", amd64, arm64] 13 | command: ./mvnw 14 | arguments: [test] 15 | - os: [windows] 16 | arch: ["386", amd64, arm64] 17 | command: .\mvnw.cmd 18 | arguments: [test] 19 | test-result-dir: target/surefire-reports 20 | -------------------------------------------------------------------------------- /examples/kotlin-maven-wrapper/src/main/kotlin/HelloWorld.kt: -------------------------------------------------------------------------------- 1 | class HelloWorld { 2 | fun sayHello(name: String) = "Hello $name!" 3 | } 4 | -------------------------------------------------------------------------------- /examples/kotlin-maven-wrapper/src/test/kotlin/HelloWorldTest.kt: -------------------------------------------------------------------------------- 1 | import kotlin.test.Test 2 | import kotlin.test.assertEquals 3 | 4 | class HelloWorldTest { 5 | @Test 6 | fun sayHello() { 7 | val helloWorld = HelloWorld() 8 | assertEquals("Hello Sue!", helloWorld.sayHello("Sue")) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /examples/kotlin-maven-wrapper/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/kotlin-maven/.gitignore: -------------------------------------------------------------------------------- 1 | target/** -------------------------------------------------------------------------------- /examples/kotlin-maven/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: kotlin 9 | toolchain: maven 10 | -------------------------------------------------------------------------------- /examples/kotlin-maven/.tcr/language/kotlin.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: maven 3 | compatible-with: [ maven ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.kt$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.kt$' ] 10 | -------------------------------------------------------------------------------- /examples/kotlin-maven/.tcr/toolchain/maven.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [darwin, linux, windows] 3 | arch: ["386", amd64, arm64] 4 | command: mvn 5 | arguments: [test-compile] 6 | test: 7 | - os: [darwin, linux, windows] 8 | arch: ["386", amd64, arm64] 9 | command: mvn 10 | arguments: [test] 11 | test-result-dir: target/surefire-reports 12 | -------------------------------------------------------------------------------- /examples/kotlin-maven/src/main/kotlin/HelloWorld.kt: -------------------------------------------------------------------------------- 1 | class HelloWorld { 2 | fun sayHello(name: String) = "Hello $name!" 3 | } 4 | -------------------------------------------------------------------------------- /examples/kotlin-maven/src/test/kotlin/HelloWorldTest.kt: -------------------------------------------------------------------------------- 1 | import kotlin.test.Test 2 | import kotlin.test.assertEquals 3 | 4 | class HelloWorldTest { 5 | @Test 6 | fun sayHello() { 7 | val helloWorld = HelloWorld() 8 | assertEquals("Hello Sue!", helloWorld.sayHello("Sue")) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /examples/kotlin-maven/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/php-phpunit/.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | .phpunit.cache 3 | -------------------------------------------------------------------------------- /examples/php-phpunit/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: php 9 | toolchain: phpunit 10 | -------------------------------------------------------------------------------- /examples/php-phpunit/.tcr/language/php.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: phpunit 3 | compatible-with: [ phpunit ] 4 | source-files: 5 | directories: [ src ] 6 | patterns: [ '(?i)^.*\.php$' ] 7 | test-files: 8 | directories: [ tests ] 9 | patterns: [ '(?i)^.*\.php$' ] 10 | -------------------------------------------------------------------------------- /examples/php-phpunit/.tcr/toolchain/phpunit.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: ./vendor/bin/parallel-lint 5 | arguments: [ --exclude, vendor, . ] 6 | - os: [ windows ] 7 | arch: [ "386", amd64, arm64 ] 8 | command: .\vendor\bin\parallel-lint.bat 9 | arguments: [ --exclude, vendor, . ] 10 | test: 11 | - os: [ darwin, linux ] 12 | arch: [ "386", amd64, arm64 ] 13 | command: ./vendor/bin/phpunit 14 | arguments: [ tests, --log-junit, .phpunit.cache/test-results.xml ] 15 | - os: [ windows ] 16 | arch: [ "386", amd64, arm64 ] 17 | command: .\vendor\bin\phpunit.bat 18 | arguments: [ tests, --log-junit, .phpunit.cache/test-results.xml ] 19 | test-result-dir: .phpunit.cache 20 | -------------------------------------------------------------------------------- /examples/php-phpunit/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example/hello_world", 3 | "require": { 4 | "php": "^8.3" 5 | }, 6 | "require-dev": { 7 | "phpunit/phpunit": "^12", 8 | "php-parallel-lint/php-parallel-lint": "^1.4" 9 | }, 10 | "autoload": { 11 | "psr-4": { 12 | "HelloWorld\\": "src", 13 | "HelloWorld\\Tests\\": "tests" 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /examples/php-phpunit/phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | tests 10 | 11 | 12 | 13 | 14 | src 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /examples/php-phpunit/src/HelloWorld.php: -------------------------------------------------------------------------------- 1 | assertEquals("Hello Sue!", $helloWorld->sayHello("Sue")); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /examples/python-bazel/.bazelrc: -------------------------------------------------------------------------------- 1 | test --test_output=errors 2 | 3 | # Do NOT implicitly create empty __init__.py files in the runfiles tree. 4 | # By default, these are created in every directory containing Python source code 5 | # or shared libraries, and every parent directory of those directories, 6 | # excluding the repo root directory. With this flag set, we are responsible for 7 | # creating (possibly empty) __init__.py files and adding them to the srcs of 8 | # Python targets as required. 9 | build --incompatible_default_to_explicit_init_py 10 | 11 | # Disable bzlmod for now, until it's officially released 12 | common --noenable_bzlmod 13 | -------------------------------------------------------------------------------- /examples/python-bazel/.bazelversion: -------------------------------------------------------------------------------- 1 | 7.3.0 2 | -------------------------------------------------------------------------------- /examples/python-bazel/.gitignore: -------------------------------------------------------------------------------- 1 | bazel-* 2 | pytest/ 3 | .pytest_cache/ 4 | -------------------------------------------------------------------------------- /examples/python-bazel/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: python 9 | toolchain: bazel 10 | -------------------------------------------------------------------------------- /examples/python-bazel/.tcr/language/python.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: bazel 3 | compatible-with: [ bazel ] 4 | source-files: 5 | directories: [ src ] 6 | patterns: [ '(?i)^.*\.py$' ] 7 | test-files: 8 | directories: [ tests ] 9 | patterns: [ '(?i)^.*\.py$' ] 10 | -------------------------------------------------------------------------------- /examples/python-bazel/.tcr/toolchain/bazel.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: bazel 5 | arguments: [ build, "..." ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: bazel 10 | arguments: [ test, "..." ] 11 | test-result-dir: bazel-testlogs 12 | -------------------------------------------------------------------------------- /examples/python-bazel/BUILD.bazel: -------------------------------------------------------------------------------- 1 | load("@rules_python//python:defs.bzl", "py_library") 2 | load("@rules_python_pytest//python_pytest:defs.bzl", "py_pytest_test") 3 | 4 | py_library( 5 | name = "hello_world", 6 | srcs = glob(["src/**/*.py"]), 7 | visibility = ["//visibility:public"], 8 | ) 9 | 10 | py_pytest_test( 11 | name = "test_hello_world", 12 | size = "small", 13 | srcs = glob(["tests/*.py"]), 14 | imports = ["src"], 15 | deps = [ 16 | ":hello_world", 17 | ], 18 | ) 19 | -------------------------------------------------------------------------------- /examples/python-bazel/WORKSPACE.bazel: -------------------------------------------------------------------------------- 1 | workspace(name = "hello_world_python") 2 | 3 | load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") 4 | 5 | http_archive( 6 | name = "rules_python", 7 | sha256 = "c68bdc4fbec25de5b5493b8819cfc877c4ea299c0dcb15c244c5a00208cde311", 8 | strip_prefix = "rules_python-0.31.0", 9 | url = "https://github.com/bazelbuild/rules_python/releases/download/0.31.0/rules_python-0.31.0.tar.gz", 10 | ) 11 | 12 | http_archive( 13 | name = "rules_python_pytest", 14 | sha256 = "8b82935e16f7b28e3711a68ae5f88f44d8685ccd906b869f7721fdd4c32f2369", 15 | strip_prefix = "rules_python_pytest-1.1.0", 16 | url = "https://github.com/caseyduquettesc/rules_python_pytest/releases/download/v1.1.0/rules_python_pytest-v1.1.0.tar.gz", 17 | ) 18 | 19 | load("@rules_python//python:repositories.bzl", "py_repositories") 20 | load("@rules_python_pytest//python_pytest:repositories.bzl", "rules_python_pytest_dependencies") 21 | 22 | rules_python_pytest_dependencies() 23 | 24 | py_repositories() 25 | -------------------------------------------------------------------------------- /examples/python-bazel/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["setuptools", "wheel"] 3 | build-backend = "setuptools.build_meta" 4 | 5 | [tool.pytest.ini_options] 6 | addopts = "-vvs --junitxml=\"pytest/result.xml\"" 7 | testpaths = [ 8 | "tests" 9 | ] 10 | -------------------------------------------------------------------------------- /examples/python-bazel/requirements.txt: -------------------------------------------------------------------------------- 1 | pytest == 7.0.1; python_version < '3.7' 2 | pytest == 7.4.4; python_version in '3.7' 3 | pytest == 8.3.5; python_version >= '3.8' 4 | -------------------------------------------------------------------------------- /examples/python-bazel/src/hello_world/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murex/TCR/b4a8708da217fdfc9be7ec2514a4a31df9097e54/examples/python-bazel/src/hello_world/__init__.py -------------------------------------------------------------------------------- /examples/python-bazel/src/hello_world/hello_world.py: -------------------------------------------------------------------------------- 1 | def say_hello(name: str) -> str: 2 | return f'Hello {name}!' 3 | -------------------------------------------------------------------------------- /examples/python-bazel/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/python-bazel/tests/test_hello_world.py: -------------------------------------------------------------------------------- 1 | from hello_world.hello_world import say_hello 2 | 3 | 4 | class TestHelloWorld: 5 | 6 | def test_say_hello(self) -> None: 7 | assert ('Hello Sue!' == say_hello('Sue')) 8 | -------------------------------------------------------------------------------- /examples/python-pytest/.gitignore: -------------------------------------------------------------------------------- 1 | venv/ 2 | dist/ 3 | .pytest_cache/ 4 | pytest/ 5 | **/__pycache__/ 6 | **/*.egg-info/ 7 | -------------------------------------------------------------------------------- /examples/python-pytest/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: python 9 | toolchain: pytest 10 | -------------------------------------------------------------------------------- /examples/python-pytest/.tcr/language/python.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: pytest 3 | compatible-with: [ pytest ] 4 | source-files: 5 | directories: [ src ] 6 | patterns: [ '(?i)^.*\.py$' ] 7 | test-files: 8 | directories: [ tests ] 9 | patterns: [ '(?i)^.*\.py$' ] 10 | -------------------------------------------------------------------------------- /examples/python-pytest/.tcr/toolchain/pytest.yml: -------------------------------------------------------------------------------- 1 | # Only collects syntax errors, non-syntax errors get reverted (ex: calling an undefined function) 2 | build: 3 | - os: [ darwin, linux, windows ] 4 | arch: [ "386", amd64, arm64 ] 5 | command: pytest 6 | arguments: [ --collect-only ] 7 | test: 8 | - os: [ darwin, linux, windows ] 9 | arch: [ "386", amd64, arm64 ] 10 | command: pytest 11 | arguments: [ ] 12 | test-result-dir: pytest 13 | 14 | -------------------------------------------------------------------------------- /examples/python-pytest/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["setuptools", "wheel"] 3 | build-backend = "setuptools.build_meta" 4 | 5 | [tool.pytest.ini_options] 6 | addopts = "-vvs --junitxml=\"pytest/result.xml\"" 7 | testpaths = [ 8 | "tests" 9 | ] 10 | -------------------------------------------------------------------------------- /examples/python-pytest/requirements.txt: -------------------------------------------------------------------------------- 1 | pytest == 7.0.1; python_version < '3.7' 2 | pytest == 7.4.4; python_version in '3.7' 3 | pytest == 8.3.5; python_version >= '3.8' 4 | -------------------------------------------------------------------------------- /examples/python-pytest/setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import find_packages, setup 2 | 3 | setup( 4 | name='hello_world', 5 | version='0.0.1', 6 | python_requires='>=3.6', 7 | extras_require=dict(tests=['pytest']), 8 | packages=find_packages(where="src"), 9 | package_dir={"": "src"}, 10 | ) 11 | -------------------------------------------------------------------------------- /examples/python-pytest/src/hello_world/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murex/TCR/b4a8708da217fdfc9be7ec2514a4a31df9097e54/examples/python-pytest/src/hello_world/__init__.py -------------------------------------------------------------------------------- /examples/python-pytest/src/hello_world/hello_world.py: -------------------------------------------------------------------------------- 1 | def say_hello(name: str) -> str: 2 | return f'Hello {name}!' 3 | -------------------------------------------------------------------------------- /examples/python-pytest/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/python-pytest/tests/test_hello_world.py: -------------------------------------------------------------------------------- 1 | from hello_world.hello_world import say_hello 2 | 3 | 4 | class TestHelloWorld: 5 | 6 | def test_say_hello(self) -> None: 7 | assert ('Hello Sue!' == say_hello('Sue')) 8 | -------------------------------------------------------------------------------- /examples/rust-cargo/.gitignore: -------------------------------------------------------------------------------- 1 | **/target/ 2 | -------------------------------------------------------------------------------- /examples/rust-cargo/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: rust 9 | toolchain: cargo 10 | -------------------------------------------------------------------------------- /examples/rust-cargo/.tcr/language/rust.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: cargo 3 | compatible-with: [ cargo ] 4 | source-files: 5 | directories: [ src ] 6 | patterns: [ '(?i)^.*\.rs$' ] 7 | test-files: 8 | directories: [ tests ] 9 | patterns: [ '(?i)^.*\.rs$' ] 10 | -------------------------------------------------------------------------------- /examples/rust-cargo/.tcr/toolchain/cargo.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: cargo 5 | arguments: [ test, --test, lib_test, --no-run ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: cargo 10 | arguments: [ test, --test, lib_test ] 11 | test-result-dir: target 12 | -------------------------------------------------------------------------------- /examples/rust-cargo/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "hello_world" 7 | version = "0.1.0" 8 | -------------------------------------------------------------------------------- /examples/rust-cargo/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "hello_world" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | -------------------------------------------------------------------------------- /examples/rust-cargo/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub fn say_hello(name: &str) -> String { 2 | return format!("Hello {}!", name) 3 | } 4 | -------------------------------------------------------------------------------- /examples/rust-cargo/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/rust-cargo/tests/lib_test.rs: -------------------------------------------------------------------------------- 1 | use hello_world; 2 | 3 | #[test] 4 | fn say_hello_test() { 5 | assert_eq!("Hello Sue!", hello_world::say_hello("Sue")); 6 | } 7 | 8 | -------------------------------------------------------------------------------- /examples/rust-nextest/.gitignore: -------------------------------------------------------------------------------- 1 | **/target/ 2 | -------------------------------------------------------------------------------- /examples/rust-nextest/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: rust 9 | toolchain: nextest 10 | -------------------------------------------------------------------------------- /examples/rust-nextest/.tcr/language/rust.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: nextest 3 | compatible-with: [ nextest ] 4 | source-files: 5 | directories: [ src ] 6 | patterns: [ '(?i)^.*\.rs$' ] 7 | test-files: 8 | directories: [ tests ] 9 | patterns: [ '(?i)^.*\.rs$' ] 10 | -------------------------------------------------------------------------------- /examples/rust-nextest/.tcr/toolchain/nextest.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: cargo 5 | arguments: [ test, --test, lib_test, --no-run ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: cargo 10 | arguments: [ nextest, run, --test, lib_test ] 11 | test-result-dir: target/nextest 12 | -------------------------------------------------------------------------------- /examples/rust-nextest/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "hello_world" 7 | version = "0.1.0" 8 | -------------------------------------------------------------------------------- /examples/rust-nextest/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "hello_world" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | -------------------------------------------------------------------------------- /examples/rust-nextest/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub fn say_hello(name: &str) -> String { 2 | return format!("Hello {}!", name) 3 | } 4 | -------------------------------------------------------------------------------- /examples/rust-nextest/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/rust-nextest/tests/lib_test.rs: -------------------------------------------------------------------------------- 1 | use hello_world; 2 | 3 | #[test] 4 | fn say_hello_test() { 5 | assert_eq!("Hello Sue!", hello_world::say_hello("Sue")); 6 | } 7 | 8 | -------------------------------------------------------------------------------- /examples/scala-sbt/.gitignore: -------------------------------------------------------------------------------- 1 | .metals/ 2 | .bloop/ 3 | .bsp/ 4 | project/ 5 | target/ 6 | .scalafmt.conf 7 | *.class 8 | *.tasty 9 | 10 | -------------------------------------------------------------------------------- /examples/scala-sbt/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: scala 9 | toolchain: sbt 10 | -------------------------------------------------------------------------------- /examples/scala-sbt/.tcr/language/scala.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: sbt 3 | compatible-with: [ sbt ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.scala$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.scala$' ] 10 | -------------------------------------------------------------------------------- /examples/scala-sbt/.tcr/toolchain/sbt.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: sbt 5 | arguments: [ compile ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: sbt 10 | arguments: [ test ] 11 | test-result-dir: target/test-reports 12 | -------------------------------------------------------------------------------- /examples/scala-sbt/build.sbt: -------------------------------------------------------------------------------- 1 | scalaVersion := "3.4.2" 2 | 3 | libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.18" % "test" 4 | -------------------------------------------------------------------------------- /examples/scala-sbt/src/main/scala/HelloWorld.scala: -------------------------------------------------------------------------------- 1 | object HelloWorld { 2 | def sayHello(name: String): String = s"Hello, $name!" 3 | } 4 | -------------------------------------------------------------------------------- /examples/scala-sbt/src/test/scala/HelloWorldTest.scala: -------------------------------------------------------------------------------- 1 | import org.scalatest.funsuite.AnyFunSuite 2 | import org.scalatest.matchers.should.Matchers 3 | 4 | 5 | /** @version 1.1.0 */ 6 | class HelloWorldTest extends AnyFunSuite with Matchers { 7 | 8 | test("Say Hello") { 9 | HelloWorld.sayHello("Sue") should be ("Hello, Sue!") 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /examples/scala-sbt/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/tcr/.gitignore: -------------------------------------------------------------------------------- 1 | # Below files and directories are automatically created 2 | # by tcr.sh and do not need to be committed to this repository 3 | 4 | bin/** 5 | doc/** 6 | download/** 7 | LICENSE.md 8 | README.md 9 | -------------------------------------------------------------------------------- /examples/tcr/version.txt: -------------------------------------------------------------------------------- 1 | tcr 1.4.2 2 | -------------------------------------------------------------------------------- /examples/typescript-yarn/.gitignore: -------------------------------------------------------------------------------- 1 | **/node_modules/ 2 | **/test_results/ 3 | .pnp.* 4 | .yarn/ 5 | .yarnrc.yml 6 | -------------------------------------------------------------------------------- /examples/typescript-yarn/.nvmrc: -------------------------------------------------------------------------------- 1 | lts/* 2 | -------------------------------------------------------------------------------- /examples/typescript-yarn/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: false 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: typescript 9 | toolchain: yarn 10 | -------------------------------------------------------------------------------- /examples/typescript-yarn/.tcr/language/typescript.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: yarn 3 | compatible-with: [yarn] 4 | source-files: 5 | directories: [src] 6 | patterns: ['(?i)^.*\.ts$'] 7 | test-files: 8 | directories: [test] 9 | patterns: ['(?i)^.*\.ts$'] -------------------------------------------------------------------------------- /examples/typescript-yarn/.tcr/toolchain/yarn.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [darwin, linux, windows] 3 | arch: ["386", amd64, arm64] 4 | command: yarn 5 | arguments: [jest, --testNamePattern=DO-NOT-RUN-ANYTHING, --silent] 6 | test: 7 | - os: [darwin, linux, windows] 8 | arch: ["386", amd64, arm64] 9 | command: yarn 10 | arguments: [jest] 11 | test-result-dir: test_results -------------------------------------------------------------------------------- /examples/typescript-yarn/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "preset": 'ts-jest', 3 | "reporters": [ "default", "jest-junit" ] 4 | }; -------------------------------------------------------------------------------- /examples/typescript-yarn/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hello-world", 3 | "version": "1.0.0", 4 | "description": "Typescript + Yarn example for TCR", 5 | "author": "Murex", 6 | "license": "MIT", 7 | "devDependencies": { 8 | "@tsconfig/node22": "^22.0.2", 9 | "@types/jest": "^29.5.14", 10 | "@types/node": "^22.15.29", 11 | "jest": "^29.7.0", 12 | "jest-junit": "^16.0.0", 13 | "ts-jest": "^29.3.4", 14 | "typescript": "^5.8.3", 15 | "yarn-upgrade-all": "^0.7.5" 16 | }, 17 | "scripts": { 18 | "test": "jest --watchAll" 19 | }, 20 | "jest-junit": { 21 | "outputDirectory": "./test_results" 22 | }, 23 | "packageManager": "yarn@4.7.0" 24 | } 25 | -------------------------------------------------------------------------------- /examples/typescript-yarn/src/HelloWorld.ts: -------------------------------------------------------------------------------- 1 | 2 | export function sayHello(name: string): string { 3 | return "Hello " + name + "!"; 4 | } 5 | -------------------------------------------------------------------------------- /examples/typescript-yarn/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base_dir="$(cd "$(dirname -- "$0")" && pwd)" 4 | . "${base_dir}/../tcr/tcr.sh" 5 | -------------------------------------------------------------------------------- /examples/typescript-yarn/test/HelloWorld.spec.ts: -------------------------------------------------------------------------------- 1 | import { sayHello } from "../src/HelloWorld"; 2 | 3 | describe("Hello World", () => { 4 | it("should say hello to Joe", () => { 5 | expect(sayHello("Joe")).toBe("Hello Joe!"); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /examples/typescript-yarn/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/node22/tsconfig.json" 3 | } 4 | -------------------------------------------------------------------------------- /sonar-project.properties: -------------------------------------------------------------------------------- 1 | #sonar.verbose=true 2 | sonar.projectKey=murex_TCR 3 | sonar.organization=murex 4 | # This is the name and version displayed in the SonarCloud UI. 5 | sonar.projectName=TCR 6 | sonar.projectVersion=${env.BUILD_NUMBER} 7 | # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. 8 | sonar.language=go 9 | sonar.sources=src 10 | sonar.inclusions=**/*.go 11 | sonar.tests=src 12 | sonar.test.inclusions=**/*_test.go,**/*test_data_builder.go,**/*test_double.go,**/*test_dummy.go,**/*test_stub.go,**/*test_spy.go,**/*test_mock.go,**/*test_fake.go,**/*test_util.go,**/*test_helper.go,**/*_test_data/*.go 13 | sonar.exclusions=**/testdata/** 14 | sonar.go.coverage.reportPaths=**/coverage-sonar.out 15 | # Encoding of the source code. Default is default system encoding 16 | sonar.sourceEncoding=UTF-8 17 | -------------------------------------------------------------------------------- /src/LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | Copyright (c) 2022 Murex 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /src/cli/terminal_test.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2022 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | package cli 24 | 25 | // TODO add unit tests for stty package 26 | -------------------------------------------------------------------------------- /src/cli/terminal_unix.go: -------------------------------------------------------------------------------- 1 | //go:build !windows 2 | 3 | /* 4 | Copyright (c) 2022 Murex 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | */ 24 | 25 | package cli 26 | 27 | func setupTerminal() { 28 | // Nothing to do when running on non-Windows OS 29 | } 30 | -------------------------------------------------------------------------------- /src/desktop/browser_test.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2024 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | package desktop 24 | 25 | import ( 26 | "github.com/stretchr/testify/assert" 27 | "testing" 28 | ) 29 | 30 | func Test_build_browser_url(t *testing.T) { 31 | assert.Equal(t, "http://127.0.0.1:8483/", browserURL(8483)) 32 | assert.Equal(t, "http://127.0.0.1:80/", browserURL(80)) 33 | } 34 | -------------------------------------------------------------------------------- /src/filesystem/sourcetree.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2021 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | package filesystem 24 | 25 | // SourceTree is the interface that any implementation must comply with in order to be used 26 | // by TCR engine 27 | type SourceTree interface { 28 | GetBaseDir() string 29 | IsValid() bool 30 | Watch( 31 | dirList []string, 32 | filenameMatcher func(filename string) bool, 33 | interrupt <-chan bool, 34 | ) bool 35 | } 36 | -------------------------------------------------------------------------------- /src/http/static/.gitignore: -------------------------------------------------------------------------------- 1 | webapp/ 2 | -------------------------------------------------------------------------------- /src/http/static/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Stub page 6 | 7 | 8 |

Stub page

9 | This page is not used. 10 | 11 | It's provided here to allow mounting an empty 12 | embedded filesystem when running in development mode. 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/language/built-in/cpp.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: cmake 3 | compatible-with: [ bazel, cmake, make ] 4 | source-files: 5 | directories: [ src, include ] 6 | patterns: [ '(?i)^.*\.c(c|pp|xx)?$', '(?i)^.*\.h(h|pp|xx)?$' ] 7 | test-files: 8 | directories: [ test ] 9 | patterns: [ '(?i)^.*\.c(c|pp|xx)?$', '(?i)^.*\.h(h|pp|xx)?$' ] 10 | -------------------------------------------------------------------------------- /src/language/built-in/csharp.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: dotnet 3 | compatible-with: [ bazel, dotnet, make ] 4 | source-files: 5 | directories: [ src ] 6 | patterns: [ '(?i)^.*\.cs(x)?$' ] 7 | test-files: 8 | directories: [ tests ] 9 | patterns: [ '(?i)^.*\.cs(x)?$' ] 10 | -------------------------------------------------------------------------------- /src/language/built-in/elixir.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: mix 3 | compatible-with: [ mix ] 4 | source-files: 5 | directories: [ lib ] 6 | patterns: [ '(?i)^.*\.ex(s)?$' ] 7 | test-files: 8 | directories: [ test ] 9 | patterns: [ '(?i)^.*\.ex(s)?$' ] 10 | -------------------------------------------------------------------------------- /src/language/built-in/go.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: go-tools 3 | compatible-with: [ bazel, go-tools, gotestsum, make ] 4 | source-files: 5 | directories: [ . ] 6 | patterns: [ '(?i)^.*\.go$' ] 7 | test-files: 8 | directories: [ . ] 9 | patterns: [ '(?i)^.*_test\.go$' ] 10 | -------------------------------------------------------------------------------- /src/language/built-in/haskell.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: stack 3 | compatible-with: [ stack ] 4 | source-files: 5 | directories: [ src ] 6 | patterns: [ '(?i)^.*\.hs$' ] 7 | test-files: 8 | directories: [ test ] 9 | patterns: [ '(?i)^.*\.hs$' ] 10 | -------------------------------------------------------------------------------- /src/language/built-in/java.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: gradle-wrapper 3 | compatible-with: [ gradle, gradle-wrapper, maven, maven-wrapper, bazel, make ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.java$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.java$' ] 10 | -------------------------------------------------------------------------------- /src/language/built-in/javascript.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: yarn 3 | compatible-with: [yarn, bazel, make] 4 | source-files: 5 | directories: [src] 6 | patterns: ['(?i)^.*\.js$'] 7 | test-files: 8 | directories: [test] 9 | patterns: ['(?i)^.*\.js$'] -------------------------------------------------------------------------------- /src/language/built-in/kotlin.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: gradle-wrapper 3 | compatible-with: [ bazel, gradle, gradle-wrapper, maven, maven-wrapper, make ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.kt$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.kt$' ] 10 | -------------------------------------------------------------------------------- /src/language/built-in/php.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: phpunit 3 | compatible-with: [ phpunit ] 4 | source-files: 5 | directories: [ src ] 6 | patterns: [ '(?i)^.*\.php$' ] 7 | test-files: 8 | directories: [ tests ] 9 | patterns: [ '(?i)^.*\.php$' ] 10 | -------------------------------------------------------------------------------- /src/language/built-in/python.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: pytest 3 | compatible-with: [ bazel, pytest, make ] 4 | source-files: 5 | directories: [ src ] 6 | patterns: [ '(?i)^.*\.py$' ] 7 | test-files: 8 | directories: [ tests ] 9 | patterns: [ '(?i)^.*_test\.py$' ] 10 | -------------------------------------------------------------------------------- /src/language/built-in/rust.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: cargo 3 | compatible-with: [ cargo, nextest ] 4 | source-files: 5 | directories: [ src ] 6 | patterns: [ '(?i)^.*\.rs$' ] 7 | test-files: 8 | directories: [ tests ] 9 | patterns: [ '(?i)^.*\.rs$' ] 10 | -------------------------------------------------------------------------------- /src/language/built-in/scala.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: sbt 3 | compatible-with: [ sbt ] 4 | source-files: 5 | directories: [ src/main ] 6 | patterns: [ '(?i)^.*\.scala$' ] 7 | test-files: 8 | directories: [ src/test ] 9 | patterns: [ '(?i)^.*\.scala$' ] 10 | -------------------------------------------------------------------------------- /src/language/built-in/typescript.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: yarn 3 | compatible-with: [yarn, bazel, make] 4 | source-files: 5 | directories: [src] 6 | patterns: ['(?i)^.*\.ts$'] 7 | test-files: 8 | directories: [test] 9 | patterns: ['(?i)^.*\.ts$'] -------------------------------------------------------------------------------- /src/main.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2021 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | package main 24 | 25 | import ( 26 | "github.com/murex/tcr/cmd" 27 | ) 28 | 29 | func main() { 30 | cmd.Execute() 31 | } 32 | -------------------------------------------------------------------------------- /src/retro/template/retro.md: -------------------------------------------------------------------------------- 1 | # Quick Retrospective 2 | 3 | ## {{.Title}} 4 | 5 | | Team | Date | 6 | |------|-----------| 7 | | XXX | {{.Date}} | 8 | 9 | ## Session's TCR metrics 10 | 11 | - Average passed commit size: {{.GreenAvg}} 12 | - Average failed commit size: {{.RedAvg}} 13 | 14 | ## DO 15 | 16 | _`What did we do?`_ 17 | 18 | - 19 | - 20 | 21 | ## LEARN 22 | 23 | _`What did we learn?`_ 24 | 25 | - 26 | - 27 | 28 | ## PUZZLE 29 | 30 | _`What still puzzles us?`_ 31 | 32 | - 33 | - 34 | 35 | ## DECIDE 36 | 37 | _`How can we apply this in the future?`_ 38 | 39 | - 40 | - 41 | -------------------------------------------------------------------------------- /src/runmode/runmode_test.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2022 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | package runmode 24 | 25 | import ( 26 | "github.com/stretchr/testify/assert" 27 | "testing" 28 | ) 29 | 30 | func Test_interactive_run_mode_list_should_only_contain_interactive_ones(t *testing.T) { 31 | for _, name := range InteractiveModes() { 32 | assert.True(t, Map()[name].IsInteractive()) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/settings/defaults.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2021 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | package settings 24 | 25 | // Default values 26 | 27 | const ( 28 | // ApplicationName is the name of the application 29 | ApplicationName = "TCR" 30 | // ApplicationShortDescription is a short description the application 31 | ApplicationShortDescription = "TCR (Test && Commit || Revert)" 32 | ) 33 | -------------------------------------------------------------------------------- /src/settings/features.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2021 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | package settings 24 | 25 | // Feature toggles allowing to quickly turn on/off a feature 26 | 27 | var ( 28 | // EnableMobTimer Turns on/off mob countdown timer 29 | EnableMobTimer = true 30 | ) 31 | -------------------------------------------------------------------------------- /src/tcr-local: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Copyright (c) 2022 Murex 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in all 13 | # copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | # SOFTWARE. 22 | 23 | repo_root_dir="$(git rev-parse --show-toplevel)" 24 | 25 | . "${repo_root_dir}/tools/tcr/tcr-local.sh" 26 | -------------------------------------------------------------------------------- /src/tcr-local-p4: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Copyright (c) 2023 Murex 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in all 13 | # copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | # SOFTWARE. 22 | 23 | repo_root_dir="$(git rev-parse --show-toplevel)" 24 | 25 | . "${repo_root_dir}/tools/tcr/tcr-local-p4.sh" 26 | -------------------------------------------------------------------------------- /src/tcrw: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Copyright (c) 2022 Murex 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in all 13 | # copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | # SOFTWARE. 22 | 23 | repo_root_dir="$(git rev-parse --show-toplevel)" 24 | 25 | . "${repo_root_dir}/tools/tcr/tcr.sh" -------------------------------------------------------------------------------- /src/testdata/java/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one 2 | # or more contributor license agreements. See the NOTICE file 3 | # distributed with this work for additional information 4 | # regarding copyright ownership. The ASF licenses this file 5 | # to you under the Apache License, Version 2.0 (the 6 | # "License"); you may not use this file except in compliance 7 | # with the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, 12 | # software distributed under the License is distributed on an 13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 14 | # KIND, either express or implied. See the License for the 15 | # specific language governing permissions and limitations 16 | # under the License. 17 | wrapperVersion=3.3.2 18 | distributionType=only-script 19 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip 20 | -------------------------------------------------------------------------------- /src/testdata/java/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: true 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: java 9 | toolchain: gradle-wrapper 10 | -------------------------------------------------------------------------------- /src/testdata/java/.tcr/language/java.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: gradle-wrapper 3 | compatible-with: [gradle, gradle-wrapper, maven, maven-wrapper] 4 | source-files: 5 | directories: [src/main] 6 | patterns: ['(?i)^.*\.java$'] 7 | test-files: 8 | directories: [src/test] 9 | patterns: ['(?i)^.*\.java$'] 10 | -------------------------------------------------------------------------------- /src/testdata/java/.tcr/toolchain/gradle-wrapper.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: ./gradlew 5 | arguments: [ build, testClasses, -x, test ] 6 | - os: [ windows ] 7 | arch: [ "386", amd64, arm64 ] 8 | command: .\gradlew.bat 9 | arguments: [ build, testClasses, -x, test ] 10 | test: 11 | - os: [ darwin, linux ] 12 | arch: [ "386", amd64, arm64 ] 13 | command: ./gradlew 14 | arguments: [ test ] 15 | - os: [ windows ] 16 | arch: [ "386", amd64, arm64 ] 17 | command: .\gradlew.bat 18 | arguments: [ test ] 19 | test-result-dir: build/test-results/test 20 | -------------------------------------------------------------------------------- /src/testdata/java/.tcr/toolchain/gradle.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: gradle 5 | arguments: [ build, testClasses, -x, test ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: gradle 10 | arguments: [ test ] 11 | test-result-dir: build/test-results/test 12 | -------------------------------------------------------------------------------- /src/testdata/java/.tcr/toolchain/maven-wrapper.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: ./mvnw 5 | arguments: [ test-compile ] 6 | - os: [ windows ] 7 | arch: [ "386", amd64, arm64 ] 8 | command: .\mvnw.cmd 9 | arguments: [ test-compile ] 10 | test: 11 | - os: [ darwin, linux ] 12 | arch: [ "386", amd64, arm64 ] 13 | command: ./mvnw 14 | arguments: [ test ] 15 | - os: [ windows ] 16 | arch: [ "386", amd64, arm64 ] 17 | command: .\mvnw.cmd 18 | arguments: [ test ] 19 | test-result-dir: target/surefire-reports 20 | -------------------------------------------------------------------------------- /src/testdata/java/.tcr/toolchain/maven.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: mvn 5 | arguments: [ test-compile ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: mvn 10 | arguments: [ test ] 11 | test-result-dir: target/surefire-reports 12 | -------------------------------------------------------------------------------- /src/testdata/java/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java' 3 | id 'java-library' 4 | id 'com.adarshr.test-logger' version '4.0.0' 5 | } 6 | 7 | java { 8 | toolchain { 9 | languageVersion = JavaLanguageVersion.of(17) 10 | } 11 | } 12 | 13 | repositories { 14 | mavenCentral() 15 | } 16 | 17 | dependencies { 18 | testImplementation("org.junit.jupiter:junit-jupiter:5.13.0") 19 | testRuntimeOnly("org.junit.platform:junit-platform-launcher") 20 | } 21 | 22 | test { 23 | useJUnitPlatform() 24 | testLogging { 25 | events "passed", "skipped", "failed" 26 | } 27 | } 28 | 29 | tasks.withType(JavaCompile).configureEach { 30 | options.encoding = 'UTF-8' 31 | } 32 | 33 | testlogger { 34 | theme = 'standard' 35 | showExceptions = true 36 | showStackTraces = true 37 | showFullStackTraces = false 38 | showCauses = true 39 | slowThreshold = 5000 40 | showSummary = true 41 | showSimpleNames = false 42 | showPassed = true 43 | showSkipped = true 44 | showFailed = true 45 | showStandardStreams = false 46 | showPassedStandardStreams = true 47 | showSkippedStandardStreams = true 48 | showFailedStandardStreams = true 49 | logLevel = 'lifecycle' 50 | } 51 | -------------------------------------------------------------------------------- /src/testdata/java/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murex/TCR/b4a8708da217fdfc9be7ec2514a4a31df9097e54/src/testdata/java/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /src/testdata/java/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /src/testdata/java/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Dummy' 2 | -------------------------------------------------------------------------------- /src/testdata/java/src/main/java/Dummy.java: -------------------------------------------------------------------------------- 1 | class Dummy { 2 | static int doSomething() { 3 | return 42; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/testdata/java/src/test/java/DummyTest.java: -------------------------------------------------------------------------------- 1 | import static org.junit.jupiter.api.Assertions.assertEquals; 2 | import org.junit.jupiter.api.Test; 3 | 4 | public class DummyTest { 5 | @Test 6 | public void acceptance_test() { 7 | assertEquals(42, Dummy.doSomething()); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/toolchain/built-in/bazel.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: bazel 5 | arguments: [ build, '...' ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: bazel 10 | arguments: [ test, '...' ] 11 | test-result-dir: bazel-testlogs 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/cargo.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: cargo 5 | arguments: [ test, --test, lib_test, --no-run ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: cargo 10 | arguments: [ test, --test, lib_test ] 11 | test-result-dir: target 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/cmake.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: cmake 5 | arguments: [ --build, build, --config, Debug ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: ctest 10 | arguments: [ --output-on-failure, --test-dir, build, --build-config, Debug ] 11 | test-result-dir: build 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/dotnet.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: dotnet 5 | arguments: [ build ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: dotnet 10 | arguments: [ test, --no-build, --logger=junit ] 11 | test-result-dir: tests 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/go-tools.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: go 5 | arguments: [ test, -count=0, ./... ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: go 10 | arguments: [ test, -short, ./... ] 11 | test-result-dir: . 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/gotestsum.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: go 5 | arguments: [ test, -count=0, ./... ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: gotestsum 10 | arguments: [ --format, pkgname, --junitfile, _test_results/output.xml, --, -short, ./... ] 11 | test-result-dir: _test_results 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/gradle-wrapper.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: ./gradlew 5 | arguments: [ build, testClasses, -x, test ] 6 | - os: [ windows ] 7 | arch: [ "386", amd64, arm64 ] 8 | command: .\gradlew.bat 9 | arguments: [ build, testClasses, -x, test ] 10 | test: 11 | - os: [ darwin, linux ] 12 | arch: [ "386", amd64, arm64 ] 13 | command: ./gradlew 14 | arguments: [ test ] 15 | - os: [ windows ] 16 | arch: [ "386", amd64, arm64 ] 17 | command: .\gradlew.bat 18 | arguments: [ test ] 19 | test-result-dir: build/test-results/test 20 | -------------------------------------------------------------------------------- /src/toolchain/built-in/gradle.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: gradle 5 | arguments: [ build, testClasses, -x, test ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: gradle 10 | arguments: [ test ] 11 | test-result-dir: build/test-results/test 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/make.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: make 5 | arguments: [ build ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: make 10 | arguments: [ test ] 11 | test-result-dir: . 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/maven-wrapper.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: ./mvnw 5 | arguments: [ test-compile ] 6 | - os: [ windows ] 7 | arch: [ "386", amd64, arm64 ] 8 | command: .\mvnw.cmd 9 | arguments: [ test-compile ] 10 | test: 11 | - os: [ darwin, linux ] 12 | arch: [ "386", amd64, arm64 ] 13 | command: ./mvnw 14 | arguments: [ test ] 15 | - os: [ windows ] 16 | arch: [ "386", amd64, arm64 ] 17 | command: .\mvnw.cmd 18 | arguments: [ test ] 19 | test-result-dir: target/surefire-reports 20 | -------------------------------------------------------------------------------- /src/toolchain/built-in/maven.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: mvn 5 | arguments: [ test-compile ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: mvn 10 | arguments: [ test ] 11 | test-result-dir: target/surefire-reports 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/mix.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: mix 5 | arguments: [ do, deps.get, +, test, --color, --exclude, test ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: mix 10 | arguments: [ test, --color ] 11 | test-result-dir: _build/test/lib 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/nextest.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: cargo 5 | arguments: [ test, --test, lib_test, --no-run ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: cargo 10 | arguments: [ nextest, run, --test, lib_test ] 11 | test-result-dir: target/nextest 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/phpunit.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: ./vendor/bin/parallel-lint 5 | arguments: [ --exclude, vendor, . ] 6 | - os: [ windows ] 7 | arch: [ "386", amd64, arm64 ] 8 | command: .\vendor\bin\parallel-lint.bat 9 | arguments: [ --exclude, vendor, . ] 10 | test: 11 | - os: [ darwin, linux ] 12 | arch: [ "386", amd64, arm64 ] 13 | command: ./vendor/bin/phpunit 14 | arguments: [ tests, --log-junit, .phpunit.cache/test-results.xml ] 15 | - os: [ windows ] 16 | arch: [ "386", amd64, arm64 ] 17 | command: .\vendor\bin\phpunit.bat 18 | arguments: [ tests, --log-junit, .phpunit.cache/test-results.xml ] 19 | test-result-dir: .phpunit.cache 20 | -------------------------------------------------------------------------------- /src/toolchain/built-in/pytest.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: pytest 5 | arguments: [ --collect-only ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: pytest 10 | arguments: [ ] 11 | test-result-dir: pytest 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/sbt.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: sbt 5 | arguments: [ compile ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: sbt 10 | arguments: [ test ] 11 | test-result-dir: target/test-reports 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/stack.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: stack 5 | arguments: [ build ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: stack 10 | arguments: [ test, --color, always, --test-arguments=--format=progress ] 11 | test-result-dir: .stack-work/report 12 | -------------------------------------------------------------------------------- /src/toolchain/built-in/yarn.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [darwin, linux, windows] 3 | arch: ["386", amd64, arm64] 4 | command: yarn 5 | arguments: [jest, --testNamePattern=DO-NOT-RUN-ANYTHING, --silent] 6 | test: 7 | - os: [darwin, linux, windows] 8 | arch: ["386", amd64, arm64] 9 | command: yarn 10 | arguments: [jest] 11 | test-result-dir: test_results -------------------------------------------------------------------------------- /src/toolchain/built_in_test_data/gradle_unix.go: -------------------------------------------------------------------------------- 1 | //go:build !windows && test_helper 2 | 3 | /* 4 | Copyright (c) 2023 Murex 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | */ 24 | 25 | package built_in_test_data //nolint:revive 26 | 27 | const gradleWrapperCommandPath = "./gradlew" 28 | -------------------------------------------------------------------------------- /src/toolchain/built_in_test_data/gradle_windows.go: -------------------------------------------------------------------------------- 1 | //go:build test_helper 2 | 3 | /* 4 | Copyright (c) 2023 Murex 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | */ 24 | 25 | package built_in_test_data //nolint:revive 26 | 27 | const gradleWrapperCommandPath = ".\\gradlew.bat" 28 | -------------------------------------------------------------------------------- /src/toolchain/built_in_test_data/maven_unix.go: -------------------------------------------------------------------------------- 1 | //go:build !windows && test_helper 2 | 3 | /* 4 | Copyright (c) 2023 Murex 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | */ 24 | 25 | package built_in_test_data //nolint:revive 26 | 27 | const mavenWrapperCommandPath = "./mvnw" 28 | -------------------------------------------------------------------------------- /src/toolchain/built_in_test_data/maven_windows.go: -------------------------------------------------------------------------------- 1 | //go:build test_helper 2 | 3 | /* 4 | Copyright (c) 2023 Murex 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | */ 24 | 25 | package built_in_test_data //nolint:revive 26 | 27 | const mavenWrapperCommandPath = ".\\mvnw.cmd" 28 | -------------------------------------------------------------------------------- /src/toolchain/built_in_test_data/phpunit_unix.go: -------------------------------------------------------------------------------- 1 | //go:build !windows && test_helper 2 | 3 | /* 4 | Copyright (c) 2023 Murex 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | */ 24 | 25 | package built_in_test_data //nolint:revive 26 | 27 | const phpunitBuildCommandPath = "./vendor/bin/parallel-lint" 28 | const phpunitTestCommandPath = "./vendor/bin/phpunit" 29 | -------------------------------------------------------------------------------- /src/toolchain/built_in_test_data/phpunit_windows.go: -------------------------------------------------------------------------------- 1 | //go:build test_helper 2 | 3 | /* 4 | Copyright (c) 2023 Murex 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | */ 24 | 25 | package built_in_test_data //nolint:revive 26 | 27 | const phpunitBuildCommandPath = ".\\vendor\\bin\\parallel-lint.bat" 28 | const phpunitTestCommandPath = ".\\vendor\\bin\\phpunit.bat" 29 | -------------------------------------------------------------------------------- /src/toolchain/filesystem.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2023 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | package toolchain 24 | 25 | import "github.com/spf13/afero" 26 | 27 | // appFS is the singleton referring to the filesystem being used 28 | var appFS afero.Fs 29 | 30 | func init() { 31 | appFS = afero.NewOsFs() 32 | } 33 | -------------------------------------------------------------------------------- /src/vcs/shell/shell.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2023 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | package shell 24 | 25 | // Attributes contain shell-specific attributes allowing to tune behavior 26 | // when interacting with a shell command 27 | type Attributes struct { 28 | EOL string 29 | } 30 | 31 | // GetAttributes Returns shell-specific attributes 32 | func GetAttributes() Attributes { 33 | return osShellAttributes() 34 | } 35 | -------------------------------------------------------------------------------- /src/vcs/shell/shell_unix.go: -------------------------------------------------------------------------------- 1 | //go:build !windows 2 | 3 | /* 4 | Copyright (c) 2023 Murex 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | */ 24 | 25 | package shell 26 | 27 | // osShellAttributes returns shell attributes associated to the underlying operating system 28 | func osShellAttributes() Attributes { 29 | return Attributes{ 30 | EOL: "\n", 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/vcs/shell/shell_unix_test.go: -------------------------------------------------------------------------------- 1 | //go:build !windows 2 | 3 | /* 4 | Copyright (c) 2023 Murex 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | */ 24 | 25 | package shell 26 | 27 | import ( 28 | "github.com/stretchr/testify/assert" 29 | "testing" 30 | ) 31 | 32 | func Test_unix_shell_end_of_line(t *testing.T) { 33 | assert.Equal(t, "\n", GetAttributes().EOL) 34 | } 35 | -------------------------------------------------------------------------------- /src/vcs/shell/shell_windows.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2023 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | package shell 24 | 25 | // osShellAttributes returns shell attributes associated to the underlying operating system 26 | func osShellAttributes() Attributes { 27 | return Attributes{ 28 | EOL: "\r\n", 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/vcs/shell/shell_windows_test.go: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2023 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | package shell 24 | 25 | import ( 26 | "github.com/stretchr/testify/assert" 27 | "testing" 28 | ) 29 | 30 | func Test_windows_shell_end_of_line(t *testing.T) { 31 | assert.Equal(t, "\r\n", GetAttributes().EOL) 32 | } 33 | -------------------------------------------------------------------------------- /tcr-doc/LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | Copyright (c) 2022 Murex 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /tcr-doc/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: default 2 | default: doc ; 3 | 4 | .PHONY: deps 5 | deps: 6 | @go get -u -t tool ./... 7 | 8 | .PHONY: lint 9 | lint: 10 | @golangci-lint run --build-tags=test_helper -v 11 | 12 | .PHONY: modernize 13 | modernize: 14 | @go run -tags test_helper golang.org/x/tools/gopls/internal/analysis/modernize/cmd/modernize@latest -test -fix ./... 15 | 16 | .PHONY: vet 17 | vet: 18 | @go vet --tags=test_helper ./... 19 | 20 | .PHONY: doc 21 | doc: tidy 22 | @echo "Generating cobra documentation" 23 | @go run . 24 | 25 | .PHONY: tidy 26 | tidy: 27 | @go mod tidy 28 | -------------------------------------------------------------------------------- /tools/.tcr/config.yml: -------------------------------------------------------------------------------- 1 | config: 2 | git: 3 | auto-push: true 4 | polling-period: 2s 5 | mob-timer: 6 | duration: 5m0s 7 | tcr: 8 | language: go 9 | toolchain: gotestsum 10 | -------------------------------------------------------------------------------- /tools/.tcr/language/go.yml: -------------------------------------------------------------------------------- 1 | toolchains: 2 | default: gotestsum 3 | compatible-with: [ go-tools, gotestsum ] 4 | source-files: 5 | directories: [ . ] 6 | patterns: [ '(?i)^.*\.go$' ] 7 | test-files: 8 | directories: [ . ] 9 | patterns: [ '(?i)^.*_test\.go$' ] 10 | -------------------------------------------------------------------------------- /tools/.tcr/toolchain/go-tools.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: go 5 | arguments: [ test, "-count=0", "-tags=test_helper", ./... ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: go 10 | arguments: [ test, "-short", "-tags=test_helper", ./... ] 11 | test-result-dir: . -------------------------------------------------------------------------------- /tools/.tcr/toolchain/gotestsum.yml: -------------------------------------------------------------------------------- 1 | build: 2 | - os: [ darwin, linux, windows ] 3 | arch: [ "386", amd64, arm64 ] 4 | command: go 5 | arguments: [ test, "-count=0", "-tags=test_helper", ./... ] 6 | test: 7 | - os: [ darwin, linux, windows ] 8 | arch: [ "386", amd64, arm64 ] 9 | command: gotestsum 10 | arguments: [ "--format", "pkgname", "--junitfile", "_test_results/output.xml", "--hide-summary=skipped", "--", "-short", "-tags=test_helper", ./... ] 11 | test-result-dir: _test_results 12 | -------------------------------------------------------------------------------- /tools/scripts/release.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Copyright (c) 2021 Murex 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in all 13 | # copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | # SOFTWARE. 22 | 23 | set -eu 24 | 25 | base_dir="$(cd "$(dirname -- "$0")" && pwd)/.." 26 | 27 | cd "${base_dir}" 28 | 29 | if ! type goreleaser >/dev/null 2>/dev/null; then 30 | echo "goreleaser command is required to run this script" 31 | echo "Refer to https://goreleaser.com/ for installation and setup" 32 | exit 1 33 | fi 34 | 35 | goreleaser release --rm-dist 36 | -------------------------------------------------------------------------------- /tools/tcr/.gitignore: -------------------------------------------------------------------------------- 1 | # Below files and directories are automatically created 2 | # by tcr.sh and do not need to be committed to this repository 3 | 4 | bin/** 5 | doc/** 6 | download/** 7 | LICENSE.md 8 | README.md 9 | -------------------------------------------------------------------------------- /tools/tcr/version.txt: -------------------------------------------------------------------------------- 1 | tcr 1.4.2 2 | -------------------------------------------------------------------------------- /variants-doc/mmd/generate_png.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | echo "Installing mermaid-cli" 4 | npm update -g @mermaid-js/mermaid-cli || echo "Failed to install mermaid-cli. Aborting" 5 | 6 | repo_root_dir="$(git rev-parse --show-toplevel)" 7 | webapp_images_dir="${repo_root_dir}/webapp/src/assets/images" 8 | 9 | echo "Generating files into ${webapp_images_dir}" 10 | for mmd_file in ./*.mmd; do 11 | png_file="${mmd_file%.mmd}.png" 12 | echo "- Generating ${png_file} from ${mmd_file}" 13 | mmdc --input "${mmd_file}" --output "${webapp_images_dir}/${png_file}" --theme dark --backgroundColor transparent 14 | done 15 | -------------------------------------------------------------------------------- /variants-doc/mmd/variant-btcr.mmd: -------------------------------------------------------------------------------- 1 | stateDiagram-v2 2 | direction LR 3 | state "⚙️ build" as Build 4 | state "⚙️ test" as Test 5 | state "✅ VCS commit (src + tests)" as Commit 6 | state "❌ VCS revert (src + tests)" as Revert 7 | [*] --> Build 8 | Build --> Test: pass 9 | Build --> [*]: fail 10 | Test --> Commit: pass 11 | Test --> Revert: fail 12 | Commit --> [*] 13 | Revert --> [*] 14 | classDef actionClass fill: #0077CC 15 | classDef okClass fill: #006600 16 | classDef failClass fill: #660000 17 | class Build actionClass 18 | class Test actionClass 19 | class Commit okClass 20 | class Revert failClass 21 | -------------------------------------------------------------------------------- /variants-doc/mmd/variant-introspective.mmd: -------------------------------------------------------------------------------- 1 | stateDiagram-v2 2 | direction LR 3 | state "⚙️ build" as Build 4 | state "⚙️ test" as Test 5 | state "✅ VCS commit (src + tests)" as CommitPass 6 | state "❌ VCS commit (src + tests)" as CommitFail 7 | state "⏪ VCS revert (last commit)" as CommitRevert 8 | 9 | [*] --> Build 10 | Build --> Test: pass 11 | Build --> [*]: fail 12 | Test --> CommitPass: pass 13 | Test --> CommitFail: fail 14 | CommitPass --> [*] 15 | CommitFail --> CommitRevert 16 | CommitRevert --> [*] 17 | classDef actionClass fill: #0077CC 18 | classDef okClass fill: #006600 19 | classDef failClass fill: #660000 20 | class Build actionClass 21 | class Test actionClass 22 | class CommitPass okClass 23 | class CommitFail failClass 24 | class CommitRevert actionClass 25 | -------------------------------------------------------------------------------- /variants-doc/mmd/variant-original.mmd: -------------------------------------------------------------------------------- 1 | stateDiagram-v2 2 | direction LR 3 | state "⚙️ test" as Test 4 | state "✅ VCS commit (src + tests)" as Commit 5 | state "❌ VCS revert (src + tests)" as Revert 6 | [*] --> Test 7 | Test --> Commit: pass 8 | Test --> Revert: fail 9 | Commit --> [*] 10 | Revert --> [*] 11 | classDef actionClass fill: #0077CC 12 | classDef okClass fill: #006600 13 | classDef failClass fill: #660000 14 | class Test actionClass 15 | class Commit okClass 16 | class Revert failClass 17 | -------------------------------------------------------------------------------- /variants-doc/mmd/variant-relaxed.mmd: -------------------------------------------------------------------------------- 1 | stateDiagram-v2 2 | direction LR 3 | state "⚙️ build" as Build 4 | state "⚙️ test" as Test 5 | state "✅ VCS commit (src + tests)" as Commit 6 | state "❌ VCS revert (src)" as Revert 7 | [*] --> Build 8 | Build --> Test: pass 9 | Build --> [*]: fail 10 | Test --> Commit: pass 11 | Test --> Revert: fail 12 | Commit --> [*] 13 | Revert --> [*] 14 | classDef actionClass fill: #0077CC 15 | classDef okClass fill: #006600 16 | classDef failClass fill: #660000 17 | class Build actionClass 18 | class Test actionClass 19 | class Commit okClass 20 | class Revert failClass 21 | -------------------------------------------------------------------------------- /webapp/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | max_line_length = 80 13 | 14 | [*.js] 15 | max_line_length = 80 16 | 17 | [*.json] 18 | max_line_length = off 19 | 20 | [*.yml] 21 | max_line_length = off 22 | 23 | [*.yaml] 24 | max_line_length = off 25 | 26 | [*.md] 27 | max_line_length = off 28 | 29 | [*.html] 30 | max_line_length = off 31 | 32 | [*.css] 33 | max_line_length = off 34 | 35 | [*.scss] 36 | max_line_length = off 37 | 38 | [*.less] 39 | max_line_length = off 40 | 41 | [*.xml] 42 | max_line_length = off 43 | 44 | [*.svg] 45 | max_line_length = off 46 | 47 | [*.toml] 48 | max_line_length = off 49 | 50 | 51 | -------------------------------------------------------------------------------- /webapp/.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # Compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | /bazel-out 8 | 9 | # Node 10 | /node_modules 11 | npm-debug.log 12 | yarn-error.log 13 | 14 | # IDEs and editors 15 | .idea/ 16 | .project 17 | .classpath 18 | .c9/ 19 | *.launch 20 | .settings/ 21 | *.sublime-workspace 22 | 23 | # Visual Studio Code 24 | .vscode/* 25 | !.vscode/settings.json 26 | !.vscode/tasks.json 27 | !.vscode/launch.json 28 | !.vscode/extensions.json 29 | .history/* 30 | 31 | # Miscellaneous 32 | /.angular/cache 33 | .sass-cache/ 34 | .nx/ 35 | /connect.lock 36 | /coverage 37 | /libpeerconnection.log 38 | testem.log 39 | /typings 40 | 41 | # System files 42 | .DS_Store 43 | Thumbs.db 44 | -------------------------------------------------------------------------------- /webapp/Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: default 2 | default: build ; 3 | 4 | .PHONY: setup 5 | setup: 6 | @npm install 7 | 8 | .PHONY: deps 9 | deps: 10 | @npm update 11 | 12 | .PHONY: lint 13 | lint: 14 | @npm run lint 15 | 16 | .PHONY: test 17 | test: 18 | @npm test 19 | 20 | .PHONY: cov 21 | cov: 22 | @npm run coverage 23 | 24 | .PHONY: tidy 25 | tidy: 26 | @npm install 27 | 28 | .PHONY: build 29 | build: setup 30 | @npm run build-prod 31 | 32 | .PHONY: run 33 | run: 34 | @npm start 35 | 36 | .PHONY: clean 37 | clean: 38 | @npm run clean 39 | -------------------------------------------------------------------------------- /webapp/spec/support/jasmine.json: -------------------------------------------------------------------------------- 1 | { 2 | "spec_dir": "spec", 3 | "spec_files": [ 4 | "**/*[sS]pec.?(m)js" 5 | ], 6 | "helpers": [ 7 | "helpers/**/*.?(m)js" 8 | ], 9 | "env": { 10 | "stopSpecOnExpectationFailure": false, 11 | "random": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /webapp/src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /webapp/src/app/app.config.ts: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2024 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | import {ApplicationConfig} from '@angular/core'; 24 | import {provideRouter} from '@angular/router'; 25 | 26 | import {routes} from './app.routes'; 27 | import {provideHttpClient} from "@angular/common/http"; 28 | 29 | export const appConfig: ApplicationConfig = { 30 | providers: [ 31 | provideRouter(routes), 32 | provideHttpClient(), 33 | ] 34 | }; 35 | -------------------------------------------------------------------------------- /webapp/src/app/components/footer/footer.component.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2024 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | -------------------------------------------------------------------------------- /webapp/src/app/components/footer/footer.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 7 | 8 |
9 | 10 | -------------------------------------------------------------------------------- /webapp/src/app/components/header/header.component.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2024 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | -------------------------------------------------------------------------------- /webapp/src/app/components/header/header.component.html: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /webapp/src/app/components/tcr-console/tcr-console.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

{{ title }}

5 |
6 |
7 |
8 |
9 |
10 | 11 |
12 | 13 |
14 | 15 |
16 |
17 |
18 |
19 |
20 |
21 | -------------------------------------------------------------------------------- /webapp/src/app/components/tcr-controls/tcr-controls.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |

{{ abortCommandDescription }}

7 |
8 |
9 |
10 |
11 |
12 | -------------------------------------------------------------------------------- /webapp/src/app/components/tcr-role/tcr-role.component.html: -------------------------------------------------------------------------------- 1 |
8 |
9 | 10 | 11 |
12 |
13 |

{{ role.description }}

14 |
15 |
16 | -------------------------------------------------------------------------------- /webapp/src/app/components/tcr-roles/tcr-roles.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 8 |
9 |
10 |
11 | -------------------------------------------------------------------------------- /webapp/src/app/components/tcr-timer/tcr-timer.component.html: -------------------------------------------------------------------------------- 1 |
6 | 7 | 8 |

{{ remaining | formatTimer }}

9 |
10 | -------------------------------------------------------------------------------- /webapp/src/app/components/tcr-trace/tcr-trace.component.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2024 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | -------------------------------------------------------------------------------- /webapp/src/app/components/tcr-trace/tcr-trace.component.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /webapp/src/app/interfaces/tcr-build-info.ts: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2024 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | export interface TcrBuildInfo { 24 | version: string; 25 | os: string; 26 | arch: string; 27 | commit: string; 28 | date: string; 29 | author: string; 30 | } 31 | -------------------------------------------------------------------------------- /webapp/src/app/interfaces/tcr-role.ts: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2024 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | export interface TcrRole { 24 | name: string; 25 | description: string; 26 | active: boolean; 27 | } 28 | -------------------------------------------------------------------------------- /webapp/src/app/interfaces/tcr-timer.ts: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2024 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | export enum TcrTimerState { 24 | OFF = 'off', 25 | PENDING = 'pending', 26 | RUNNING = 'running', 27 | STOPPED = 'stopped', 28 | TIMEOUT = 'timeout', 29 | } 30 | 31 | export interface TcrTimer { 32 | state: string; 33 | timeout: string; 34 | elapsed: string; 35 | remaining: string; 36 | } 37 | -------------------------------------------------------------------------------- /webapp/src/app/pipes/on-off.pipe.ts: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2024 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | import {Pipe, PipeTransform} from '@angular/core'; 24 | 25 | @Pipe({ 26 | name: 'onOff', 27 | standalone: true 28 | }) 29 | export class OnOffPipe implements PipeTransform { 30 | 31 | transform(value: boolean | string | null | undefined, ..._args: unknown[]): string { 32 | return value ? "✅" : "❌"; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /webapp/src/app/pipes/show-empty.pipe.ts: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2024 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | import {Pipe, PipeTransform} from '@angular/core'; 24 | 25 | const NOT_SET: string = "[not set]"; 26 | 27 | @Pipe({ 28 | name: 'showEmpty', 29 | standalone: true 30 | }) 31 | export class ShowEmptyPipe implements PipeTransform { 32 | transform(value: string | null | undefined, ..._args: unknown[]): string { 33 | return value || NOT_SET; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /webapp/src/assets/images/variant-btcr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murex/TCR/b4a8708da217fdfc9be7ec2514a4a31df9097e54/webapp/src/assets/images/variant-btcr.png -------------------------------------------------------------------------------- /webapp/src/assets/images/variant-introspective.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murex/TCR/b4a8708da217fdfc9be7ec2514a4a31df9097e54/webapp/src/assets/images/variant-introspective.png -------------------------------------------------------------------------------- /webapp/src/assets/images/variant-original.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murex/TCR/b4a8708da217fdfc9be7ec2514a4a31df9097e54/webapp/src/assets/images/variant-original.png -------------------------------------------------------------------------------- /webapp/src/assets/images/variant-relaxed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murex/TCR/b4a8708da217fdfc9be7ec2514a4a31df9097e54/webapp/src/assets/images/variant-relaxed.png -------------------------------------------------------------------------------- /webapp/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murex/TCR/b4a8708da217fdfc9be7ec2514a4a31df9097e54/webapp/src/favicon.ico -------------------------------------------------------------------------------- /webapp/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | TCR 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /webapp/src/main.ts: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2024 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | /// 24 | 25 | import {bootstrapApplication} from '@angular/platform-browser'; 26 | import {appConfig} from './app/app.config'; 27 | import {AppComponent} from './app/app.component'; 28 | 29 | bootstrapApplication(AppComponent, appConfig) 30 | .catch((err) => console.error(err)); 31 | -------------------------------------------------------------------------------- /webapp/src/proxy.conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "/api": { 3 | "target": "http://127.0.0.1:8483", 4 | "secure": false 5 | }, 6 | "/ws": { 7 | "target": "ws://127.0.0.1:8483", 8 | "secure": false 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /webapp/src/styles.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2024 Murex 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all 12 | copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | SOFTWARE. 21 | */ 22 | 23 | @import "../node_modules/bootstrap/dist/css/bootstrap.min.css"; 24 | @import "../node_modules/font-awesome/css/font-awesome.css"; 25 | -------------------------------------------------------------------------------- /webapp/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": [ 7 | "@angular/localize" 8 | ] 9 | }, 10 | "files": [ 11 | "src/main.ts" 12 | ], 13 | "include": [ 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /webapp/tsconfig.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "compileOnSave": false, 4 | "compilerOptions": { 5 | "outDir": "./dist/out-tsc", 6 | "forceConsistentCasingInFileNames": true, 7 | "strict": true, 8 | "noImplicitOverride": true, 9 | "noPropertyAccessFromIndexSignature": true, 10 | "noImplicitReturns": true, 11 | "noFallthroughCasesInSwitch": true, 12 | "skipLibCheck": true, 13 | "esModuleInterop": true, 14 | "sourceMap": true, 15 | "declaration": false, 16 | "experimentalDecorators": true, 17 | "moduleResolution": "node", 18 | "importHelpers": true, 19 | "target": "ES2022", 20 | "module": "ES2022", 21 | "useDefineForClassFields": false, 22 | "lib": [ 23 | "ES2022", 24 | "dom" 25 | ] 26 | }, 27 | "angularCompilerOptions": { 28 | "enableI18nLegacyMessageIdFormat": false, 29 | "strictInjectionParameters": true, 30 | "strictInputAccessModifiers": true, 31 | "strictTemplates": true 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /webapp/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/spec", 6 | "types": [ 7 | "jasmine", 8 | "@angular/localize" 9 | ] 10 | }, 11 | "include": [ 12 | "src/**/*.spec.ts", 13 | "src/**/*.d.ts" 14 | ] 15 | } 16 | --------------------------------------------------------------------------------