{"id":13596067,"url":"https://github.com/github/scripts-to-rule-them-all","last_synced_at":"2025-10-04T10:30:34.858Z","repository":{"id":37550172,"uuid":"37864995","full_name":"github/scripts-to-rule-them-all","owner":"github","description":"Set of boilerplate scripts describing the normalized script pattern that GitHub uses in its projects.","archived":true,"fork":false,"pushed_at":"2022-12-21T07:20:22.000Z","size":37,"stargazers_count":3189,"open_issues_count":1,"forks_count":249,"subscribers_count":383,"default_branch":"master","last_synced_at":"2024-09-25T21:07:45.329Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://github.blog/2015-06-30-scripts-to-rule-them-all/","language":"Shell","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/github.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-06-22T15:55:49.000Z","updated_at":"2024-09-24T11:40:17.000Z","dependencies_parsed_at":"2023-01-30T03:00:36.267Z","dependency_job_id":null,"html_url":"https://github.com/github/scripts-to-rule-them-all","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/github%2Fscripts-to-rule-them-all","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/github%2Fscripts-to-rule-them-all/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/github%2Fscripts-to-rule-them-all/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/github%2Fscripts-to-rule-them-all/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/github","download_url":"https://codeload.github.com/github/scripts-to-rule-them-all/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219876582,"owners_count":16554769,"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":[],"created_at":"2024-08-01T16:02:07.219Z","updated_at":"2025-10-04T10:30:34.555Z","avatar_url":"https://github.com/github.png","language":"Shell","readme":"# Scripts To Rule Them All\n\nThis is a set of boilerplate scripts describing the [normalized script pattern\nthat GitHub uses in its projects](http://githubengineering.com/scripts-to-rule-them-all/). While these\npatterns can work for projects based on any framework or language, these\nparticular examples are for a simple Ruby on Rails application.\n\n## The Idea\n\nIf your scripts are normalized by name across all of your projects, your\ncontributors only need to know the pattern, not a deep knowledge of the\napplication. This means they can jump into a project and make contributions\nwithout first learning how to bootstrap the project or how to get its tests to\nrun.\n\nThe intricacies of things like test commands and bootstrapping can be managed by\nmaintainers, who have a rich understanding of the project's domain. Individual\ncontributors need only to know the patterns and can simply run the commands and\nget what they expect.\n\n## The Scripts\n\nEach of these scripts is responsible for a unit of work. This way they can be\ncalled from other scripts.\n\nThis not only cleans up a lot of duplicated effort, it means contributors can do\nthe things they need to do, without having an extensive fundamental knowledge of\nhow the project works. Lowering friction like this is key to faster and happier\ncontributions.\n\nThe following is a list of scripts and their primary responsibilities.\n\n### script/bootstrap\n\n[`script/bootstrap`][bootstrap] is used solely for fulfilling dependencies of the project.\n\nThis can mean RubyGems, npm packages, Homebrew packages, Ruby versions, Git submodules, etc.\n\nThe goal is to make sure all required dependencies are installed.\n\n### script/setup\n\n[`script/setup`][setup] is used to set up a project in an initial state.\nThis is typically run after an initial clone, or, to reset the project back to\nits initial state.\n\nThis is also useful for ensuring that your bootstrapping actually works well.\n\n### script/update\n\n[`script/update`][update] is used to update the project after a fresh pull.\n\nIf you have not worked on the project for a while, running [`script/update`][update] after\na pull will ensure that everything inside the project is up to date and ready to work.\n\nTypically, [`script/bootstrap`][bootstrap] is run inside this script. This is also a good\nopportunity to run database migrations or any other things required to get the\nstate of the app into shape for the current version that is checked out.\n\n### script/server\n\n[`script/server`][server] is used to start the application.\n\nFor a web application, this might start up any extra processes that the\napplication requires to run in addition to itself.\n\n[`script/update`][update] should be called ahead of any application booting to ensure that\nthe application is up to date and can run appropriately.\n\n### script/test\n\n[`script/test`][test] is used to run the test suite of the application.\n\nA good pattern to support is having an optional argument that is a file path.\nThis allows you to support running single tests.\n\nLinting (i.e. rubocop, jshint, pmd, etc.) can also be considered a form of testing. These tend to run faster than tests, so put them towards the beginning of a [`script/test`][test] so it fails faster if there's a linting problem.\n\n[`script/test`][test] should be called from [`script/cibuild`][cibuild], so it should handle\nsetting up the application appropriately based on the environment. For example,\nif called in a development environment, it should probably call [`script/update`][update]\nto always ensure that the application is up to date. If called from\n[`script/cibuild`][cibuild], it should probably reset the application to a clean state.\n\n\n### script/cibuild\n\n[`script/cibuild`][cibuild] is used for your continuous integration server.\nThis script is typically only called from your CI server.\n\nYou should set up any specific things for your environment here before your tests\nare run. Your test are run simply by calling [`script/test`][test].\n\n### script/console\n\n[`script/console`][console] is used to open a console for your application.\n\nA good pattern to support is having an optional argument that is an environment\nname, so you can connect to that environment's console.\n\nYou should configure and run anything that needs to happen to open a console for\nthe requested environment.\n\n[bootstrap]: script/bootstrap\n[setup]: script/setup\n[update]: script/update\n[server]: script/server\n[test]: script/test\n[cibuild]: script/cibuild\n[console]: script/console\n","funding_links":[],"categories":["Shell"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgithub%2Fscripts-to-rule-them-all","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgithub%2Fscripts-to-rule-them-all","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgithub%2Fscripts-to-rule-them-all/lists"}