You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{"payload":{"allShortcutsEnabled":false,"fileTree":{"":{"items":[{"name":".github","path":".github","contentType":"directory"},{"name":"images","path":"images","contentType":"directory"},{"name":"tools","path":"tools","contentType":"directory"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":".hgignore","path":".hgignore","contentType":"file"},{"name":".travis.yml","path":".travis.yml","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"Makefile","path":"Makefile","contentType":"file"},{"name":"README.rst","path":"README.rst","contentType":"file"},{"name":"appendix.rst","path":"appendix.rst","contentType":"file"},{"name":"buildbots.rst","path":"buildbots.rst","contentType":"file"},{"name":"buildworker.rst","path":"buildworker.rst","contentType":"file"},{"name":"clang.rst","path":"clang.rst","contentType":"file"},{"name":"committing.rst","path":"committing.rst","contentType":"file"},{"name":"communication.rst","path":"communication.rst","contentType":"file"},{"name":"compiler.rst","path":"compiler.rst","contentType":"file"},{"name":"conf.py","path":"conf.py","contentType":"file"},{"name":"coredev.rst","path":"coredev.rst","contentType":"file"},{"name":"coverage.rst","path":"coverage.rst","contentType":"file"},{"name":"coverity.rst","path":"coverity.rst","contentType":"file"},{"name":"devcycle.rst","path":"devcycle.rst","contentType":"file"},{"name":"developers.csv","path":"developers.csv","contentType":"file"},{"name":"developers.rst","path":"developers.rst","contentType":"file"},{"name":"docquality.rst","path":"docquality.rst","contentType":"file"},{"name":"documenting.rst","path":"documenting.rst","contentType":"file"},{"name":"experts.rst","path":"experts.rst","contentType":"file"},{"name":"exploring.rst","path":"exploring.rst","contentType":"file"},{"name":"extensions.rst","path":"extensions.rst","contentType":"file"},{"name":"fixingissues.rst","path":"fixingissues.rst","contentType":"file"},{"name":"garbage_collector.rst","path":"garbage_collector.rst","contentType":"file"},{"name":"gdb.rst","path":"gdb.rst","contentType":"file"},{"name":"gitbootcamp.rst","path":"gitbootcamp.rst","contentType":"file"},{"name":"grammar.rst","path":"grammar.rst","contentType":"file"},{"name":"help.rst","path":"help.rst","contentType":"file"},{"name":"index.rst","path":"index.rst","contentType":"file"},{"name":"langchanges.rst","path":"langchanges.rst","contentType":"file"},{"name":"make.bat","path":"make.bat","contentType":"file"},{"name":"motivations.rst","path":"motivations.rst","contentType":"file"},{"name":"porting.rst","path":"porting.rst","contentType":"file"},{"name":"pullrequest.rst","path":"pullrequest.rst","contentType":"file"},{"name":"requirements.txt","path":"requirements.txt","contentType":"file"},{"name":"runtests.rst","path":"runtests.rst","contentType":"file"},{"name":"setup.rst","path":"setup.rst","contentType":"file"},{"name":"silencewarnings.rst","path":"silencewarnings.rst","contentType":"file"},{"name":"stdlibchanges.rst","path":"stdlibchanges.rst","contentType":"file"},{"name":"tracker.rst","path":"tracker.rst","contentType":"file"},{"name":"triaging.rst","path":"triaging.rst","contentType":"file"}],"totalCount":47}},"fileTreeProcessingTime":2.212841,"foldersToFetch":[],"incompleteFileTree":false,"repo":{"id":63972479,"defaultBranch":"main","name":"devguide","ownerLogin":"python","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2016-07-22T17:48:56.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1525981?v=4","public":true,"private":false,"isOrgOwned":true},"codeLineWrapEnabled":false,"symbolsExpanded":false,"treeExpanded":true,"refInfo":{"name":"04edcf341b801ff42d2db6c7927e99747aa06bc6","listCacheKey":"v0:1743482989.0","canEdit":false,"refType":"tree","currentOid":"04edcf341b801ff42d2db6c7927e99747aa06bc6"},"path":"buildbots.rst","currentUser":null,"blob":{"rawLines":null,"stylingDirectives":null,"colorizedLines":null,"csv":null,"csvError":null,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/python/devguide/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"buildbots.rst","displayUrl":"https://github.com/python/devguide/blob/04edcf341b801ff42d2db6c7927e99747aa06bc6/buildbots.rst?raw=true","headerInfo":{"blobSize":"9.67 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":null,"isGitLfs":false,"onBranch":false,"shortPath":"c37b135","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fpython%2Fdevguide%2Fblob%2F04edcf341b801ff42d2db6c7927e99747aa06bc6%2Fbuildbots.rst","isCSV":false,"isRichtext":true,"toc":[{"level":1,"text":"Continuous Integration","anchor":"continuous-integration","htmlText":"Continuous Integration"},{"level":2,"text":"Checking results of automatic builds","anchor":"checking-results-of-automatic-builds","htmlText":"Checking results of automatic builds"},{"level":2,"text":"Stability","anchor":"stability","htmlText":"Stability"},{"level":2,"text":"Flags-dependent failures","anchor":"flags-dependent-failures","htmlText":"Flags-dependent failures"},{"level":2,"text":"Ordering-dependent failures","anchor":"ordering-dependent-failures","htmlText":"Ordering-dependent failures"},{"level":2,"text":"Transient failures","anchor":"transient-failures","htmlText":"Transient failures"},{"level":2,"text":"Custom builders","anchor":"custom-builders","htmlText":"Custom builders"}],"lineInfo":{"truncatedLoc":"236","truncatedSloc":"176"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"issueTemplate":null,"discussionTemplate":null,"language":"reStructuredText","languageID":419,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/python/devguide/blob/04edcf341b801ff42d2db6c7927e99747aa06bc6/buildbots.rst","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/python/devguide/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/python/devguide/raw/04edcf341b801ff42d2db6c7927e99747aa06bc6/buildbots.rst","renderImageOrRaw":false,"richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eContinuous Integration\u003c/h1\u003e\u003ca id=\"user-content-continuous-integration\" class=\"anchor\" aria-label=\"Permalink: Continuous Integration\" href=\"#continuous-integration\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo assert that there are no regressions in the \u003ca href=\"#id1\"\u003e\u003cspan id=\"user-content-id2\"\u003e:doc:`development and maintenance\nbranches \u0026lt;devcycle\u0026gt;`\u003c/span\u003e\u003c/a\u003e, Python has a set of dedicated machines (called \u003cem\u003ebuildbots\u003c/em\u003e\nor \u003cem\u003ebuild workers\u003c/em\u003e) used for continuous integration. They span a number of\nhardware/operating system combinations. Furthermore, each machine hosts\nseveral \u003cem\u003ebuilders\u003c/em\u003e, one per active branch: when a new change is pushed\nto this branch on the public \u003ca href=\"https://github.com/python/cpython\"\u003eGitHub repository\u003c/a\u003e, all corresponding builders\nwill schedule a new build to be run as soon as possible.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe build steps run by the buildbots are the following:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eCheckout of the source tree for the changeset which triggered the build\u003c/li\u003e\n\u003cli\u003eCompiling Python\u003c/li\u003e\n\u003cli\u003eRunning the test suite using \u003ca href=\"#id3\"\u003e\u003cspan id=\"user-content-id4\"\u003e:ref:`strenuous settings \u0026lt;strenuous_testing\u0026gt;`\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCleaning up the build tree\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eIt is your responsibility, as a core developer, to check the automatic\nbuild results after you push a change to the repository. It is therefore\nimportant that you get acquainted with the way these results are presented,\nand how various kinds of failures can be explained and diagnosed.\u003c/p\u003e\n\u003ca name=\"user-content-checking-results-of-automatic-builds\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChecking results of automatic builds\u003c/h2\u003e\u003ca id=\"user-content-checking-results-of-automatic-builds\" class=\"anchor\" aria-label=\"Permalink: Checking results of automatic builds\" href=\"#checking-results-of-automatic-builds\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThere are three ways of visualizing recent build results:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cp dir=\"auto\"\u003eThe Web interface for each branch at \u003ca href=\"https://www.python.org/dev/buildbot/\" rel=\"nofollow\"\u003ehttps://www.python.org/dev/buildbot/\u003c/a\u003e,\nwhere the so-called \"waterfall\" view presents a vertical rundown of recent\nbuilds for each builder. When interested in one build, you'll have to\nclick on it to know which changesets it corresponds to. Note that\nthe buildbot web pages are often slow to load, be patient.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp dir=\"auto\"\u003eThe command-line \u003ccode\u003ebbreport.py\u003c/code\u003e client, which you can get from\n\u003ca href=\"https://code.google.com/archive/p/bbreport\" rel=\"nofollow\"\u003ehttps://code.google.com/archive/p/bbreport\u003c/a\u003e. Installing it is trivial: just add\nthe directory containing \u003ccode\u003ebbreport.py\u003c/code\u003e to your system path so that\nyou can run it from any filesystem location. For example, if you want\nto display the latest build results on the development (\"master\") branch,\ntype:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-text-shell-session notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"bbreport.py -q 3.x\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c1\"\u003ebbreport.py -q 3.x\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003cp dir=\"auto\"\u003eThe buildbot \"console\" interface at \u003ca href=\"http://buildbot.python.org/all/#/console\" rel=\"nofollow\"\u003ehttp://buildbot.python.org/all/#/console\u003c/a\u003e\nThis works best on a wide, high resolution\nmonitor. Clicking on the colored circles will allow you to open a new page\ncontaining whatever information about that particular build is of interest to\nyou. You can also access builder information by clicking on the builder\nstatus bubbles in the top line.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eIf you like IRC, having an IRC client open to the #python-dev channel on\nirc.freenode.net is useful. Any time a builder changes state (last build\npassed and this one didn't, or vice versa), a message is posted to the channel.\nKeeping an eye on the channel after pushing a changeset is a simple way to get\nnotified that there is something you should look in to.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eSome buildbots are much faster than others. Over time, you will learn which\nones produce the quickest results after a build, and which ones take the\nlongest time.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAlso, when several changesets are pushed in a quick succession in the same\nbranch, it often happens that a single build is scheduled for all these\nchangesets.\u003c/p\u003e\n\u003ca name=\"user-content-stability\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStability\u003c/h2\u003e\u003ca id=\"user-content-stability\" class=\"anchor\" aria-label=\"Permalink: Stability\" href=\"#stability\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eA subset of the buildbots are marked \"stable\". They are taken into account\nwhen making a new release. The rule is that all stable builders must be free of\npersistent failures when the release is cut. It is absolutely \u003cstrong\u003evital\u003c/strong\u003e\nthat core developers fix any issue they introduce on the stable buildbots,\nas soon as possible.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThis does not mean that other builders' test results can be taken lightly,\neither. Some of them are known for having platform-specific issues that\nprevent some tests from succeeding (or even terminating at all), but\nintroducing additional failures should generally not be an option.\u003c/p\u003e\n\u003ca name=\"user-content-flags-dependent-failures\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFlags-dependent failures\u003c/h2\u003e\u003ca id=\"user-content-flags-dependent-failures\" class=\"anchor\" aria-label=\"Permalink: Flags-dependent failures\" href=\"#flags-dependent-failures\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSometimes, while you have run the \u003ca href=\"#id5\"\u003e\u003cspan id=\"user-content-id6\"\u003e:doc:`whole test suite \u0026lt;runtests\u0026gt;`\u003c/span\u003e\u003c/a\u003e before\ncommitting, you may witness unexpected failures on the buildbots. One source\nof such discrepancies is if different flags have been passed to the test runner\nor to Python itself. To reproduce, make sure you use the same flags as the\nbuildbots: they can be found out simply by clicking the \u003cstrong\u003estdio\u003c/strong\u003e link for\nthe failing build's tests. For example:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-text-shell-session notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"./python.exe -Wd -E -bb ./Lib/test/regrtest.py -uall -rwW\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c1\"\u003e./python.exe -Wd -E -bb ./Lib/test/regrtest.py -uall -rwW\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv dir=\"auto\"\u003e\n\u003cp dir=\"auto\"\u003eNote\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eRunning \u003ccode\u003eLib/test/regrtest.py\u003c/code\u003e is exactly equivalent to running\n\u003ccode\u003e-m test\u003c/code\u003e.\u003c/p\u003e\n\u003c/div\u003e\n\u003ca name=\"user-content-ordering-dependent-failures\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eOrdering-dependent failures\u003c/h2\u003e\u003ca id=\"user-content-ordering-dependent-failures\" class=\"anchor\" aria-label=\"Permalink: Ordering-dependent failures\" href=\"#ordering-dependent-failures\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSometimes the failure is even subtler, as it relies on the order in which\nthe tests are run. The buildbots \u003cem\u003erandomize\u003c/em\u003e test order (by using the \u003ccode\u003e-r\u003c/code\u003e\noption to the test runner) to maximize the probability that potential\ninterferences between library modules are exercised; the downside is that it\ncan make for seemingly sporadic failures.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003e--randseed\u003c/code\u003e option makes it easy to reproduce the exact randomization\nused in a given build. Again, open the \u003ccode\u003estdio\u003c/code\u003e link for the failing test\nrun, and check the beginning of the test output proper.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eLet's assume, for the sake of example, that the output starts with:\u003c/p\u003e\n\u003cpre lang=\"none\"\u003e./python -Wd -E -bb Lib/test/regrtest.py -uall -rwW\n== CPython 3.3a0 (default:22ae2b002865, Mar 30 2011, 13:58:40) [GCC 4.4.5]\n== Linux-2.6.36-gentoo-r5-x86_64-AMD_Athlon-tm-_64_X2_Dual_Core_Processor_4400+-with-gentoo-1.12.14 little-endian\n== /home/buildbot/buildarea/3.x.ochtman-gentoo-amd64/build/build/test_python_29628\nTesting with flags: sys.flags(debug=0, inspect=0, interactive=0, optimize=0, dont_write_bytecode=0, no_user_site=0, no_site=0, ignore_environment=1, verbose=0, bytes_warning=2, quiet=0)\nUsing random seed 2613169\n[ 1/353] test_augassign\n[ 2/353] test_functools\n\u003c/pre\u003e\n\u003cp dir=\"auto\"\u003eYou can reproduce the exact same order using:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-text-shell-session notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"./python -Wd -E -bb -m test -uall -rwW --randseed 2613169\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c1\"\u003e./python -Wd -E -bb -m test -uall -rwW --randseed 2613169\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIt will run the following sequence (trimmed for brevity):\u003c/p\u003e\n\u003cpre lang=\"none\"\u003e[ 1/353] test_augassign\n[ 2/353] test_functools\n[ 3/353] test_bool\n[ 4/353] test_contains\n[ 5/353] test_compileall\n[ 6/353] test_unicode\n\u003c/pre\u003e\n\u003cp dir=\"auto\"\u003eIf this is enough to reproduce the failure on your setup, you can then\nbisect the test sequence to look for the specific interference causing the\nfailure. Copy and paste the test sequence in a text file, then use the\n\u003ccode\u003e--fromfile\u003c/code\u003e (or \u003ccode\u003e-f\u003c/code\u003e) option of the test runner to run the exact\nsequence recorded in that text file:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-text-shell-session notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"./python -Wd -E -bb -m test -uall -rwW --fromfile mytestsequence.txt\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c1\"\u003e./python -Wd -E -bb -m test -uall -rwW --fromfile mytestsequence.txt\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIn the example sequence above, if \u003ccode\u003etest_unicode\u003c/code\u003e had failed, you would\nfirst test the following sequence:\u003c/p\u003e\n\u003cpre lang=\"none\"\u003e[ 1/353] test_augassign\n[ 2/353] test_functools\n[ 3/353] test_bool\n[ 6/353] test_unicode\n\u003c/pre\u003e\n\u003cp dir=\"auto\"\u003eAnd, if it succeeds, the following one instead (which, hopefully, shall\nfail):\u003c/p\u003e\n\u003cpre lang=\"none\"\u003e[ 4/353] test_contains\n[ 5/353] test_compileall\n[ 6/353] test_unicode\n\u003c/pre\u003e\n\u003cp dir=\"auto\"\u003eThen, recursively, narrow down the search until you get a single pair of\ntests which triggers the failure. It is very rare that such an interference\ninvolves more than \u003cstrong\u003etwo\u003c/strong\u003e tests. If this is the case, we can only wish you\ngood luck!\u003c/p\u003e\n\u003cdiv dir=\"auto\"\u003e\n\u003cp dir=\"auto\"\u003eNote\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eYou cannot use the \u003ccode\u003e-j\u003c/code\u003e option (for parallel testing) when diagnosing\nordering-dependent failures. Using \u003ccode\u003e-j\u003c/code\u003e isolates each test in a\npristine subprocess and, therefore, prevents you from reproducing any\ninterference between tests.\u003c/p\u003e\n\u003c/div\u003e\n\u003ca name=\"user-content-transient-failures\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eTransient failures\u003c/h2\u003e\u003ca id=\"user-content-transient-failures\" class=\"anchor\" aria-label=\"Permalink: Transient failures\" href=\"#transient-failures\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWhile we try to make the test suite as reliable as possible, some tests do\nnot reach a perfect level of reproducibility. Some of them will sometimes\ndisplay spurious failures, depending on various conditions. Here are common\noffenders:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eNetwork-related tests, such as \u003ccode\u003etest_poplib\u003c/code\u003e, \u003ccode\u003etest_urllibnet\u003c/code\u003e, etc.\nTheir failures can stem from adverse network conditions, or imperfect\nthread synchronization in the test code, which often has to run a\nserver in a separate thread.\u003c/li\u003e\n\u003cli\u003eTests dealing with delicate issues such as inter-thread or inter-process\nsynchronization, or Unix signals: \u003ccode\u003etest_multiprocessing\u003c/code\u003e,\n\u003ccode\u003etest_threading\u003c/code\u003e, \u003ccode\u003etest_subprocess\u003c/code\u003e, \u003ccode\u003etest_threadsignals\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eWhen you think a failure might be transient, it is recommended you confirm by\nwaiting for the next build. Still, even if the failure does turn out sporadic\nand unpredictable, the issue should be reported on the bug tracker; even\nbetter if it can be diagnosed and suppressed by fixing the test's\nimplementation, or by making its parameters - such as a timeout - more robust.\u003c/p\u003e\n\u003ca name=\"user-content-custom-builders\"\u003e\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eCustom builders\u003c/h2\u003e\u003ca id=\"user-content-custom-builders\" class=\"anchor\" aria-label=\"Permalink: Custom builders\" href=\"#custom-builders\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWhen working on a platform-specific issue, you may want to test your changes on\nthe buildbot fleet rather than just on Travis and AppVeyor. To do so, you can\nmake use of the \u003ca href=\"http://buildbot.python.org/all/#/builders?tags=custom.unstable\u0026amp;tags=custom.stable\" rel=\"nofollow\"\u003ecustom builders\u003c/a\u003e.\nThese builders track the \u003ccode\u003ebuildbot-custom\u003c/code\u003e short-lived branch of the\n\u003ccode\u003epython/cpython\u003c/code\u003e repository, which is only accessible to core developers.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eTo start a build on the custom builders, push the commit you want to test to\nthe \u003ccode\u003ebuildbot-custom\u003c/code\u003e branch:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-text-shell-session notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"$ git push upstream \u0026lt;local_branch_name\u0026gt;:buildbot-custom\"\u003e\u003cpre\u003e$ \u003cspan class=\"pl-s1\"\u003egit push upstream \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003elocal_branch_name\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e:buildbot-custom\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eYou may run into conflicts if another developer is currently using the custom\nbuilders or forgot to delete the branch when they finished. In that case, make\nsure the other developer is finished and either delete the branch or force-push\n(add the \u003ccode\u003e-f\u003c/code\u003e option) over it.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eWhen you have gotten the results of your tests, delete the branch:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-text-shell-session notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"$ git push upstream :buildbot-custom # or use the GitHub UI\"\u003e\u003cpre\u003e$ \u003cspan class=\"pl-s1\"\u003egit push upstream :buildbot-custom \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e or use the GitHub UI\u003c/span\u003e\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIf you are interested in the results of a specific test file only, we\nrecommend you change (temporarily, of course) the contents of the\n\u003ccode\u003ebuildbottest\u003c/code\u003e clause in \u003ccode\u003eMakefile.pre.in\u003c/code\u003e; or, for Windows builders,\nthe \u003ccode\u003eTools/buildbot/test.bat\u003c/code\u003e script.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-text-shell-session notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\".. seealso::\n :ref:`buildworker`\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c1\"\u003e.. seealso::\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003e :ref:`buildworker`\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\n\u003c/article\u003e","renderedFileInfo":null,"shortPath":null,"symbolsEnabled":true,"tabSize":8,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":"/python/.github/blob/5a0a7cb55767fb3667fe2391bcb66bda638edcb4/FUNDING.yml","showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null,"symbols":{"timed_out":false,"not_analyzed":true,"symbols":[]}},"copilotInfo":null,"copilotAccessAllowed":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"csrf_tokens":{"/python/devguide/branches":{"post":"ifntAw0xBpzKlQ38zWNCJdnabQqXGCtOxRCuqSVWLFn4bq7hUe1FH9qB2P1HAz-aG4f33kTDxskAHLtuqVhONg"},"/repos/preferences":{"post":"IfYDuFPB9P5G6eyAHUhHzTZnMwWfxwTBThW1UGMDwFHbS1R-mS2JxNla18zx5LhtOiE8-zgyOXP2gQkb7eTiwg"}}},"title":"devguide/buildbots.rst at 04edcf341b801ff42d2db6c7927e99747aa06bc6 · python/devguide","appPayload":{"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-7d7eb7c71814.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-1ae9fa256942.js","githubDevUrl":null,"enabled_features":{"code_nav_ui_events":false,"react_blob_overlay":false,"accessible_code_button":true,"github_models_repo_integration":false}}}