{"id":20372306,"url":"https://github.com/test-prof/railsconf2024-workshop","last_synced_at":"2025-08-24T18:37:59.973Z","repository":{"id":237593245,"uuid":"794846614","full_name":"test-prof/railsconf2024-workshop","owner":"test-prof","description":"RailsConf 2024 workshop starter application","archived":false,"fork":false,"pushed_at":"2024-05-08T19:46:35.000Z","size":65781,"stargazers_count":6,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-12T06:43:51.545Z","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":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/test-prof.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-05-02T04:32:54.000Z","updated_at":"2024-10-05T16:23:08.000Z","dependencies_parsed_at":"2025-04-12T06:53:58.541Z","dependency_job_id":null,"html_url":"https://github.com/test-prof/railsconf2024-workshop","commit_stats":null,"previous_names":["test-prof/railsconf2024-workshop"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/test-prof/railsconf2024-workshop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/test-prof%2Frailsconf2024-workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/test-prof%2Frailsconf2024-workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/test-prof%2Frailsconf2024-workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/test-prof%2Frailsconf2024-workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/test-prof","download_url":"https://codeload.github.com/test-prof/railsconf2024-workshop/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/test-prof%2Frailsconf2024-workshop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271923416,"owners_count":24844237,"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","status":"online","status_checked_at":"2025-08-24T02:00:11.135Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-15T01:12:41.479Z","updated_at":"2025-08-24T18:37:54.965Z","avatar_url":"https://github.com/test-prof.png","language":"Ruby","readme":"\u003ch1\u003e\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"./lib/assets/wordmark.dark.png?raw=true\"\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"./lib/assets/wordmark.light.png?raw=true\"\u003e\n  \u003cimg alt=\"Mastodon\" src=\"./lib/assets/wordmark.light.png?raw=true\" height=\"34\"\u003e\n\u003c/picture\u003e\u003c/h1\u003e\n\n\u003e [!IMPORTANT]\n\u003e This is a specific version of the original Mastodon codebase for [RailsConf 2024 workshop on tests profiling with TestProf](https://evilmartians.com/events/from-slow-to-go-rails-test-profiling-hands-on-railsconf-2024).\n\nMastodon is a **free, open-source social network server** based on ActivityPub where users can follow friends and discover new ones...\n\n_See the full project's description [here](https://github.com/mastodon/mastodon)._\n\n## Setting up for test profiling\n\nFirst, install the following tools:\n\n- [Docker](https://www.docker.com/products/docker-desktop/)\n- [Dip](https://github.com/bibendi/dip)\n\nNow, run Dip to provision Docker development enviroment enough to run **unit** tests (we don't need browser tests for this workshop):\n\n```sh\ndip provision\n```\n\nThis command may take some time and should complete with success (you will see the message telling you about it).\n\nNow, verify your setup by running all tests:\n\n```sh\ndip rspec\n```\n\nMake sure all is green. If not, don't hesitate to reach out (via issues).\n\nNow, when everything is ready, you can open a terminal within a Docker container to start playing with TestProf:\n\n```sh\ndip runner\n```\n\n## Misc\n\n### Additional profiling tools\n\nWe're going to analyze some flamegraphs and profiler reports during the workshop, so it's worth having them installed locally (to not depend on the Internet):\n\n- `gem install profile-viewer`\n\n- `npm install -g speedscope`\n\n### Benchmarking\n\nIf you want to measure the effect of every optimization change made (and see the progress), you can use [hyperfine](https://github.com/sharkdp/hyperfine) as follows:\n\n```sh\nhyperfine -L commit \"readme\",\"debug require false\",\"opt-in coverage\",\"logging\" --runs 2 --show-output --cleanup 'git checkout railsconf2024' --export-markdown 'tmp/results.md' \"git -c advice.detachedHead=false checkout ':/{commit}' \u0026\u0026 dip rspec:notty\"\n```\n\nThe command above runs tests 2 times for specified commits (matching commit messages) and produces a markdown table. Feel free to adjust it to your needs!\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftest-prof%2Frailsconf2024-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftest-prof%2Frailsconf2024-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftest-prof%2Frailsconf2024-workshop/lists"}