diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 000000000..c75b3d7fe
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1,2 @@
+# Public status configuration, workflows, and incident process
+* @masterfung
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index 651c5a1c7..000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-title: ''
-labels: 'bug'
-assignees: 'AnandChowdhary'
-
----
-
-
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-1. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Screenshots**
-If applicable, add screenshots to help explain your problem.
-
-**Desktop (please complete the following information):**
- - OS: [e.g. iOS]
- - Browser [e.g. chrome, safari]
- - Version [e.g. 22]
-
-**Smartphone (please complete the following information):**
- - Device: [e.g. iPhone6]
- - OS: [e.g. iOS8.1]
- - Browser [e.g. stock browser, safari]
- - Version [e.g. 22]
-
-**Additional context**
-Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index a07d0253b..a1055d683 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1,8 +1,11 @@
-blank_issues_enabled: true
+blank_issues_enabled: false
contact_links:
- - name: Feature requests and ideas
- url: https://github.com/orgs/upptime/discussions/new?category=ideas
- about: Suggest an idea for this project
- - name: Questions
- url: https://github.com/orgs/upptime/discussions/new?category=q-a
- about: Please ask and answer questions here
+ - name: Report a Mighty service problem
+ url: mailto:hi@trymighty.ai
+ about: Contact Mighty support if a problem is not already shown on the status page.
+ - name: Report a security vulnerability privately
+ url: https://github.com/TryMightyAI/status/security/advisories/new
+ about: Do not disclose security vulnerabilities in a public status issue.
+ - name: Upptime project support
+ url: https://github.com/upptime/upptime/issues
+ about: Report bugs in the upstream status-page software to Upptime.
diff --git a/.github/ISSUE_TEMPLATE/maintainance-event.md b/.github/ISSUE_TEMPLATE/maintainance-event.md
deleted file mode 100644
index 7abcd2532..000000000
--- a/.github/ISSUE_TEMPLATE/maintainance-event.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-name: Maintenance Event
-about: Schedule a work window
-title: "[Scheduled Maintenance] Site down for Maintenance"
-labels: maintenance
-assignees: ''
-
----
-
-
-
-**Additional context**
-Who/what/when/where/why is this maintenance happening
diff --git a/.github/ISSUE_TEMPLATE/scheduled-maintenance.md b/.github/ISSUE_TEMPLATE/scheduled-maintenance.md
new file mode 100644
index 000000000..3fba39844
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/scheduled-maintenance.md
@@ -0,0 +1,41 @@
+---
+name: Scheduled maintenance
+about: Announce customer-impacting maintenance or a risky production push
+title: "[Scheduled Maintenance] "
+labels: maintenance
+assignees: ""
+---
+
+> **Required:** Replace both 2000 timestamps with the approved UTC start/end.
+> List only genuinely affected slugs after `expectedDown` or
+> `expectedDegraded`; leave the value empty when that impact is not expected.
+
+
+
+Valid component slugs: `website`, `api`, `scan-gateway`.
+
+## Summary
+
+What work is happening, and why is a public notice appropriate?
+
+## Expected customer impact
+
+Describe affected capabilities, regions if relevant, and whether interruption
+or degraded performance is expected. Do not include sensitive implementation
+details.
+
+## Update plan
+
+State where and when the next update will appear.
+
+## Operator checklist
+
+- [ ] Approved start/end times are in UTC and replace the 2000 placeholders.
+- [ ] Affected component slugs are accurate.
+- [ ] Change/rollback owner and approval exist in the private change record.
+- [ ] Security/privacy/legal review is complete if the notice needs it.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 000000000..4a7b9e7ee
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,13 @@
+## Summary
+
+## Status-page risk
+
+- [ ] This change does not make a new SLA, compliance, or availability claim.
+- [ ] Public text contains no customer data, secrets, or exploitable details.
+- [ ] Monitor/component changes were tested from outside the Mighty stack.
+- [ ] Workflow actions remain pinned to full commit SHAs.
+- [ ] `ruby scripts/validate.rb` passes.
+
+## Deployment and rollback
+
+Describe how the static page will be verified and how this change can be reverted.
diff --git a/.github/workflows/graphs.yml b/.github/workflows/graphs.yml
deleted file mode 100644
index fa78f349f..000000000
--- a/.github/workflows/graphs.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# ===============================
-# Do not edit this file directly!
-# ===============================
-#
-# Your changes will be overwritten when the Upptime template updates (by default, weekly)
-# Instead, change .upptimerc.yml configuration and the workflows will be generated accordingly.
-#
-# 🔼 Upptime @v1.43.13
-# GitHub-powered open-source uptime monitor and status page by Anand Chowdhary
-
-# * Source: https://github.com/upptime/upptime
-# * Docs and more: https://upptime.js.org
-# * More by Anand Chowdhary: https://anandchowdhary.com
-
-
-name: Graphs CI
-on:
- schedule:
- - cron: "0 0 * * *"
- repository_dispatch:
- types: [graphs]
- workflow_dispatch:
-concurrency:
- group: ${{ github.repository }}-${{ github.head_ref || github.ref_name }}-upptime
- cancel-in-progress: false
-jobs:
- release:
- name: Generate graphs
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v6
- with:
- ref: ${{ github.head_ref || github.ref_name }}
- token: ${{ secrets.GH_PAT || github.token }}
- - name: Setup Node.js for graphs
- uses: actions/setup-node@v6
- with:
- node-version: "20"
- - name: Generate graphs
- uses: upptime/uptime-monitor@v1.43.13
- with:
- command: "graphs"
- env:
- GH_PAT: ${{ secrets.GH_PAT || github.token }}
diff --git a/.github/workflows/response-time.yml b/.github/workflows/response-time.yml
index 5304230dc..3df63bff6 100644
--- a/.github/workflows/response-time.yml
+++ b/.github/workflows/response-time.yml
@@ -1,44 +1,38 @@
-#
-# ===============================
-# Do not edit this file directly!
-# ===============================
-#
-# Your changes will be overwritten when the Upptime template updates (by default, weekly)
-# Instead, change .upptimerc.yml configuration and the workflows will be generated accordingly.
-#
-# 🔼 Upptime @v1.43.13
-# GitHub-powered open-source uptime monitor and status page by Anand Chowdhary
-
-# * Source: https://github.com/upptime/upptime
-# * Docs and more: https://upptime.js.org
-# * More by Anand Chowdhary: https://anandchowdhary.com
-
-
+# Hardened from Upptime v1.43.13. Review upgrades through UPSTREAM.md;
+# never replace full commit SHAs with moving tags or branches.
name: Response Time CI
+
on:
schedule:
- - cron: "0 23 * * *"
- repository_dispatch:
- types: [response_time]
+ - cron: "43 23 * * *"
workflow_dispatch:
+
+permissions:
+ contents: read
+
concurrency:
- group: ${{ github.repository }}-${{ github.head_ref || github.ref_name }}-upptime
+ group: ${{ github.repository }}-upptime-main-writer
cancel-in-progress: false
+
jobs:
release:
- name: Check status
+ permissions:
+ contents: write
+ issues: write
+ name: Record response time
+ if: github.ref == 'refs/heads/main' && vars.STATUS_AUTOMATION_ENABLED == 'true'
runs-on: ubuntu-latest
+ timeout-minutes: 10
steps:
- name: Checkout
- uses: actions/checkout@v6
+ uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
- ref: ${{ github.head_ref || github.ref_name }}
- token: ${{ secrets.GH_PAT || github.token }}
- - name: Update response time
- uses: upptime/uptime-monitor@v1.43.13
+ ref: main
+ token: ${{ github.token }}
+ - name: Record response time
+ uses: upptime/uptime-monitor@4fec88256b5917a2ed07a088df6e205869b424d6 # v1.43.13
with:
- command: "response-time"
+ command: response-time
env:
- GH_PAT: ${{ secrets.GH_PAT || github.token }}
- # Configure the secret allowlist in .upptimerc.yml; do not edit this workflow directly.
- SECRETS_CONTEXT: '{"DYNAMIC_STRING_LENGTH":${{ toJson(secrets.DYNAMIC_STRING_LENGTH) }},"GLOBALPING_TOKEN":${{ toJson(secrets.GLOBALPING_TOKEN) }},"NOTIFICATIONS_DOWN_MESSAGE":${{ toJson(secrets.NOTIFICATIONS_DOWN_MESSAGE) }},"NOTIFICATIONS_UP_MESSAGE":${{ toJson(secrets.NOTIFICATIONS_UP_MESSAGE) }},"NOTIFICATION_CUSTOM_WEBHOOK":${{ toJson(secrets.NOTIFICATION_CUSTOM_WEBHOOK) }},"NOTIFICATION_CUSTOM_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_CUSTOM_WEBHOOK_URL) }},"NOTIFICATION_DISCORD_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_DISCORD_WEBHOOK_URL) }},"NOTIFICATION_EMAIL":${{ toJson(secrets.NOTIFICATION_EMAIL) }},"NOTIFICATION_EMAIL_FROM":${{ toJson(secrets.NOTIFICATION_EMAIL_FROM) }},"NOTIFICATION_EMAIL_MAILGUN":${{ toJson(secrets.NOTIFICATION_EMAIL_MAILGUN) }},"NOTIFICATION_EMAIL_MAILGUN_API_KEY":${{ toJson(secrets.NOTIFICATION_EMAIL_MAILGUN_API_KEY) }},"NOTIFICATION_EMAIL_MAILGUN_DOMAIN_NAME":${{ toJson(secrets.NOTIFICATION_EMAIL_MAILGUN_DOMAIN_NAME) }},"NOTIFICATION_EMAIL_SENDGRID":${{ toJson(secrets.NOTIFICATION_EMAIL_SENDGRID) }},"NOTIFICATION_EMAIL_SENDGRID_API_KEY":${{ toJson(secrets.NOTIFICATION_EMAIL_SENDGRID_API_KEY) }},"NOTIFICATION_EMAIL_SES":${{ toJson(secrets.NOTIFICATION_EMAIL_SES) }},"NOTIFICATION_EMAIL_SES_ACCESS_KEY_ID":${{ toJson(secrets.NOTIFICATION_EMAIL_SES_ACCESS_KEY_ID) }},"NOTIFICATION_EMAIL_SES_REGION":${{ toJson(secrets.NOTIFICATION_EMAIL_SES_REGION) }},"NOTIFICATION_EMAIL_SES_SECRET_ACCESS_KEY":${{ toJson(secrets.NOTIFICATION_EMAIL_SES_SECRET_ACCESS_KEY) }},"NOTIFICATION_EMAIL_SES_SESSION_TOKEN":${{ toJson(secrets.NOTIFICATION_EMAIL_SES_SESSION_TOKEN) }},"NOTIFICATION_EMAIL_SMTP":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP) }},"NOTIFICATION_EMAIL_SMTP_HOST":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP_HOST) }},"NOTIFICATION_EMAIL_SMTP_PASSWORD":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP_PASSWORD) }},"NOTIFICATION_EMAIL_SMTP_PORT":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP_PORT) }},"NOTIFICATION_EMAIL_SMTP_USERNAME":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP_USERNAME) }},"NOTIFICATION_EMAIL_SPARKPOST":${{ toJson(secrets.NOTIFICATION_EMAIL_SPARKPOST) }},"NOTIFICATION_EMAIL_SPARKPOST_API_KEY":${{ toJson(secrets.NOTIFICATION_EMAIL_SPARKPOST_API_KEY) }},"NOTIFICATION_EMAIL_STRATEGY":${{ toJson(secrets.NOTIFICATION_EMAIL_STRATEGY) }},"NOTIFICATION_EMAIL_TO":${{ toJson(secrets.NOTIFICATION_EMAIL_TO) }},"NOTIFICATION_GOOGLE_CHAT_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_GOOGLE_CHAT_WEBHOOK_URL) }},"NOTIFICATION_GOTIFY":${{ toJson(secrets.NOTIFICATION_GOTIFY) }},"NOTIFICATION_GOTIFY_PRIORITY":${{ toJson(secrets.NOTIFICATION_GOTIFY_PRIORITY) }},"NOTIFICATION_GOTIFY_TITLE":${{ toJson(secrets.NOTIFICATION_GOTIFY_TITLE) }},"NOTIFICATION_GOTIFY_TOKEN":${{ toJson(secrets.NOTIFICATION_GOTIFY_TOKEN) }},"NOTIFICATION_GOTIFY_URL":${{ toJson(secrets.NOTIFICATION_GOTIFY_URL) }},"NOTIFICATION_LARK":${{ toJson(secrets.NOTIFICATION_LARK) }},"NOTIFICATION_LARK_BOT_WEBHOOK":${{ toJson(secrets.NOTIFICATION_LARK_BOT_WEBHOOK) }},"NOTIFICATION_MASTODON":${{ toJson(secrets.NOTIFICATION_MASTODON) }},"NOTIFICATION_MASTODON_API_KEY":${{ toJson(secrets.NOTIFICATION_MASTODON_API_KEY) }},"NOTIFICATION_MASTODON_INSTANCE_URL":${{ toJson(secrets.NOTIFICATION_MASTODON_INSTANCE_URL) }},"NOTIFICATION_MASTODON_TOOT_VISIBILITY":${{ toJson(secrets.NOTIFICATION_MASTODON_TOOT_VISIBILITY) }},"NOTIFICATION_MISSKEY":${{ toJson(secrets.NOTIFICATION_MISSKEY) }},"NOTIFICATION_MISSKEY_API_KEY":${{ toJson(secrets.NOTIFICATION_MISSKEY_API_KEY) }},"NOTIFICATION_MISSKEY_CHAT":${{ toJson(secrets.NOTIFICATION_MISSKEY_CHAT) }},"NOTIFICATION_MISSKEY_CHAT_USER_ID":${{ toJson(secrets.NOTIFICATION_MISSKEY_CHAT_USER_ID) }},"NOTIFICATION_MISSKEY_INSTANCE_URL":${{ toJson(secrets.NOTIFICATION_MISSKEY_INSTANCE_URL) }},"NOTIFICATION_MISSKEY_NOTE":${{ toJson(secrets.NOTIFICATION_MISSKEY_NOTE) }},"NOTIFICATION_MISSKEY_NOTE_VISIBILITY":${{ toJson(secrets.NOTIFICATION_MISSKEY_NOTE_VISIBILITY) }},"NOTIFICATION_MISSKEY_NOTE_VISIBLE_USER_IDS":${{ toJson(secrets.NOTIFICATION_MISSKEY_NOTE_VISIBLE_USER_IDS) }},"NOTIFICATION_SLACK":${{ toJson(secrets.NOTIFICATION_SLACK) }},"NOTIFICATION_SLACK_STRATEGY":${{ toJson(secrets.NOTIFICATION_SLACK_STRATEGY) }},"NOTIFICATION_SLACK_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_SLACK_WEBHOOK_URL) }},"NOTIFICATION_SMS_46ELKS":${{ toJson(secrets.NOTIFICATION_SMS_46ELKS) }},"NOTIFICATION_SMS_46ELKS_API_PASSWORD":${{ toJson(secrets.NOTIFICATION_SMS_46ELKS_API_PASSWORD) }},"NOTIFICATION_SMS_46ELKS_API_USERNAME":${{ toJson(secrets.NOTIFICATION_SMS_46ELKS_API_USERNAME) }},"NOTIFICATION_SMS_CALLR":${{ toJson(secrets.NOTIFICATION_SMS_CALLR) }},"NOTIFICATION_SMS_CALLR_LOGIN":${{ toJson(secrets.NOTIFICATION_SMS_CALLR_LOGIN) }},"NOTIFICATION_SMS_CALLR_PASSWORD":${{ toJson(secrets.NOTIFICATION_SMS_CALLR_PASSWORD) }},"NOTIFICATION_SMS_CLICKATELL":${{ toJson(secrets.NOTIFICATION_SMS_CLICKATELL) }},"NOTIFICATION_SMS_CLICKATELL_API_KEY":${{ toJson(secrets.NOTIFICATION_SMS_CLICKATELL_API_KEY) }},"NOTIFICATION_SMS_FROM":${{ toJson(secrets.NOTIFICATION_SMS_FROM) }},"NOTIFICATION_SMS_INFOBIP":${{ toJson(secrets.NOTIFICATION_SMS_INFOBIP) }},"NOTIFICATION_SMS_INFOBIP_PASSWORD":${{ toJson(secrets.NOTIFICATION_SMS_INFOBIP_PASSWORD) }},"NOTIFICATION_SMS_INFOBIP_USERNAME":${{ toJson(secrets.NOTIFICATION_SMS_INFOBIP_USERNAME) }},"NOTIFICATION_SMS_NEXMO":${{ toJson(secrets.NOTIFICATION_SMS_NEXMO) }},"NOTIFICATION_SMS_NEXMO_API_KEY":${{ toJson(secrets.NOTIFICATION_SMS_NEXMO_API_KEY) }},"NOTIFICATION_SMS_NEXMO_API_SECRET":${{ toJson(secrets.NOTIFICATION_SMS_NEXMO_API_SECRET) }},"NOTIFICATION_SMS_OVH":${{ toJson(secrets.NOTIFICATION_SMS_OVH) }},"NOTIFICATION_SMS_OVH_ACCOUNT":${{ toJson(secrets.NOTIFICATION_SMS_OVH_ACCOUNT) }},"NOTIFICATION_SMS_OVH_APP_KEY":${{ toJson(secrets.NOTIFICATION_SMS_OVH_APP_KEY) }},"NOTIFICATION_SMS_OVH_APP_SECRET":${{ toJson(secrets.NOTIFICATION_SMS_OVH_APP_SECRET) }},"NOTIFICATION_SMS_OVH_CONSUMER_KEY":${{ toJson(secrets.NOTIFICATION_SMS_OVH_CONSUMER_KEY) }},"NOTIFICATION_SMS_OVH_HOST":${{ toJson(secrets.NOTIFICATION_SMS_OVH_HOST) }},"NOTIFICATION_SMS_PLIVO":${{ toJson(secrets.NOTIFICATION_SMS_PLIVO) }},"NOTIFICATION_SMS_PLIVO_AUTH_ID":${{ toJson(secrets.NOTIFICATION_SMS_PLIVO_AUTH_ID) }},"NOTIFICATION_SMS_PLIVO_AUTH_TOKEN":${{ toJson(secrets.NOTIFICATION_SMS_PLIVO_AUTH_TOKEN) }},"NOTIFICATION_SMS_STRATEGY":${{ toJson(secrets.NOTIFICATION_SMS_STRATEGY) }},"NOTIFICATION_SMS_TO":${{ toJson(secrets.NOTIFICATION_SMS_TO) }},"NOTIFICATION_SMS_TWILIO":${{ toJson(secrets.NOTIFICATION_SMS_TWILIO) }},"NOTIFICATION_SMS_TWILIO_ACCOUNT_SID":${{ toJson(secrets.NOTIFICATION_SMS_TWILIO_ACCOUNT_SID) }},"NOTIFICATION_SMS_TWILIO_AUTH_TOKEN":${{ toJson(secrets.NOTIFICATION_SMS_TWILIO_AUTH_TOKEN) }},"NOTIFICATION_TEAMS":${{ toJson(secrets.NOTIFICATION_TEAMS) }},"NOTIFICATION_TEAMS_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_TEAMS_WEBHOOK_URL) }},"NOTIFICATION_TELEGRAM":${{ toJson(secrets.NOTIFICATION_TELEGRAM) }},"NOTIFICATION_TELEGRAM_BOT_KEY":${{ toJson(secrets.NOTIFICATION_TELEGRAM_BOT_KEY) }},"NOTIFICATION_TELEGRAM_CHAT_ID":${{ toJson(secrets.NOTIFICATION_TELEGRAM_CHAT_ID) }},"NOTIFICATION_ZULIP_API_EMAIL":${{ toJson(secrets.NOTIFICATION_ZULIP_API_EMAIL) }},"NOTIFICATION_ZULIP_API_KEY":${{ toJson(secrets.NOTIFICATION_ZULIP_API_KEY) }},"NOTIFICATION_ZULIP_MESSAGE_URL":${{ toJson(secrets.NOTIFICATION_ZULIP_MESSAGE_URL) }},"RANDOM_MAX":${{ toJson(secrets.RANDOM_MAX) }},"RANDOM_MIN":${{ toJson(secrets.RANDOM_MIN) }},"SECRET_SITE":${{ toJson(secrets.SECRET_SITE) }},"USER_AGENT":${{ toJson(secrets.USER_AGENT) }}}'
+ GITHUB_TOKEN: ${{ github.token }}
+ SECRETS_CONTEXT: "{}"
diff --git a/.github/workflows/setup.yml b/.github/workflows/setup.yml
deleted file mode 100644
index fe290a592..000000000
--- a/.github/workflows/setup.yml
+++ /dev/null
@@ -1,90 +0,0 @@
-#
-# ===============================
-# Do not edit this file directly!
-# ===============================
-#
-# Your changes will be overwritten when the Upptime template updates (by default, weekly)
-# Instead, change .upptimerc.yml configuration and the workflows will be generated accordingly.
-#
-# 🔼 Upptime @v1.43.13
-# GitHub-powered open-source uptime monitor and status page by Anand Chowdhary
-
-# * Source: https://github.com/upptime/upptime
-# * Docs and more: https://upptime.js.org
-# * More by Anand Chowdhary: https://anandchowdhary.com
-
-
-name: Setup CI
-on:
- push:
- paths:
- - ".upptimerc.yml"
- repository_dispatch:
- types: [setup]
- workflow_dispatch:
-concurrency:
- group: ${{ github.repository }}-${{ github.head_ref || github.ref_name }}-upptime
- cancel-in-progress: false
-jobs:
- release:
- name: Setup Upptime
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v6
- with:
- ref: ${{ github.head_ref || github.ref_name }}
- token: ${{ secrets.GH_PAT || github.token }}
- - name: Update template
- uses: upptime/uptime-monitor@v1.43.13
- with:
- command: "update-template"
- env:
- GH_PAT: ${{ secrets.GH_PAT || github.token }}
- - name: Update response time
- uses: upptime/uptime-monitor@v1.43.13
- with:
- command: "response-time"
- env:
- GH_PAT: ${{ secrets.GH_PAT || github.token }}
- # Configure the secret allowlist in .upptimerc.yml; do not edit this workflow directly.
- SECRETS_CONTEXT: '{"DYNAMIC_STRING_LENGTH":${{ toJson(secrets.DYNAMIC_STRING_LENGTH) }},"GLOBALPING_TOKEN":${{ toJson(secrets.GLOBALPING_TOKEN) }},"NOTIFICATIONS_DOWN_MESSAGE":${{ toJson(secrets.NOTIFICATIONS_DOWN_MESSAGE) }},"NOTIFICATIONS_UP_MESSAGE":${{ toJson(secrets.NOTIFICATIONS_UP_MESSAGE) }},"NOTIFICATION_CUSTOM_WEBHOOK":${{ toJson(secrets.NOTIFICATION_CUSTOM_WEBHOOK) }},"NOTIFICATION_CUSTOM_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_CUSTOM_WEBHOOK_URL) }},"NOTIFICATION_DISCORD_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_DISCORD_WEBHOOK_URL) }},"NOTIFICATION_EMAIL":${{ toJson(secrets.NOTIFICATION_EMAIL) }},"NOTIFICATION_EMAIL_FROM":${{ toJson(secrets.NOTIFICATION_EMAIL_FROM) }},"NOTIFICATION_EMAIL_MAILGUN":${{ toJson(secrets.NOTIFICATION_EMAIL_MAILGUN) }},"NOTIFICATION_EMAIL_MAILGUN_API_KEY":${{ toJson(secrets.NOTIFICATION_EMAIL_MAILGUN_API_KEY) }},"NOTIFICATION_EMAIL_MAILGUN_DOMAIN_NAME":${{ toJson(secrets.NOTIFICATION_EMAIL_MAILGUN_DOMAIN_NAME) }},"NOTIFICATION_EMAIL_SENDGRID":${{ toJson(secrets.NOTIFICATION_EMAIL_SENDGRID) }},"NOTIFICATION_EMAIL_SENDGRID_API_KEY":${{ toJson(secrets.NOTIFICATION_EMAIL_SENDGRID_API_KEY) }},"NOTIFICATION_EMAIL_SES":${{ toJson(secrets.NOTIFICATION_EMAIL_SES) }},"NOTIFICATION_EMAIL_SES_ACCESS_KEY_ID":${{ toJson(secrets.NOTIFICATION_EMAIL_SES_ACCESS_KEY_ID) }},"NOTIFICATION_EMAIL_SES_REGION":${{ toJson(secrets.NOTIFICATION_EMAIL_SES_REGION) }},"NOTIFICATION_EMAIL_SES_SECRET_ACCESS_KEY":${{ toJson(secrets.NOTIFICATION_EMAIL_SES_SECRET_ACCESS_KEY) }},"NOTIFICATION_EMAIL_SES_SESSION_TOKEN":${{ toJson(secrets.NOTIFICATION_EMAIL_SES_SESSION_TOKEN) }},"NOTIFICATION_EMAIL_SMTP":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP) }},"NOTIFICATION_EMAIL_SMTP_HOST":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP_HOST) }},"NOTIFICATION_EMAIL_SMTP_PASSWORD":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP_PASSWORD) }},"NOTIFICATION_EMAIL_SMTP_PORT":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP_PORT) }},"NOTIFICATION_EMAIL_SMTP_USERNAME":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP_USERNAME) }},"NOTIFICATION_EMAIL_SPARKPOST":${{ toJson(secrets.NOTIFICATION_EMAIL_SPARKPOST) }},"NOTIFICATION_EMAIL_SPARKPOST_API_KEY":${{ toJson(secrets.NOTIFICATION_EMAIL_SPARKPOST_API_KEY) }},"NOTIFICATION_EMAIL_STRATEGY":${{ toJson(secrets.NOTIFICATION_EMAIL_STRATEGY) }},"NOTIFICATION_EMAIL_TO":${{ toJson(secrets.NOTIFICATION_EMAIL_TO) }},"NOTIFICATION_GOOGLE_CHAT_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_GOOGLE_CHAT_WEBHOOK_URL) }},"NOTIFICATION_GOTIFY":${{ toJson(secrets.NOTIFICATION_GOTIFY) }},"NOTIFICATION_GOTIFY_PRIORITY":${{ toJson(secrets.NOTIFICATION_GOTIFY_PRIORITY) }},"NOTIFICATION_GOTIFY_TITLE":${{ toJson(secrets.NOTIFICATION_GOTIFY_TITLE) }},"NOTIFICATION_GOTIFY_TOKEN":${{ toJson(secrets.NOTIFICATION_GOTIFY_TOKEN) }},"NOTIFICATION_GOTIFY_URL":${{ toJson(secrets.NOTIFICATION_GOTIFY_URL) }},"NOTIFICATION_LARK":${{ toJson(secrets.NOTIFICATION_LARK) }},"NOTIFICATION_LARK_BOT_WEBHOOK":${{ toJson(secrets.NOTIFICATION_LARK_BOT_WEBHOOK) }},"NOTIFICATION_MASTODON":${{ toJson(secrets.NOTIFICATION_MASTODON) }},"NOTIFICATION_MASTODON_API_KEY":${{ toJson(secrets.NOTIFICATION_MASTODON_API_KEY) }},"NOTIFICATION_MASTODON_INSTANCE_URL":${{ toJson(secrets.NOTIFICATION_MASTODON_INSTANCE_URL) }},"NOTIFICATION_MASTODON_TOOT_VISIBILITY":${{ toJson(secrets.NOTIFICATION_MASTODON_TOOT_VISIBILITY) }},"NOTIFICATION_MISSKEY":${{ toJson(secrets.NOTIFICATION_MISSKEY) }},"NOTIFICATION_MISSKEY_API_KEY":${{ toJson(secrets.NOTIFICATION_MISSKEY_API_KEY) }},"NOTIFICATION_MISSKEY_CHAT":${{ toJson(secrets.NOTIFICATION_MISSKEY_CHAT) }},"NOTIFICATION_MISSKEY_CHAT_USER_ID":${{ toJson(secrets.NOTIFICATION_MISSKEY_CHAT_USER_ID) }},"NOTIFICATION_MISSKEY_INSTANCE_URL":${{ toJson(secrets.NOTIFICATION_MISSKEY_INSTANCE_URL) }},"NOTIFICATION_MISSKEY_NOTE":${{ toJson(secrets.NOTIFICATION_MISSKEY_NOTE) }},"NOTIFICATION_MISSKEY_NOTE_VISIBILITY":${{ toJson(secrets.NOTIFICATION_MISSKEY_NOTE_VISIBILITY) }},"NOTIFICATION_MISSKEY_NOTE_VISIBLE_USER_IDS":${{ toJson(secrets.NOTIFICATION_MISSKEY_NOTE_VISIBLE_USER_IDS) }},"NOTIFICATION_SLACK":${{ toJson(secrets.NOTIFICATION_SLACK) }},"NOTIFICATION_SLACK_STRATEGY":${{ toJson(secrets.NOTIFICATION_SLACK_STRATEGY) }},"NOTIFICATION_SLACK_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_SLACK_WEBHOOK_URL) }},"NOTIFICATION_SMS_46ELKS":${{ toJson(secrets.NOTIFICATION_SMS_46ELKS) }},"NOTIFICATION_SMS_46ELKS_API_PASSWORD":${{ toJson(secrets.NOTIFICATION_SMS_46ELKS_API_PASSWORD) }},"NOTIFICATION_SMS_46ELKS_API_USERNAME":${{ toJson(secrets.NOTIFICATION_SMS_46ELKS_API_USERNAME) }},"NOTIFICATION_SMS_CALLR":${{ toJson(secrets.NOTIFICATION_SMS_CALLR) }},"NOTIFICATION_SMS_CALLR_LOGIN":${{ toJson(secrets.NOTIFICATION_SMS_CALLR_LOGIN) }},"NOTIFICATION_SMS_CALLR_PASSWORD":${{ toJson(secrets.NOTIFICATION_SMS_CALLR_PASSWORD) }},"NOTIFICATION_SMS_CLICKATELL":${{ toJson(secrets.NOTIFICATION_SMS_CLICKATELL) }},"NOTIFICATION_SMS_CLICKATELL_API_KEY":${{ toJson(secrets.NOTIFICATION_SMS_CLICKATELL_API_KEY) }},"NOTIFICATION_SMS_FROM":${{ toJson(secrets.NOTIFICATION_SMS_FROM) }},"NOTIFICATION_SMS_INFOBIP":${{ toJson(secrets.NOTIFICATION_SMS_INFOBIP) }},"NOTIFICATION_SMS_INFOBIP_PASSWORD":${{ toJson(secrets.NOTIFICATION_SMS_INFOBIP_PASSWORD) }},"NOTIFICATION_SMS_INFOBIP_USERNAME":${{ toJson(secrets.NOTIFICATION_SMS_INFOBIP_USERNAME) }},"NOTIFICATION_SMS_NEXMO":${{ toJson(secrets.NOTIFICATION_SMS_NEXMO) }},"NOTIFICATION_SMS_NEXMO_API_KEY":${{ toJson(secrets.NOTIFICATION_SMS_NEXMO_API_KEY) }},"NOTIFICATION_SMS_NEXMO_API_SECRET":${{ toJson(secrets.NOTIFICATION_SMS_NEXMO_API_SECRET) }},"NOTIFICATION_SMS_OVH":${{ toJson(secrets.NOTIFICATION_SMS_OVH) }},"NOTIFICATION_SMS_OVH_ACCOUNT":${{ toJson(secrets.NOTIFICATION_SMS_OVH_ACCOUNT) }},"NOTIFICATION_SMS_OVH_APP_KEY":${{ toJson(secrets.NOTIFICATION_SMS_OVH_APP_KEY) }},"NOTIFICATION_SMS_OVH_APP_SECRET":${{ toJson(secrets.NOTIFICATION_SMS_OVH_APP_SECRET) }},"NOTIFICATION_SMS_OVH_CONSUMER_KEY":${{ toJson(secrets.NOTIFICATION_SMS_OVH_CONSUMER_KEY) }},"NOTIFICATION_SMS_OVH_HOST":${{ toJson(secrets.NOTIFICATION_SMS_OVH_HOST) }},"NOTIFICATION_SMS_PLIVO":${{ toJson(secrets.NOTIFICATION_SMS_PLIVO) }},"NOTIFICATION_SMS_PLIVO_AUTH_ID":${{ toJson(secrets.NOTIFICATION_SMS_PLIVO_AUTH_ID) }},"NOTIFICATION_SMS_PLIVO_AUTH_TOKEN":${{ toJson(secrets.NOTIFICATION_SMS_PLIVO_AUTH_TOKEN) }},"NOTIFICATION_SMS_STRATEGY":${{ toJson(secrets.NOTIFICATION_SMS_STRATEGY) }},"NOTIFICATION_SMS_TO":${{ toJson(secrets.NOTIFICATION_SMS_TO) }},"NOTIFICATION_SMS_TWILIO":${{ toJson(secrets.NOTIFICATION_SMS_TWILIO) }},"NOTIFICATION_SMS_TWILIO_ACCOUNT_SID":${{ toJson(secrets.NOTIFICATION_SMS_TWILIO_ACCOUNT_SID) }},"NOTIFICATION_SMS_TWILIO_AUTH_TOKEN":${{ toJson(secrets.NOTIFICATION_SMS_TWILIO_AUTH_TOKEN) }},"NOTIFICATION_TEAMS":${{ toJson(secrets.NOTIFICATION_TEAMS) }},"NOTIFICATION_TEAMS_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_TEAMS_WEBHOOK_URL) }},"NOTIFICATION_TELEGRAM":${{ toJson(secrets.NOTIFICATION_TELEGRAM) }},"NOTIFICATION_TELEGRAM_BOT_KEY":${{ toJson(secrets.NOTIFICATION_TELEGRAM_BOT_KEY) }},"NOTIFICATION_TELEGRAM_CHAT_ID":${{ toJson(secrets.NOTIFICATION_TELEGRAM_CHAT_ID) }},"NOTIFICATION_ZULIP_API_EMAIL":${{ toJson(secrets.NOTIFICATION_ZULIP_API_EMAIL) }},"NOTIFICATION_ZULIP_API_KEY":${{ toJson(secrets.NOTIFICATION_ZULIP_API_KEY) }},"NOTIFICATION_ZULIP_MESSAGE_URL":${{ toJson(secrets.NOTIFICATION_ZULIP_MESSAGE_URL) }},"RANDOM_MAX":${{ toJson(secrets.RANDOM_MAX) }},"RANDOM_MIN":${{ toJson(secrets.RANDOM_MIN) }},"SECRET_SITE":${{ toJson(secrets.SECRET_SITE) }},"USER_AGENT":${{ toJson(secrets.USER_AGENT) }}}'
- - name: Update summary in README
- uses: upptime/uptime-monitor@v1.43.13
- with:
- command: "readme"
- env:
- GH_PAT: ${{ secrets.GH_PAT || github.token }}
- - name: Generate graphs
- id: dispatch_graphs
- uses: benc-uk/workflow-dispatch@v1
- continue-on-error: true
- with:
- workflow: Graphs CI
- token: ${{ secrets.GH_PAT || github.token }}
- - name: Setup Node.js for direct graph generation
- if: steps.dispatch_graphs.outcome == 'failure'
- uses: actions/setup-node@v6
- with:
- node-version: "20"
- - name: Generate graphs directly if dispatch fails
- if: steps.dispatch_graphs.outcome == 'failure'
- uses: upptime/uptime-monitor@v1.43.13
- with:
- command: "graphs"
- env:
- GH_PAT: ${{ secrets.GH_PAT || github.token }}
- - name: Generate site
- uses: upptime/uptime-monitor@v1.43.13
- with:
- command: "site"
- env:
- GH_PAT: ${{ secrets.GH_PAT || github.token }}
- - uses: peaceiris/actions-gh-pages@v4
- name: GitHub Pages Deploy
- with:
- github_token: ${{ secrets.GH_PAT || github.token }}
- publish_dir: "site/status-page/__sapper__/export/"
- force_orphan: "false"
- user_name: "Upptime Bot"
- user_email: "73812536+upptime-bot@users.noreply.github.com"
diff --git a/.github/workflows/site.yml b/.github/workflows/site.yml
index aa79ff6a2..f7827ea09 100644
--- a/.github/workflows/site.yml
+++ b/.github/workflows/site.yml
@@ -1,54 +1,69 @@
-#
-# ===============================
-# Do not edit this file directly!
-# ===============================
-#
-# Your changes will be overwritten when the Upptime template updates (by default, weekly)
-# Instead, change .upptimerc.yml configuration and the workflows will be generated accordingly.
-#
-# 🔼 Upptime @v1.43.13
-# GitHub-powered open-source uptime monitor and status page by Anand Chowdhary
-
-# * Source: https://github.com/upptime/upptime
-# * Docs and more: https://upptime.js.org
-# * More by Anand Chowdhary: https://anandchowdhary.com
-
-
+# Hardened from Upptime v1.43.13. Review upgrades through UPSTREAM.md;
+# status-page source and all Actions are pinned to immutable revisions.
name: Static Site CI
+
on:
- push:
- paths:
- - "assets/**"
schedule:
- - cron: "0 1 * * *"
- repository_dispatch:
- types: [static_site]
+ - cron: "27 1 * * *"
workflow_dispatch:
+
+permissions:
+ contents: read
+
concurrency:
- group: ${{ github.repository }}-${{ github.head_ref || github.ref_name }}-upptime
+ group: ${{ github.repository }}-upptime-static-site
cancel-in-progress: false
+
jobs:
release:
- name: Build and deploy site
+ permissions:
+ contents: write
+ name: Build and publish static site
+ if: github.ref == 'refs/heads/main' && vars.STATUS_AUTOMATION_ENABLED == 'true'
runs-on: ubuntu-latest
- if: "!contains(github.event.head_commit.message, '[skip ci]')"
+ timeout-minutes: 20
steps:
- - name: Checkout
- uses: actions/checkout@v6
+ - name: Checkout status repository
+ uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
+ with:
+ ref: main
+ persist-credentials: false
+ - name: Checkout pinned Upptime status page
+ uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
- ref: ${{ github.head_ref || github.ref_name }}
- token: ${{ secrets.GH_PAT || github.token }}
- - name: Generate site
- uses: upptime/uptime-monitor@v1.43.13
+ repository: upptime/status-page
+ ref: 54c2ff5a3d998d525ee4c7e68dc7ce7414d89c33 # v1.17.0
+ path: site
+ persist-credentials: false
+ - name: Apply Mighty main-branch compatibility patch
+ run: git -C site apply --index --unidiff-zero ../patches/upptime-status-page-main.patch
+ - name: Stage Mighty static assets
+ run: cp -R assets/. site/static/
+ - name: Set up Node.js
+ uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
with:
- command: "site"
+ node-version: "20"
+ cache: npm
+ cache-dependency-path: site/package-lock.json
+ - name: Build static site from locked dependencies
+ working-directory: site
env:
- GH_PAT: ${{ secrets.GH_PAT || github.token }}
- - uses: peaceiris/actions-gh-pages@v4
- name: GitHub Pages Deploy
+ CYPRESS_INSTALL_BINARY: "0"
+ run: |
+ npm ci --no-audit --no-fund
+ npm run export
+ - name: Verify generated output
+ run: |
+ test -s site/__sapper__/export/index.html
+ test -s site/__sapper__/export/manifest.json
+ test -s site/__sapper__/export/_headers
+ test -f site/__sapper__/export/mighty-logo.png
+ test "$(wc -c < site/__sapper__/export/mighty-logo.png)" -gt 1000
+ - name: Publish gh-pages branch
+ uses: peaceiris/actions-gh-pages@84c30a85c19949d7eee79c4ff27748b70285e453 # v4
with:
- github_token: ${{ secrets.GH_PAT || github.token }}
- publish_dir: "site/status-page/__sapper__/export/"
+ github_token: ${{ github.token }}
+ publish_dir: site/__sapper__/export/
force_orphan: "false"
- user_name: "Upptime Bot"
- user_email: "73812536+upptime-bot@users.noreply.github.com"
+ user_name: Mighty Status Bot
+ user_email: 73812536+upptime-bot@users.noreply.github.com
diff --git a/.github/workflows/summary.yml b/.github/workflows/summary.yml
deleted file mode 100644
index a41e76ea1..000000000
--- a/.github/workflows/summary.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# ===============================
-# Do not edit this file directly!
-# ===============================
-#
-# Your changes will be overwritten when the Upptime template updates (by default, weekly)
-# Instead, change .upptimerc.yml configuration and the workflows will be generated accordingly.
-#
-# 🔼 Upptime @v1.43.13
-# GitHub-powered open-source uptime monitor and status page by Anand Chowdhary
-
-# * Source: https://github.com/upptime/upptime
-# * Docs and more: https://upptime.js.org
-# * More by Anand Chowdhary: https://anandchowdhary.com
-
-
-name: Summary CI
-on:
- schedule:
- - cron: "0 0 * * *"
- repository_dispatch:
- types: [summary]
- workflow_dispatch:
-concurrency:
- group: ${{ github.repository }}-${{ github.head_ref || github.ref_name }}-upptime
- cancel-in-progress: false
-jobs:
- release:
- name: Generate README
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v6
- with:
- ref: ${{ github.head_ref || github.ref_name }}
- token: ${{ secrets.GH_PAT || github.token }}
- - name: Update summary in README
- uses: upptime/uptime-monitor@v1.43.13
- with:
- command: "readme"
- env:
- GH_PAT: ${{ secrets.GH_PAT || github.token }}
diff --git a/.github/workflows/update-template.yml b/.github/workflows/update-template.yml
deleted file mode 100644
index ba91dcbe5..000000000
--- a/.github/workflows/update-template.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-#
-# ===============================
-# Do not edit this file directly!
-# ===============================
-#
-# Your changes will be overwritten when the Upptime template updates (by default, weekly)
-# Instead, change .upptimerc.yml configuration and the workflows will be generated accordingly.
-#
-# 🔼 Upptime @v1.43.13
-# GitHub-powered open-source uptime monitor and status page by Anand Chowdhary
-
-# * Source: https://github.com/upptime/upptime
-# * Docs and more: https://upptime.js.org
-# * More by Anand Chowdhary: https://anandchowdhary.com
-
-
-name: Update Template CI
-on:
- schedule:
- - cron: "0 0 * * *"
- repository_dispatch:
- types: [update_template]
- workflow_dispatch:
-concurrency:
- group: ${{ github.repository }}-${{ github.head_ref || github.ref_name }}-upptime
- cancel-in-progress: false
-jobs:
- release:
- name: Build
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v6
- with:
- ref: ${{ github.head_ref || github.ref_name }}
- token: ${{ secrets.GH_PAT || github.token }}
- - name: Update template
- uses: upptime/uptime-monitor@master
- with:
- command: "update-template"
- env:
- GH_PAT: ${{ secrets.GH_PAT || github.token }}
diff --git a/.github/workflows/updates.yml b/.github/workflows/updates.yml
deleted file mode 100644
index 312dfa906..000000000
--- a/.github/workflows/updates.yml
+++ /dev/null
@@ -1,40 +0,0 @@
-#
-# ===============================
-# Do not edit this file directly!
-# ===============================
-#
-# Your changes will be overwritten when the Upptime template updates (by default, weekly)
-# Instead, change .upptimerc.yml configuration and the workflows will be generated accordingly.
-#
-# 🔼 Upptime @v1.43.13
-# GitHub-powered open-source uptime monitor and status page by Anand Chowdhary
-
-# * Source: https://github.com/upptime/upptime
-# * Docs and more: https://upptime.js.org
-# * More by Anand Chowdhary: https://anandchowdhary.com
-
-
-name: Updates CI
-on:
- schedule:
- - cron: "0 3 * * *"
- repository_dispatch:
- types: [updates]
- workflow_dispatch:
-concurrency:
- group: ${{ github.repository }}-${{ github.head_ref || github.ref_name }}-upptime
- cancel-in-progress: false
-jobs:
- release:
- name: Deploy updates
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v6
- with:
- ref: ${{ github.head_ref || github.ref_name }}
- token: ${{ secrets.GH_PAT || github.token }}
- - name: Update code
- uses: upptime/updates@master
- env:
- GH_PAT: ${{ secrets.GH_PAT || github.token }}
diff --git a/.github/workflows/uptime.yml b/.github/workflows/uptime.yml
index c348665d2..5d9bd01f1 100644
--- a/.github/workflows/uptime.yml
+++ b/.github/workflows/uptime.yml
@@ -1,44 +1,38 @@
-#
-# ===============================
-# Do not edit this file directly!
-# ===============================
-#
-# Your changes will be overwritten when the Upptime template updates (by default, weekly)
-# Instead, change .upptimerc.yml configuration and the workflows will be generated accordingly.
-#
-# 🔼 Upptime @v1.43.13
-# GitHub-powered open-source uptime monitor and status page by Anand Chowdhary
-
-# * Source: https://github.com/upptime/upptime
-# * Docs and more: https://upptime.js.org
-# * More by Anand Chowdhary: https://anandchowdhary.com
-
-
+# Hardened from Upptime v1.43.13. Review upgrades through UPSTREAM.md;
+# never replace full commit SHAs with moving tags or branches.
name: Uptime CI
+
on:
schedule:
- - cron: "*/5 * * * *"
- repository_dispatch:
- types: [uptime]
+ - cron: "3-58/5 * * * *"
workflow_dispatch:
+
+permissions:
+ contents: read
+
concurrency:
- group: ${{ github.repository }}-${{ github.head_ref || github.ref_name }}-upptime
+ group: ${{ github.repository }}-upptime-main-writer
cancel-in-progress: false
+
jobs:
release:
- name: Check status
+ permissions:
+ contents: write
+ issues: write
+ name: Check public endpoints
+ if: github.ref == 'refs/heads/main' && vars.STATUS_AUTOMATION_ENABLED == 'true'
runs-on: ubuntu-latest
+ timeout-minutes: 10
steps:
- name: Checkout
- uses: actions/checkout@v6
+ uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
with:
- ref: ${{ github.head_ref || github.ref_name }}
- token: ${{ secrets.GH_PAT || github.token }}
+ ref: main
+ token: ${{ github.token }}
- name: Check endpoint status
- uses: upptime/uptime-monitor@v1.43.13
+ uses: upptime/uptime-monitor@4fec88256b5917a2ed07a088df6e205869b424d6 # v1.43.13
with:
- command: "update"
+ command: update
env:
- GH_PAT: ${{ secrets.GH_PAT || github.token }}
- # Configure the secret allowlist in .upptimerc.yml; do not edit this workflow directly.
- SECRETS_CONTEXT: '{"DYNAMIC_STRING_LENGTH":${{ toJson(secrets.DYNAMIC_STRING_LENGTH) }},"GLOBALPING_TOKEN":${{ toJson(secrets.GLOBALPING_TOKEN) }},"NOTIFICATIONS_DOWN_MESSAGE":${{ toJson(secrets.NOTIFICATIONS_DOWN_MESSAGE) }},"NOTIFICATIONS_UP_MESSAGE":${{ toJson(secrets.NOTIFICATIONS_UP_MESSAGE) }},"NOTIFICATION_CUSTOM_WEBHOOK":${{ toJson(secrets.NOTIFICATION_CUSTOM_WEBHOOK) }},"NOTIFICATION_CUSTOM_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_CUSTOM_WEBHOOK_URL) }},"NOTIFICATION_DISCORD_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_DISCORD_WEBHOOK_URL) }},"NOTIFICATION_EMAIL":${{ toJson(secrets.NOTIFICATION_EMAIL) }},"NOTIFICATION_EMAIL_FROM":${{ toJson(secrets.NOTIFICATION_EMAIL_FROM) }},"NOTIFICATION_EMAIL_MAILGUN":${{ toJson(secrets.NOTIFICATION_EMAIL_MAILGUN) }},"NOTIFICATION_EMAIL_MAILGUN_API_KEY":${{ toJson(secrets.NOTIFICATION_EMAIL_MAILGUN_API_KEY) }},"NOTIFICATION_EMAIL_MAILGUN_DOMAIN_NAME":${{ toJson(secrets.NOTIFICATION_EMAIL_MAILGUN_DOMAIN_NAME) }},"NOTIFICATION_EMAIL_SENDGRID":${{ toJson(secrets.NOTIFICATION_EMAIL_SENDGRID) }},"NOTIFICATION_EMAIL_SENDGRID_API_KEY":${{ toJson(secrets.NOTIFICATION_EMAIL_SENDGRID_API_KEY) }},"NOTIFICATION_EMAIL_SES":${{ toJson(secrets.NOTIFICATION_EMAIL_SES) }},"NOTIFICATION_EMAIL_SES_ACCESS_KEY_ID":${{ toJson(secrets.NOTIFICATION_EMAIL_SES_ACCESS_KEY_ID) }},"NOTIFICATION_EMAIL_SES_REGION":${{ toJson(secrets.NOTIFICATION_EMAIL_SES_REGION) }},"NOTIFICATION_EMAIL_SES_SECRET_ACCESS_KEY":${{ toJson(secrets.NOTIFICATION_EMAIL_SES_SECRET_ACCESS_KEY) }},"NOTIFICATION_EMAIL_SES_SESSION_TOKEN":${{ toJson(secrets.NOTIFICATION_EMAIL_SES_SESSION_TOKEN) }},"NOTIFICATION_EMAIL_SMTP":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP) }},"NOTIFICATION_EMAIL_SMTP_HOST":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP_HOST) }},"NOTIFICATION_EMAIL_SMTP_PASSWORD":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP_PASSWORD) }},"NOTIFICATION_EMAIL_SMTP_PORT":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP_PORT) }},"NOTIFICATION_EMAIL_SMTP_USERNAME":${{ toJson(secrets.NOTIFICATION_EMAIL_SMTP_USERNAME) }},"NOTIFICATION_EMAIL_SPARKPOST":${{ toJson(secrets.NOTIFICATION_EMAIL_SPARKPOST) }},"NOTIFICATION_EMAIL_SPARKPOST_API_KEY":${{ toJson(secrets.NOTIFICATION_EMAIL_SPARKPOST_API_KEY) }},"NOTIFICATION_EMAIL_STRATEGY":${{ toJson(secrets.NOTIFICATION_EMAIL_STRATEGY) }},"NOTIFICATION_EMAIL_TO":${{ toJson(secrets.NOTIFICATION_EMAIL_TO) }},"NOTIFICATION_GOOGLE_CHAT_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_GOOGLE_CHAT_WEBHOOK_URL) }},"NOTIFICATION_GOTIFY":${{ toJson(secrets.NOTIFICATION_GOTIFY) }},"NOTIFICATION_GOTIFY_PRIORITY":${{ toJson(secrets.NOTIFICATION_GOTIFY_PRIORITY) }},"NOTIFICATION_GOTIFY_TITLE":${{ toJson(secrets.NOTIFICATION_GOTIFY_TITLE) }},"NOTIFICATION_GOTIFY_TOKEN":${{ toJson(secrets.NOTIFICATION_GOTIFY_TOKEN) }},"NOTIFICATION_GOTIFY_URL":${{ toJson(secrets.NOTIFICATION_GOTIFY_URL) }},"NOTIFICATION_LARK":${{ toJson(secrets.NOTIFICATION_LARK) }},"NOTIFICATION_LARK_BOT_WEBHOOK":${{ toJson(secrets.NOTIFICATION_LARK_BOT_WEBHOOK) }},"NOTIFICATION_MASTODON":${{ toJson(secrets.NOTIFICATION_MASTODON) }},"NOTIFICATION_MASTODON_API_KEY":${{ toJson(secrets.NOTIFICATION_MASTODON_API_KEY) }},"NOTIFICATION_MASTODON_INSTANCE_URL":${{ toJson(secrets.NOTIFICATION_MASTODON_INSTANCE_URL) }},"NOTIFICATION_MASTODON_TOOT_VISIBILITY":${{ toJson(secrets.NOTIFICATION_MASTODON_TOOT_VISIBILITY) }},"NOTIFICATION_MISSKEY":${{ toJson(secrets.NOTIFICATION_MISSKEY) }},"NOTIFICATION_MISSKEY_API_KEY":${{ toJson(secrets.NOTIFICATION_MISSKEY_API_KEY) }},"NOTIFICATION_MISSKEY_CHAT":${{ toJson(secrets.NOTIFICATION_MISSKEY_CHAT) }},"NOTIFICATION_MISSKEY_CHAT_USER_ID":${{ toJson(secrets.NOTIFICATION_MISSKEY_CHAT_USER_ID) }},"NOTIFICATION_MISSKEY_INSTANCE_URL":${{ toJson(secrets.NOTIFICATION_MISSKEY_INSTANCE_URL) }},"NOTIFICATION_MISSKEY_NOTE":${{ toJson(secrets.NOTIFICATION_MISSKEY_NOTE) }},"NOTIFICATION_MISSKEY_NOTE_VISIBILITY":${{ toJson(secrets.NOTIFICATION_MISSKEY_NOTE_VISIBILITY) }},"NOTIFICATION_MISSKEY_NOTE_VISIBLE_USER_IDS":${{ toJson(secrets.NOTIFICATION_MISSKEY_NOTE_VISIBLE_USER_IDS) }},"NOTIFICATION_SLACK":${{ toJson(secrets.NOTIFICATION_SLACK) }},"NOTIFICATION_SLACK_STRATEGY":${{ toJson(secrets.NOTIFICATION_SLACK_STRATEGY) }},"NOTIFICATION_SLACK_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_SLACK_WEBHOOK_URL) }},"NOTIFICATION_SMS_46ELKS":${{ toJson(secrets.NOTIFICATION_SMS_46ELKS) }},"NOTIFICATION_SMS_46ELKS_API_PASSWORD":${{ toJson(secrets.NOTIFICATION_SMS_46ELKS_API_PASSWORD) }},"NOTIFICATION_SMS_46ELKS_API_USERNAME":${{ toJson(secrets.NOTIFICATION_SMS_46ELKS_API_USERNAME) }},"NOTIFICATION_SMS_CALLR":${{ toJson(secrets.NOTIFICATION_SMS_CALLR) }},"NOTIFICATION_SMS_CALLR_LOGIN":${{ toJson(secrets.NOTIFICATION_SMS_CALLR_LOGIN) }},"NOTIFICATION_SMS_CALLR_PASSWORD":${{ toJson(secrets.NOTIFICATION_SMS_CALLR_PASSWORD) }},"NOTIFICATION_SMS_CLICKATELL":${{ toJson(secrets.NOTIFICATION_SMS_CLICKATELL) }},"NOTIFICATION_SMS_CLICKATELL_API_KEY":${{ toJson(secrets.NOTIFICATION_SMS_CLICKATELL_API_KEY) }},"NOTIFICATION_SMS_FROM":${{ toJson(secrets.NOTIFICATION_SMS_FROM) }},"NOTIFICATION_SMS_INFOBIP":${{ toJson(secrets.NOTIFICATION_SMS_INFOBIP) }},"NOTIFICATION_SMS_INFOBIP_PASSWORD":${{ toJson(secrets.NOTIFICATION_SMS_INFOBIP_PASSWORD) }},"NOTIFICATION_SMS_INFOBIP_USERNAME":${{ toJson(secrets.NOTIFICATION_SMS_INFOBIP_USERNAME) }},"NOTIFICATION_SMS_NEXMO":${{ toJson(secrets.NOTIFICATION_SMS_NEXMO) }},"NOTIFICATION_SMS_NEXMO_API_KEY":${{ toJson(secrets.NOTIFICATION_SMS_NEXMO_API_KEY) }},"NOTIFICATION_SMS_NEXMO_API_SECRET":${{ toJson(secrets.NOTIFICATION_SMS_NEXMO_API_SECRET) }},"NOTIFICATION_SMS_OVH":${{ toJson(secrets.NOTIFICATION_SMS_OVH) }},"NOTIFICATION_SMS_OVH_ACCOUNT":${{ toJson(secrets.NOTIFICATION_SMS_OVH_ACCOUNT) }},"NOTIFICATION_SMS_OVH_APP_KEY":${{ toJson(secrets.NOTIFICATION_SMS_OVH_APP_KEY) }},"NOTIFICATION_SMS_OVH_APP_SECRET":${{ toJson(secrets.NOTIFICATION_SMS_OVH_APP_SECRET) }},"NOTIFICATION_SMS_OVH_CONSUMER_KEY":${{ toJson(secrets.NOTIFICATION_SMS_OVH_CONSUMER_KEY) }},"NOTIFICATION_SMS_OVH_HOST":${{ toJson(secrets.NOTIFICATION_SMS_OVH_HOST) }},"NOTIFICATION_SMS_PLIVO":${{ toJson(secrets.NOTIFICATION_SMS_PLIVO) }},"NOTIFICATION_SMS_PLIVO_AUTH_ID":${{ toJson(secrets.NOTIFICATION_SMS_PLIVO_AUTH_ID) }},"NOTIFICATION_SMS_PLIVO_AUTH_TOKEN":${{ toJson(secrets.NOTIFICATION_SMS_PLIVO_AUTH_TOKEN) }},"NOTIFICATION_SMS_STRATEGY":${{ toJson(secrets.NOTIFICATION_SMS_STRATEGY) }},"NOTIFICATION_SMS_TO":${{ toJson(secrets.NOTIFICATION_SMS_TO) }},"NOTIFICATION_SMS_TWILIO":${{ toJson(secrets.NOTIFICATION_SMS_TWILIO) }},"NOTIFICATION_SMS_TWILIO_ACCOUNT_SID":${{ toJson(secrets.NOTIFICATION_SMS_TWILIO_ACCOUNT_SID) }},"NOTIFICATION_SMS_TWILIO_AUTH_TOKEN":${{ toJson(secrets.NOTIFICATION_SMS_TWILIO_AUTH_TOKEN) }},"NOTIFICATION_TEAMS":${{ toJson(secrets.NOTIFICATION_TEAMS) }},"NOTIFICATION_TEAMS_WEBHOOK_URL":${{ toJson(secrets.NOTIFICATION_TEAMS_WEBHOOK_URL) }},"NOTIFICATION_TELEGRAM":${{ toJson(secrets.NOTIFICATION_TELEGRAM) }},"NOTIFICATION_TELEGRAM_BOT_KEY":${{ toJson(secrets.NOTIFICATION_TELEGRAM_BOT_KEY) }},"NOTIFICATION_TELEGRAM_CHAT_ID":${{ toJson(secrets.NOTIFICATION_TELEGRAM_CHAT_ID) }},"NOTIFICATION_ZULIP_API_EMAIL":${{ toJson(secrets.NOTIFICATION_ZULIP_API_EMAIL) }},"NOTIFICATION_ZULIP_API_KEY":${{ toJson(secrets.NOTIFICATION_ZULIP_API_KEY) }},"NOTIFICATION_ZULIP_MESSAGE_URL":${{ toJson(secrets.NOTIFICATION_ZULIP_MESSAGE_URL) }},"RANDOM_MAX":${{ toJson(secrets.RANDOM_MAX) }},"RANDOM_MIN":${{ toJson(secrets.RANDOM_MIN) }},"SECRET_SITE":${{ toJson(secrets.SECRET_SITE) }},"USER_AGENT":${{ toJson(secrets.USER_AGENT) }}}'
+ GITHUB_TOKEN: ${{ github.token }}
+ SECRETS_CONTEXT: "{}"
diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml
new file mode 100644
index 000000000..32afe7222
--- /dev/null
+++ b/.github/workflows/validate.yml
@@ -0,0 +1,72 @@
+# Hardened from Upptime v1.43.13. Review upgrades through UPSTREAM.md;
+# status-page source and all Actions are pinned to immutable revisions.
+name: Validate
+
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+concurrency:
+ group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ config:
+ name: Validate status configuration
+ runs-on: ubuntu-latest
+ timeout-minutes: 5
+ steps:
+ - name: Checkout
+ uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
+ with:
+ persist-credentials: false
+ - name: Validate
+ run: ruby scripts/validate.rb
+
+ static-site:
+ name: Build static site
+ if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
+ runs-on: ubuntu-latest
+ timeout-minutes: 20
+ steps:
+ - name: Checkout status repository
+ uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
+ with:
+ persist-credentials: false
+ - name: Checkout pinned Upptime status page
+ uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
+ with:
+ repository: upptime/status-page
+ ref: 54c2ff5a3d998d525ee4c7e68dc7ce7414d89c33 # v1.17.0
+ path: site
+ persist-credentials: false
+ - name: Apply Mighty main-branch compatibility patch
+ run: git -C site apply --index --unidiff-zero ../patches/upptime-status-page-main.patch
+ - name: Stage Mighty static assets
+ run: cp -R assets/. site/static/
+ - name: Set up Node.js
+ uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6
+ with:
+ node-version: "20"
+ cache: npm
+ cache-dependency-path: site/package-lock.json
+ - name: Build static site from locked dependencies
+ working-directory: site
+ env:
+ CYPRESS_INSTALL_BINARY: "0"
+ run: |
+ npm ci --no-audit --no-fund
+ npm run export
+ - name: Verify generated output
+ run: |
+ test -s site/__sapper__/export/index.html
+ test -s site/__sapper__/export/manifest.json
+ test -s site/__sapper__/export/_headers
+ test -f site/__sapper__/export/mighty-logo.png
+ test "$(wc -c < site/__sapper__/export/mighty-logo.png)" -gt 1000
diff --git a/.upptimerc.yml b/.upptimerc.yml
index 23c3580a8..d431938b3 100644
--- a/.upptimerc.yml
+++ b/.upptimerc.yml
@@ -1,31 +1,78 @@
-# Change these first
-owner: upptime # Your GitHub organization or username, where this repository lives
-repo: upptime # The name of this repository
+# Mighty public status configuration.
+# Upptime configuration reference: https://upptime.js.org/docs/configuration
+owner: TryMightyAI
+repo: status
+user-agent: TryMightyAI
+
+# Public checks use no credentials. Keep this explicit allowlist empty unless a
+# separately reviewed change introduces a narrowly scoped secret.
+secrets: []
+
+delay: 1000
+skipDeleteIssues: true
+skipDescriptionUpdate: true
+skipTopicsUpdate: true
+skipHomepageUpdate: true
sites:
- - name: Google
- url: https://www.google.com
- - name: Wikipedia
- url: https://en.wikipedia.org
- - name: Hacker News
- url: https://news.ycombinator.com
- - name: Secret Site
- url: $SECRET_SITE
+ - name: Website
+ slug: website
+ url: https://trymighty.ai/
+ method: GET
+ expectedStatusCodes:
+ - 200
+ maxResponseTime: 5000
+ - name: API
+ slug: api
+ url: https://api.trymighty.ai/health
+ method: GET
+ expectedStatusCodes:
+ - 200
+ maxResponseTime: 5000
+ __dangerous__body_down_if_text_missing: '"status":"healthy"'
+ - name: Scan Gateway
+ slug: scan-gateway
+ url: https://gateway.trymighty.ai/health
+ method: GET
+ expectedStatusCodes:
+ - 200
+ maxResponseTime: 5000
+ __dangerous__body_down_if_text_missing: '"status":"ok"'
+
+assignees:
+ - masterfung
status-website:
- # Add your custom domain name, or remove the `cname` line if you don't have a domain
- # Uncomment the `baseUrl` line if you don't have a custom domain and add your repo name there
- cname: demo.upptime.js.org
- # baseUrl: /your-repo-name
- logoUrl: https://raw.githubusercontent.com/upptime/upptime.js.org/master/static/img/icon.svg
- name: Upptime
- introTitle: "**Upptime** is the open-source uptime monitor and status page, powered entirely by GitHub."
- introMessage: This is a sample status page which uses **real-time** data from our [GitHub repository](https://github.com/upptime/upptime). No server required — just GitHub Actions, Issues, and Pages. [**Get your own for free**](https://github.com/upptime/upptime)
+ cname: status.trymighty.ai
+ logoUrl: /mighty-logo.png
+ name: Mighty Status
+ theme: night
+ introTitle: "**Mighty service status**"
+ introMessage: >-
+ Current availability and incident communications for Mighty production
+ services. Measurements are external observations and are not a contractual
+ service-level agreement.
navbar:
- title: Status
href: /
- - title: GitHub
- href: https://github.com/$OWNER/$REPO
+ - title: Mighty
+ href: https://trymighty.ai/
+ - title: Documentation
+ href: https://trymighty.ai/docs
+ - title: Security
+ href: https://trymighty.ai/security
+
+workflowSchedule:
+ uptime: "3-58/5 * * * *"
+ responseTime: "43 23 * * *"
+ staticSite: "27 1 * * *"
+
+commitMessages:
+ commitAuthorName: Mighty Status Bot
+ commitAuthorEmail: 73812536+upptime-bot@users.noreply.github.com
+ readmeContent: "chore(status): update summary [skip ci] [upptime]"
+ summaryJson: "chore(status): update status summary [skip ci] [upptime]"
+ statusChange: "$EMOJI $SITE_NAME is $STATUS ($RESPONSE_CODE in $RESPONSE_TIME ms) [skip ci] [upptime]"
-# Upptime also supports notifications, assigning issues, and more
-# See https://upptime.js.org/docs/configuration
+i18n:
+ footer: This page is [open source]($REPO) and powered by [Upptime](https://upptime.js.org).
diff --git a/README.md b/README.md
index 0dd666bec..f304dc9a8 100644
--- a/README.md
+++ b/README.md
@@ -1,117 +1,34 @@
-# [](https://upptime.js.org)
+# Mighty Service Status
-
+This repository is the public source, incident history, and uptime record for
+[Mighty Status](https://status.trymighty.ai). It is powered by the MIT-licensed
+[Upptime](https://github.com/upptime/upptime) project.
-**Upptime** (https://upptime.js.org) is the open-source uptime monitor and status page, powered entirely by GitHub Actions, Issues, and Pages, made with 💚 by [Anand Chowdhary](https://anandchowdhary.com).
+The public checks are useful observations, not a contractual service-level
+agreement (SLA). Mighty keeps its internal monitoring and incident records as
+the authoritative audit evidence.
-> I find Upptime an incredible clever usage of \[GitHub Actions]. You essentially get a free configurable uptime monitor for whatever you want. – [CSS Tricks](https://css-tricks.com/upptime/)
+[](https://github.com/TryMightyAI/status/actions/workflows/validate.yml)
+[](https://github.com/TryMightyAI/status/actions/workflows/uptime.yml)
+[](https://github.com/TryMightyAI/status/actions/workflows/site.yml)
-
- Upptime is used by 3,000+ people and teams to ensure they know when their endpoints go down.
+## [Live status](https://status.trymighty.ai)
-I built Upptime because, like many developers, I needed an uptime monitor and status page for my startup Pabio that was affordable, flexible, and completely under my control. At the time, existing services felt expensive, rigid, or closed-source. GitHub Actions had just launched, and I thought: hmm... what if I turned Actions into a self-hosted uptime monitor?
+Availability measurements begin when the launch checklist enables production
+automation. No historical sample data is carried over from the upstream template.
-Upptime runs scheduled checks using GitHub Actions (as often as every 5 minutes) to ping your endpoints and verify they're online. Response time data is recorded and committed to git, enabling long-term trend charts and historical insights. When downtime is detected, GitHub Issues are automatically opened and closed. A status page built with Svelte is hosted via GitHub Pages and shows uptime, response times, and incident history - so you get the full-stack uptime monitor and status page.
+## Operations
-I built it to be completely free if you're already using GitHub since there's no external server or subscription needed. All configuration lives in a single file, and your data is gone if you delete the repo. Plus, you get a git-native audit trail for all changes and events.
+- [Hosting and launch checklist](docs/HOSTING.md)
+- [Incident and maintenance runbook](docs/OPERATIONS.md)
+- [Open-source platform decision](docs/DECISION.md)
+- [Pinned upstream and upgrade process](UPSTREAM.md)
-Since launching, Upptime has grown to over 16,000 stars and is actively used by developers and teams to monitor their services. In fact, Upptime is used by [over 3,000+ people and teams](https://github.com/topics/upptime), including Ubuntu-maker Canonical and my preferred developer time tracker Wakatime.
+For a live incident, use the public timeline linked from the status page. If the
+custom domain is unavailable, use this repository's [Issues](https://github.com/TryMightyAI/status/issues)
+as the alternate public channel.
-
+## License
-
-
-[](https://github.com/upptime/upptime/actions/workflows/uptime.yml)
-[](https://github.com/upptime/upptime/actions/workflows/response-time.yml?query=workflow%3A%22Response+Time+CI%22)
-[](https://github.com/upptime/upptime/actions/workflows/graphs.yml?query=workflow%3A%22Graphs+CI%22)
-[](https://github.com/upptime/upptime/actions/workflows/site.yml?query=workflow%3A%22Static+Site+CI%22)
-[](https://github.com/upptime/upptime/actions/workflows/summary.yml?query=workflow%3A%22Summary+CI%22)
-
-## [📈 Live Status](https://demo.upptime.js.org): **🟩 All systems operational**
-
-
-
-
-
-| URL | Status | History | Response Time | Uptime |
-| --- | ------ | ------- | ------------- | ------ |
-| [Google](https://www.google.com) | 🟩 Up | [google.yml](https://github.com/upptime/upptime/commits/HEAD/history/google.yml) | 79ms | 100.00%
-| [Wikipedia](https://en.wikipedia.org) | 🟩 Up | [wikipedia.yml](https://github.com/upptime/upptime/commits/HEAD/history/wikipedia.yml) | 208ms | 100.00%
-| [Hacker News](https://news.ycombinator.com) | 🟩 Up | [hacker-news.yml](https://github.com/upptime/upptime/commits/HEAD/history/hacker-news.yml) | 243ms | 100.00%
-| Secret Site | 🟩 Up | [secret-site.yml](https://github.com/upptime/upptime/commits/HEAD/history/secret-site.yml) | 41ms | 100.00%
-
-
-
-
-
-## ⭐ How it works
-
-- GitHub Actions is used as an uptime monitor
- - Every 5 minutes, a workflow visits your website to make sure it's up
- - Response time is recorded every 6 hours and committed to git
- - Graphs of response time are generated every day
-- GitHub Issues is used for incident reports
- - An issue is opened if an endpoint is down
- - People from your team are assigned to the issue
- - Incidents reports are posted as issue comments
- - Issues are locked so non-members cannot comment on them
- - Issues are closed automatically when your site comes back up
- - Slack notifications are sent on updates
-- GitHub Pages is used for the status website
- - A simple, beautiful, and accessible PWA is generated
- - Built with Svelte and Sapper
- - Fetches data from this repository using the GitHub API
-
-_Upptime is not affiliated to or endorsed by GitHub._
-
-[](https://upptime.js.org)
-
-## 👩💻 [Documentation](https://upptime.js.org)
-
-1. [How it works](https://upptime.js.org/docs)
-1. [Getting started](https://upptime.js.org/docs/get-started)
-1. [Configuration](https://upptime.js.org/docs/configuration)
-1. [Triggers](https://upptime.js.org/docs/triggers)
-1. [Notifications](https://upptime.js.org/docs/notifications)
-1. [Badges](https://upptime.js.org/docs/badges)
-1. [Packages](https://upptime.js.org/docs/packages)
-1. [Contributing](https://upptime.js.org/docs/contributing)
-1. [Frequently Asked Questions](https://upptime.js.org/docs/faq)
-
-### Concepts
-
-#### Issues as incidents
-
-When the GitHub Actions workflow detects that one of your URLs is down, it automatically opens a GitHub issue ([example issue #67](https://github.com/upptime/upptime/issues/67)). You can add incident reports to this issue by adding comments. When your site comes back up, the issue will be closed automatically as well.
-
-
-
-
-
-
-
-
-
-
-
-
-#### Commits for response time
-
-Four times per day, another workflow runs and records the response time of your websites. This data is committed to GitHub, so it's available in the commit history of each file ([example commit history](https://github.com/koj-co/upptime/commits/master/history/wikipedia.yml)). Then, the GitHub API is used to graph the response time history of each endpoint and to track when a site went down.
-
-