GitHub Status
GitHub Status /* Dynamic Font Stack based on Feature Flag */ /* Using Atlassian Sans & Mono */: root { --font-stack-a: "Atlassian Sans", "Helvetica Neue", Helvetica, Arial, Sans-Serif; --font-stack-b: "Atlassian Mono", "SFMono-Medium", "SF Mono", "Segoe UI Mono", "Roboto Mono", "Ubuntu Mono", Menlo, Consolas, Courier, monospace; } window. pageColorData = {"blue": "#0366d6", "border": "#e1e4e8", "body_background": "#ffffff", "font": "#24292e", "graph": "#0366d6", "green": "#28a745", "light_font": "#6a737d", "link": "#0366d6", "orange": "#e36209", "red": "#dc3545", "yellow": "#dbab09", "no_data": "#b3bac5"}; /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ body, . layout-content. status. status-api. section. example-container. example-opener. color-secondary, . grouped-items-selector, . layout-content. status. status-full-history. history-nav a. current, div[id^="subscribe-modal"]. modal-footer, div[id^="subscribe-modal"], div[id^="updates-dropdown"]. updates-dropdown-section, #uptime-tooltip. tooltip-box { background-color: #ffffff; } #uptime-tooltip. pointer-container. pointer-smaller { border-bottom-color: #ffffff; } /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ body. status, . color-primary, . color-primary: hover, . layout-content. status-index. status-day. update-title. impact-none a, . layout-content. status-index. status-day. update-title. impact-none a: hover, . layout-content. status-index. timeframes-container. timeframe. active, . layout-content. status-full-history. month. incident-container. impact-none, . layout-content. status. status-index. incidents-list. incident-title. impact-none a, . incident-history. impact-none, . layout-content. status. grouped-items-selector. inline. grouped-item. active, . layout-content. status. status-full-history. history-nav a. current, . layout-content. status. status-full-history. history-nav a: not(. current): hover, div[id^="subscribe-modal"]. modal-header. close, . grouped-item-label, #uptime-tooltip. tooltip-box. tooltip-content. related-events. related-event a. related-event-link { color: #24292e; }. layout-content. status. status-index. components-statuses. component-container. name { color: #24292e; color: rgba(36, 41, 46, . 8); } /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ small, . layout-content. status. table-row. date, . color-secondary, . layout-content. status. grouped-items-selector. inline. grouped-item, . layout-content. status. status-full-history. history-footer. pagination a. disabled, . layout-content. status. status-full-history. history-nav a, #uptime-tooltip. tooltip-box. tooltip-content. related-events #related-event-header { color: #6a737d; } /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ body. status. layout-content. status. border-color, hr, . tooltip-base, . markdown-display table, div[id^="subscribe-modal"], #uptime-tooltip. tooltip-box { border-color: #e1e4e8; } div[id^="subscribe-modal"]. modal-footer, . markdown-display table td { border-top-color: #e1e4e8; }. markdown-display table td + td, . markdown-display table th + th { border-left-color: #e1e4e8; } div[id^="subscribe-modal"]. modal-header, #uptime-tooltip. pointer-container. pointer-larger { border-bottom-color: #e1e4e8; } #uptime-tooltip. tooltip-box. outage-field { /* Generate the background-color for the outage-field from the css_body_background_color and css_border_color. 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 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. 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). */ background-color: rgba(225, 228, 232, 0. 31); /* outage-field border-color alpha is inverse to the luminosity of css_body_background_color. That is to say, with a default white background this border is transparent, but on a black background, it's opaque css_border_color. */ border-color: rgba(225, 228, 232, 0. 0); } /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */. layout-content. status. status-index. status-day. update-title. impact-critical a, . layout-content. status. status-index. status-day. update-title. impact-critical a: hover, . layout-content. status. status-index. page-status. status-critical, . layout-content. status. status-index. unresolved-incident. impact-critical. incident-title, . flat-button. background-red { background-color: #dc3545; }. layout-content. status-index. components-statuses. component-container. status-red: after, . layout-content. status-full-history. month. incident-container. impact-critical, . layout-content. status-incident. incident-name. impact-critical, . layout-content. status. status-index. incidents-list. incident-title. impact-critical a, . status-red. icon-indicator, . incident-history. impact-critical, . components-container. component-inner-container. status-red. component-status, . components-container. component-inner-container. status-red. icon-indicator { color: #dc3545; }. layout-content. status. status-index. unresolved-incident. impact-critical. updates { border-color: #dc3545; } /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */. layout-content. status. status-index. status-day. update-title. impact-major a, . layout-content. status. status-index. status-day. update-title. impact-major a: hover, . layout-content. status. status-index. page-status. status-major, . layout-content. status. status-index. unresolved-incident. impact-major. incident-title { background-color: #e36209; }. layout-content. status-index. components-statuses. component-container. status-orange: after, . layout-content. status-full-history. month. incident-container. impact-major, . layout-content. status-incident. incident-name. impact-major, . layout-content. status. status-index. incidents-list. incident-title. impact-major a, . status-orange. icon-indicator, . incident-history. impact-major, . components-container. component-inner-container. status-orange. component-status, . components-container. component-inner-container. status-orange. icon-indicator { color: #e36209; }. layout-content. status. status-index. unresolved-incident. impact-major. updates { border-color: #e36209; } /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */. layout-content. status. status-index. status-day. update-title. impact-minor a, . layout-content. status. status-index. status-day. update-title. impact-minor a: hover, . layout-content. status. status-index. page-status. status-minor, . layout-content. status. status-index. unresolved-incident. impact-minor. incident-title, . layout-content. status. status-index. scheduled-incidents-container. tab { background-color: #dbab09; }. layout-content. status-index. components-statuses. component-container. status-yellow: after, . layout-content. status-full-history. month. incident-container. impact-minor, . layout-content. status-incident. incident-name. impact-minor, . layout-content. status. status-index. incidents-list. incident-title. impact-minor a, . status-yellow. icon-indicator, . incident-history. impact-minor, . components-container. component-inner-container. status-yellow. component-status, . components-container. component-inner-container. status-yellow. icon-indicator, . layout-content. status. manage-subscriptions. confirmation-infobox. fa { color: #dbab09; }. layout-content. status. status-index. unresolved-incident. impact-minor. updates, . layout-content. status. status-index. scheduled-incidents-container { border-color: #dbab09; } /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */. layout-content. status. status-index. status-day. update-title. impact-maintenance a, . layout-content. status. status-index. status-day. update-title. impact-maintenance a: hover, . layout-content. status. status-index. page-status. status-maintenance, . layout-content. status. status-index. unresolved-incident. impact-maintenance. incident-title, . layout-content. status. status-index. scheduled-incidents-container. tab { background-color: #0366d6; }. layout-content. status-index. components-statuses. component-container. status-blue: after, . layout-content. status-full-history. month. incident-container. impact-maintenance, . layout-content. status-incident. incident-name. impact-maintenance, . layout-content. status. status-index. incidents-list. incident-title. impact-maintenance a, . status-blue. icon-indicator, . incident-history. impact-maintenance, . components-container. component-inner-container. status-blue. component-status, . components-container. component-inner-container. status-blue. icon-indicator { color: #0366d6; }. layout-content. status. status-index. unresolved-incident. impact-maintenance. updates, . layout-content. status. status-index. scheduled-incidents-container { border-color: #0366d6; } /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */. layout-content. status. status-index. page-status. status-none { background-color: #28a745; }. layout-content. status-index. components-statuses. component-container. status-green: after, . status-green. icon-indicator, . components-container. component-inner-container. status-green. component-status, . components-container. component-inner-container. status-green. icon-indicator { color: #28a745; } /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ a, a: hover, . layout-content. status-index. page-footer span a: hover, . layout-content. status-index. timeframes-container. timeframe: not(. active): hover, . layout-content. status-incident. subheader a: hover { color: #0366d6; }. flat-button, . masthead. updates-dropdown-container. show-updates-dropdown, . layout-content. status-full-history. show-filter. open { background-color: #0366d6; } /* CUSTOM COLOR OVERRIDES FOR UPTIME SHOWCASE */. components-section. components-uptime-link { color: #6a737d; }. layout-content. status. shared-partial. uptime-90-days-wrapper. legend. legend-item { color: #6a737d; opacity: 1; }. layout-content. status. shared-partial. uptime-90-days-wrapper. legend. legend-item. light { color: #6a737d; opacity: 1; }. layout-content. status. shared-partial. uptime-90-days-wrapper. legend. spacer { background: #6a737d; opacity: 1; } var meta = document. createElement('meta'); meta. setAttribute('name', 'ha-url'); meta. setAttribute('content', 'https: //collector. githubapp. com/statuspage-views/collect'); document. head. appendChild(meta); function initAnalytics() { if (! window. _ha) { return } // Send general pageview window. _ha. sendPageView() // If on homepage, send index page view if (window. location. pathname === '/' && document. referrer! == (document. location. origin + document. location. pathname)) { // Create new instance for home page views exclusively let indexHa = Object. create(window. _ha); indexHa. options = {. . . window. _ha. options } indexHa. options. collectorUrl = 'https: //collector. githubapp. com/statuspage/collect'; indexHa. sendPageView(); } } document. addEventListener("DOMContentLoaded", function () { // Select the Twitter button var twitterBtn = document. getElementById("updates-dropdown-twitter-btn"); if (twitterBtn) { // Remove any existing content inside the Twitter icon container twitterBtn. innerHTML = ` Subscribe via X `; } }); GitHub Octicon logo Help Community Status GitHub. com x Get email notifications whenever GitHub creates, updates or resolves an incident. Email address: Enter OTP: Resend OTP in: seconds Didn't receive the OTP? Resend OTP By subscribing you agree to our Privacy Policy. This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply. Get text message notifications whenever GitHub creates or resolves an incident. Country code: Afghanistan (+93) Albania (+355) Algeria (+213) American Samoa (+1) Andorra (+376) Angola (+244) Anguilla (+1) Antigua and Barbuda (+1) Argentina (+54) Armenia (+374) Aruba (+297) Australia/Cocos/Christmas Island (+61) Austria (+43) Azerbaijan (+994) Bahamas (+1) Bahrain (+973) Bangladesh (+880) Barbados (+1) Belarus (+375) Belgium (+32) Belize (+501) Benin (+229) Bermuda (+1) Bolivia (+591) Bosnia and Herzegovina (+387) Botswana (+267) Brazil (+55) Brunei (+673) Bulgaria (+359) Burkina Faso (+226) Burundi (+257) Cambodia (+855) Cameroon (+237) Canada (+1) Cape Verde (+238) Cayman Islands (+1) Central Africa (+236) Chad (+235) Chile (+56) China (+86) Colombia (+57) Comoros (+269) Congo (+242) Congo, Dem Rep (+243) Costa Rica (+506) Croatia (+385) Cyprus (+357) Czech Republic (+420) Denmark (+45) Djibouti (+253) Dominica (+1) Dominican Republic (+1) Egypt (+20) El Salvador (+503) Equatorial Guinea (+240) Estonia (+372) Ethiopia (+251) Faroe Islands (+298) Fiji (+679) Finland/Aland Islands (+358) France (+33) French Guiana (+594) French Polynesia (+689) Gabon (+241) Gambia (+220) Georgia (+995) Germany (+49) Ghana (+233) Gibraltar (+350) Greece (+30) Greenland (+299) Grenada (+1) Guadeloupe (+590) Guam (+1) Guatemala (+502) Guinea (+224) Guyana (+592) Haiti (+509) Honduras (+504) Hong Kong (+852) Hungary (+36) Iceland (+354) India (+91) Indonesia (+62) Iraq (+964) Ireland (+353) Israel (+972) Italy (+39) Jamaica (+1) Japan (+81) Jordan (+962) Kenya (+254) Korea, Republic of (+82) Kosovo (+383) Kuwait (+965) Kyrgyzstan (+996) Laos (+856) Latvia (+371) Lebanon (+961) Lesotho (+266) Liberia (+231) Libya (+218) Liechtenstein (+423) Lithuania (+370) Luxembourg (+352) Macao (+853) Macedonia (+389) Madagascar (+261) Malawi (+265) Malaysia (+60) Maldives (+960) Mali (+223) Malta (+356) Martinique (+596) Mauritania (+222) Mauritius (+230) Mexico (+52) Monaco (+377) Mongolia (+976) Montenegro (+382) Montserrat (+1) Morocco/Western Sahara (+212) Mozambique (+258) Namibia (+264) Nepal (+977) Netherlands (+31) New Zealand (+64) Nicaragua (+505) Niger (+227) Nigeria (+234) Norway (+47) Oman (+968) Pakistan (+92) Palestinian Territory (+970) Panama (+507) Paraguay (+595) Peru (+51) Philippines (+63) Poland (+48) Portugal (+351) Puerto Rico (+1) Qatar (+974) Reunion/Mayotte (+262) Romania (+40) Russia/Kazakhstan (+7) Rwanda (+250) Samoa (+685) San Marino (+378) Saudi Arabia (+966) Senegal (+221) Serbia (+381) Seychelles (+248) Sierra Leone (+232) Singapore (+65) Slovakia (+421) Slovenia (+386) South Africa (+27) Spain (+34) Sri Lanka (+94) St Kitts and Nevis (+1) St Lucia (+1) St Vincent Grenadines (+1) Sudan (+249) Suriname (+597) Swaziland (+268) Sweden (+46) Switzerland (+41) Taiwan (+886) Tajikistan (+992) Tanzania (+255) Thailand (+66) Togo (+228) Tonga (+676) Trinidad and Tobago (+1) Tunisia (+216) Turkey (+90) Turks and Caicos Islands (+1) Uganda (+256) Ukraine (+380) United Arab Emirates (+971) United Kingdom (+44) United States (+1) Uruguay (+598) Uzbekistan (+998) Venezuela (+58) Vietnam (+84) Virgin Islands, British (+1) Virgin Islands, U. S. (+1) Yemen (+967) Zambia (+260) Zimbabwe (+263) Phone number: Change number Enter OTP: Resend OTP in: 30 seconds Didn't receive the OTP? Resend OTP Message and data rates may apply. By subscribing you agree to our Privacy Policy, the Atlassian Terms of Service, and the Atlassian Privacy Policy. This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply. Get incident updates and maintenance status messages in Slack. Subscribe via Slack By subscribing you acknowledge our Privacy Policy. In addition, you agree to the Atlassian Cloud Terms of Service and acknowledge Atlassian's Privacy Policy. Get webhook notifications whenever GitHub creates an incident, updates an incident, resolves an incident or changes a component status. Webhook URL: The URL we should send the webhooks to Email address: We'll send you email if your endpoint fails By subscribing you agree to our Privacy Policy. This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply. Follow @githubstatus or view our profile. . twitter-follow-button { margin-bottom: -6px; }! function(d, s, id){var js, fjs=d. getElementsByTagName(s)[0], p=/^http: /. test(d. location)? 'http': 'https'; if(! d. getElementById(id)){js=d. createElement(s); js. id=id; js. src=p+': //platform. twitter. com/widgets. js'; fjs. parentNode. insertBefore(js, fjs); }}(document, 'script', 'twitter-wjs'); Visit our support site. Get the Atom Feed or RSS Feed. $(function () { const phoneNumberInput = $('#phone-number'); const errorDiv = $('#sms-atl-error') if(errorDiv. length){ function checkSelectedCountry() { const selectedCountry = $('#phone-country'). val(); const isOtpEnabled = $('#phone-number-country-code'). attr('data-otp-enabled') === 'true'; const form = document. getElementById('subscribe-form-sms'); form. action = '/subscriptions/new-sms'; const isOtpFlow = document. getElementById('otp_verify_flow'); document. getElementById('otp-container'). style. display = "none"; if(false && selectedCountry === 'sg') { // Replace 'SG' with the actual value representing Singapore in your select tag phoneNumberInput. prop('disabled', true); errorDiv. html(`Due to new Singapore government regulations, we're currently not supporting text subscriptions in Singapore. Learn more. Select another method to subscribe. `); } else { phoneNumberInput. prop('readonly', false); errorDiv. html(''); if(false){ if(isOtpEnabled){ document. getElementById('subscribe-btn-sms'). value = "Send OTP"; } else { isOtpFlow. value = false; document. getElementById('subscribe-btn-sms'). value = "Subscribe via Text Message"; } } } } $('#phone-country'). on('change', checkSelectedCountry); checkSelectedCountry(); } }); document. addEventListener('DOMContentLoaded', function() { const dropdown = document. querySelector('#phone-number-country-code. phone-country'); if (dropdown){ const wrapperDiv = document. getElementById('phone-number-country-code'); const selectedOption = dropdown. options[dropdown. selectedIndex]; const otpEnabled = selectedOption. getAttribute('data-otp-enabled'); wrapperDiv. setAttribute('data-otp-enabled', otpEnabled); dropdown. addEventListener('change', function() { const selectedOption = dropdown. options[dropdown. selectedIndex]; const otpEnabled = selectedOption. getAttribute('data-otp-enabled'); wrapperDiv. setAttribute('data-otp-enabled', otpEnabled); }); } }); var countdownTimer; var resendBtn = document. getElementById('resend'); var timer = document. getElementById('timer'); var form = document. getElementById('subscribe-form-sms'); var RESEND_TIMER = 30; $(function() { $('#subscribe-form-sms'). on('ajax: success', function(e, data, status, xhr){ const form = this; const action = form. getAttribute('action'); if (data. type === 'success' && data. otp_flow === true) { document. getElementById('subscriber_code'). value = data. subscriber_code document. getElementById('otp-container'). style. display = "block"; $('#phone-number'). prop('readonly', true); var display = document. getElementById('countdown'); disableResend(); startTimer(RESEND_TIMER, display) document. getElementById('subscribe-btn-sms'). value = "Verify OTP and Subscribe"; document. getElementById('otp_verify_flow'). value = true; form. action = '/subscriptions/verify-otp'; } else if (data. type === 'success' && action. includes('verify')){ document. getElementById('otp-container'). style. display = "none"; $('#phone-number'). val(''). prop('readonly', false); $('#otp'). val(''); document. getElementById('subscribe-btn-sms'). value = "Send OTP"; document. getElementById('otp_verify_flow'). value = false; form. action = '/subscriptions/new-sms'; SP. currentPage. updatesDropdown. hide(); } }); $("#btn-subcriber-change-number"). on('click', () => { document. getElementById('otp-container'). style. display = "none"; $('#phone-number'). prop('readonly', false); document. getElementById('subscribe-btn-sms'). value = "Send OTP"; form. action = '/subscriptions/new-sms'; return false }) $('#resend-otp-btn'). on('click', function(e) { e. preventDefault(); let phoneNumber = $('#phone-number'). val(); let countryCode = $('. phone-country'). val(); $. ajax({ type: 'POST', url: "/subscriptions/new-sms", data: { phone_number: phoneNumber, phone_country: countryCode, type: 'resend' }, }). done(function(data) { var messageOptions = (data. type! == undefined && data. type! == null)? { cssClass: data. type }: {}; HRB. utils. notify(data. text, messageOptions); var display = document. getElementById('countdown'); disableResend(); timer. style. display = "none" if (data. type === 'success') { startTimer(RESEND_TIMER, display); } }) }); }) function startTimer(duration, display){ var timer = duration, seconds; clearInterval(countdownTimer); countdownTimer = setInterval(function () { seconds = parseInt(timer % 60, 10); display. textContent = seconds; if(--timer < 0){ enableResend(); clearInterval(countdownTimer); } }, 1000); disableResend(); } function enableResend(){ resendBtn. style. display = "block"; timer. style. display = "none" } function disableResend(){ resendBtn. style. display = "none"; timer. style. display = "block" } $(function() { $('#subscribe-form-email'). on('submit', function() { var tokenField = document. getElementById('email-otp-token-field'); let page_code = "kctbh9vrtdwd" let key = keyForEmailOtpToken($('#email'). val(), page_code); tokenField. value = localStorage. getItem(key); }); }); var emailOtpCountdownTimer; var emailOtpResendBtn = document. getElementById('resend-email-otp'); var emailOtpTimer = document. getElementById('email-otp-timer'); var emailOtpForm = document. getElementById('subscribe-form-email'); var EMAIL_OTP_RESEND_TIMER = 600; $(function() { $('#subscribe-form-email'). on('ajax: success', function(e, data, status, xhr){ const form = this; const action = form. getAttribute('action'); if (data. type === 'success' && data. email_otp_verify_flow === true) { document. getElementById('email-otp-container'). style. display = "block"; var display = document. getElementById('email-otp-countdown'); display. textContent = EMAIL_OTP_RESEND_TIMER; disableEmailOtpResend(); startEmailOtpTimer(EMAIL_OTP_RESEND_TIMER, display) document. getElementById('subscribe-btn-email'). value = "Verify OTP and Subscribe"; document. getElementById('email_otp_verify_flow'). value = true; form. action = '/subscriptions/verify-email-otp'; } else if (data. type === 'success' && action. includes('verify')){ let email = $('#email') let page_code = "kctbh9vrtdwd" let key = keyForEmailOtpToken(email. val(), page_code); localStorage. setItem(key, data. email_otp_auth_token); document. getElementById('email-otp-container'). style. display = "none"; email. val(''). prop('readonly', false); $('#email-otp'). val(''); document. getElementById('subscribe-btn-email'). value = "Send OTP"; document. getElementById('email_otp_verify_flow'). value = false; form. action = '/subscriptions/new-email'; SP. currentPage. updatesDropdown. hide(); } }); $('#resend-email-otp-btn'). on('click', function(e) { e. preventDefault(); let email = $('#email'). val(); $. ajax({ type: 'POST', url: "/subscriptions/new-email", data: { email: email }, }). done(function(data) { var messageOptions = (data. type! == undefined && data. type! == null)? { cssClass: data. type }: {}; HRB. utils. notify(data. text, messageOptions); if (data. type === 'success') { var display = document. getElementById('email-otp-countdown'); display. textContent = EMAIL_OTP_RESEND_TIMER; disableEmailOtpResend(); emailOtpTimer. style. display = "none" startEmailOtpTimer(EMAIL_OTP_RESEND_TIMER, display); } }) }); }) function startEmailOtpTimer(duration, display){ var timer = duration, seconds; clearInterval(emailOtpCountdownTimer); emailOtpCountdownTimer = setInterval(function () { seconds = parseInt(timer, 10); display. textContent = seconds; if(--timer < 0){ enableEmailOtpResend(); clearInterval(emailOtpCountdownTimer); } }, 1000); disableEmailOtpResend(); } function enableEmailOtpResend(){ emailOtpResendBtn. style. display = "block"; emailOtpTimer. style. display = "none" } function disableEmailOtpResend(){ emailOtpResendBtn. style. display = "none"; emailOtpTimer. style. display = "block" } function keyForEmailOtpToken(email, pageCode) { return email + '|' + pageCode+ '|SUBSCRIBE_VIA_EMAIL'; } All Systems Operational About This Site Check GitHub Enterprise Cloud status by region: - Australia: au. githubstatus. com - EU: eu. githubstatus. com - Japan: jp. githubstatus. com - US: us. githubstatus. com Git Operations? Operational Webhooks? Operational Visit www. githubstatus. com for more information Operational API Requests? Operational Issues? Operational Pull Requests? Operational Actions? Operational Packages? Operational Pages? Operational Codespaces? Operational Copilot Operational Operational Degraded Performance Partial Outage Major Outage Maintenance Past Incidents Dec 20, 2025 No incidents reported today. Dec 19, 2025 No incidents reported. Dec 18, 2025 Disruption with some GitHub services Resolved - This incident has been resolved. Thank you for your patience and understanding as we addressed this issue. A detailed root cause analysis will be shared as soon as it is available. Dec 18, 19: 09 UTC Update - Copilot is operating normally. Dec 18, 19: 09 UTC Update - We have observed full recovery with updating copilot policy settings, and are validating that that there is no further impact. Dec 18, 19: 05 UTC Update - Copilot is experiencing degraded performance. We are continuing to investigate. Dec 18, 18: 43 UTC Update - We have identified the source of this regression and are preparing a fix for deployment. We will update again in one hour. Dec 18, 18: 10 UTC Update - We are seeing an increase in errors on the User and Org policy settings page when updating policies. The errors are affecting the user copilot policies settings page, org copilot policies settings page when updating a policy. Dec 18, 17: 36 UTC Investigating - We are investigating reports of impacted performance for some GitHub services. Dec 18, 17: 36 UTC Intermittent networking failures across GitHub-hosted Actions runners Resolved - On December 18th, 2025, from 08: 15 UTC to 17: 11 UTC, some GitHub Actions runners experienced intermittent timeouts for Github API calls, which led to failures during runner setup and workflow execution. This was caused by network packet loss between runners in the West US region and one of GitHub’s edge sites. Approximately 1. 5% of jobs on larger and standard hosted runners in the West US region were impacted, 0. 28% of all Actions jobs during this period. By 17: 11 UTC, all traffic was routed away from the affected edge site, mitigating the timeouts. We are working to improve early detection of cross-cloud connectivity issues and faster mitigation paths to reduce the impact of similar issues in the future. Dec 18, 17: 41 UTC Update - We are observing recovery with request from GitHub-hosted Actions runners and will continue to monitor. Dec 18, 17: 29 UTC Update - Since approximately 8: 00 UTC, we have observed intermittent failures on GitHub-hosted actions runners. The failures have been observed both during runner setup, and workflow execution. We are continuing to investigate. Self-hosted runners are not impacted. Dec 18, 16: 35 UTC Investigating - We are investigating reports of degraded performance for Actions Dec 18, 16: 33 UTC Dec 17, 2025 No incidents reported. Dec 16, 2025 Incident With Copilot Resolved - From 11: 50-12: 25 UTC, Copilot Coding Agent was unable to process new agent requests. This affected all users creating new jobs during this timeframe, while existing jobs remained unaffected. The cause of this issue was a change to the actions configuration where Copilot Coding Agent runs, which caused the setup of the Actions runner to fail, and the issue was resolved by rolling back this change. As a short term solution, we hope to increase our alerting criteria so that we can be alerted more quickly when an incident occurs, and in the long term we hope to harden our runner configuration to be more resilient against errors. Dec 16, 12: 00 UTC Dec 15, 2025 Copilot Code Review is degraded, and not returning responses to users Resolved - On December 15, 2025, between 15: 15 UTC and 18: 22 UTC, Copilot Code Review experienced a service degradation that caused 46. 97% of pull request review requests to fail, requiring users to re-request a review. Impacted users saw the error message: “Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review. ” The remaining requests completed successfully. The degradation was caused by elevated response times in an internal, model-backed dependency, which led to request timeouts and backpressure in the review processing pipeline, resulting in sustained queue growth and failed review completion. We mitigated the issue by temporarily bypassing fix suggestions to reduce latency, increasing worker capacity to drain the backlog, and rolling out a model configuration change that reduced end-to-end latency. Queue depth and request success rates returned to normal and remained stable through peak traffic. Following the incident, we increased baseline worker capacity, added instrumentation for worker utilization and queue health, and are improving automatic load-shedding, fallback behavior, and alerting to reduce time to detection and mitigation for similar issues. Dec 15, 18: 22 UTC Update - We have seen recovery for Copilot Code Review requests and are investigating long-term availability and scaling strategies Dec 15, 18: 21 UTC Investigating - We are investigating reports of impacted performance for some GitHub services. Dec 15, 17: 43 UTC Incident with Copilot Grok Code Fast 1 Resolved - On Dec 15th, 2025, between 14: 00 UTC and 15: 45 UTC the Copilot service was degraded for Grok Code Fast 1 model. On average, 4% of the requests to this model failed due to an issue with our upstream provider. No other models were impacted. The issue was resolved after the upstream provider fixed the problem that caused the disruption. GitHub will continue to enhance our monitoring and alerting systems to reduce the time it takes to detect and mitigate similar issues in the future. Dec 15, 15: 45 UTC Update - We are continuing to work with our provider on resolving the incident with Grok Code Fast 1. Users can expect some requests to intermittently fail until all issues are resolved. Dec 15, 15: 06 UTC Update - We are experiencing degraded availability for the Grok Code Fast 1 model in Copilot Chat, VS Code and other Copilot products. This is due to an issue with an upstream model provider. We are working with them to resolve the issue. Other models are available and working as expected. Dec 15, 14: 13 UTC Investigating - We are investigating reports of degraded performance for Copilot Dec 15, 14: 12 UTC Dec 14, 2025 No incidents reported. Dec 13, 2025 No incidents reported. Dec 12, 2025 No incidents reported. Dec 11, 2025 Disruptions in Login and Signup Flows Resolved - Between 13: 25 UTC and 18: 35 UTC on Dec 11th, GitHub experienced an increase in scraper activity on public parts of our website. This scraper activity caused a low priority web request pool to increase and eventually exceed total capacity resulting in users experiencing 500 errors. In particular, this affected Login, Logout, and Signup routes, along with less than 1% requests from within Actions jobs. At the peak of the incident, 7. 6% of login requests were impacted, which was the most significant impact of this scraping attack. Our mitigation strategy identified the scraping activity and blocked it. We also increased the pool of web requests that were impacted to have more capacity, and lastly we upgraded key user login routes to higher priority queues. In future, we’re working to more proactively identify this particular scraper activity and have faster mitigation times. Dec 11, 20: 05 UTC Update - We see signs of full recovery and will post a more in-depth update soon. Dec 11, 20: 05 UTC Update - We are continuing to monitor and continuing to see signs of recovery. We will update when we are confident that we are in full recovery. Dec 11, 19: 58 UTC Update - We've applied a mitigation to fix intermittent failures in anonymous requests and downloads from GitHub, including Login, Signup, Logout, and some requests from within Actions jobs. We are seeing improvements in telemetry, but we will continue to monitor for full recovery. Dec 11, 19: 04 UTC Update - We currently have ~7% of users experiencing errors when attempting to sign up, log in, or log out. We are deploying a change to mitigate these failures. Dec 11, 18: 47 UTC Investigating - We are investigating reports of impacted performance for some GitHub services. Dec 11, 18: 40 UTC We are investigating a rise in request failures on several services Resolved - Between 13: 25 UTC and 18: 35 UTC on December 11th, GitHub experienced elevated traffic to portions of GitHub. com that exceeded previously provisioned capacity for specific request types. As a result, users encountered intermittent 500 errors. Impact was most pronounced on Login, Logout, and Signup pages, peaking at 7. 6% of login requests. Additionally, fewer than 1% of requests originating from GitHub Actions jobs were affected. This incident was driven by the same underlying factors as the previously reported disruption to Login and Signup flowsOur immediate response focused on identifying and mitigating the source of the traffic increase. We increased available capacity for web request handling to relieve pressure on constrained pools. To reduce recurrence risk, we also re-routed critical authentication endpoints to a different traffic pool, ensuring sufficient isolation and headroom for login related traffic. In future, we’re working to more proactively identify these large changes in traffic volume and improve our time to mitigation. Dec 11, 17: 53 UTC Update - Git Operations is operating normally. Dec 11, 17: 20 UTC Update - We believe that we have narrowed down our affected users to primarily those that are signing up or signing in as well as logged out usage. We are currently continuing to investigate the root cause and are working multiple mitigation angles. Dec 11, 17: 19 UTC Update - We are experiencing intermittent web request failures across multiple services, including login and authentication. Our teams are actively investigating the cause and working on mitigation. Dec 11, 16: 41 UTC Update - Codespaces, Copilot, Git Operations, Packages, Pages, Pull Requests and Webhooks are experiencing degraded performance. We are continuing to investigate. Dec 11, 16: 09 UTC Update - API Requests and Actions are experiencing degraded performance. We are continuing to investigate. Dec 11, 16: 01 UTC Investigating - We are investigating reports of degraded performance for Issues Dec 11, 15: 47 UTC Dec 10, 2025 Some macOS Actions jobs routing to Ubuntu instead Resolved - Between December 9th, 2025 21: 07 UTC and December 10th, 2025 14: 52 UTC, 177 macos-14-large jobs were run on an Ubuntu larger runner VM instead of MacOS runner VMs. The impacted jobs were routed to a larger runner with incorrect metadata. We mitigated this by deleting the runner. The routing configuration is not something controlled externally. A manual override was done previously for internal testing, but left incorrect metadata for a large runner instance. An infrastructure migration caused this misconfigured runner to come online which started the incorrect assignments. We are removing the ability to manually override this configuration entirely, and are adding alerting to identify possible OS mismatches for hosted runner jobs. As a reminder, hosted runner VMs are secure and ephemeral, with every VM reimaged after every single job. All jobs impacted here were originally targeted at a GitHub-owned VM image and were run on a GitHub-owned VM image. Dec 10, 14: 52 UTC Update - We've applied a mitigation to ensure all macOS jobs route to macOS fulfillers and are monitoring for full recovery. Dec 10, 14: 32 UTC Investigating - We are investigating reports of degraded performance for Actions Dec 10, 13: 34 UTC Some Actions customers experiencing run start delays Resolved - On December 10, 2025 between 08: 50 UTC and 11: 00 UTC, some GitHub Actions workflow runs experienced longer-than-normal wait times for jobs starting or completing. All jobs successfully completed despite the delays. At peak impact, approximately 8% of workflow runs were affected. During this incident, some nodes received a spike in workflow events that led to queuing of event processing. Because runs are pinned to nodes, runs being processed by these nodes saw delays in starting or showing as completed. The team was alerted to this at 8: 58 UTC. Impacted nodes were disabled from processing new jobs to allow queues to drain. We have increased overall processing capacity and are implementing safeguards to better balance load across all nodes when spikes occur. This is important to ensure our available capacity can always be fully utilized. Dec 10, 11: 05 UTC Update - Actions is operating normally. Dec 10, 11: 05 UTC Update - We have validated the mitigation and are no longer seeing impact. Dec 10, 11: 05 UTC Update - We are seeing improvements in telemetry and are monitoring for full recovery. Dec 10, 10: 58 UTC Update - We've applied a mitigation to fix the issues with queuing and running Actions jobs. We will continue monitoring to confirm whether this resolves the issue. Dec 10, 10: 25 UTC Update - The team continues to investigate issues with some Actions jobs being queued for a long time. We will continue providing updates on the progress towards mitigation. Dec 10, 09: 41 UTC Update - We're investigating Actions workflow runs taking longer than expected to start. Dec 10, 09: 13 UTC Investigating - We are investigating reports of degraded performance for Actions Dec 10, 09: 11 UTC Dec 9, 2025 No incidents reported. Dec 8, 2025 Disruption with some GitHub services Resolved - On December 8, 2025, between 21: 15 and 22: 24 UTC, Copilot code completions experienced a significant service degradation. During this period, up to 65% of code completion requests failed. The root cause was an internal feature flag that caused the primary model supporting Copilot code completions to appear unavailable to the backend service. The issue was resolved once the flag was disabled. To prevent recurrence, we expanded test coverage for Copilot code completion models and are strengthening our detection mechanisms to better identify and respond to traffic anomalies. Dec 8, 22: 33 UTC Update - We are beginning to see signs of resolution after applying a mitigation. We expect full resolution within approximately 30 minutes. Dec 8, 22: 10 UTC Update - We're continuing to investigate and mitigate issues with the GPT 4o model for Copilot completions. Users can currently work around this issue by updating their VS Code settings with "github. copilot. advanced. debug. overrideEngine": "gpt-41-copilot". Dec 8, 22: 04 UTC Update - We are currently investigating failures with the GPT 4o model for Copilot completions. Dec 8, 21: 32 UTC Investigating - We are investigating reports of impacted performance for some GitHub services. Dec 8, 21: 28 UTC Potential disruption with our Agent Control Plane UI Settings Resolved - On November 26th, 2025, between approximately 02: 24 UTC and December 8th, 2025 at 20: 26 UTC, enterprise administrators experienced a disruption when viewing agent session activities in the Enterprise AI Controls page. During this period, users were unable to list agent session activity in the AI Controls view. This did not impact viewing agent session activity in audit logs or directly navigating to individual agent session logs, or otherwise managing AI Agents. The issue was caused by a misconfiguration in a change deployed on November 25th that unintentionally prevented data from being published to an internal Kafka topic responsible for feeding the AI Controls page with agent session activity information. The problem was identified and mitigated on December 8th by correcting the configuration issue. GitHub is improving monitoring for data pipeline dependencies and enhancing pre-deployment validation to catch configuration issues before they reach production. Dec 8, 21: 06 UTC Update - We are investigating an incident affecting missing Agent Session data on the AI Settings page on Agent Control Plane. Dec 8, 19: 52 UTC Investigating - We are investigating reports of impacted performance for some GitHub services. Dec 8, 19: 51 UTC Dec 7, 2025 No incidents reported. Dec 6, 2025 No incidents reported. ← Incident History Powered by Atlassian Statuspage GitHub text logo Subscribe to our developer newsletter Get tips, technical guides, and best practices. Twice a month. Right in your inbox. Subscribe Product Features Enterprise Copilot Security Pricing Team Resources Roadmap Compare GitHub Platform Developer API Partners Education GitHub CLI GitHub Desktop GitHub Mobile Support Docs Community Forum Professional Services Skills Contact GitHub Company About Customer stories Blog The ReadME Project Careers Newsroom Inclusion Social Impact Shop © document. write(new Date(). getFullYear()); GitHub, Inc. Terms Privacy (Updated 08/2022) GitHub X GitHub Facebook GitHub LinkedIn GitHub YouTube Twitch TikTok GitHub. com $('. components-container'). toggleClass('one-column'). toggleClass('two-columns') $(document). ready(function () { if ($('body'). hasClass('status-none')) { $('link[rel="shortcut icon"]'). attr("href", "https: //github. githubassets. com/favicons/favicon-success. png") } else { $('link[rel="shortcut icon"]'). attr("href", "https: //github. githubassets. com/favicons/favicon-pending. png") } // Move "about this page" text section after the Incident History link $('. text-section'). insertAfter('. history-footer-link'); $('span. name: contains("Visit www. githubstatus. com for more information")'). parents('div. component-container'). hide() $('div. status-green span. component-status'). html("") $('div. status-yellow span. component-status'). html("") $('div. status-orange span. component-status'). html("") $('div. status-red span. component-status'). html("") $('. outage-field. label. major_outage'). parent(). html("") var otherParent = $('span. name: contains("Other")'). parent() if (otherParent. hasClass('status-green')) { otherParent. parent(). hide() } $('. page-status. status-major span. status, . page-status. status-minor span. status'). html('Some services are degraded') $('. outage-field. label. partial_outage'). parent(). html("Degradation") $('. incidents-list'). remove() $('. component-statuses-legend'). remove() $('div. status-green'). append("Normal") $('div. status-yellow'). append("Degraded") $('div. status-orange'). append("Degraded") $('div. status-red'). append("Incident") $('div. status-blue'). append("Maintenance") }); $(function() { SP. currentPage. registerSubscriptionForm('email'); SP. currentPage. registerSubscriptionForm('sms'); SP. currentPage. registerSubscriptionForm('webhook'); }); SP. pollForChanges('/api/v2/status. json'); $(function() { $('. tool'). tooltipster({ animationDuration: 100, contentAsHTML: true, delay: 100, theme: 'tooltipster-borderless', functionInit: function (instance, helper) { var $origin = $(helper. origin), dataOptions = $origin. attr('data-tooltip-config'); if (dataOptions){ dataOptions = JSON. parse(dataOptions); $. each(dataOptions, function(name, option){ instance. option(name, option); }); } } }); // clicks on first tab in subscribe popout since we won't know which is first // upon construction in the ruby code $('. updates-dropdown-nav > a'). eq(0). click(); // twitter follow button needs some margin $('. twitter-follow-button'). css('margin-right', '6px'); }); $(function() { // open/close component groups HRB. utils. djshook('component-group-opener'). on('click', function() { var groupParentIndicator = $(this). find('. group-parent-indicator'); groupParentIndicator. toggleClass('fa-plus-square-o'). toggleClass('fa-minus-square-o'). end(). parent(). toggleClass('open'); toggleGroup(groupParentIndicator) }); }); $(function() { HRB. utils. djshook('component-group-opener'). on('keydown', function(event) { if (event. key! == "Enter" && event. key! == " ") { return; } event. preventDefault() var groupParentIndicator = $(this). find('. group-parent-indicator'); groupParentIndicator. toggleClass('fa-plus-square-o'). toggleClass('fa-minus-square-o'). end(). parent(). toggleClass('open'); toggleGroup(groupParentIndicator) }); }); function toggleGroup(groupParentIndicator) { var isOpen = groupParentIndicator. attr('aria-expanded') if (isOpen == 'false') { groupParentIndicator. attr('aria-expanded', 'true'); } else { groupParentIndicator. attr('aria-expanded', 'false'); } } $(function() { $(document). on('ajax: complete', '. modal. in', function(e) { // Close the active modal. $('. modal. in'). modal('hide'); }); }); /** INITIALIZATION **/ var recaptchaIds = {} // Unfortunately there's no unique selectors on the parent divs that recaptcha adds. The first unique selector // is the iframe rendered 2 levels deep. So this waits until the iframes are added to the page, then finds // the parent div and sets the z index so that it'll render above our modals & dropdowns from the start. function setZIndex(captchaCount, startTime) { // bail after 10s just in case so we don't do this forever if something whaky happens if (new Date() - startTime > 10000) { return; } var iframes = document. querySelectorAll('iframe[title="recaptcha challenge"]'); if (iframes. length! = captchaCount) { setTimeout(function() { setZIndex(captchaCount, startTime); }, 500); } for (var i = 0; i < iframes. length; i++) { // incident subscribe modal is 1050, so this has to be above that iframes[i]. parentElement. parentElement. style. zIndex = "1100"; } } function updateCaptchaIframeTitle(captchaCount, startTime, updates=0) { if (new Date() - startTime > 10000 || captchaCount === updates) { return; } var iframesWithTitle = document. querySelectorAll('iframe[title="recaptcha challenge expires in two minutes"]'); if (iframesWithTitle. length! = captchaCount) { setTimeout(function() { updateCaptchaIframeTitle(captchaCount, startTime, iframesWithTitle. length + updates); }, 500); } for (var i = 0; i < iframesWithTitle. length; i++) { iframesWithTitle[i]. title = "recaptcha"; } } function addIncidentCaptcha() { var incidentCaptcha = document. createElement('div'); incidentCaptcha. setAttribute('id', 'subscribe-incident-recaptcha'); incidentCaptcha. setAttribute('class', 'g-recaptcha'); incidentCaptcha. setAttribute('data-sitekey', '6LcZ-b0UAAAAAENi956aWzynTT2ZJ80dGU3F80Op'); incidentCaptcha. setAttribute('data-callback', 'submitIncidentSubscriberSuccess'); incidentCaptcha. setAttribute('data-error-callback', 'submitIncidentSubscriberError'); incidentCaptcha. setAttribute('data-size', 'invisible'); document. body. appendChild(incidentCaptcha); var incidentCode = document. createElement('input'); incidentCode. setAttribute('type', 'hidden'); incidentCode. setAttribute('id', 'submit_incident_code'); document. body. appendChild(incidentCode); } var onloadCallback = function() { // if there is an incident, then add incident captcha element if (document. getElementsByClassName('modal-open-incident-subscribe'). length > 0) { addIncidentCaptcha(); } var captchas = document. getElementsByClassName("g-recaptcha"); for(var i = 0; i < captchas. length; i++) { var elId = captchas[i]. id; recaptchaIds[elId] = grecaptcha. enterprise. render(elId); } setZIndex(captchas. length, new Date()); updateCaptchaIframeTitle(captchas. length, new Date()); } /** SUBSCRIBE DROPDOWN */ // callbacks for captcha success function submitNewSubscriber(type, error) { if (error) document. querySelector('#subscribe-form-' + type + ' #captcha_error'). value = 'true'; document. getElementById('subscribe-form-' + type). dispatchEvent(new Event('submit', {bubbles: true, cancelable: true})); grecaptcha. enterprise. reset(recaptchaIds['subscribe-btn-' + type]); } function submitNewEmailSubscriber(token) { submitNewSubscriber('email'); } function submitNewSmsSubscriber(token) { submitNewSubscriber('sms'); } function submitNewWebhookSubscriber(token) { submitNewSubscriber('webhook'); } function submitIncidentSubscriber(token, error) { var incidentCode = document. getElementById('submit_incident_code'). value; var incidentForm = document. getElementById('subscribe-form-' + incidentCode); incidentForm. querySelector('input[name="captcha_error"]'). value = error; incidentForm. querySelector('input[name="g-recaptcha-response"]'). value = token; incidentForm. dispatchEvent(new Event('submit', {bubbles: true, cancelable: true})); grecaptcha. enterprise. reset(recaptchaIds['subscribe-incident-recaptcha']); } function submitIncidentSubscriberSuccess(token) { submitIncidentSubscriber(token, 'false'); } // callbacks if we get captcha network errors function emailSubscriberCaptchaError(token) { submitNewSubscriber('email', true); } function smsSubscriberCaptchaError(token) { submitNewSubscriber('sms', true); } function webhookSubscriberCaptchaError(token) { submitNewSubscriber('webhook', true); } function submitIncidentSubscriberError(token) { submitIncidentSubscriber(token, 'true'); } // tracking clicks ['email', 'sms', 'webhook']. forEach(function(type) { var el = document. getElementById('subscribe-btn-' + type); el && el. addEventListener("click", function() { $. ajax({ type: "POST", url: "/subscriptions/track_attempt", data: { type: type } }) }) }) // form submission success callbacks $('#subscribe-form-email'). on('ajax: success', function(e, data, status, xhr){ if (data. type === 'success') { SP. currentPage. updatesDropdown. hide(); document. getElementById('email'). value = ''; } }); $('#subscribe-form-sms'). on('ajax: success', function(e, data, status, xhr){ if (data. type === 'success' && data. otp_flow! == true) { SP. currentPage. updatesDropdown. hide(); document. getElementById('phone-number'). value = ''; } }); $('#subscribe-form-webhook'). on('ajax: success', function(e, data, status, xhr){ if (data. type === 'success') { SP. currentPage. updatesDropdown. hide(); document. getElementById('endpoint-webhooks'). value = ''; document. getElementById('email-webhooks'). value = ''; } }); $('a. subscribe'). on('click', function() { document. body. style. overflow = "hidden"; document. body. style. height = "100vh"; }); $('div. modal-open-incident-subscribe'). on('hidden', function(){ document. body. style. overflow = ""; document. body. style. height = ""; }); function submitCaptchaIncidentSubscribe(event) { var incidentCode = event. target. id. split('-')[2]; event. preventDefault(); $. ajax({ type: "POST", url: "/subscriptions/track_attempt", data: { type: 'incident' } }) document. getElementById('submit_incident_code'). value = incidentCode; grecaptcha. enterprise. execute(recaptchaIds['subscribe-incident-recaptcha']); } window. addEventListener('load', function () { const urlParams = new URLSearchParams(window. location. search); const messageToken = urlParams. get('slack_message_token'); const channelName = escape(urlParams. get('channel_name')); if(! ! messageToken) { switch(messageToken) { case 'slack_auth_error': HRB. utils. notify('The Slack authorization attempt was unsuccessful. Try again. ', {cssClass: 'error'}); break; case 'subscribers_disabled_error': HRB. utils. notify('Slack subscriptions are not enabled on this page. ', {cssClass: 'error'}); break; case 'direct_message_channel_error': HRB. utils. notify('Subscriptions aren’t supported in direct messages. Try subscribing again and choose a channel instead. ', {cssClass: 'error'}); break case 'duplicate_error': HRB. utils. notify("You're already subscribed to get Slack notifications in that channel. ", {cssClass: 'error'}); break; case 'duplicate_private_channel_error': 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'}); break; case 'default_success': HRB. utils. notify("You're now subscribed to get Statuspage updates in Slack! ", {cssClass: 'success'}); break; case 'private_channel_success': HRB. utils. notify(`IMPORTANT: Invite the @Statuspage app to your Slack channel #${channelName} to start getting status updates. `, {cssClass: 'success'}); break; } } }); $(function() { var $link = $('Powered by Atlassian Statuspage'); var setPoweredByStyles = function() { if (! $('. powered-by'). length) { $link. appendTo($('. page-footer')) } $('. powered-by'). attr('style', 'display: inline! important; visibility: visible! important; opacity: 1! important; position: static! important; text-indent: 0px! important; transform: scale(1)! important'); } setInterval(setPoweredByStyles, 1000); });
GitHub Status /* Dynamic Font Stack based on Feature Flag */ /* Using Atlassian Sans & Mono */: root { --font-stack-a: "Atlassian Sans", "Helvetica Neue", Helvetica, Arial, Sans-Serif; --font-stack-b: "Atlassian Mono", "SFMono-Medium", "SF Mono", "Segoe UI Mono", "Roboto Mono", "Ubuntu Mono", Menlo, Consolas, Courier, monospace; } window. pageColorData = {"blue": "#0366d6", "border": "#e1e4e8", "body_background": "#ffffff", "font": "#24292e", "graph": "#0366d6", "green": "#28a745", "light_font": "#6a737d", "link": "#0366d6", "orange": "#e36209", "red": "#dc3545", "yellow": "#dbab09", "no_data": "#b3bac5"}; /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ body, . layout-content. status. status-api. section. example-container. example-opener. color-secondary, . grouped-items-selector, . layout-content. status. status-full-history. history-nav a. current, div[id^="subscribe-modal"]. modal-footer, div[id^="subscribe-modal"], div[id^="updates-dropdown"]. updates-dropdown-section, #uptime-tooltip. tooltip-box { background-color: #ffffff; } #uptime-tooltip. pointer-container. pointer-smaller { border-bottom-color: #ffffff; } /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ body. status, . color-primary, . color-primary: hover, . layout-content. status-index. status-day. update-title. impact-none a, . layout-content. status-index. status-day. update-title. impact-none a: hover, . layout-content. status-index. timeframes-container. timeframe. active, . layout-content. status-full-history. month. incident-container. impact-none, . layout-content. status. status-index. incidents-list. incident-title. impact-none a, . incident-history. impact-none, . layout-content. status. grouped-items-selector. inline. grouped-item. active, . layout-content. status. status-full-history. history-nav a. current, . layout-content. status. status-full-history. history-nav a: not(. current): hover, div[id^="subscribe-modal"]. modal-header. close, . grouped-item-label, #uptime-tooltip. tooltip-box. tooltip-content. related-events. related-event a. related-event-link { color: #24292e; }. layout-content. status. status-index. components-statuses. component-container. name { color: #24292e; color: rgba(36, 41, 46, . 8); } /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ small, . layout-content. status. table-row. date, . color-secondary, . layout-content. status. grouped-items-selector. inline. grouped-item, . layout-content. status. status-full-history. history-footer. pagination a. disabled, . layout-content. status. status-full-history. history-nav a, #uptime-tooltip. tooltip-box. tooltip-content. related-events #related-event-header { color: #6a737d; } /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ /* BORDER COLOR */ body. status. layout-content. status. border-color, hr, . tooltip-base, . markdown-display table, div[id^="subscribe-modal"], #uptime-tooltip. tooltip-box { border-color: #e1e4e8; } div[id^="subscribe-modal"]. modal-footer, . markdown-display table td { border-top-color: #e1e4e8; }. markdown-display table td + td, . markdown-display table th + th { border-left-color: #e1e4e8; } div[id^="subscribe-modal"]. modal-header, #uptime-tooltip. pointer-container. pointer-larger { border-bottom-color: #e1e4e8; } #uptime-tooltip. tooltip-box. outage-field { /* Generate the background-color for the outage-field from the css_body_background_color and css_border_color. 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 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. 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). */ background-color: rgba(225, 228, 232, 0. 31); /* outage-field border-color alpha is inverse to the luminosity of css_body_background_color. That is to say, with a default white background this border is transparent, but on a black background, it's opaque css_border_color. */ border-color: rgba(225, 228, 232, 0. 0); } /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */. layout-content. status. status-index. status-day. update-title. impact-critical a, . layout-content. status. status-index. status-day. update-title. impact-critical a: hover, . layout-content. status. status-index. page-status. status-critical, . layout-content. status. status-index. unresolved-incident. impact-critical. incident-title, . flat-button. background-red { background-color: #dc3545; }. layout-content. status-index. components-statuses. component-container. status-red: after, . layout-content. status-full-history. month. incident-container. impact-critical, . layout-content. status-incident. incident-name. impact-critical, . layout-content. status. status-index. incidents-list. incident-title. impact-critical a, . status-red. icon-indicator, . incident-history. impact-critical, . components-container. component-inner-container. status-red. component-status, . components-container. component-inner-container. status-red. icon-indicator { color: #dc3545; }. layout-content. status. status-index. unresolved-incident. impact-critical. updates { border-color: #dc3545; } /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */. layout-content. status. status-index. status-day. update-title. impact-major a, . layout-content. status. status-index. status-day. update-title. impact-major a: hover, . layout-content. status. status-index. page-status. status-major, . layout-content. status. status-index. unresolved-incident. impact-major. incident-title { background-color: #e36209; }. layout-content. status-index. components-statuses. component-container. status-orange: after, . layout-content. status-full-history. month. incident-container. impact-major, . layout-content. status-incident. incident-name. impact-major, . layout-content. status. status-index. incidents-list. incident-title. impact-major a, . status-orange. icon-indicator, . incident-history. impact-major, . components-container. component-inner-container. status-orange. component-status, . components-container. component-inner-container. status-orange. icon-indicator { color: #e36209; }. layout-content. status. status-index. unresolved-incident. impact-major. updates { border-color: #e36209; } /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */. layout-content. status. status-index. status-day. update-title. impact-minor a, . layout-content. status. status-index. status-day. update-title. impact-minor a: hover, . layout-content. status. status-index. page-status. status-minor, . layout-content. status. status-index. unresolved-incident. impact-minor. incident-title, . layout-content. status. status-index. scheduled-incidents-container. tab { background-color: #dbab09; }. layout-content. status-index. components-statuses. component-container. status-yellow: after, . layout-content. status-full-history. month. incident-container. impact-minor, . layout-content. status-incident. incident-name. impact-minor, . layout-content. status. status-index. incidents-list. incident-title. impact-minor a, . status-yellow. icon-indicator, . incident-history. impact-minor, . components-container. component-inner-container. status-yellow. component-status, . components-container. component-inner-container. status-yellow. icon-indicator, . layout-content. status. manage-subscriptions. confirmation-infobox. fa { color: #dbab09; }. layout-content. status. status-index. unresolved-incident. impact-minor. updates, . layout-content. status. status-index. scheduled-incidents-container { border-color: #dbab09; } /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */. layout-content. status. status-index. status-day. update-title. impact-maintenance a, . layout-content. status. status-index. status-day. update-title. impact-maintenance a: hover, . layout-content. status. status-index. page-status. status-maintenance, . layout-content. status. status-index. unresolved-incident. impact-maintenance. incident-title, . layout-content. status. status-index. scheduled-incidents-container. tab { background-color: #0366d6; }. layout-content. status-index. components-statuses. component-container. status-blue: after, . layout-content. status-full-history. month. incident-container. impact-maintenance, . layout-content. status-incident. incident-name. impact-maintenance, . layout-content. status. status-index. incidents-list. incident-title. impact-maintenance a, . status-blue. icon-indicator, . incident-history. impact-maintenance, . components-container. component-inner-container. status-blue. component-status, . components-container. component-inner-container. status-blue. icon-indicator { color: #0366d6; }. layout-content. status. status-index. unresolved-incident. impact-maintenance. updates, . layout-content. status. status-index. scheduled-incidents-container { border-color: #0366d6; } /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */. layout-content. status. status-index. page-status. status-none { background-color: #28a745; }. layout-content. status-index. components-statuses. component-container. status-green: after, . status-green. icon-indicator, . components-container. component-inner-container. status-green. component-status, . components-container. component-inner-container. status-green. icon-indicator { color: #28a745; } /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ /* CSS LINK COLOR */ a, a: hover, . layout-content. status-index. page-footer span a: hover, . layout-content. status-index. timeframes-container. timeframe: not(. active): hover, . layout-content. status-incident. subheader a: hover { color: #0366d6; }. flat-button, . masthead. updates-dropdown-container. show-updates-dropdown, . layout-content. status-full-history. show-filter. open { background-color: #0366d6; } /* CUSTOM COLOR OVERRIDES FOR UPTIME SHOWCASE */. components-section. components-uptime-link { color: #6a737d; }. layout-content. status. shared-partial. uptime-90-days-wrapper. legend. legend-item { color: #6a737d; opacity: 1; }. layout-content. status. shared-partial. uptime-90-days-wrapper. legend. legend-item. light { color: #6a737d; opacity: 1; }. layout-content. status. shared-partial. uptime-90-days-wrapper. legend. spacer { background: #6a737d; opacity: 1; } var meta = document. createElement('meta'); meta. setAttribute('name', 'ha-url'); meta. setAttribute('content', 'https: //collector. githubapp. com/statuspage-views/collect'); document. head. appendChild(meta); function initAnalytics() { if (! window. _ha) { return } // Send general pageview window. _ha. sendPageView() // If on homepage, send index page view if (window. location. pathname === '/' && document. referrer! == (document. location. origin + document. location. pathname)) { // Create new instance for home page views exclusively let indexHa = Object. create(window. _ha); indexHa. options = {. . . window. _ha. options } indexHa. options. collectorUrl = 'https: //collector. githubapp. com/statuspage/collect'; indexHa. sendPageView(); } } document. addEventListener("DOMContentLoaded", function () { // Select the Twitter button var twitterBtn = document. getElementById("updates-dropdown-twitter-btn"); if (twitterBtn) { // Remove any existing content inside the Twitter icon container twitterBtn. innerHTML = ` Subscribe via X `; } }); GitHub Octicon logo Help Community Status GitHub. com x Get email notifications whenever GitHub creates, updates or resolves an incident. Email address: Enter OTP: Resend OTP in: seconds Didn't receive the OTP? Resend OTP By subscribing you agree to our Privacy Policy. This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply. Get text message notifications whenever GitHub creates or resolves an incident. Country code: Afghanistan (+93) Albania (+355) Algeria (+213) American Samoa (+1) Andorra (+376) Angola (+244) Anguilla (+1) Antigua and Barbuda (+1) Argentina (+54) Armenia (+374) Aruba (+297) Australia/Cocos/Christmas Island (+61) Austria (+43) Azerbaijan (+994) Bahamas (+1) Bahrain (+973) Bangladesh (+880) Barbados (+1) Belarus (+375) Belgium (+32) Belize (+501) Benin (+229) Bermuda (+1) Bolivia (+591) Bosnia and Herzegovina (+387) Botswana (+267) Brazil (+55) Brunei (+673) Bulgaria (+359) Burkina Faso (+226) Burundi (+257) Cambodia (+855) Cameroon (+237) Canada (+1) Cape Verde (+238) Cayman Islands (+1) Central Africa (+236) Chad (+235) Chile (+56) China (+86) Colombia (+57) Comoros (+269) Congo (+242) Congo, Dem Rep (+243) Costa Rica (+506) Croatia (+385) Cyprus (+357) Czech Republic (+420) Denmark (+45) Djibouti (+253) Dominica (+1) Dominican Republic (+1) Egypt (+20) El Salvador (+503) Equatorial Guinea (+240) Estonia (+372) Ethiopia (+251) Faroe Islands (+298) Fiji (+679) Finland/Aland Islands (+358) France (+33) French Guiana (+594) French Polynesia (+689) Gabon (+241) Gambia (+220) Georgia (+995) Germany (+49) Ghana (+233) Gibraltar (+350) Greece (+30) Greenland (+299) Grenada (+1) Guadeloupe (+590) Guam (+1) Guatemala (+502) Guinea (+224) Guyana (+592) Haiti (+509) Honduras (+504) Hong Kong (+852) Hungary (+36) Iceland (+354) India (+91) Indonesia (+62) Iraq (+964) Ireland (+353) Israel (+972) Italy (+39) Jamaica (+1) Japan (+81) Jordan (+962) Kenya (+254) Korea, Republic of (+82) Kosovo (+383) Kuwait (+965) Kyrgyzstan (+996) Laos (+856) Latvia (+371) Lebanon (+961) Lesotho (+266) Liberia (+231) Libya (+218) Liechtenstein (+423) Lithuania (+370) Luxembourg (+352) Macao (+853) Macedonia (+389) Madagascar (+261) Malawi (+265) Malaysia (+60) Maldives (+960) Mali (+223) Malta (+356) Martinique (+596) Mauritania (+222) Mauritius (+230) Mexico (+52) Monaco (+377) Mongolia (+976) Montenegro (+382) Montserrat (+1) Morocco/Western Sahara (+212) Mozambique (+258) Namibia (+264) Nepal (+977) Netherlands (+31) New Zealand (+64) Nicaragua (+505) Niger (+227) Nigeria (+234) Norway (+47) Oman (+968) Pakistan (+92) Palestinian Territory (+970) Panama (+507) Paraguay (+595) Peru (+51) Philippines (+63) Poland (+48) Portugal (+351) Puerto Rico (+1) Qatar (+974) Reunion/Mayotte (+262) Romania (+40) Russia/Kazakhstan (+7) Rwanda (+250) Samoa (+685) San Marino (+378) Saudi Arabia (+966) Senegal (+221) Serbia (+381) Seychelles (+248) Sierra Leone (+232) Singapore (+65) Slovakia (+421) Slovenia (+386) South Africa (+27) Spain (+34) Sri Lanka (+94) St Kitts and Nevis (+1) St Lucia (+1) St Vincent Grenadines (+1) Sudan (+249) Suriname (+597) Swaziland (+268) Sweden (+46) Switzerland (+41) Taiwan (+886) Tajikistan (+992) Tanzania (+255) Thailand (+66) Togo (+228) Tonga (+676) Trinidad and Tobago (+1) Tunisia (+216) Turkey (+90) Turks and Caicos Islands (+1) Uganda (+256) Ukraine (+380) United Arab Emirates (+971) United Kingdom (+44) United States (+1) Uruguay (+598) Uzbekistan (+998) Venezuela (+58) Vietnam (+84) Virgin Islands, British (+1) Virgin Islands, U. S. (+1) Yemen (+967) Zambia (+260) Zimbabwe (+263) Phone number: Change number Enter OTP: Resend OTP in: 30 seconds Didn't receive the OTP? Resend OTP Message and data rates may apply. By subscribing you agree to our Privacy Policy, the Atlassian Terms of Service, and the Atlassian Privacy Policy. This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply. Get incident updates and maintenance status messages in Slack. Subscribe via Slack By subscribing you acknowledge our Privacy Policy. In addition, you agree to the Atlassian Cloud Terms of Service and acknowledge Atlassian's Privacy Policy. Get webhook notifications whenever GitHub creates an incident, updates an incident, resolves an incident or changes a component status. Webhook URL: The URL we should send the webhooks to Email address: We'll send you email if your endpoint fails By subscribing you agree to our Privacy Policy. This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply. Follow @githubstatus or view our profile. . twitter-follow-button { margin-bottom: -6px; }! function(d, s, id){var js, fjs=d. getElementsByTagName(s)[0], p=/^http: /. test(d. location)? 'http': 'https'; if(! d. getElementById(id)){js=d. createElement(s); js. id=id; js. src=p+': //platform. twitter. com/widgets. js'; fjs. parentNode. insertBefore(js, fjs); }}(document, 'script', 'twitter-wjs'); Visit our support site. Get the Atom Feed or RSS Feed. $(function () { const phoneNumberInput = $('#phone-number'); const errorDiv = $('#sms-atl-error') if(errorDiv. length){ function checkSelectedCountry() { const selectedCountry = $('#phone-country'). val(); const isOtpEnabled = $('#phone-number-country-code'). attr('data-otp-enabled') === 'true'; const form = document. getElementById('subscribe-form-sms'); form. action = '/subscriptions/new-sms'; const isOtpFlow = document. getElementById('otp_verify_flow'); document. getElementById('otp-container'). style. display = "none"; if(false && selectedCountry === 'sg') { // Replace 'SG' with the actual value representing Singapore in your select tag phoneNumberInput. prop('disabled', true); errorDiv. html(`Due to new Singapore government regulations, we're currently not supporting text subscriptions in Singapore. Learn more. Select another method to subscribe. `); } else { phoneNumberInput. prop('readonly', false); errorDiv. html(''); if(false){ if(isOtpEnabled){ document. getElementById('subscribe-btn-sms'). value = "Send OTP"; } else { isOtpFlow. value = false; document. getElementById('subscribe-btn-sms'). value = "Subscribe via Text Message"; } } } } $('#phone-country'). on('change', checkSelectedCountry); checkSelectedCountry(); } }); document. addEventListener('DOMContentLoaded', function() { const dropdown = document. querySelector('#phone-number-country-code. phone-country'); if (dropdown){ const wrapperDiv = document. getElementById('phone-number-country-code'); const selectedOption = dropdown. options[dropdown. selectedIndex]; const otpEnabled = selectedOption. getAttribute('data-otp-enabled'); wrapperDiv. setAttribute('data-otp-enabled', otpEnabled); dropdown. addEventListener('change', function() { const selectedOption = dropdown. options[dropdown. selectedIndex]; const otpEnabled = selectedOption. getAttribute('data-otp-enabled'); wrapperDiv. setAttribute('data-otp-enabled', otpEnabled); }); } }); var countdownTimer; var resendBtn = document. getElementById('resend'); var timer = document. getElementById('timer'); var form = document. getElementById('subscribe-form-sms'); var RESEND_TIMER = 30; $(function() { $('#subscribe-form-sms'). on('ajax: success', function(e, data, status, xhr){ const form = this; const action = form. getAttribute('action'); if (data. type === 'success' && data. otp_flow === true) { document. getElementById('subscriber_code'). value = data. subscriber_code document. getElementById('otp-container'). style. display = "block"; $('#phone-number'). prop('readonly', true); var display = document. getElementById('countdown'); disableResend(); startTimer(RESEND_TIMER, display) document. getElementById('subscribe-btn-sms'). value = "Verify OTP and Subscribe"; document. getElementById('otp_verify_flow'). value = true; form. action = '/subscriptions/verify-otp'; } else if (data. type === 'success' && action. includes('verify')){ document. getElementById('otp-container'). style. display = "none"; $('#phone-number'). val(''). prop('readonly', false); $('#otp'). val(''); document. getElementById('subscribe-btn-sms'). value = "Send OTP"; document. getElementById('otp_verify_flow'). value = false; form. action = '/subscriptions/new-sms'; SP. currentPage. updatesDropdown. hide(); } }); $("#btn-subcriber-change-number"). on('click', () => { document. getElementById('otp-container'). style. display = "none"; $('#phone-number'). prop('readonly', false); document. getElementById('subscribe-btn-sms'). value = "Send OTP"; form. action = '/subscriptions/new-sms'; return false }) $('#resend-otp-btn'). on('click', function(e) { e. preventDefault(); let phoneNumber = $('#phone-number'). val(); let countryCode = $('. phone-country'). val(); $. ajax({ type: 'POST', url: "/subscriptions/new-sms", data: { phone_number: phoneNumber, phone_country: countryCode, type: 'resend' }, }). done(function(data) { var messageOptions = (data. type! == undefined && data. type! == null)? { cssClass: data. type }: {}; HRB. utils. notify(data. text, messageOptions); var display = document. getElementById('countdown'); disableResend(); timer. style. display = "none" if (data. type === 'success') { startTimer(RESEND_TIMER, display); } }) }); }) function startTimer(duration, display){ var timer = duration, seconds; clearInterval(countdownTimer); countdownTimer = setInterval(function () { seconds = parseInt(timer % 60, 10); display. textContent = seconds; if(--timer < 0){ enableResend(); clearInterval(countdownTimer); } }, 1000); disableResend(); } function enableResend(){ resendBtn. style. display = "block"; timer. style. display = "none" } function disableResend(){ resendBtn. style. display = "none"; timer. style. display = "block" } $(function() { $('#subscribe-form-email'). on('submit', function() { var tokenField = document. getElementById('email-otp-token-field'); let page_code = "kctbh9vrtdwd" let key = keyForEmailOtpToken($('#email'). val(), page_code); tokenField. value = localStorage. getItem(key); }); }); var emailOtpCountdownTimer; var emailOtpResendBtn = document. getElementById('resend-email-otp'); var emailOtpTimer = document. getElementById('email-otp-timer'); var emailOtpForm = document. getElementById('subscribe-form-email'); var EMAIL_OTP_RESEND_TIMER = 600; $(function() { $('#subscribe-form-email'). on('ajax: success', function(e, data, status, xhr){ const form = this; const action = form. getAttribute('action'); if (data. type === 'success' && data. email_otp_verify_flow === true) { document. getElementById('email-otp-container'). style. display = "block"; var display = document. getElementById('email-otp-countdown'); display. textContent = EMAIL_OTP_RESEND_TIMER; disableEmailOtpResend(); startEmailOtpTimer(EMAIL_OTP_RESEND_TIMER, display) document. getElementById('subscribe-btn-email'). value = "Verify OTP and Subscribe"; document. getElementById('email_otp_verify_flow'). value = true; form. action = '/subscriptions/verify-email-otp'; } else if (data. type === 'success' && action. includes('verify')){ let email = $('#email') let page_code = "kctbh9vrtdwd" let key = keyForEmailOtpToken(email. val(), page_code); localStorage. setItem(key, data. email_otp_auth_token); document. getElementById('email-otp-container'). style. display = "none"; email. val(''). prop('readonly', false); $('#email-otp'). val(''); document. getElementById('subscribe-btn-email'). value = "Send OTP"; document. getElementById('email_otp_verify_flow'). value = false; form. action = '/subscriptions/new-email'; SP. currentPage. updatesDropdown. hide(); } }); $('#resend-email-otp-btn'). on('click', function(e) { e. preventDefault(); let email = $('#email'). val(); $. ajax({ type: 'POST', url: "/subscriptions/new-email", data: { email: email }, }). done(function(data) { var messageOptions = (data. type! == undefined && data. type! == null)? { cssClass: data. type }: {}; HRB. utils. notify(data. text, messageOptions); if (data. type === 'success') { var display = document. getElementById('email-otp-countdown'); display. textContent = EMAIL_OTP_RESEND_TIMER; disableEmailOtpResend(); emailOtpTimer. style. display = "none" startEmailOtpTimer(EMAIL_OTP_RESEND_TIMER, display); } }) }); }) function startEmailOtpTimer(duration, display){ var timer = duration, seconds; clearInterval(emailOtpCountdownTimer); emailOtpCountdownTimer = setInterval(function () { seconds = parseInt(timer, 10); display. textContent = seconds; if(--timer < 0){ enableEmailOtpResend(); clearInterval(emailOtpCountdownTimer); } }, 1000); disableEmailOtpResend(); } function enableEmailOtpResend(){ emailOtpResendBtn. style. display = "block"; emailOtpTimer. style. display = "none" } function disableEmailOtpResend(){ emailOtpResendBtn. style. display = "none"; emailOtpTimer. style. display = "block" } function keyForEmailOtpToken(email, pageCode) { return email + '|' + pageCode+ '|SUBSCRIBE_VIA_EMAIL'; } All Systems Operational About This Site Check GitHub Enterprise Cloud status by region: - Australia: au. githubstatus. com - EU: eu. githubstatus. com - Japan: jp. githubstatus. com - US: us. githubstatus. com Git Operations? Operational Webhooks? Operational Visit www. githubstatus. com for more information Operational API Requests? Operational Issues? Operational Pull Requests? Operational Actions? Operational Packages? Operational Pages? Operational Codespaces? Operational Copilot Operational Operational Degraded Performance Partial Outage Major Outage Maintenance Past Incidents Dec 20, 2025 No incidents reported today. Dec 19, 2025 No incidents reported. Dec 18, 2025 Disruption with some GitHub services Resolved - This incident has been resolved. Thank you for your patience and understanding as we addressed this issue. A detailed root cause analysis will be shared as soon as it is available. Dec 18, 19: 09 UTC Update - Copilot is operating normally. Dec 18, 19: 09 UTC Update - We have observed full recovery with updating copilot policy settings, and are validating that that there is no further impact. Dec 18, 19: 05 UTC Update - Copilot is experiencing degraded performance. We are continuing to investigate. Dec 18, 18: 43 UTC Update - We have identified the source of this regression and are preparing a fix for deployment. We will update again in one hour. Dec 18, 18: 10 UTC Update - We are seeing an increase in errors on the User and Org policy settings page when updating policies. The errors are affecting the user copilot policies settings page, org copilot policies settings page when updating a policy. Dec 18, 17: 36 UTC Investigating - We are investigating reports of impacted performance for some GitHub services. Dec 18, 17: 36 UTC Intermittent networking failures across GitHub-hosted Actions runners Resolved - On December 18th, 2025, from 08: 15 UTC to 17: 11 UTC, some GitHub Actions runners experienced intermittent timeouts for Github API calls, which led to failures during runner setup and workflow execution. This was caused by network packet loss between runners in the West US region and one of GitHub’s edge sites. Approximately 1. 5% of jobs on larger and standard hosted runners in the West US region were impacted, 0. 28% of all Actions jobs during this period. By 17: 11 UTC, all traffic was routed away from the affected edge site, mitigating the timeouts. We are working to improve early detection of cross-cloud connectivity issues and faster mitigation paths to reduce the impact of similar issues in the future. Dec 18, 17: 41 UTC Update - We are observing recovery with request from GitHub-hosted Actions runners and will continue to monitor. Dec 18, 17: 29 UTC Update - Since approximately 8: 00 UTC, we have observed intermittent failures on GitHub-hosted actions runners. The failures have been observed both during runner setup, and workflow execution. We are continuing to investigate. Self-hosted runners are not impacted. Dec 18, 16: 35 UTC Investigating - We are investigating reports of degraded performance for Actions Dec 18, 16: 33 UTC Dec 17, 2025 No incidents reported. Dec 16, 2025 Incident With Copilot Resolved - From 11: 50-12: 25 UTC, Copilot Coding Agent was unable to process new agent requests. This affected all users creating new jobs during this timeframe, while existing jobs remained unaffected. The cause of this issue was a change to the actions configuration where Copilot Coding Agent runs, which caused the setup of the Actions runner to fail, and the issue was resolved by rolling back this change. As a short term solution, we hope to increase our alerting criteria so that we can be alerted more quickly when an incident occurs, and in the long term we hope to harden our runner configuration to be more resilient against errors. Dec 16, 12: 00 UTC Dec 15, 2025 Copilot Code Review is degraded, and not returning responses to users Resolved - On December 15, 2025, between 15: 15 UTC and 18: 22 UTC, Copilot Code Review experienced a service degradation that caused 46. 97% of pull request review requests to fail, requiring users to re-request a review. Impacted users saw the error message: “Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review. ” The remaining requests completed successfully. The degradation was caused by elevated response times in an internal, model-backed dependency, which led to request timeouts and backpressure in the review processing pipeline, resulting in sustained queue growth and failed review completion. We mitigated the issue by temporarily bypassing fix suggestions to reduce latency, increasing worker capacity to drain the backlog, and rolling out a model configuration change that reduced end-to-end latency. Queue depth and request success rates returned to normal and remained stable through peak traffic. Following the incident, we increased baseline worker capacity, added instrumentation for worker utilization and queue health, and are improving automatic load-shedding, fallback behavior, and alerting to reduce time to detection and mitigation for similar issues. Dec 15, 18: 22 UTC Update - We have seen recovery for Copilot Code Review requests and are investigating long-term availability and scaling strategies Dec 15, 18: 21 UTC Investigating - We are investigating reports of impacted performance for some GitHub services. Dec 15, 17: 43 UTC Incident with Copilot Grok Code Fast 1 Resolved - On Dec 15th, 2025, between 14: 00 UTC and 15: 45 UTC the Copilot service was degraded for Grok Code Fast 1 model. On average, 4% of the requests to this model failed due to an issue with our upstream provider. No other models were impacted. The issue was resolved after the upstream provider fixed the problem that caused the disruption. GitHub will continue to enhance our monitoring and alerting systems to reduce the time it takes to detect and mitigate similar issues in the future. Dec 15, 15: 45 UTC Update - We are continuing to work with our provider on resolving the incident with Grok Code Fast 1. Users can expect some requests to intermittently fail until all issues are resolved. Dec 15, 15: 06 UTC Update - We are experiencing degraded availability for the Grok Code Fast 1 model in Copilot Chat, VS Code and other Copilot products. This is due to an issue with an upstream model provider. We are working with them to resolve the issue. Other models are available and working as expected. Dec 15, 14: 13 UTC Investigating - We are investigating reports of degraded performance for Copilot Dec 15, 14: 12 UTC Dec 14, 2025 No incidents reported. Dec 13, 2025 No incidents reported. Dec 12, 2025 No incidents reported. Dec 11, 2025 Disruptions in Login and Signup Flows Resolved - Between 13: 25 UTC and 18: 35 UTC on Dec 11th, GitHub experienced an increase in scraper activity on public parts of our website. This scraper activity caused a low priority web request pool to increase and eventually exceed total capacity resulting in users experiencing 500 errors. In particular, this affected Login, Logout, and Signup routes, along with less than 1% requests from within Actions jobs. At the peak of the incident, 7. 6% of login requests were impacted, which was the most significant impact of this scraping attack. Our mitigation strategy identified the scraping activity and blocked it. We also increased the pool of web requests that were impacted to have more capacity, and lastly we upgraded key user login routes to higher priority queues. In future, we’re working to more proactively identify this particular scraper activity and have faster mitigation times. Dec 11, 20: 05 UTC Update - We see signs of full recovery and will post a more in-depth update soon. Dec 11, 20: 05 UTC Update - We are continuing to monitor and continuing to see signs of recovery. We will update when we are confident that we are in full recovery. Dec 11, 19: 58 UTC Update - We've applied a mitigation to fix intermittent failures in anonymous requests and downloads from GitHub, including Login, Signup, Logout, and some requests from within Actions jobs. We are seeing improvements in telemetry, but we will continue to monitor for full recovery. Dec 11, 19: 04 UTC Update - We currently have ~7% of users experiencing errors when attempting to sign up, log in, or log out. We are deploying a change to mitigate these failures. Dec 11, 18: 47 UTC Investigating - We are investigating reports of impacted performance for some GitHub services. Dec 11, 18: 40 UTC We are investigating a rise in request failures on several services Resolved - Between 13: 25 UTC and 18: 35 UTC on December 11th, GitHub experienced elevated traffic to portions of GitHub. com that exceeded previously provisioned capacity for specific request types. As a result, users encountered intermittent 500 errors. Impact was most pronounced on Login, Logout, and Signup pages, peaking at 7. 6% of login requests. Additionally, fewer than 1% of requests originating from GitHub Actions jobs were affected. This incident was driven by the same underlying factors as the previously reported disruption to Login and Signup flowsOur immediate response focused on identifying and mitigating the source of the traffic increase. We increased available capacity for web request handling to relieve pressure on constrained pools. To reduce recurrence risk, we also re-routed critical authentication endpoints to a different traffic pool, ensuring sufficient isolation and headroom for login related traffic. In future, we’re working to more proactively identify these large changes in traffic volume and improve our time to mitigation. Dec 11, 17: 53 UTC Update - Git Operations is operating normally. Dec 11, 17: 20 UTC Update - We believe that we have narrowed down our affected users to primarily those that are signing up or signing in as well as logged out usage. We are currently continuing to investigate the root cause and are working multiple mitigation angles. Dec 11, 17: 19 UTC Update - We are experiencing intermittent web request failures across multiple services, including login and authentication. Our teams are actively investigating the cause and working on mitigation. Dec 11, 16: 41 UTC Update - Codespaces, Copilot, Git Operations, Packages, Pages, Pull Requests and Webhooks are experiencing degraded performance. We are continuing to investigate. Dec 11, 16: 09 UTC Update - API Requests and Actions are experiencing degraded performance. We are continuing to investigate. Dec 11, 16: 01 UTC Investigating - We are investigating reports of degraded performance for Issues Dec 11, 15: 47 UTC Dec 10, 2025 Some macOS Actions jobs routing to Ubuntu instead Resolved - Between December 9th, 2025 21: 07 UTC and December 10th, 2025 14: 52 UTC, 177 macos-14-large jobs were run on an Ubuntu larger runner VM instead of MacOS runner VMs. The impacted jobs were routed to a larger runner with incorrect metadata. We mitigated this by deleting the runner. The routing configuration is not something controlled externally. A manual override was done previously for internal testing, but left incorrect metadata for a large runner instance. An infrastructure migration caused this misconfigured runner to come online which started the incorrect assignments. We are removing the ability to manually override this configuration entirely, and are adding alerting to identify possible OS mismatches for hosted runner jobs. As a reminder, hosted runner VMs are secure and ephemeral, with every VM reimaged after every single job. All jobs impacted here were originally targeted at a GitHub-owned VM image and were run on a GitHub-owned VM image. Dec 10, 14: 52 UTC Update - We've applied a mitigation to ensure all macOS jobs route to macOS fulfillers and are monitoring for full recovery. Dec 10, 14: 32 UTC Investigating - We are investigating reports of degraded performance for Actions Dec 10, 13: 34 UTC Some Actions customers experiencing run start delays Resolved - On December 10, 2025 between 08: 50 UTC and 11: 00 UTC, some GitHub Actions workflow runs experienced longer-than-normal wait times for jobs starting or completing. All jobs successfully completed despite the delays. At peak impact, approximately 8% of workflow runs were affected. During this incident, some nodes received a spike in workflow events that led to queuing of event processing. Because runs are pinned to nodes, runs being processed by these nodes saw delays in starting or showing as completed. The team was alerted to this at 8: 58 UTC. Impacted nodes were disabled from processing new jobs to allow queues to drain. We have increased overall processing capacity and are implementing safeguards to better balance load across all nodes when spikes occur. This is important to ensure our available capacity can always be fully utilized. Dec 10, 11: 05 UTC Update - Actions is operating normally. Dec 10, 11: 05 UTC Update - We have validated the mitigation and are no longer seeing impact. Dec 10, 11: 05 UTC Update - We are seeing improvements in telemetry and are monitoring for full recovery. Dec 10, 10: 58 UTC Update - We've applied a mitigation to fix the issues with queuing and running Actions jobs. We will continue monitoring to confirm whether this resolves the issue. Dec 10, 10: 25 UTC Update - The team continues to investigate issues with some Actions jobs being queued for a long time. We will continue providing updates on the progress towards mitigation. Dec 10, 09: 41 UTC Update - We're investigating Actions workflow runs taking longer than expected to start. Dec 10, 09: 13 UTC Investigating - We are investigating reports of degraded performance for Actions Dec 10, 09: 11 UTC Dec 9, 2025 No incidents reported. Dec 8, 2025 Disruption with some GitHub services Resolved - On December 8, 2025, between 21: 15 and 22: 24 UTC, Copilot code completions experienced a significant service degradation. During this period, up to 65% of code completion requests failed. The root cause was an internal feature flag that caused the primary model supporting Copilot code completions to appear unavailable to the backend service. The issue was resolved once the flag was disabled. To prevent recurrence, we expanded test coverage for Copilot code completion models and are strengthening our detection mechanisms to better identify and respond to traffic anomalies. Dec 8, 22: 33 UTC Update - We are beginning to see signs of resolution after applying a mitigation. We expect full resolution within approximately 30 minutes. Dec 8, 22: 10 UTC Update - We're continuing to investigate and mitigate issues with the GPT 4o model for Copilot completions. Users can currently work around this issue by updating their VS Code settings with "github. copilot. advanced. debug. overrideEngine": "gpt-41-copilot". Dec 8, 22: 04 UTC Update - We are currently investigating failures with the GPT 4o model for Copilot completions. Dec 8, 21: 32 UTC Investigating - We are investigating reports of impacted performance for some GitHub services. Dec 8, 21: 28 UTC Potential disruption with our Agent Control Plane UI Settings Resolved - On November 26th, 2025, between approximately 02: 24 UTC and December 8th, 2025 at 20: 26 UTC, enterprise administrators experienced a disruption when viewing agent session activities in the Enterprise AI Controls page. During this period, users were unable to list agent session activity in the AI Controls view. This did not impact viewing agent session activity in audit logs or directly navigating to individual agent session logs, or otherwise managing AI Agents. The issue was caused by a misconfiguration in a change deployed on November 25th that unintentionally prevented data from being published to an internal Kafka topic responsible for feeding the AI Controls page with agent session activity information. The problem was identified and mitigated on December 8th by correcting the configuration issue. GitHub is improving monitoring for data pipeline dependencies and enhancing pre-deployment validation to catch configuration issues before they reach production. Dec 8, 21: 06 UTC Update - We are investigating an incident affecting missing Agent Session data on the AI Settings page on Agent Control Plane. Dec 8, 19: 52 UTC Investigating - We are investigating reports of impacted performance for some GitHub services. Dec 8, 19: 51 UTC Dec 7, 2025 No incidents reported. Dec 6, 2025 No incidents reported. ← Incident History Powered by Atlassian Statuspage GitHub text logo Subscribe to our developer newsletter Get tips, technical guides, and best practices. Twice a month. Right in your inbox. Subscribe Product Features Enterprise Copilot Security Pricing Team Resources Roadmap Compare GitHub Platform Developer API Partners Education GitHub CLI GitHub Desktop GitHub Mobile Support Docs Community Forum Professional Services Skills Contact GitHub Company About Customer stories Blog The ReadME Project Careers Newsroom Inclusion Social Impact Shop © document. write(new Date(). getFullYear()); GitHub, Inc. Terms Privacy (Updated 08/2022) GitHub X GitHub Facebook GitHub LinkedIn GitHub YouTube Twitch TikTok GitHub. com $('. components-container'). toggleClass('one-column'). toggleClass('two-columns') $(document). ready(function () { if ($('body'). hasClass('status-none')) { $('link[rel="shortcut icon"]'). attr("href", "https: //github. githubassets. com/favicons/favicon-success. png") } else { $('link[rel="shortcut icon"]'). attr("href", "https: //github. githubassets. com/favicons/favicon-pending. png") } // Move "about this page" text section after the Incident History link $('. text-section'). insertAfter('. history-footer-link'); $('span. name: contains("Visit www. githubstatus. com for more information")'). parents('div. component-container'). hide() $('div. status-green span. component-status'). html("") $('div. status-yellow span. component-status'). html("") $('div. status-orange span. component-status'). html("") $('div. status-red span. component-status'). html("") $('. outage-field. label. major_outage'). parent(). html("") var otherParent = $('span. name: contains("Other")'). parent() if (otherParent. hasClass('status-green')) { otherParent. parent(). hide() } $('. page-status. status-major span. status, . page-status. status-minor span. status'). html('Some services are degraded') $('. outage-field. label. partial_outage'). parent(). html("Degradation") $('. incidents-list'). remove() $('. component-statuses-legend'). remove() $('div. status-green'). append("Normal") $('div. status-yellow'). append("Degraded") $('div. status-orange'). append("Degraded") $('div. status-red'). append("Incident") $('div. status-blue'). append("Maintenance") }); $(function() { SP. currentPage. registerSubscriptionForm('email'); SP. currentPage. registerSubscriptionForm('sms'); SP. currentPage. registerSubscriptionForm('webhook'); }); SP. pollForChanges('/api/v2/status. json'); $(function() { $('. tool'). tooltipster({ animationDuration: 100, contentAsHTML: true, delay: 100, theme: 'tooltipster-borderless', functionInit: function (instance, helper) { var $origin = $(helper. origin), dataOptions = $origin. attr('data-tooltip-config'); if (dataOptions){ dataOptions = JSON. parse(dataOptions); $. each(dataOptions, function(name, option){ instance. option(name, option); }); } } }); // clicks on first tab in subscribe popout since we won't know which is first // upon construction in the ruby code $('. updates-dropdown-nav > a'). eq(0). click(); // twitter follow button needs some margin $('. twitter-follow-button'). css('margin-right', '6px'); }); $(function() { // open/close component groups HRB. utils. djshook('component-group-opener'). on('click', function() { var groupParentIndicator = $(this). find('. group-parent-indicator'); groupParentIndicator. toggleClass('fa-plus-square-o'). toggleClass('fa-minus-square-o'). end(). parent(). toggleClass('open'); toggleGroup(groupParentIndicator) }); }); $(function() { HRB. utils. djshook('component-group-opener'). on('keydown', function(event) { if (event. key! == "Enter" && event. key! == " ") { return; } event. preventDefault() var groupParentIndicator = $(this). find('. group-parent-indicator'); groupParentIndicator. toggleClass('fa-plus-square-o'). toggleClass('fa-minus-square-o'). end(). parent(). toggleClass('open'); toggleGroup(groupParentIndicator) }); }); function toggleGroup(groupParentIndicator) { var isOpen = groupParentIndicator. attr('aria-expanded') if (isOpen == 'false') { groupParentIndicator. attr('aria-expanded', 'true'); } else { groupParentIndicator. attr('aria-expanded', 'false'); } } $(function() { $(document). on('ajax: complete', '. modal. in', function(e) { // Close the active modal. $('. modal. in'). modal('hide'); }); }); /** INITIALIZATION **/ var recaptchaIds = {} // Unfortunately there's no unique selectors on the parent divs that recaptcha adds. The first unique selector // is the iframe rendered 2 levels deep. So this waits until the iframes are added to the page, then finds // the parent div and sets the z index so that it'll render above our modals & dropdowns from the start. function setZIndex(captchaCount, startTime) { // bail after 10s just in case so we don't do this forever if something whaky happens if (new Date() - startTime > 10000) { return; } var iframes = document. querySelectorAll('iframe[title="recaptcha challenge"]'); if (iframes. length! = captchaCount) { setTimeout(function() { setZIndex(captchaCount, startTime); }, 500); } for (var i = 0; i < iframes. length; i++) { // incident subscribe modal is 1050, so this has to be above that iframes[i]. parentElement. parentElement. style. zIndex = "1100"; } } function updateCaptchaIframeTitle(captchaCount, startTime, updates=0) { if (new Date() - startTime > 10000 || captchaCount === updates) { return; } var iframesWithTitle = document. querySelectorAll('iframe[title="recaptcha challenge expires in two minutes"]'); if (iframesWithTitle. length! = captchaCount) { setTimeout(function() { updateCaptchaIframeTitle(captchaCount, startTime, iframesWithTitle. length + updates); }, 500); } for (var i = 0; i < iframesWithTitle. length; i++) { iframesWithTitle[i]. title = "recaptcha"; } } function addIncidentCaptcha() { var incidentCaptcha = document. createElement('div'); incidentCaptcha. setAttribute('id', 'subscribe-incident-recaptcha'); incidentCaptcha. setAttribute('class', 'g-recaptcha'); incidentCaptcha. setAttribute('data-sitekey', '6LcZ-b0UAAAAAENi956aWzynTT2ZJ80dGU3F80Op'); incidentCaptcha. setAttribute('data-callback', 'submitIncidentSubscriberSuccess'); incidentCaptcha. setAttribute('data-error-callback', 'submitIncidentSubscriberError'); incidentCaptcha. setAttribute('data-size', 'invisible'); document. body. appendChild(incidentCaptcha); var incidentCode = document. createElement('input'); incidentCode. setAttribute('type', 'hidden'); incidentCode. setAttribute('id', 'submit_incident_code'); document. body. appendChild(incidentCode); } var onloadCallback = function() { // if there is an incident, then add incident captcha element if (document. getElementsByClassName('modal-open-incident-subscribe'). length > 0) { addIncidentCaptcha(); } var captchas = document. getElementsByClassName("g-recaptcha"); for(var i = 0; i < captchas. length; i++) { var elId = captchas[i]. id; recaptchaIds[elId] = grecaptcha. enterprise. render(elId); } setZIndex(captchas. length, new Date()); updateCaptchaIframeTitle(captchas. length, new Date()); } /** SUBSCRIBE DROPDOWN */ // callbacks for captcha success function submitNewSubscriber(type, error) { if (error) document. querySelector('#subscribe-form-' + type + ' #captcha_error'). value = 'true'; document. getElementById('subscribe-form-' + type). dispatchEvent(new Event('submit', {bubbles: true, cancelable: true})); grecaptcha. enterprise. reset(recaptchaIds['subscribe-btn-' + type]); } function submitNewEmailSubscriber(token) { submitNewSubscriber('email'); } function submitNewSmsSubscriber(token) { submitNewSubscriber('sms'); } function submitNewWebhookSubscriber(token) { submitNewSubscriber('webhook'); } function submitIncidentSubscriber(token, error) { var incidentCode = document. getElementById('submit_incident_code'). value; var incidentForm = document. getElementById('subscribe-form-' + incidentCode); incidentForm. querySelector('input[name="captcha_error"]'). value = error; incidentForm. querySelector('input[name="g-recaptcha-response"]'). value = token; incidentForm. dispatchEvent(new Event('submit', {bubbles: true, cancelable: true})); grecaptcha. enterprise. reset(recaptchaIds['subscribe-incident-recaptcha']); } function submitIncidentSubscriberSuccess(token) { submitIncidentSubscriber(token, 'false'); } // callbacks if we get captcha network errors function emailSubscriberCaptchaError(token) { submitNewSubscriber('email', true); } function smsSubscriberCaptchaError(token) { submitNewSubscriber('sms', true); } function webhookSubscriberCaptchaError(token) { submitNewSubscriber('webhook', true); } function submitIncidentSubscriberError(token) { submitIncidentSubscriber(token, 'true'); } // tracking clicks ['email', 'sms', 'webhook']. forEach(function(type) { var el = document. getElementById('subscribe-btn-' + type); el && el. addEventListener("click", function() { $. ajax({ type: "POST", url: "/subscriptions/track_attempt", data: { type: type } }) }) }) // form submission success callbacks $('#subscribe-form-email'). on('ajax: success', function(e, data, status, xhr){ if (data. type === 'success') { SP. currentPage. updatesDropdown. hide(); document. getElementById('email'). value = ''; } }); $('#subscribe-form-sms'). on('ajax: success', function(e, data, status, xhr){ if (data. type === 'success' && data. otp_flow! == true) { SP. currentPage. updatesDropdown. hide(); document. getElementById('phone-number'). value = ''; } }); $('#subscribe-form-webhook'). on('ajax: success', function(e, data, status, xhr){ if (data. type === 'success') { SP. currentPage. updatesDropdown. hide(); document. getElementById('endpoint-webhooks'). value = ''; document. getElementById('email-webhooks'). value = ''; } }); $('a. subscribe'). on('click', function() { document. body. style. overflow = "hidden"; document. body. style. height = "100vh"; }); $('div. modal-open-incident-subscribe'). on('hidden', function(){ document. body. style. overflow = ""; document. body. style. height = ""; }); function submitCaptchaIncidentSubscribe(event) { var incidentCode = event. target. id. split('-')[2]; event. preventDefault(); $. ajax({ type: "POST", url: "/subscriptions/track_attempt", data: { type: 'incident' } }) document. getElementById('submit_incident_code'). value = incidentCode; grecaptcha. enterprise. execute(recaptchaIds['subscribe-incident-recaptcha']); } window. addEventListener('load', function () { const urlParams = new URLSearchParams(window. location. search); const messageToken = urlParams. get('slack_message_token'); const channelName = escape(urlParams. get('channel_name')); if(! ! messageToken) { switch(messageToken) { case 'slack_auth_error': HRB. utils. notify('The Slack authorization attempt was unsuccessful. Try again. ', {cssClass: 'error'}); break; case 'subscribers_disabled_error': HRB. utils. notify('Slack subscriptions are not enabled on this page. ', {cssClass: 'error'}); break; case 'direct_message_channel_error': HRB. utils. notify('Subscriptions aren’t supported in direct messages. Try subscribing again and choose a channel instead. ', {cssClass: 'error'}); break case 'duplicate_error': HRB. utils. notify("You're already subscribed to get Slack notifications in that channel. ", {cssClass: 'error'}); break; case 'duplicate_private_channel_error': 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'}); break; case 'default_success': HRB. utils. notify("You're now subscribed to get Statuspage updates in Slack! ", {cssClass: 'success'}); break; case 'private_channel_success': HRB. utils. notify(`IMPORTANT: Invite the @Statuspage app to your Slack channel #${channelName} to start getting status updates. `, {cssClass: 'success'}); break; } } }); $(function() { var $link = $('Powered by Atlassian Statuspage'); var setPoweredByStyles = function() { if (! $('. powered-by'). length) { $link. appendTo($('. page-footer')) } $('. powered-by'). attr('style', 'display: inline! important; visibility: visible! important; opacity: 1! important; position: static! important; text-indent: 0px! important; transform: scale(1)! important'); } setInterval(setPoweredByStyles, 1000); });