1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 5 <!-- force IE browsers in compatibility mode to use their most aggressive rendering engine --> 6 7 <meta charset="utf-8"> 8 <title>Travis CI Status - Incident History</title> 9 <meta name="description" content="Travis CI's Incident and Scheduled Maintenance History"> 10 11 <!-- Mobile viewport optimization --> 12 <meta name="HandheldFriendly" content="True"> 13 <meta name="MobileOptimized" content="320"> 14 <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"> 15 16 <!-- Time this page was rendered - http://purl.org/dc/terms/issued --> 17 <meta name="issued" content="1790915142"> 18 19 <!-- Mobile IE allows us to activate ClearType technology for smoothing fonts for easy reading --> 20 <meta http-equiv="cleartype" content="on"> 21 22 <!-- Atlassian Sans & Mono Fonts --> 23<link 24 rel="preconnect" 25 href="https://ds-cdn.prod-east.frontend.public.atl-paas.net" /> 26<link 27 rel="preload" 28 href="https://ds-cdn.prod-east.frontend.public.atl-paas.net/assets/fonts/atlassian-sans/v3/AtlassianSans-latin.woff2" 29 as="font" type="font/woff2" crossorigin /> 30<link 31 rel="preload" 32 href="https://ds-cdn.prod-east.frontend.public.atl-paas.net/assets/font-rules/v5/atlassian-fonts.css" 33 as="style" crossorigin /> 34 35 <style> 36 /* Dynamic Font Stack based on Feature Flag */ 37 /* Using Atlassian Sans & Mono */ 38 :root { 39 --font-stack-a: "Atlassian Sans", "Helvetica Neue", Helvetica, Arial, Sans-Serif; 40 --font-stack-b: "Atlassian Mono", "SFMono-Medium", "SF Mono", "Segoe UI Mono", "Roboto Mono", "Ubuntu Mono", Menlo, Consolas, Courier, monospace; 41 } 42</style> 43 44 45 <link rel="icon" type="image/x-icon" href="//dka575ofm4ao0.cloudfront.net/pages-favicon_logos/original/27/favicon-3a4bd34c-f8d3-468e-ab94-50c3bef48ddc.png" /> 46 47 <link rel="shortcut icon" href='//dka575ofm4ao0.cloudfront.net/pages-favicon_logos/original/27/favicon-3a4bd34c-f8d3-468e-ab94-50c3bef48ddc.png'> 48 49 <link rel="alternate" type="application/atom+xml" href="https://www.traviscistatus.com/history.atom" title="Travis CI Status History - Atom Feed"> 50 <link rel="alternate" type="application/rss+xml" href="https://www.traviscistatus.com/history.rss" title="Travis CI Status History - RSS Feed"> 51 52 <!-- Canonical Link to ensure that only the custom domain is indexed when present --> 53 <link rel="canonical" href="https://www.traviscistatus.com/history"> 54 55 <meta name="_globalsign-domain-verification" content="y_VzfckMy4iePo5oDJNivyYIjh8LffYa4jzUndm_bZ"/> 56 57 58 <link rel="alternate" type="application/atom+xml" title="ATOM" href="https://www.traviscistatus.com/history.atom" /> 59 60 <!-- Le styles --> 61 <link rel="stylesheet" href="https://dka575ofm4ao0.cloudfront.net/packs/0.a7d86fc6a129fa9540bc.css" media="screen" /><link rel="stylesheet" href="https://dka575ofm4ao0.cloudfront.net/packs/191.a7d86fc6a129fa9540bc.css" media="screen" /><link rel="stylesheet" href="https://dka575ofm4ao0.cloudfront.net/packs/155.a7d86fc6a129fa9540bc.css" media="screen" /> 62 <link rel="stylesheet" href="https://dka575ofm4ao0.cloudfront.net/assets/status/status_manifest-e7416fcfeedbe261454d619d119599335f4c7b18c9e245c13722dbb0998dc023.css" media="all" /> 63 64
64<script src="https://dka575ofm4ao0.cloudfront.net/assets/jquery-3.5.1.min-729e416557a365062a8a20f0562f18aa171da57298005d392312670c706c68de.js"></script>
64 65 66
66<script> 67 window.pageColorData = {"blue":"#0068FF","border":"#CCE1FF","body_background":"#fff","font":"#333333","graph":"#0068FF","green":"#05c47a","light_font":"#8794A0","link":"#0068FF","orange":"#FF8C3E","red":"#FF5050","yellow":"#efcc00","no_data":"#b3bac5"}; 68 </script>
68 69 <style> 70 /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ 71 body, 72 .layout-content.status.status-api .section .example-container .example-opener .color-secondary, 73 .grouped-items-selector, 74 .layout-content.status.status-full-history .history-nav a.current, 75 div[id^="subscribe-modal"] .modal-footer, 76 div[id^="subscribe-modal"], 77 div[id^="updates-dropdown"] .updates-dropdown-section, 78 #uptime-tooltip .tooltip-box { 79 background-color:#fff; 80 } 81 82 #uptime-tooltip .pointer-container .pointer-smaller { 83 border-bottom-color:#fff; 84 } 85 86 87 88 89 /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ 90 body.status, 91 .color-primary, 92 .color-primary:hover, 93 .layout-content.status-index .status-day .update-title.impact-none a, 94 .layout-content.status-index .status-day .update-title.impact-none a:hover, 95 .layout-content.status-index .timeframes-container .timeframe.active, 96 .layout-content.status-full-history .month .incident-container .impact-none, 97 .layout-content.status.status-index .incidents-list .incident-title.impact-none a, 98 .incident-history .impact-none, 99 .layout-content.status .grouped-items-selector.inline .grouped-item.active, 100 .layout-content.status.status-full-history .history-nav a.current, 101 .layout-content.status.status-full-history .history-nav a:not(.current):hover, 102 div[id^="subscribe-modal"] .modal-header .close, 103 .grouped-item-label, 104 #uptime-tooltip .tooltip-box .tooltip-content .related-events .related-event a.related-event-link { 105 color:#333333; 106 } 107 108 .layout-content.status.status-index .components-statuses .component-container .name { 109 color:#333333; 110 color:rgba(51,51,51,.8); 111 } 112 113 114 115 116 /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ 117 small, 118 .layout-content.status .table-row .date, 119 .color-secondary, 120 .layout-content.status .grouped-items-selector.inline .grouped-item, 121 .layout-content.status.status-full-history .history-footer .pagination a.disabled, 122 .layout-content.status.status-full-history .history-nav a, 123 #uptime-tooltip .tooltip-box .tooltip-content .related-events #related-event-header { 124 color:#8794A0; 125 } 126 127 128 129 130 /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ 131 body.status .layout-content.status .border-color, 132 hr, 133 .tooltip-base, 134 .markdown-display table, 135 div[id^="subscribe-modal"], 136 #uptime-tooltip .tooltip-box { 137 border-color:#CCE1FF; 138 } 139 140 div[id^="subscribe-modal"] .modal-footer, 141 .markdown-display table td { 142 border-top-color:#CCE1FF; 143 } 144 145 .markdown-display table td + td, .markdown-display table th + th { 146 border-left-color:#CCE1FF; 147 } 148 149 div[id^="subscribe-modal"] .modal-header, 150 #uptime-tooltip .pointer-container .pointer-larger { 151 border-bottom-color:#CCE1FF; 152 } 153 154 #uptime-tooltip .tooltip-box .outage-field { 155 /* 156 Generate the background-color for the outage-field from the css_body_background_color and css_border_color. 157 158 For the default background (#ffffff) and default css_border_color (#e0e0e0), use the luminosity of the default background with a magic number to arrive at 159 the original outage-field background color (#f4f5f7). I used the formula Target Color = Color * alpha + Background * (1 - alpha) to find the magic number of ~0.08. 160 161 For darker css_body_background_color, luminosity values are lower so alpha trends toward becoming transparent (thus outage-field background becomes same as css_body_background_color). 162 */ 163 background-color: rgba(204,225,255,0.31); 164 165 /* 166 outage-field border-color alpha is inverse to the luminosity of css_body_background_color. 167 That is to say, with a default white background this border is transparent, but on a black background, it's opaque css_border_color. 168 */ 169 border-color: rgba(204,225,255,0.0); 170 } 171 172 173 174 175 /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ 176 .layout-content.status.status-index .status-day .update-title.impact-critical a, 177 .layout-content.status.status-index .status-day .update-title.impact-critical a:hover, 178 .layout-content.status.status-index .page-status.status-critical, 179 .layout-content.status.status-index .unresolved-incident.impact-critical .incident-title, 180 .flat-button.background-red { 181 background-color:#FF5050; 182 } 183 184 .layout-content.status-index .components-statuses .component-container.status-red:after, 185 .layout-content.status-full-history .month .incident-container .impact-critical, 186 .layout-content.status-incident .incident-name.impact-critical, 187 .layout-content.status.status-index .incidents-list .incident-title.impact-critical a, 188 .status-red .icon-indicator, 189 .incident-history .impact-critical, 190 .components-container .component-inner-container.status-red .component-status, 191 .components-container .component-inner-container.status-red .icon-indicator { 192 color:#FF5050; 193 } 194 195 .layout-content.status.status-index .unresolved-incident.impact-critical .updates { 196 border-color:#FF5050; 197 } 198 199 200 201 202 /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ 203 .layout-content.status.status-index .status-day .update-title.impact-major a, 204 .layout-content.status.status-index .status-day .update-title.impact-major a:hover, 205 .layout-content.status.status-index .page-status.status-major, 206 .layout-content.status.status-index .unresolved-incident.impact-major .incident-title { 207 background-color:#FF8C3E; 208 } 209 210 .layout-content.status-index .components-statuses .component-container.status-orange:after, 211 .layout-content.status-full-history .month .incident-container .impact-major, 212 .layout-content.status-incident .incident-name.impact-major, 213 .layout-content.status.status-index .incidents-list .incident-title.impact-major a, 214 .status-orange .icon-indicator, 215 .incident-history .impact-major, 216 .components-container .component-inner-container.status-orange .component-status, 217 .components-container .component-inner-container.status-orange .icon-indicator { 218 color:#FF8C3E; 219 } 220 221 .layout-content.status.status-index .unresolved-incident.impact-major .updates { 222 border-color:#FF8C3E; 223 } 224 225 226 227 228 /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ 229 .layout-content.status.status-index .status-day .update-title.impact-minor a, 230 .layout-content.status.status-index .status-day .update-title.impact-minor a:hover, 231 .layout-content.status.status-index .page-status.status-minor, 232 .layout-content.status.status-index .unresolved-incident.impact-minor .incident-title, 233 .layout-content.status.status-index .scheduled-incidents-container .tab { 234 background-color:#efcc00; 235 } 236 237 .layout-content.status-index .components-statuses .component-container.status-yellow:after, 238 .layout-content.status-full-history .month .incident-container .impact-minor, 239 .layout-content.status-incident .incident-name.impact-minor, 240 .layout-content.status.status-index .incidents-list .incident-title.impact-minor a, 241 .status-yellow .icon-indicator, 242 .incident-history .impact-minor, 243 .components-container .component-inner-container.status-yellow .component-status, 244 .components-container .component-inner-container.status-yellow .icon-indicator, 245 .layout-content.status.manage-subscriptions .confirmation-infobox .fa { 246 color:#efcc00; 247 } 248 249 .layout-content.status.status-index .unresolved-incident.impact-minor .updates, 250 .layout-content.status.status-index .scheduled-incidents-container { 251 border-color:#efcc00; 252 } 253 254 255 256 257 /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ 258 .layout-content.status.status-index .status-day .update-title.impact-maintenance a, 259 .layout-content.status.status-index .status-day .update-title.impact-maintenance a:hover, 260 .layout-content.status.status-index .page-status.status-maintenance, 261 .layout-content.status.status-index .unresolved-incident.impact-maintenance .incident-title, 262 .layout-content.status.status-index .scheduled-incidents-container .tab { 263 background-color:#0068FF; 264 } 265 266 .layout-content.status-index .components-statuses .component-container.status-blue:after, 267 .layout-content.status-full-history .month .incident-container .impact-maintenance, 268 .layout-content.status-incident .incident-name.impact-maintenance, 269 .layout-content.status.status-index .incidents-list .incident-title.impact-maintenance a, 270 .status-blue .icon-indicator, 271 .incident-history .impact-maintenance, 272 .components-container .component-inner-container.status-blue .component-status, 273 .components-container .component-inner-container.status-blue .icon-indicator { 274 color:#0068FF; 275 } 276 277 .layout-content.status.status-index .unresolved-incident.impact-maintenance .updates, 278 .layout-content.status.status-index .scheduled-incidents-container { 279 border-color:#0068FF; 280 } 281 282 283 284 285 /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ 286 .layout-content.status.status-index .page-status.status-none { 287 background-color:#05c47a; 288 } 289 .layout-content.status-index .components-statuses .component-container.status-green:after, 290 .status-green .icon-indicator, 291 .components-container .component-inner-container.status-green .component-status, 292 .components-container .component-inner-container.status-green .icon-indicator { 293 color:#05c47a; 294 } 295 296 297 298 299 /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ 300 a, 301 a:hover, 302 .layout-content.status-index .page-footer span a:hover, 303 .layout-content.status-index .timeframes-container .timeframe:not(.active):hover, 304 .layout-content.status-incident .subheader a:hover { 305 color:#0068FF; 306 } 307 308 .flat-button, 309 .masthead .updates-dropdown-container .show-updates-dropdown, 310 .layout-content.status-full-history .show-filter.open { 311 background-color:#0068FF; 312 } 313 314 315 316 317 /* CUSTOM COLOR OVERRIDES FOR UPTIME SHOWCASE */ 318 .components-section .components-uptime-link { 319 color: #8794a0; 320 } 321 322 .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item { 323 color: #8794a0; 324 opacity: 1; 325 } 326 .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item.light { 327 color: #8794a0; 328 opacity: 1; 329 } 330 .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .spacer { 331 background: #8794a0; 332 opacity: 1; 333 } 334</style> 335 336 337 <!-- custom css --> 338 339 <!-- polyfills --> 340
340<script crossorigin="anonymous" src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.js"></script>
340 341 342 <!-- Le HTML5 shim --> 343 <!--[if lt IE 9]> 344
344<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
344 345 <![endif]--> 346 347 <!-- injection for static --> 348 349 350 351 </head> 352 353 354 <body class="status history status-none sp-a11y-status-focus-visibility a11y-focus-indicators"> 355 356 357<div class="layout-content status status-full-history premium"> 358 359 <div class="masthead-container premium"> 360 <div class="masthead"> 361 <div class="images-container" id="cover-image-container" data-js-hook="images-container"></div> 362 <style> 363 #cover-image-container { 364 background-image:url("//dka575ofm4ao0.cloudfront.net/pages-hero_covers/normal/27/tci-logo_w1700h630-e25efd0e-8bda-4e6f-b5ca-e6ba7eb2ab65.png"); 365 } 366 367 @media only screen and (-webkit-min-device-pixel-ratio: 2), 368 only screen and (min-resolution: 192dpi) { 369 #cover-image-container { 370 background-image:url("//dka575ofm4ao0.cloudfront.net/pages-hero_covers/retina/27/tci-logo_w1700h630-e25efd0e-8bda-4e6f-b5ca-e6ba7eb2ab65.png") !important; 371 } 372 } 373 </style> 374 375 <div class="text-container"> 376 <span class="page-name font-largest"> 377 <a href="https://travis-ci.com">Travis CI</a> 378 </span> 379 380 <div class="updates-dropdown-container" data-js-hook="updates-dropdown-container"> 381 <a href="#" data-js-hook="show-updates-dropdown" id="show-updates-dropdown" class="show-updates-dropdown" aria-label="Subscribe to updates" aria-expanded="false" aria-haspopup="dialog" role="button"> 382 <span class="subscribe-text-full">Subscribe to Updates</span><span class="subscribe-text-short">Subscribe</span> 383 </a> 384 385<!-- Accessibility guidelines for tabs: https://www.w3.org/TR/wai-aria-practices-1.1/examples/tabs/tabs-1/tabs.html --> 386 <div class="updates-dropdown" data-js-hook="updates-dropdown" id="updates-dropdown" style="display:none" role="dialog" aria-modal="false" aria-label="Subscribe to updates"> 387 <div class="updates-dropdown-nav nav-items-5" role="tablist" aria-label="Subscribe to updates"> 388 <a href="#updates-dropdown-email" aria-controls="updates-dropdown-email" aria-label="Subscribe via email" role="tab" aria-selected="true" id="updates-dropdown-email-btn"> 389 <span class="icon-container email"> 390 </a> 391 <a href="#updates-dropdown-slack" aria-controls="updates-dropdown-slack" aria-label="Subscribe via slack" role="tab" id="updates-dropdown-slack-btn"> 392 <span class="icon-container slack"> 393 </a> 394 <a href="#updates-dropdown-webhook" aria-controls="updates-dropdown-webhook" aria-label="Subscribe via webhook" role="tab" id="updates-dropdown-webhook-btn"> 395 <span class="icon-container webhook"> 396 </a> 397 <a href="#updates-dropdown-atom" aria-controls="updates-dropdown-atom" aria-label="Subscribe via RSS" role="tab" id="updates-dropdown-atom-btn"> 398 <span class="icon-container rss"> 399 </a> 400 <button data-js-hook="updates-dropdown-close" aria-label="Close subscribe form" id="updates-dropdown-close-btn"> 401 x 402 </button> 403 </div> 404 <div class="updates-dropdown-sections-container"> 405 <div class="updates-dropdown-section email" id="updates-dropdown-email" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-email-btn"> 406 <div class="directions"> 407 Get email notifications whenever Travis CI <strong>creates</strong>, <strong>updates</strong> or <strong>resolves</strong> an incident. 408 </div> 409 <form id="subscribe-form-email" action="/subscriptions/new-email" accept-charset="UTF-8" data-remote="true" method="post"><input type="hidden" name="authenticity_token" value="XHdVkOnOfcRwwS2jmRoZEFKKRHA4nCltUg54Hp0Sq6Y4QOu48lmuws7HNwZuhLKO8dHgWgUfJqyAKMDmoOFZ8A" autocomplete="off" /> 410 <input type="hidden" name="email_otp_verify_flow" id="email_otp_verify_flow" value="false" autocomplete="off" /> 411 <!-- make sure not to put cookie values in here since this gets cached --> 412 <label for="email">Email address:</label> 413 <input name="email" id="email" type="text" class="full-width" data-js-hook="email-notification-field" autocomplete="email"> 414 <input name="email_otp_auth_token" type='hidden' id="email-
414otp-token-field"> 415 <div class="opt-container-section" id="email-otp-container", style="display:none" > 416 <label for="email-otp">Enter OTP:</label> 417 <input name="otp" id="email-otp" type="text" value="" class="prepend full-width"> 418 <p id="email-otp-timer">Resend OTP in: <span id="email-otp-countdown"></span> seconds </p> 419 <p id="resend-email-otp"> 420 Didn't receive the OTP? 421 <a href="#" id="resend-email-otp-btn" >Resend OTP </a> 422 </p> 423 </div> 424 <input type="hidden" name="captcha_error" id="captcha_error" value="false" autocomplete="off" /> 425 <input type="submit" value="Subscribe via Email" class="flat-button full-width g-recaptcha" id="subscribe-btn-email" data-disabled-text="Subscribing..." data-sitekey=6LdTS8AUAAAAAOIbCKoCAP4LQku1olYGrywPTaZz data-callback="submitNewEmailSubscriber" data-error-callback="emailSubscriberCaptchaError" > 426 <div class="terms_and_privacy_information bottom small"><div class="privacy_policy_information small">By subscribing you agree to our <a target="_blank" rel="noopener" class="accessible-link" href="https://www.ideracorp.com/Legal/PrivacyPolicy">Privacy Policy</a>.</div> This site is protected by reCAPTCHA and the Google <a target="_blank" rel="noopener" class="accessible-link" href="https://policies.google.com/privacy">Privacy Policy</a> and <a target="_blank" rel="noopener" class="accessible-link" data-js-hook="captcha-terms-of-service-link" href="https://policies.google.com/terms">Terms of Service</a> apply.</div> 427</form> </div> 428 429 430 <div class="updates-dropdown-section slack" id="updates-dropdown-slack" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-slack-btn"> 431 <div class="directions"> 432 Get incident updates and maintenance status messages in Slack. 433 </div> 434 <a value="Subscribe via Slack" class="flat-button full-width" id="subscribe-btn-slack" data-disabled-text="Subscribing..." data-revert-on-success="true" style="margin-top:.75rem" href="https://subscriptions.statuspage.io/slack_authentication/kickoff?page_code=pnpcptp8xh9k">Subscribe via Slack</a> 435 <div class="terms_and_privacy_information bottom small">By subscribing you acknowledge our <a target="_blank" rel="noopener" class="accessible-link" href="https://www.ideracorp.com/Legal/PrivacyPolicy">Privacy Policy</a>. In addition, you agree to the Atlassian <a target="_blank" rel="noopener" class="accessible-link" href="https://www.atlassian.com/legal/cloud-terms-of-service">Cloud Terms of Service</a> and acknowledge Atlassian's <a target="_blank" rel="noopener" class="accessible-link" href="https://www.atlassian.com/legal/privacy-policy">Privacy Policy</a>.</div> 436 </div> 437 438 439 <div class="updates-dropdown-section webhook" id="updates-dropdown-webhook" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-webhook-btn"> 440 <div class="directions"> 441 Get webhook notifications whenever Travis CI <strong>creates</strong> an incident, <strong>updates</strong> an incident, <strong>resolves</strong> an incident or <strong>changes</strong> a component status. 442 </div> 443 <form id="subscribe-form-webhook" action="/subscriptions/webhook.json" accept-charset="UTF-8" data-remote="true" method="post"><input type="hidden" name="authenticity_token" value="tqGWJ93WueF4EkacW7hoWZ2mZOtaIG0fWBUZvv_-wgnSligPxkFq58YUXDmsJsPHPv3AwWejYt6KM6FGwg0wXw" autocomplete="off" /> 444 <div class="control-group"> 445 <div class="controls"> 446 <label for="endpoint-webhooks">Webhook URL:</label> 447 <input type="text" name="endpoint" id="endpoint-webhooks" data-js-hook="endpoint" class="full-width" aria-describedby="url-help-block" /> 448 <p class="help-block" id="url-help-block">The URL we should send the webhooks to</p> 449 </div> 450 </div> 451 452 <div class="control-group"> 453 <div class="controls"> 454 <label for="email-webhooks">Email address:</label> 455 <input type="text" name="email" id="email-webhooks" data-js-hook="email" class="full-width" aria-describedby="email-help-block" /> 456 <p class="help-block" id="email-help-block">We'll send you email if your endpoint fails</p> 457 </div> 458 </div> 459 460 <input type="hidden" name="captcha_error" id="captcha_error" value="false" autocomplete="off" /> 461 <input type="submit" value=Subscribe To Notifications class="flat-button full-width g-recaptcha" id="subscribe-btn-webhook" data-disabled-text="Subscribing..." data-sitekey=6LcQ-b0UAAAAAJjfdwO_-ozGC-CzWDj4Pm1kJ2Ah data-callback="submitNewWebhookSubscriber" data-error-callback="webhookSubscriberCaptchaError"> 462 <div class="terms_and_privacy_information bottom small"><div class="privacy_policy_information small">By subscribing you agree to our <a target="_blank" rel="noopener" class="accessible-link" href="https://www.ideracorp.com/Legal/PrivacyPolicy">Privacy Policy</a>.</div> This site is protected by reCAPTCHA and the Google <a target="_blank" rel="noopener" class="accessible-link" href="https://policies.google.com/privacy">Privacy Policy</a> and <a target="_blank" rel="noopener" class="accessible-link" data-js-hook="captcha-terms-of-service-link" href="https://policies.google.com/terms">Terms of Service</a> apply.</div> 463 464</form> </div> 465 466 467 468 <div class="updates-dropdown-section atom" id="updates-dropdown-atom" role="tabpanel" aria-labelledby="updates-dropdown-atom-btn"> 469 Get the <a href="https://www.traviscistatus.com/history.atom" target="_blank">Atom Feed</a> or <a href="https://www.traviscistatus.com/history.rss" target="_blank">RSS Feed</a>. 470 </div> 471 </div> 472 </div> 473 </div> 474
475<script> 476 $(function () { 477 const phoneNumberInput = $('#phone-number'); 478 const errorDiv = $('#sms-atl-error') 479 if(errorDiv.length){ 480 function checkSelectedCountry() { 481 const selectedCountry = $('#phone-country').val(); 482 const isOtpEnabled = $('#phone-number-country-code').attr('data-otp-enabled') === 'true'; 483 const form = document.getElementById('subscribe-form-sms'); 484 form.action = '/subscriptions/new-sms'; 485 const isOtpFlow = document.getElementById('otp_verify_flow'); 486 document.getElementById('otp-container').style.display = "none"; 487 if(false && selectedCountry === 'sg') { // Replace 'SG' with the actual value representing Singapore in your select tag 488 phoneNumberInput.prop('disabled', true); 489 errorDiv.html(`Due to new Singapore government regulations, we're currently not supporting text subscriptions in Singapore.<a href="https://community.atlassian.com/t5/Statuspage-articles/Attention-SMS-notifications-will-be-disabled-on-August-1st-2023/ba-p/2424398" target="_blank"> Learn more.</a> <br> Select another method to subscribe.`); 490 } else { 491 phoneNumberInput.prop('readonly', false); 492 errorDiv.html(''); 493 if(false){ 494 if(isOtpEnabled){ 495 document.getElementById('subscribe-btn-sms').value = "Send OTP"; 496 } 497 else { 498 isOtpFlow.value = false; 499 document.getElementById('subscribe-btn-sms').value = "Subscribe via Text Message"; 500 } 501 } 502 } 503 } 504 505 $('#phone-country').on('change', checkSelectedCountry); 506 checkSelectedCountry(); 507 } 508 }); 509 510 document.addEventListener('DOMContentLoaded', function() { 511 const dropdown = document.querySelector('#phone-number-country-code .phone-country'); 512 if (dropdown){ 513 const wrapperDiv = document.getElementById('phone-number-country-code'); 514 const selectedOption = dropdown.options[dropdown.selectedIndex]; 515 const otpEnabled = selectedOption.getAttribute('data-otp-enabled'); 516 517 wrapperDiv.setAttribute('data-otp-enabled', otpEnabled); 518 519 dropdown.addEventListener('change', function() { 520 const selectedOption = dropdown.options[dropdown.selectedIndex]; 521 const otpEnabled = selectedOption.getAttribute('data-otp-enabled'); 522 523 wrapperDiv.setAttribute('data-otp-enabled', otpEnabled); 524 }); 525 } 526 }); 527 528 var countdownTimer; 529 var resendBtn = document.getElementById('resend'); 530 var timer = document.getElementById('timer'); 531 var form = document.getElementById('subscribe-form-sms'); 532 var RESEND_TIMER = 30; 533 $(function() { 534 $('#subscribe-form-sms').on('ajax:success', function(e, data, status, xhr){ 535 const form = this; 536 const action = form.getAttribute('action'); 537 if (data.type === 'success' && data.otp_flow === true) { 538 document.getElementById('subscriber_code').value = data.subscriber_code 539 document.getElementById('otp-container').style.display = "block"; 540 $('#phone-number').prop('readonly', true); 541 var display = document.getElementById('countdown'); 542 disableResend(); 543 startTimer(RESEND_TIMER, display) 544 document.getElementById('subscribe-btn-sms').value = "Verify OTP and Subscribe"; 545 document.getElementById('otp_verify_flow').value = true; 546 form.action = '/subscriptions/verify-otp'; 547 } else if (data.type === 'success' && action.includes('verify')){ 548 document.getElementById('otp-container').style.display = "none"; 549 $('#phone-number').val('').prop('readonly', false); 550 $('#otp').val(''); 551 document.getElementById('subscribe-btn-sms').value = "Send OTP"; 552 document.getElementById('otp_verify_flow').value = false; 553 form.action = '/subscriptions/new-sms'; 554 SP.currentPage.updatesDropdown.hide(); 555 } 556 }); 557 $("#btn-subcriber-change-number").on('click', () => { 558 document.getElementById('otp-container').style.display = "none"; 559 $('#phone-number').prop('readonly', false); 560 document.getElementById('subscribe-btn-sms').value = "Send OTP"; 561 form.action = '/subscriptions/new-sms'; 562 return false 563 }) 564 $('#resend-otp-btn').on('click', function(e) { 565 e.preventDefault(); 566 let phoneNumber = $('#phone-number').val(); 567 let countryCode = $('.phone-country').val(); 568 $.ajax({ 569 type: 'POST', 570 url: "/subscriptions/new-sms", 571 data: { 572 phone_number: phoneNumber, 573 phone_country: countryCode, 574 type: 'resend' 575 }, 576 }).done(function(data) { 577 var messageOptions = (data.type !== undefined && data.type !== null) ? { cssClass: data.type } : {}; 578 HRB.utils.notify(data.text, messageOptions); 579 var display = document.getElementById('countdown'); 580 disableResend(); 581 timer.style.display = "none" 582 if (data.type === 'success') { 583 startTimer(RESEND_TIMER, display); 584 } 585 }) 586 }); 587 }) 588 589 function startTimer(duration, display){ 590 var timer = duration, seconds; 591 clearInterval(countdownTimer); 592 countdownTimer = setInterval(function () { 593 seconds = parseInt(timer % 60, 10); 594 display.textContent = seconds; 595 if(--timer < 0){ 596 enableResend(); 597 clearInterval(countdownTimer); 598 } 599 }, 1000); 600 disableResend(); 601 } 602 function enableResend(){ 603 resendBtn.style.display = "block"; 604 timer.style.display = "none" 605 } 606 function disableResend(){ 607 resendBtn.style.display = "none"; 608 timer.style.display = "block" 609 } 610 611 $(function() { 612 $('#subscribe-form-email').on('submit', function() {
613 var tokenField = document.getElementById('email-otp-token-field'); 614 if (!tokenField) { 615 return; 616 } 617 let page_code = "pnpcptp8xh9k" 618 let key = keyForEmailOtpToken($('#email').val(), page_code); 619 tokenField.value = localStorage.getItem(key); 620 }); 621 }); 622 623 var emailOtpCountdownTimer; 624 var emailOtpResendBtn = document.getElementById('resend-email-otp'); 625 var emailOtpTimer = document.getElementById('email-otp-timer'); 626 var emailOtpForm = document.getElementById('subscribe-form-email'); 627 var EMAIL_OTP_RESEND_TIMER = 600; 628 $(function() { 629 $('#subscribe-form-email').on('ajax:success', function(e, data, status, xhr){ 630 const form = this; 631 const action = form.getAttribute('action'); 632 if (data.type === 'success' && data.email_otp_verify_flow === true) { 633 document.getElementById('email-otp-container').style.display = "block"; 634 var display = document.getElementById('email-otp-countdown'); 635 display.textContent = EMAIL_OTP_RESEND_TIMER; 636 disableEmailOtpResend(); 637 startEmailOtpTimer(EMAIL_OTP_RESEND_TIMER, display) 638 document.getElementById('subscribe-btn-email').value = "Verify OTP and Subscribe"; 639 document.getElementById('email_otp_verify_flow').value = true; 640 form.action = '/subscriptions/verify-email-otp'; 641 } else if (data.type === 'success' && action.includes('verify')){ 642 let email = $('#email') 643 let page_code = "pnpcptp8xh9k" 644 let key = keyForEmailOtpToken(email.val(), page_code); 645 localStorage.setItem(key, data.email_otp_auth_token); 646 647 document.getElementById('email-otp-container').style.display = "none"; 648 email.val('').prop('readonly', false); 649 $('#email-otp').val(''); 650 document.getElementById('subscribe-btn-email').value = "Send OTP"; 651 document.getElementById('email_otp_verify_flow').value = false; 652 form.action = '/subscriptions/new-email'; 653 SP.currentPage.updatesDropdown.hide(); 654 } 655 }); 656 $('#resend-email-otp-btn').on('click', function(e) { 657 e.preventDefault(); 658 let email = $('#email').val(); 659 $.ajax({ 660 type: 'POST', 661 url: "/subscriptions/new-email", 662 data: { 663 email: email 664 }, 665 }).done(function(data) { 666 var messageOptions = (data.type !== undefined && data.type !== null) ? { cssClass: data.type } : {}; 667 HRB.utils.notify(data.text, messageOptions); 668 if (data.type === 'success') { 669 var display = document.getElementById('email-otp-countdown'); 670 display.textContent = EMAIL_OTP_RESEND_TIMER; 671 disableEmailOtpResend(); 672 emailOtpTimer.style.display = "none" 673 startEmailOtpTimer(EMAIL_OTP_RESEND_TIMER, display); 674 } 675 }) 676 }); 677 }) 678 679 function startEmailOtpTimer(duration, display){ 680 var timer = duration, seconds; 681 clearInterval(emailOtpCountdownTimer); 682 emailOtpCountdownTimer = setInterval(function () { 683 seconds = parseInt(timer, 10); 684 display.textContent = seconds; 685 if(--timer < 0){ 686 enableEmailOtpResend(); 687 clearInterval(emailOtpCountdownTimer); 688 } 689 }, 1000); 690 disableEmailOtpResend(); 691 } 692 693 function enableEmailOtpResend(){ 694 emailOtpResendBtn.style.display = "block"; 695 emailOtpTimer.style.display = "none" 696 } 697 function disableEmailOtpResend(){ 698 emailOtpResendBtn.style.display = "none"; 699 emailOtpTimer.style.display = "block" 700 } 701 function keyForEmailOtpToken(email, pageCode) { 702 return email + '|' + pageCode+ '|SUBSCRIBE_VIA_EMAIL'; 703 } 704</script>
704 705 706 </div> 707 </div> 708 709</div> 710 <!-- this is outside of the .container so that the cover photo can go full width on mobile --> 711 712 713 <div class="container"> 714 <div class="history-nav border-color"> 715 <ul> 716 <li> 717 <a class="button current border-color" href="https://www.traviscistatus.com/history" aria-label="Incidents" aria-current=page>Incidents</a> 718 </li> 719 <li> 720 <a class="button border-color" href="https://www.traviscistatus.com/uptime" aria-label="Uptime" >Uptime</a> 721 </li> 722 </ul> 723</div> 724 725 726 <div data-react-class="HistoryIndex" data-react-props="{"page_status":{"page":{"name":"Travis CI","subdomain":"travisci","domain":"www.traviscistatus.com","created_at":"2013-02-27T10:16:24.362Z","updated_at":"2026-10-02T01:24:22.678Z","url":"https://travis-ci.com","hidden_from_search":false,"css_body_background_color":"fff","css_font_color":"333333","css_light_font_color":"8794A0","css_greens":"05c47a","css_yellows":"efcc00","css_oranges":"FF8C3E","css_reds":"FF5050","allow_page_subscribers":true,"allow_incident_subscribers":true,"notifications_from_email":"[email protected]","allow_email_subscribers":true,"allow_sms_subscribers":false,"twitter_username":null,"branding":"premium","support_url":null,"allow_webhook_subscribers":true,"css_border_color":"CCE1FF","css_graph_color":"0068FF","css_link_color":"0068FF","page_description":null,"activity_score":1668,"headline":null,"viewers_must_be_team_members":false,"ip_filters":null,"css_blues":"0068FF","time_zone":"UTC","notifications_reply_to_email":null,"notifications_email_footer":"You received this email because you are subscribed to Travis CI's service status notifications.","allow_rss_atom_feeds":true,"black_hole":null,"over_allocations_cohort":null,"over_allocations_resolved_at":null,"custom_components_limit":null,"allow_slack_subscribers":true,"css_no_data":"b3bac5","deleted_at":null,"allow_teams_subscription":false,"max_maintenance_automation_allowed":null,"custom_email_template":false,"hero_cover":{"updated_at":"2025-06-10T13:22:33.000+00:00","original_url":"//dka575ofm4ao0.cloudfront.net/pages-hero_covers/original/27/tci-logo_w1700h630-e25efd0e-8bda-4e6f-b5ca-e6ba7eb2ab65.png","size":69604,"normal_url":"//dka575ofm4ao0.cloudfront.net/pages-hero_covers/normal/27/tci-logo_w1700h630-e25efd0e-8bda-4e6f-b5ca-e6ba7eb2ab65.png","retina_url":"//dka575ofm4ao0.cloudfront.net/pages-hero_covers/retina/27/tci-logo_w1700h630-e25efd0e-8bda-4e6f-b5ca-e6ba7eb2ab65.png"},"transactional_logo":{"updated_at":null,"original_url":"","size":null,"normal_url":"","retina_url":""},"favicon_logo":{"updated_at":"2025-06-10T13:16:16.000+00:00","size":21753,"url":"//dka575ofm4ao0.cloudfront.net/pages-favicon_logos/original/27/favicon-3a4bd34c-f8d3-468e-ab94-50c3bef48ddc.png"},"email_logo":{"updated_at":null,"original_url":"","size":null,"normal_url":"","retina_url":""},"twitter_logo":{"updated_at":null,"size":null,"url":""},"id":"pnpcptp8xh9k","organization_id":"pnpcptp8xh9k"}},"components":[{"status":"operational","name":"API","created_at":"2013-02-27T10:18:04.923Z","updated_at":"2026-04-11T13:16:07.497Z","position":1,"description":null,"showcase":true,"start_date":null,"id":"v3pv505czcvn","group_id":null,"page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"Web App","created_at":"2013-02-27T10:18:30.857Z","updated_at":"2026-04-11T13:16:07.514Z","position":2,"description":null,"showcase":true,"start_date":null,"id":"
726x0lpb7qzw919","group_id":null,"page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"Builds Processing","created_at":"2014-12-02T14:36:39.115Z","updated_at":"2018-01-11T18:41:23.281Z","position":3,"description":null,"showcase":false,"start_date":null,"id":"zd1jfc33yt1p","group_id":null,"page_id":"pnpcptp8xh9k","group":true,"only_show_if_degraded":false,"components":["fv408yjjqhv6","5wvsvvr8b7j4"]},{"status":"operational","name":"Linux and Windows Builds","created_at":"2015-08-04T17:53:14.285Z","updated_at":"2026-05-25T19:26:11.903Z","position":4,"description":"VM builds running in GCE. This includes both Linux (all distributions) and Windows builds.","showcase":true,"start_date":null,"id":"fv408yjjqhv6","group_id":"zd1jfc33yt1p","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"IBM Z Builds","created_at":"2023-11-22T17:06:00.229Z","updated_at":"2026-05-25T19:26:11.919Z","position":5,"description":"Scheduling and running of builds on the IBM s390x architecture.","showcase":false,"start_date":"2023-11-22T00:00:00.000Z","id":"5wvsvvr8b7j4","group_id":"zd1jfc33yt1p","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"Background Processing","created_at":"2014-12-02T14:17:50.925Z","updated_at":"2018-03-27T08:02:12.615Z","position":4,"description":null,"showcase":false,"start_date":null,"id":"43255b952p01","group_id":null,"page_id":"pnpcptp8xh9k","group":true,"only_show_if_degraded":false,"components":["pw8ss5jcjb45","vmgk8phkxfdf","y0v5kvk1msqy"]},{"status":"operational","name":"Log Processing","created_at":"2013-02-27T10:16:45.985Z","updated_at":"2026-05-25T19:26:11.871Z","position":1,"description":null,"showcase":true,"start_date":null,"id":"pw8ss5jcjb45","group_id":"43255b952p01","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"User Sync","created_at":"2014-02-13T13:52:43.180Z","updated_at":"2026-02-28T13:51:06.769Z","position":2,"description":"Synchronization with GitHub / Assembla / GitLab / BitBucket via their API","showcase":true,"start_date":null,"id":"vmgk8phkxfdf","group_id":"43255b952p01","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"Notifications","created_at":"2014-10-30T16:20:14.929Z","updated_at":"2026-05-25T19:26:11.888Z","position":3,"description":"Build notifications like email, Campfire, Slack, HipChat, IRC","showcase":true,"start_date":null,"id":"y0v5kvk1msqy","group_id":"43255b952p01","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"Third Party Services","created_at":"2014-12-02T14:18:52.321Z","updated_at":"2014-12-02T14:37:02.048Z","position":5,"description":null,"showcase":false,"start_date":null,"id":"ygwn6k3272yn","group_id":null,"page_id":"pnpcptp8xh9k","group":true,"only_show_if_degraded":false,"components":["kgbljfbx7598","xgcz8vf731tx","032hr7t0bg9b","t3ncs9kc9w2x","qblbn1tf2q02","lxczb8x45gmm","5vr9p1qt86l6","wrxql47n0svb","k17399181mfn","6p07pwzcl4wb"]},{"status":"operational","name":"GitHub","created_at":"2013-06-26T19:35:27.070Z","updated_at":"2026-08-17T18:23:48.188Z","position":1,"description":null,"showcase":false,"start_date":null,"id":"kgbljfbx7598","group_id":"ygwn6k3272yn","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"DNSimple Name Servers","created_at":"
7262014-09-20T11:45:08.031Z","updated_at":"2026-09-06T15:55:26.442Z","position":3,"description":null,"showcase":false,"start_date":null,"id":"xgcz8vf731tx","group_id":"ygwn6k3272yn","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"Pusher Pusher REST API","created_at":"2015-03-03T16:31:36.579Z","updated_at":"2026-03-15T06:30:06.857Z","position":6,"description":null,"showcase":false,"start_date":null,"id":"032hr7t0bg9b","group_id":"ygwn6k3272yn","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"Pusher WebSocket client API","created_at":"2015-03-03T16:31:38.201Z","updated_at":"2026-04-06T02:55:50.494Z","position":7,"description":null,"showcase":false,"start_date":null,"id":"t3ncs9kc9w2x","group_id":"ygwn6k3272yn","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"Pusher Presence channels","created_at":"2015-03-03T16:31:58.408Z","updated_at":"2026-02-05T14:58:26.331Z","position":8,"description":null,"showcase":false,"start_date":null,"id":"qblbn1tf2q02","group_id":"ygwn6k3272yn","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"Pusher Webhooks","created_at":"2015-03-03T16:31:59.720Z","updated_at":"2026-03-31T12:44:41.452Z","position":9,"description":null,"showcase":false,"start_date":null,"id":"lxczb8x45gmm","group_id":"ygwn6k3272yn","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"AWS ec2-us-east-1","created_at":"2015-03-03T16:33:14.880Z","updated_at":"2022-04-19T18:33:34.540Z","position":10,"description":null,"showcase":false,"start_date":null,"id":"5vr9p1qt86l6","group_id":"ygwn6k3272yn","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"PagerDuty Notification Delivery","created_at":"2015-03-03T16:40:49.169Z","updated_at":"2020-04-25T08:32:30.798Z","position":13,"description":null,"showcase":false,"start_date":null,"id":"wrxql47n0svb","group_id":"ygwn6k3272yn","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"npm, Inc. Registry Reads","created_at":"2017-11-08T19:44:08.263Z","updated_at":"2026-09-27T06:48:28.718Z","position":14,"description":"GETs to registry.npmjs.org","showcase":false,"start_date":null,"id":"k17399181mfn","group_id":"ygwn6k3272yn","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"Assembla","created_at":"2023-10-12T11:53:16.631Z","updated_at":"2023-10-12T12:22:09.587Z","position":16,"description":"Assembla.com Git, SVN and P4 repository and project management tool.","showcase":false,"start_date":"2023-10-12T00:00:00.000Z","id":"6p07pwzcl4wb","group_id":"ygwn6k3272yn","page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"Google Cloud Platform Google Compute Engine","created_at":"2017-03-15T21:03:31.689Z","updated_at":"2025-04-26T19:25:58.703Z","position":7,"description":null,"showcase":false,"start_date":null,"id":"q4xyt8yypthv","group_id":null,"page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"GitHub API Requests","created_at":"2019-02-06T19:24:41.554Z","updated_at":"2025-04-26T19:25:58.719Z","position":8,"description":null,"showcase":false,"start_date":null,"id":"xhp6ymqqyg3h","group_id":null,"page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"GitHub Issues, PRs, Dashboard, Projects","created_at":"2019-03-25T10:00:05.134Z","updated_at":"2026-09-13T10:46:05.964Z","position":9,"description":null,"showcase":false,"start_date":null,"id":"c75kxzjv80rv","group_id":null,"page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"Assembla API and Merge Requests","created_at":"2023-10-12T11:55:52.684Z","updated_at":"2026-04-11T13:16:07.571Z","position":10,"description":null,"showcase":false,"start_date":"2023-10-12T00:00:00.000Z","id":"cs2n4vkyfmtk","group_id":null,"page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false},{"status":"operational","name":"GitLab API and Pull Requests","created_at":"2023-10-12T11:56:28.977Z","updated_at":"2025-04-26T19:25:58.763Z","position":11,"description":null,"showcase":false,"start_date":"2023-10-12T00:00:00.000Z","id":"fhqxrfxvc50z","group_id":null,"page_id":"pnpcptp8xh9k","group":false,"only_show_if_degraded":false}],"months":[{"name":"October","year":2026,"starts_on":4,"days":31,"incidents":[]},{"name":"September","year":2026,"starts_on":2,"days":30,"incidents":[]},{"name":"August","year":2026,"starts_on":6,"days":31,"incidents":[]}],"show_component_filter":false,"show_uptime_calendar":true,"component_filter":null,"start_time":"2026-08-01T00:00:00Z","end_time":"2026-10-31T23:59:59Z","a11yHeadings":true}"></div> 727 728 <div class="page-footer border-color font-small"> 729 <a href="/" aria-label="Back to current status"> 730 <span class="current-status-arrow">←</span> Current Status 731 </a> 732 <span class="color-secondary powered-by"><a class="color-secondary" target="_blank" rel="noopener noreferrer nofollow" href="https://www.atlassian.com/software/statuspage?utm_campaign=www.traviscistatus.com&utm_content=SP-notifications&utm_medium=powered-by&utm_source=inapp">Powered by Atlassian Statuspage</a></span> 733</div> 734 735 </div> 736 737 738 739</div> 740 741 742
742<script src="https://dka575ofm4ao0.cloudfront.net/assets/status_manifest-b790849ccb41192b3f7d9c14d5a4a6d5142add81fc8522649ca5c82f6a1fbb0e.js"></script>
742 743 <div id="cpt-notification-container" role="status" aria-live="polite" aria-atomic="true"></div> 744 745 746 747 748 749 <!-- all of the content_for stuff --> 750
750<script src="https://dka575ofm4ao0.cloudfront.net/assets/register_subscription_form-589b657fec607087fc5c740c568270907310bc4f6aaa20256e70f01b103025ca.js"></script>
750 751 752
752<script type="text/javascript"> 753 $(function() { 754 SP.currentPage.registerSubscriptionForm('email'); 755 756 757 SP.currentPage.registerSubscriptionForm('webhook'); 758 759 }); 760 761 762 763 764 765 </script>
765 766
766<script src="https://dka575ofm4ao0.cloudfront.net/assets/status_common-a7b1e9f22a2c94a83d347ec517cabf21494ca11867ebf891f46f89c9b4101811.js"></script>
766 767 768 769 770
770<script> 771 /** INITIALIZATION **/ 772 var recaptchaIds = {} 773 774 // Unfortunately there's no unique selectors on the parent divs that recaptcha adds. The first unique selector 775 // is the iframe rendered 2 levels deep. So this waits until the iframes are added to the page, then finds 776 // the parent div and sets the z index so that it'll render above our modals & dropdowns from the start. 777 function setZIndex(captchaCount, startTime) { 778 // bail after 10s just in case so we don't do this forever if something whaky happens 779 if (new Date() - startTime > 10000) { 780 return; 781 } 782 783 var iframes = document.querySelectorAll('iframe[title="recaptcha challenge"]'); 784 if (iframes.length != captchaCount) { 785 setTimeout(function() { 786 setZIndex(captchaCount, startTime); 787 }, 500); 788 } 789 790 for (var i = 0; i < iframes.length; i++) { 791 // incident subscribe modal is 1050, so this has to be above that 792 iframes[i].parentElement.parentElement.style.zIndex = "1100"; 793 } 794 } 795 796 function updateCaptchaIframeTitle(captchaCount, startTime, updates=0) { 797 798 if (new Date() - startTime > 10000 || captchaCount === updates) { 799 return; 800 } 801 var iframesWithTitle = document.querySelectorAll('iframe[title="recaptcha challenge expires in two minutes"]'); 802 803 if (iframesWithTitle.length != captchaCount) { 804 setTimeout(function() { 805 updateCaptchaIframeTitle(captchaCount, startTime, iframesWithTitle.length + updates); 806 }, 500); 807 } 808 809 for (var i = 0; i < iframesWithTitle.length; i++) { 810 iframesWithTitle[i].title = "recaptcha"; 811 } 812 } 813 814 function addIncidentCaptcha() { 815 var incidentCaptcha = document.createElement('div'); 816 incidentCaptcha.setAttribute('id', 'subscribe-incident-recaptcha'); 817 incidentCaptcha.setAttribute('class', 'g-recaptcha'); 818 incidentCaptcha.setAttribute('data-sitekey', '6LcZ-b0UAAAAAENi956aWzynTT2ZJ80dGU3F80Op'); 819 incidentCaptcha.setAttribute('data-callback', 'submitIncidentSubscriberSuccess'); 820 incidentCaptcha.setAttribute('data-error-callback', 'submitIncidentSubscriberError'); 821 incidentCaptcha.setAttribute('data-size', 'invisible'); 822 document.body.appendChild(incidentCaptcha); 823 var incidentCode = document.createElement('input'); 824 incidentCode.setAttribute('type', 'hidden'); 825 incidentCode.setAttribute('id', 'submit_incident_code'); 826 document.body.appendChild(incidentCode); 827 } 828 829 var onloadCallback = function() { 830 // if there is an incident, then add incident captcha element 831 if (document.getElementsByClassName('modal-open-incident-subscribe').length > 0) { 832 addIncidentCaptcha(); 833 } 834 835 var captchas = document.getElementsByClassName("g-recaptcha"); 836 837 for(var i = 0; i < captchas.length; i++) { 838 var elId = captchas[i].id; 839 recaptchaIds[elId] = grecaptcha.enterprise.render(elId); 840 } 841 842 setZIndex(captchas.length, new Date()); 843 updateCaptchaIframeTitle(captchas.length, new Date()); 844 } 845 846 847 /** SUBSCRIBE DROPDOWN */ 848 849 // callbacks for captcha success 850 function submitNewSubscriber(type, error) { 851 if (error) document.querySelector('#subscribe-form-' + type + ' #captcha_error').value = 'true'; 852 853 document.getElementById('subscribe-form-' + type).dispatchEvent(new Event('submit', {bubbles: true, cancelable: true})); 854 grecaptcha.enterprise.reset(recaptchaIds['subscribe-btn-' + type]); 855 } 856 function submitNewEmailSubscriber(token) { 857 submitNewSubscriber('email'); 858 } 859 function submitNewSmsSubscriber(token) { 860 submitNewSubscriber('sms'); 861 } 862 function submitNewWebhookSubscriber(token) { 863 submitNewSubscriber('webhook'); 864 } 865 function submitIncidentSubscriber(token, error, incidentCodeOverride) { 866 var incidentCode = incidentCodeOverride; 867 if (!incidentCode) { 868 var incidentCodeEl = document.getElementById('submit_incident_code'); 869 incidentCode = incidentCodeEl && incidentCodeEl.value; 870 } 871 var incidentForm = incidentCode && document.getElementById('subscribe-form-' + incidentCode); 872 if (!incidentForm) { 873 return; 874 } 875 876 var captchaError = incidentForm.querySelector('input[name="captcha_error"]'); 877 var recaptchaResponse = incidentForm.querySelector('input[name="g-recaptcha-response"]'); 878 if (captchaError) { 879 captchaError.value = error; 880 } 881 if (recaptchaResponse) { 882 recaptchaResponse.value = token; 883 } 884 incidentForm.dispatchEvent(new Event('submit', {bubbles: true, cancelable: true})); 885 if (window.grecaptcha && grecaptcha.enterprise && recaptchaIds['subscribe-incident-recaptcha'] != null) { 886 grecaptcha.enterprise.reset(recaptchaIds['subscribe-incident-recaptcha']); 887 } 888 } 889 function submitIncidentSubscriberSuccess(token) { 890 submitIncidentSubscriber(token, 'false'); 891 } 892 893 // callbacks if we get captcha network errors 894 function emailSubscriberCaptchaError(token) { 895 submitNewSubscriber('email', true); 896 } 897 function smsSubscriberCaptchaError(token) { 898 submitNewSubscriber('sms', true); 899 } 900 function webhookSubscriberCaptchaError(token) { 901 submitNewSubscriber('webhook', true); 902 } 903 function submitIncidentSubscriberError(token) { 904 submitIncidentSubscriber(token, 'true'); 905 } 906 907 // tracking clicks 908 ['email', 'sms', 'webhook'].forEach(function(type) { 909 var el = document.getElementById('subscribe-btn-' + type); 910 el && el.addEventListener("click", function() { 911 $.ajax({ 912 type: "POST", 913 url: "/subscriptions/track_attempt", 914 data: { 915 type: type 916 } 917 }) 918 }) 919 }) 920 921 // form submission success callbacks 922 $('#subscribe-form-email').on('ajax:success', function(e, data, status, xhr){ 923 if (data.type === 'success') { 924 SP.currentPage.updatesDropdown.hide(); 925 var emailField = document.getElementById('email'); 926 if (emailField) { 927 emailField.value = ''; 928 } 929 } 930 }); 931 $('#subscribe-form-sms').on('ajax:success', function(e, data, status, xhr){ 932 if (data.type === 'success' && data.otp_flow !== true) { 933 SP.currentPage.updatesDropdown.hide(); 934 var phoneField = document.getElementById('phone-number'); 935 if (phoneField) { 936 phoneField.value = ''; 937 } 938 } 939 }); 940 $('#subscribe-form-webhook').on('ajax:success', function(e, data, status, xhr){ 941 if (data.type === 'success') { 942 SP.currentPage.updatesDropdown.hide(); 943 document.getElementById('endpoint-webhooks').value = ''; 944 document.getElementById('email-webhooks').value = ''; 945 } 946 }); 947 948 $('a.subscribe').on('click', function() { 949 document.body.style.overflow = "hidden"; 950 document.body.style.height = "100vh"; 951 }); 952 953 $('div.modal-open-incident-subscribe').on('hidden', function(){ 954 document.body.style.overflow = ""; 955 document.body.style.height = ""; 956 }); 957 958 function submitCaptchaIncidentSubscribe(event) { 959 var incidentCode = event.target.id.split('-')[2]; 960 event.preventDefault(); 961 962 $.ajax({ 963 type: "POST", 964 url: "/subscriptions/track_attempt", 965 data: { 966 type: 'incident' 967 } 968 }) 969 970 var incidentCodeField = document.getElementById('submit_incident_code'); 971 if (incidentCodeField) { 972 incidentCodeField.value = incidentCode; 973 } 974 975 // Recaptcha's onloadCallback is what creates #submit_incident_code and the 976 // widget id. If the enterprise.js script is blocked (ad blockers, CI url 977 // blacklist), execute() and .value on a null node throw and the subscribe 978 // click never reaches the server. 979 var recaptchaId = recaptchaIds['subscribe-incident-recaptcha']; 980 if (window.grecaptcha && grecaptcha.enterprise && typeof grecaptcha.enterprise.execute === 'function' && recaptchaId != null) { 981 grecaptcha.enterprise.execute(recaptchaId); 982 } else { 983 submitIncidentSubscriber('', 'true', incidentCode); 984 } 985 } 986</script>
vendor: 135 bytes, lines 986-992
986 987 988<script src='https://www.recaptcha.net/recaptcha/enterprise.js?onload=onloadCallback&render=explicit' async defer></script> 989 990 991 992
992<script src="https://dka575ofm4ao0.cloudfront.net/packs/common-b57e85f6a60348cdd566.chunk.js"></script>
992 993
993<script src="https://dka575ofm4ao0.cloudfront.net/packs/globals-79d49f8cfe179f020629.chunk.js"></script>
993 994 995
995<script src="https://dka575ofm4ao0.cloudfront.net/packs/runtime-e9fe27ac357824763c7d.js"></script>
995 996 997 998
998<script src="https://dka575ofm4ao0.cloudfront.net/packs/status-46c9a85ee33b4106a045.chunk.js"></script>
998 999
999<script src="https://dka575ofm4ao0.cloudfront.net/packs/components-95f0cadd8954a909f19d.chunk.js"></script>
999 1000 1001 1002
1002<script> 1003 window.addEventListener('load', function () { 1004 const urlParams = new URLSearchParams(window.location.search); 1005 const messageToken = urlParams.get('slack_message_token'); 1006 const channelName = escape(urlParams.get('channel_name')); 1007 1008 if(!!messageToken) { 1009 switch(messageToken) { 1010 case 'slack_auth_error': 1011 HRB.utils.notify('The Slack authorization attempt was unsuccessful. Try again.', {cssClass:'error'}); 1012 break; 1013 case 'subscribers_disabled_error': 1014 HRB.utils.notify('Slack subscriptions are not enabled on this page.', {cssClass:'error'}); 1015 break; 1016 case 'direct_message_channel_error': 1017 HRB.utils.notify('Subscriptions arenât supported in direct messages. Try subscribing again and choose a channel instead.', {cssClass:'error'}); 1018 break 1019 case 'duplicate_error': 1020 HRB.utils.notify("You're already subscribed to get Slack notifications in that channel.", {cssClass:'error'}); 1021 break; 1022 case 'duplicate_private_channel_error': 1023 HRB.utils.notify(`You're already subscribed to get Slack notifications in #${channelName}. Invite the @Statuspage app to that channel to start getting status updates.`, {cssClass: 'error'}); 1024 break; 1025 case 'default_success': 1026 HRB.utils.notify("You're now subscribed to get Statuspage updates in Slack!", {cssClass:'success'}); 1027 break; 1028 case 'private_channel_success': 1029 HRB.utils.notify(`IMPORTANT: Invite the @Statuspage app to your Slack channel #${channelName} to start getting status updates.`, {cssClass:'success'}); 1030 break; 1031 } 1032 } 1033 }); 1034</script>
1034 1035 1036 1037<!-- FOR FLASH NOTICES --> 1038 1039<!-- FOR ERROR --> 1040 1041 1042
1042<script> 1043 $(function() { 1044 var $link = $('<span class="color-secondary powered-by"><a class="color-secondary" target="_blank" rel="noopener noreferrer nofollow" href="https://www.atlassian.com/software/statuspage?utm_campaign=www.traviscistatus.com&utm_content=SP-notifications&utm_medium=powered-by&utm_source=inapp">Powered by Atlassian Statuspage</a></span>'); 1045 1046 var setPoweredByStyles = function() { 1047 if (!$('.powered-by').length) { 1048 $link.appendTo($('.page-footer')) 1049 } 1050 $('.powered-by').attr('style', 'display: inline !important; visibility:visible !important; opacity: 1 !important; position:static !important; text-indent:0px !important; transform:scale(1) !important'); 1051 } 1052 1053 setInterval(setPoweredByStyles, 1000); 1054 }); 1055</script>
1055 1056 1057 1058 1059 1060 1061 </body> 1062</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.