{"id":21861111,"url":"https://github.com/deecewan/timing_runner","last_synced_at":"2026-05-16T22:38:38.037Z","repository":{"id":244058201,"uuid":"814129182","full_name":"deecewan/timing_runner","owner":"deecewan","description":"Run rspec tests individually, based on runtime","archived":false,"fork":false,"pushed_at":"2026-03-20T04:24:20.000Z","size":34,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-20T20:55:12.916Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deecewan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-06-12T11:54:02.000Z","updated_at":"2026-03-20T04:24:24.000Z","dependencies_parsed_at":"2024-06-12T18:51:53.090Z","dependency_job_id":"65100e25-7f34-4c11-94cf-ecf230c5fbc7","html_url":"https://github.com/deecewan/timing_runner","commit_stats":null,"previous_names":["deecewan/timing_runner"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/deecewan/timing_runner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deecewan%2Ftiming_runner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deecewan%2Ftiming_runner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deecewan%2Ftiming_runner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deecewan%2Ftiming_runner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deecewan","download_url":"https://codeload.github.com/deecewan/timing_runner/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deecewan%2Ftiming_runner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33121423,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T18:38:32.183Z","status":"ssl_error","status_checked_at":"2026-05-16T18:38:29.903Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-11-28T03:09:57.162Z","updated_at":"2026-05-16T22:38:38.032Z","avatar_url":"https://github.com/deecewan.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# timing-runner\n\nPlease read this fully before using the gem.\n\n## Setup\n\n- For local development, install the project toolchain with `mise install`, then run\n  `bundle install`.\n- Add the following to your `.rspec` file\n\n```\n--require timing_runner\n--format TimingRunner::Logger --out \u003cfile\u003e\n```\n\nwhere `\u003cfile\u003e` is the path to the file where you want the timing results to be\nlogged.\n\n## Running Tests\n\nRun tests with\n\n```\nbundle exec timing-runner \u003ctiming runner options\u003e -- \u003crspec options\u003e\n```\n\n`\u003crspec options\u003e` is any option you'd usually pass to rspec on the command line.\nSee [Configuration](#configuration) for the options you can pass for\n`\u003ctiming runner options\u003e`.\n\nThe runner will read from `input-file` to get the timing data.\n\n\u003e [!WARNING]\n\u003e You must not use the same location for `input-file` and the output file\n\u003e specified in `.rspec`! RSpec truncates that file, so you will lose your timing\n\u003e data\n\n## Configuration\n\nCheck the options with `bundle exec timing-runner --help`.\n\n### Options\n\n- `--input-file \u003cfile\u003e`: The file where timings should be read from (required)\n- `--num-runners \u003cnumber\u003e`: The number of parallel runners to use (required)\n- `--runner \u003cnumber`\u003e: The index of the runner to use (required)\n- `--dry-run`: If set, the tests will not be executed. The program will print\nthe command it _would_ run, and exit (optional)\n\nOptions can be specified on the command line or in a configuration file.\n\nThe configuration file is similar to the `.rspec` file. It lives at\n`.timing-runner`. Put each command line option on a new line. Be sure to use the\nsame syntax as in the command line, e.g. `--input-file \u003cfile\u003e`.\n\nAlternatively, you can use environment variables to set the options. The format\nfor the environment variables is `TIMING_RUNNER_\u003coption\u003e`, where `\u003coption\u003e` is\nupper case, and underscores are used instead of dashes. For example, to set the\n`--input-file` option, you would use `TIMING_RUNNER_INPUT_FILE=\u003cfile\u003e`.\n\nTo see debug output from the configuration parsing (i.e. see the configuration\nresult, see the source of the options) you can specify `--debug` on the command\nline or the configuration file, or set the environment variable\n`TIMING_RUNNER_DEBUG=true`.\n\nOrder of precedence for options is as follows:\n1. Command line options\n2. Environment variables\n3. Configuration file\n\n## Timing Files\n\nThe timing files are simple text files with one line per test. When running\nacross different agents, simply combine the timing files from all agents, and\nthen specify the combined file as the `--input-file` option.\n\nTiming Runner matches timings by example name. It prefers an exact\n`full_description` match, then falls back to a normalized stable key for names\nthat include volatile Ruby object ids such as `#\u003cObject:0x...\u003e`.\n\nIf you have highly dynamic example names and want to pin them to a stable\nidentity yourself, add `timing_runner_key:` metadata:\n\n```ruby\nit(\"serializes #{user}\", timing_runner_key: \"serializes-user\") do\n  expect(serializer.call(user)).to eq(...)\nend\n```\n\nThat metadata is only used as the persisted timing identity. The actual test\nselection for the current run still uses RSpec's current `scoped_id`s.\n\n## License\n\nThe gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeecewan%2Ftiming_runner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeecewan%2Ftiming_runner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeecewan%2Ftiming_runner/lists"}