{"id":28578737,"url":"https://github.com/nanzhong/tstr","last_synced_at":"2025-06-11T01:11:00.250Z","repository":{"id":50407239,"uuid":"483397509","full_name":"nanzhong/tstr","owner":"nanzhong","description":"Test orchestration and analysis platform","archived":false,"fork":false,"pushed_at":"2024-02-14T15:08:44.000Z","size":10612,"stargazers_count":9,"open_issues_count":16,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-06-20T00:33:46.042Z","etag":null,"topics":["hacktoberfest","testing","testing-tools"],"latest_commit_sha":null,"homepage":"https://tstr.dev","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nanzhong.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-19T20:21:05.000Z","updated_at":"2023-09-07T03:22:36.000Z","dependencies_parsed_at":"2024-01-10T15:45:25.737Z","dependency_job_id":null,"html_url":"https://github.com/nanzhong/tstr","commit_stats":{"total_commits":403,"total_committers":6,"mean_commits":67.16666666666667,"dds":0.3870967741935484,"last_synced_commit":"08224f2a9faad2ee70b7020304d8716685ffab9e"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanzhong%2Ftstr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanzhong%2Ftstr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanzhong%2Ftstr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanzhong%2Ftstr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nanzhong","download_url":"https://codeload.github.com/nanzhong/tstr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nanzhong%2Ftstr/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259178542,"owners_count":22817389,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest","testing","testing-tools"],"created_at":"2025-06-11T01:10:59.795Z","updated_at":"2025-06-11T01:11:00.243Z","avatar_url":"https://github.com/nanzhong.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tstr\n\n:construction: **NOTE** tstr is still a work in progerss. The initial minimal set of core functionality is complete, but there are still a significant number additional features being actively worked on. Before of the first release, backwards compatibility will only be a best effort attempt and is not a guaranatee. :construction:\n\n\u003chr\u003e\n\ntstr is a test orchestration, visualization, and analysis platform.\n\ntstr is not a testing framework, and it does not impose any patterns on how tests are written. Instead, tests are treated as black block workloads packaged up in containers that can be registered with tstr. tstr handles the scheduling, running, and collecting of results and logs allowing them to be retrieved, visualized, and analyzed from a central location.\n\n![9D114254-B2D1-41CB-9D2F-C6336BB6D6A8](https://user-images.githubusercontent.com/224216/183086353-3262a65f-9c01-43f2-82ff-a77522cde690.jpeg)\n\nThere is a live demo instance of the tstr that tracks the main branch of this repository:\n- Web UI https://demo.tstr.dev (read only)\n- gRPC API grpc.demo.tstr.dev:443 (restricted access)\n- json API https://json.demo.tstr.dev (restricted access)\n\n## Features\n\n- Test language/framework agnostic. If you can package up the test workload as a container, tstr can orchestrate it.\n- Declarative API driven test configuration.\n- Test scheduling via cron style syntax.\n- Dynamic test runner registration and test run placement.\n- Test matrix scheduling via labels.\n- Web UI for visualization.\n- gRPC and json APIs for integration/extension (the web UI is built this way).\n  - Token based api authentication and scope based authorization.\n\n## How It Works\n\n### Concepts\n\n#### Test\n\nTests are the fundamental building block that are represented as the combination of:\n1. a black box containerized workload that returns a 0 exit code on success\n2. configuration that describes how to run the workload\n\nThe user is responsible for writing, building and publishing **1**, while tstr is responsible for following **2**.\n\nThe configuration consist of:\n- The description of the containerized test workload (container image, cmd, args, environment variables, timeout, etc.)\n- The set of labels (k/v pairs) that can describe the test which will be used for determining where the test runs\n- The schedule (optional) on which the test should be run\n\n#### Run\n\nRuns represent an instance of an execution of a configured test. It contains a snapshot of the configuration and labels that describe the execution and placement of the test.\n\nEach run stores the timing (scheduled at, started at, finished at), result (pass, fail, error, unknown), logs (stdout and stderr), as well as any result data (custom extracted metadata) for the test.\n\n#### Runner\n\nRunners are the placement targets that execute test workloads. Each runner has a set of accept and reject labels selectors that are used to determine where tests can run by matching them against the configured labels of an instance of a test run.\n\n### Architecture\n\n```\n                                       ┌─────────────┐\n                                    ┌──┤ tstr runner ├─┐\n     ┌──────────┐                   │  └─┬───────────┘ ├─┐\n     │ tstr ctl ├───┐               │    └─┬───────────┘ │\n     └──────────┘   │               │      └─────────────┘\n                    │               │\n┌───────────────┐   │               │     ┌──────────┐\n│               ├───┴──────► gRPC ──┴────►│          │\n│ Other clients │                         │ tstr api │\n│               ├───┬──────► json ───────►│          │\n└───────────────┘   │                     └───┬──▲───┘\n                    │                         │  │\n      ┌─────────┐   │                ┌────────▼──┴───────────┐\n      │ tstr ui ├───┘                │ Database (PostgreSQL) │\n      └─────────┘                    └───────────────────────┘\n```\n\nTODO\n\n## Usage\n\ntstr is bundled as a single binary that includes all the components.\n\n### `tstr api`\n\nTODO\n\n### `tstr ui`\n\nTODO\n\n### `tstr run`\n\nTODO\n\n### `tstr ctl`\n\nTODO\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnanzhong%2Ftstr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnanzhong%2Ftstr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnanzhong%2Ftstr/lists"}