diff --git a/.dockerignore b/.dockerignore
index 47e82a10..00ee5815 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -33,7 +33,7 @@ tsconfig.json
/ecosystem.config.js
/extra/healthcheck.exe
/extra/healthcheck
-
+extra/exe-builder
### .gitignore content (commented rules are duplicated)
@@ -48,6 +48,4 @@ dist-ssr
#!/data/.gitkeep
#.vscode
-
-
### End of .gitignore content
diff --git a/.github/ISSUE_TEMPLATE/security.md b/.github/ISSUE_TEMPLATE/security.md
new file mode 100644
index 00000000..26450ed3
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/security.md
@@ -0,0 +1,19 @@
+---
+
+name: "Security Issue"
+about: "Just for alerting @louislam, do not provide any details here"
+title: "Security Issue"
+ref: "main"
+labels:
+
+- security
+
+---
+
+DO NOT PROVIDE ANY DETAILS HERE. Please privately report to https://github.com/louislam/uptime-kuma/security/advisories/new.
+
+
+Why need this issue? It is because GitHub Advisory do not send a notification to @louislam, it is a workaround to do so.
+
+Your GitHub Advisory URL:
+
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 4d2105d4..87e7f5ff 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -16,7 +16,6 @@ Please delete any options that are not relevant.
- User interface (UI)
- New feature (non-breaking change which adds functionality)
- Breaking change (fix or feature that would cause existing functionality to not work as expected)
-- Translation update
- Other
- This change requires a documentation update
diff --git a/.github/workflows/auto-test.yml b/.github/workflows/auto-test.yml
index b49a253c..94462712 100644
--- a/.github/workflows/auto-test.yml
+++ b/.github/workflows/auto-test.yml
@@ -6,8 +6,12 @@ name: Auto Test
on:
push:
branches: [ master ]
+ paths-ignore:
+ - '*.md'
pull_request:
branches: [ master ]
+ paths-ignore:
+ - '*.md'
jobs:
auto-test:
@@ -18,7 +22,7 @@ jobs:
strategy:
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
- node: [ 14, 16, 17, 18 ]
+ node: [ 14, 16, 18, 19 ]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
steps:
@@ -36,6 +40,7 @@ jobs:
env:
HEADLESS_TEST: 1
JUST_FOR_TEST: ${{ secrets.JUST_FOR_TEST }}
+
check-linters:
runs-on: ubuntu-latest
@@ -66,3 +71,19 @@ jobs:
- run: npm install
- run: npm run build
- run: npm run cy:test
+
+ frontend-unit-tests:
+ needs: [ check-linters ]
+ runs-on: ubuntu-latest
+ steps:
+ - run: git config --global core.autocrlf false # Mainly for Windows
+ - uses: actions/checkout@v3
+
+ - name: Use Node.js 14
+ uses: actions/setup-node@v3
+ with:
+ node-version: 14
+ cache: 'npm'
+ - run: npm install
+ - run: npm run build
+ - run: npm run cy:run:unit
diff --git a/.github/workflows/close-incorrect-issue.yml b/.github/workflows/close-incorrect-issue.yml
index 026022df..762bc968 100644
--- a/.github/workflows/close-incorrect-issue.yml
+++ b/.github/workflows/close-incorrect-issue.yml
@@ -1,4 +1,3 @@
-
name: Close Incorrect Issue
on:
@@ -12,13 +11,13 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest]
- node-version: [16.x]
+ node-version: [16]
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v2
+ uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
diff --git a/.github/workflows/stale-bot.yml b/.github/workflows/stale-bot.yml
index 5b4568e1..b39f68fc 100644
--- a/.github/workflows/stale-bot.yml
+++ b/.github/workflows/stale-bot.yml
@@ -3,13 +3,13 @@ on:
workflow_dispatch:
schedule:
- cron: '0 */6 * * *'
-#Run every 6 hours
+#Run every 6 hours
jobs:
stale:
runs-on: ubuntu-latest
steps:
- - uses: actions/stale@v5
+ - uses: actions/stale@v7
with:
stale-issue-message: 'We are clearing up our old issues and your ticket has been open for 3 months with no activity. Remove stale label or comment or this will be closed in 2 days.'
close-issue-message: 'This issue was closed because it has been stalled for 2 days with no activity.'
diff --git a/.gitignore b/.gitignore
index 06dca04b..9ed1e282 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,3 +20,6 @@ cypress/screenshots
/extra/healthcheck.exe
/extra/healthcheck
/extra/healthcheck-armv7
+
+extra/exe-builder/bin
+extra/exe-builder/obj
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 12fd6ed4..4c6a5587 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,6 +1,6 @@
# Project Info
-First of all, thank you everyone who made pull requests for Uptime Kuma, I never thought GitHub Community can be that nice! And also because of this, I also never thought other people actually read my code and edit my code. It is not structured and commented so well, lol. Sorry about that.
+First of all, I want to thank everyone who made pull requests for Uptime Kuma. I never thought the GitHub Community would be so nice! Because of this, I also never thought that other people would actually read and edit my code. It is not very well structured or commented, sorry about that.
The project was created with vite.js (vue3). Then I created a subdirectory called "server" for server part. Both frontend and backend share the same package.json.
@@ -17,8 +17,11 @@ The frontend code build into "dist" directory. The server (express.js) exposes t
## Directories
+- config (dev config files)
- data (App data)
+- db (Base database and migration scripts)
- dist (Frontend build)
+- docker (Dockerfiles)
- extra (Extra useful scripts)
- public (Frontend resources for dev only)
- server (Server source code)
@@ -27,20 +30,23 @@ The frontend code build into "dist" directory. The server (express.js) exposes t
## Can I create a pull request for Uptime Kuma?
-Yes or no, it depends on what you will try to do. Since I don't want to waste your time, be sure to **create an empty draft pull request or open an issue, so we can discuss first**. Especially for a large pull request or you don't know it will be merged or not.
+Yes or no, it depends on what you will try to do. Since I don't want to waste your time, be sure to **create an empty draft pull request or open an issue, so we can have a discussion first**. Especially for a large pull request or you don't know it will be merged or not.
Here are some references:
✅ Usually Accept:
-- Bug/Security fix
-- Translations
+- Bug fix
+- Security fix
- Adding notification providers
+- Adding new language files (You should go to https://weblate.kuma.pet for existing languages)
+- Adding new language keys: `$t("...")`
⚠️ Discussion First
- Large pull requests
- New features
❌ Won't Merge
+- A dedicated pr for translating existing languages (You can now translate on https://weblate.kuma.pet)
- Do not pass auto test
- Any breaking changes
- Duplicated pull request
@@ -48,8 +54,13 @@ Here are some references:
- UI/UX is not close to Uptime Kuma
- Existing logic is completely modified or deleted for no reason
- A function that is completely out of scope
+- Convert existing code into other programming languages
- Unnecessary large code changes (Hard to review, causes code conflicts to other pull requests)
+The above cases cannot cover all situations.
+
+I (@louislam) have the final say. If your pull request does not meet my expectations, I will reject it, no matter how much time you spend on it. Therefore, it is essential to have a discussion beforehand.
+
I will mark your pull request in the [milestones](https://github.com/louislam/uptime-kuma/milestones), if I am plan to review and merge it.
Also, please don't rush or ask for ETA, because I have to understand the pull request, make sure it is no breaking changes and stick to my vision of this project, especially for large pull requests.
@@ -72,13 +83,13 @@ Before deep into coding, discussion first is preferred. Creating an empty pull r
## Project Styles
-I personally do not like something need to learn so much and need to config so much before you can finally start the app.
+I personally do not like something that requires so many configurations before you can finally start the app. I hope Uptime Kuma installation could be as easy as like installing a mobile app.
-- Easy to install for non-Docker users, no native build dependency is needed (at least for x86_64), no extra config, no extra effort to get it run
+- Easy to install for non-Docker users, no native build dependency is needed (for x86_64/armv7/arm64), no extra config, no extra effort required to get it running
- Single container for Docker users, no very complex docker-compose file. Just map the volume and expose the port, then good to go
-- Settings should be configurable in the frontend. Environment variable is not encouraged, unless it is related to startup such as `DATA_DIR`.
+- Settings should be configurable in the frontend. Environment variable is not encouraged, unless it is related to startup such as `DATA_DIR`
- Easy to use
-- The web UI styling should be consistent and nice.
+- The web UI styling should be consistent and nice
## Coding Styles
@@ -87,7 +98,7 @@ I personally do not like something need to learn so much and need to config so m
- Follow ESLint
- Methods and functions should be documented with JSDoc
-## Name convention
+## Name Conventions
- Javascript/Typescript: camelCaseType
- SQLite: snake_case (Underscore)
@@ -101,7 +112,7 @@ I personally do not like something need to learn so much and need to config so m
- IDE that supports ESLint and EditorConfig (I am using IntelliJ IDEA)
- A SQLite GUI tool (SQLite Expert Personal is suggested)
-## Install dependencies
+## Install Dependencies for Development
```bash
npm ci
@@ -119,6 +130,12 @@ Port `3000` and port `3001` will be used.
npm run dev
```
+But sometimes, you would like to keep restart the server, but not the frontend, you can run these command in two terminals:
+```
+npm run start-frontend-dev
+npm run start-server-dev
+```
+
## Backend Server
It binds to `0.0.0.0:3001` by default.
@@ -134,12 +151,15 @@ express.js is used for:
### Structure in /server/
+- jobs/ (Jobs that are running in another process)
- model/ (Object model, auto mapping to the database table name)
- modules/ (Modified 3rd-party modules)
+- monitor_types (Monitor Types)
- notification-providers/ (individual notification logic)
- routers/ (Express Routers)
- socket-handler (Socket.io Handlers)
-- server.js (Server entry point and main logic)
+- server.js (Server entry point)
+- uptime-kuma-server.js (UptimeKumaServer class, main logic should be here, but some still in `server.js`)
## Frontend Dev Server
@@ -172,15 +192,11 @@ The data and socket logic are in `src/mixins/socket.js`.
## Unit Test
-It is an end-to-end testing. It is using Jest and Puppeteer.
-
```bash
npm run build
npm test
```
-By default, the Chromium window will be shown up during the test. Specifying `HEADLESS_TEST=1` for terminal environments.
-
## Dependencies
Both frontend and backend share the same package.json. However, the frontend dependencies are eventually not used in the production environment, because it is usually also baked into dist files. So:
@@ -194,18 +210,12 @@ Both frontend and backend share the same package.json. However, the frontend dep
### Update Dependencies
-Install `ncu`
-https://github.com/raineorshine/npm-check-updates
-
-```bash
-ncu -u -t patch
-npm install
-```
-
Since previously updating Vite 2.5.10 to 2.6.0 broke the application completely, from now on, it should update patch release version only.
Patch release = the third digit ([Semantic Versioning](https://semver.org/))
+If for maybe security reasons, a library must be updated. Then you must need to check if there are any breaking changes.
+
## Translations
Please read: https://github.com/louislam/uptime-kuma/tree/master/src/languages
@@ -225,12 +235,13 @@ https://github.com/louislam/uptime-kuma/issues?q=sort%3Aupdated-desc
1. Draft a release note
2. Make sure the repo is cleared
+3. If the healthcheck is updated, remember to re-compile it: `npm run build-docker-builder-go`
3. `npm run release-final with env vars: `VERSION` and `GITHUB_TOKEN`
4. Wait until the `Press any key to continue`
5. `git push`
6. Publish the release note as 1.X.X
7. Press any key to continue
-8. SSH to demo site server and update to 1.X.X
+8. Deploy to the demo server: `npm run deploy-demo-server`
Checking:
diff --git a/README.md b/README.md
index 55a6ec50..a67007ce 100644
--- a/README.md
+++ b/README.md
@@ -1,38 +1,39 @@
# Uptime Kuma
-[](https://github.com/sponsors/louislam)
+[](https://github.com/sponsors/louislam)
+
+
+
## 🥔 Live Demo
Try it!
- Tokyo Demo Server: https://demo.uptime.kuma.pet (Sponsored by [Uptime Kuma Sponsors](https://github.com/louislam/uptime-kuma#%EF%B8%8F-sponsors))
-- Europe Demo Server: https://demo.uptime-kuma.karimi.dev:27000 (Provided by [@mhkarimi1383](https://github.com/mhkarimi1383))
It is a temporary live demo, all data will be deleted after 10 minutes. Use the one that is closer to you, but I suggest that you should install and try it out for the best demo experience.
## ⭐ Features
-* Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / Ping / DNS Record / Push / Steam Game Server / Docker Containers.
-* Fancy, Reactive, Fast UI/UX.
-* Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [90+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications).
-* 20 second intervals.
-* [Multi Languages](https://github.com/louislam/uptime-kuma/tree/master/src/languages)
-* Multiple Status Pages
-* Map Status Page to Domain
-* Ping Chart
-* Certificate Info
-* Proxy Support
-* 2FA available
+* Monitoring uptime for HTTP(s) / TCP / HTTP(s) Keyword / Ping / DNS Record / Push / Steam Game Server / Docker Containers
+* Fancy, Reactive, Fast UI/UX
+* Notifications via Telegram, Discord, Gotify, Slack, Pushover, Email (SMTP), and [90+ notification services, click here for the full list](https://github.com/louislam/uptime-kuma/tree/master/src/components/notifications)
+* 20 second intervals
+* [Multi Languages](https://github.com/louislam/uptime-kuma/tree/master/src/lang)
+* Multiple status pages
+* Map status pages to specific domains
+* Ping chart
+* Certificate info
+* Proxy support
+* 2FA support
## 🔧 How to Install
@@ -44,14 +45,15 @@ docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name upti
⚠️ Please use a **local volume** only. Other types such as NFS are not supported.
-Browse to http://localhost:3001 after starting.
+Uptime Kuma is now running on http://localhost:3001
### 💪🏻 Non-Docker
Required Tools:
- [Node.js](https://nodejs.org/en/download/) >= 14
+- [npm](https://docs.npmjs.com/cli/) >= 7
- [Git](https://git-scm.com/downloads)
-- [pm2](https://pm2.keymetrics.io/) - For run in background
+- [pm2](https://pm2.keymetrics.io/) - For running Uptime Kuma in the background
```bash
# Update your npm to the latest version
@@ -73,7 +75,7 @@ pm2 start server/server.js --name uptime-kuma
```
-Browse to http://localhost:3001 after starting.
+Uptime Kuma is now running on http://localhost:3001
More useful PM2 Commands
@@ -171,7 +173,7 @@ Check out the latest beta release here: https://github.com/louislam/uptime-kuma/
If you want to report a bug or request a new feature, feel free to open a [new issue](https://github.com/louislam/uptime-kuma/issues).
### Translations
-If you want to translate Uptime Kuma into your language, please read: https://github.com/louislam/uptime-kuma/tree/master/src/languages
+If you want to translate Uptime Kuma into your language, please visit [Weblate Readme](https://github.com/louislam/uptime-kuma/blob/master/src/lang/README.md).
Feel free to correct my grammar in this README, source code, or wiki, as my mother language is not English and my grammar is not that great.
diff --git a/SECURITY.md b/SECURITY.md
index d5941a97..43dc7654 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -2,9 +2,14 @@
## Reporting a Vulnerability
-Please report security issues to uptime@kuma.pet.
+1. Please report security issues to https://github.com/louislam/uptime-kuma/security/advisories/new.
+1. Please also create a empty security issues for alerting me, as GitHub Advisory do not send a notification, I probably will miss without this. https://github.com/louislam/uptime-kuma/issues/new?assignees=&labels=help&template=security.md
-Do not use the issue tracker or discuss it in the public as it will cause more damage.
+Do not use the public issue tracker or discuss it in the public as it will cause more damage.
+
+## Do you accept other 3rd-party bug bounty platforms?
+
+At this moment, I DO NOT accept other bug bounty platforms, because I am not familiar with these platforms and someone have tried to send a phishing link to me by this already. To minimize my own risk, please report through GitHub Advisories only. I will ignore all 3rd-party bug bounty platforms emails.
## Supported Versions
diff --git a/config/cypress.frontend.config.js b/config/cypress.frontend.config.js
new file mode 100644
index 00000000..eecdcb8d
--- /dev/null
+++ b/config/cypress.frontend.config.js
@@ -0,0 +1,10 @@
+const { defineConfig } = require("cypress");
+
+module.exports = defineConfig({
+ e2e: {
+ supportFile: false,
+ specPattern: [
+ "test/cypress/unit/**/*.js"
+ ],
+ }
+});
diff --git a/db/patch-add-gamedig-monitor.sql b/db/patch-add-gamedig-monitor.sql
new file mode 100644
index 00000000..061bed30
--- /dev/null
+++ b/db/patch-add-gamedig-monitor.sql
@@ -0,0 +1,5 @@
+BEGIN TRANSACTION;
+
+ ALTER TABLE monitor
+ ADD game VARCHAR(255);
+ COMMIT
diff --git a/db/patch-add-google-analytics-status-page-tag.sql b/db/patch-add-google-analytics-status-page-tag.sql
new file mode 100644
index 00000000..5de6ff37
--- /dev/null
+++ b/db/patch-add-google-analytics-status-page-tag.sql
@@ -0,0 +1,4 @@
+-- You should not modify if this have pushed to Github, unless it does serious wrong with the db.
+BEGIN TRANSACTION;
+ALTER TABLE status_page ADD google_analytics_tag_id VARCHAR;
+COMMIT;
diff --git a/db/patch-ping-packet-size.sql b/db/patch-ping-packet-size.sql
new file mode 100644
index 00000000..d65ec8ed
--- /dev/null
+++ b/db/patch-ping-packet-size.sql
@@ -0,0 +1,5 @@
+-- You should not modify if this have pushed to Github, unless it does serious wrong with the db.
+BEGIN TRANSACTION;
+ALTER TABLE monitor
+ ADD packet_size INTEGER DEFAULT 56 NOT NULL;
+COMMIT;
diff --git a/docker/alpine-base.dockerfile b/docker/alpine-base.dockerfile
index 1b8034f4..276d6e45 100644
--- a/docker/alpine-base.dockerfile
+++ b/docker/alpine-base.dockerfile
@@ -3,6 +3,6 @@ FROM node:16-alpine3.12
WORKDIR /app
# Install apprise, iputils for non-root ping, setpriv
-RUN apk add --no-cache iputils setpriv dumb-init python3 py3-cryptography py3-pip py3-six py3-yaml py3-click py3-markdown py3-requests py3-requests-oauthlib && \
- pip3 --no-cache-dir install apprise==1.2.0 && \
+RUN apk add --no-cache iputils setpriv dumb-init python3 py3-cryptography py3-pip py3-six py3-yaml py3-click py3-markdown py3-requests py3-requests-oauthlib git && \
+ pip3 --no-cache-dir install apprise==1.2.1 && \
rm -rf /root/.cache
diff --git a/docker/builder-go.dockerfile b/docker/builder-go.dockerfile
new file mode 100644
index 00000000..1d25843b
--- /dev/null
+++ b/docker/builder-go.dockerfile
@@ -0,0 +1,16 @@
+############################################
+# Build in Golang
+# Run npm run build-healthcheck-armv7 in the host first, another it will be super slow where it is building the armv7 healthcheck
+############################################
+FROM golang:1.19-buster
+WORKDIR /app
+ARG TARGETPLATFORM
+COPY ./extra/ ./extra/
+
+# Compile healthcheck.go
+RUN apt update && \
+ apt --yes --no-install-recommends install curl && \
+ curl -sL https://deb.nodesource.com/setup_18.x | bash && \
+ apt --yes --no-install-recommends install nodejs && \
+ node ./extra/build-healthcheck.js $TARGETPLATFORM && \
+ apt --yes remove nodejs
diff --git a/docker/debian-base.dockerfile b/docker/debian-base.dockerfile
index 5ca4a7ed..026189c4 100644
--- a/docker/debian-base.dockerfile
+++ b/docker/debian-base.dockerfile
@@ -10,8 +10,8 @@ WORKDIR /app
# Stupid python3 and python3-pip actually install a lot of useless things into Debian, specify --no-install-recommends to skip them, make the base even smaller than alpine!
RUN apt update && \
apt --yes --no-install-recommends install python3 python3-pip python3-cryptography python3-six python3-yaml python3-click python3-markdown python3-requests python3-requests-oauthlib \
- sqlite3 iputils-ping util-linux dumb-init && \
- pip3 --no-cache-dir install apprise==1.2.0 && \
+ sqlite3 iputils-ping util-linux dumb-init git && \
+ pip3 --no-cache-dir install apprise==1.2.1 && \
rm -rf /var/lib/apt/lists/* && \
apt --yes autoremove
diff --git a/docker/dockerfile b/docker/dockerfile
index e084d649..1799044a 100644
--- a/docker/dockerfile
+++ b/docker/dockerfile
@@ -1,19 +1,9 @@
############################################
# Build in Golang
# Run npm run build-healthcheck-armv7 in the host first, another it will be super slow where it is building the armv7 healthcheck
+# Check file: builder-go.dockerfile
############################################
-FROM golang:1.19.4-buster AS build_healthcheck
-WORKDIR /app
-ARG TARGETPLATFORM
-COPY ./extra/ ./extra/
-
-# Compile healthcheck.go
-RUN apt update
-RUN apt --yes --no-install-recommends install curl
-RUN curl -sL https://deb.nodesource.com/setup_18.x | bash
-RUN apt --yes --no-install-recommends install nodejs
-RUN node -v
-RUN node ./extra/build-healthcheck.js $TARGETPLATFORM
+FROM louislam/uptime-kuma:builder-go AS build_healthcheck
############################################
# Build in Node.js
@@ -22,10 +12,13 @@ FROM louislam/uptime-kuma:base-debian AS build
WORKDIR /app
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1
+COPY .npmrc .npmrc
+COPY package.json package.json
+COPY package-lock.json package-lock.json
+RUN npm ci --omit=dev
COPY . .
COPY --from=build_healthcheck /app/extra/healthcheck /app/extra/healthcheck
-RUN npm ci --production && \
- chmod +x /app/extra/entrypoint.sh
+RUN chmod +x /app/extra/entrypoint.sh
############################################
# ⭐ Main Image
@@ -78,7 +71,7 @@ RUN npm ci
EXPOSE 3000 3001
VOLUME ["/app/data"]
-HEALTHCHECK --interval=60s --timeout=30s --start-period=180s --retries=5 CMD node extra/healthcheck.js
+HEALTHCHECK --interval=60s --timeout=30s --start-period=180s --retries=5 CMD extra/healthcheck
CMD ["npm", "run", "start-pr-test"]
############################################
diff --git a/docker/dockerfile-alpine b/docker/dockerfile-alpine
index ab9255f9..43f26b8b 100644
--- a/docker/dockerfile-alpine
+++ b/docker/dockerfile-alpine
@@ -3,10 +3,12 @@ WORKDIR /app
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1
+COPY .npmrc .npmrc
+COPY package.json package.json
+COPY package-lock.json package-lock.json
+RUN npm ci --omit=dev
COPY . .
-RUN npm ci --production && \
- chmod +x /app/extra/entrypoint.sh
-
+RUN chmod +x /app/extra/entrypoint.sh
FROM louislam/uptime-kuma:base-alpine AS release
WORKDIR /app
diff --git a/extra/beta/update-version.js b/extra/beta/update-version.js
index df2cb40a..3dafbe8d 100644
--- a/extra/beta/update-version.js
+++ b/extra/beta/update-version.js
@@ -22,7 +22,8 @@ if (! exists) {
fs.writeFileSync("package.json", JSON.stringify(pkg, null, 4) + "\n");
// Also update package-lock.json
- childProcess.spawnSync("npm", [ "install" ]);
+ const npm = /^win/.test(process.platform) ? "npm.cmd" : "npm";
+ childProcess.spawnSync(npm, [ "install" ]);
commit(version);
tag(version);
@@ -32,6 +33,10 @@ if (! exists) {
process.exit(1);
}
+/**
+ * Commit updated files
+ * @param {string} version Version to update to
+ */
function commit(version) {
let msg = "Update to " + version;
@@ -47,6 +52,10 @@ function commit(version) {
console.log(res.stdout.toString().trim());
}
+/**
+ * Create a tag with the specified version
+ * @param {string} version Tag to create
+ */
function tag(version) {
let res = childProcess.spawnSync("git", [ "tag", version ]);
console.log(res.stdout.toString().trim());
@@ -55,6 +64,11 @@ function tag(version) {
console.log(res.stdout.toString().trim());
}
+/**
+ * Check if a tag exists for the specified version
+ * @param {string} version Version to check
+ * @returns {boolean} Does the tag already exist
+ */
function tagExists(version) {
if (! version) {
throw new Error("invalid version");
diff --git a/extra/deploy-demo-server.js b/extra/deploy-demo-server.js
new file mode 100644
index 00000000..d5a517f9
--- /dev/null
+++ b/extra/deploy-demo-server.js
@@ -0,0 +1,59 @@
+require("dotenv").config();
+const { NodeSSH } = require("node-ssh");
+const readline = require("readline");
+const rl = readline.createInterface({ input: process.stdin,
+ output: process.stdout });
+const prompt = (query) => new Promise((resolve) => rl.question(query, resolve));
+
+(async () => {
+ try {
+ console.log("SSH to demo server");
+ const ssh = new NodeSSH();
+ await ssh.connect({
+ host: process.env.UPTIME_KUMA_DEMO_HOST,
+ port: process.env.UPTIME_KUMA_DEMO_PORT,
+ username: process.env.UPTIME_KUMA_DEMO_USERNAME,
+ privateKeyPath: process.env.UPTIME_KUMA_DEMO_PRIVATE_KEY_PATH
+ });
+
+ let cwd = process.env.UPTIME_KUMA_DEMO_CWD;
+ let result;
+
+ const version = await prompt("Enter Version: ");
+
+ result = await ssh.execCommand("git fetch --all", {
+ cwd,
+ });
+ console.log(result.stdout + result.stderr);
+
+ await prompt("Press any key to continue...");
+
+ result = await ssh.execCommand(`git checkout ${version} --force`, {
+ cwd,
+ });
+ console.log(result.stdout + result.stderr);
+
+ result = await ssh.execCommand("npm run download-dist", {
+ cwd,
+ });
+ console.log(result.stdout + result.stderr);
+
+ result = await ssh.execCommand("npm install --production", {
+ cwd,
+ });
+ console.log(result.stdout + result.stderr);
+
+ result = await ssh.execCommand("pm2 restart 1", {
+ cwd,
+ });
+ console.log(result.stdout + result.stderr);
+
+ } catch (e) {
+ console.log(e);
+ } finally {
+ rl.close();
+ }
+})();
+
+// When done reading prompt, exit program
+rl.on("close", () => process.exit(0));
diff --git a/extra/download-cloudflared.js b/extra/download-cloudflared.js
index 41519b7c..74b9bad2 100644
--- a/extra/download-cloudflared.js
+++ b/extra/download-cloudflared.js
@@ -25,6 +25,10 @@ if (platform === "linux/amd64") {
const file = fs.createWriteStream("cloudflared.deb");
get("https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-" + arch + ".deb");
+/**
+ * Download specified file
+ * @param {string} url URL to request
+ */
function get(url) {
http.get(url, function (res) {
if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
diff --git a/extra/download-dist.js b/extra/download-dist.js
index b04beec7..a854ca8b 100644
--- a/extra/download-dist.js
+++ b/extra/download-dist.js
@@ -47,6 +47,7 @@ function download(url) {
});
}
console.log("Done");
+ process.exit(0);
});
tarStream.on("error", () => {
diff --git a/extra/exe-builder/.gitignore b/extra/exe-builder/.gitignore
new file mode 100644
index 00000000..d52874b6
--- /dev/null
+++ b/extra/exe-builder/.gitignore
@@ -0,0 +1 @@
+packages/
diff --git a/extra/exe-builder/App.config b/extra/exe-builder/App.config
new file mode 100644
index 00000000..97eb34af
--- /dev/null
+++ b/extra/exe-builder/App.config
@@ -0,0 +1,35 @@
+
+{{ $t("telegramMessageThreadIDDescription") }}
@@ -42,6 +46,11 @@ export default { HiddenInput, }, methods: { + /** + * Get the URL for telegram updates + * @param {string} [mode=masked] Should the token be masked? + * @returns {string} formatted URL + */ telegramGetUpdatesURL(mode = "masked") { let token = `<${this.$t("YOUR BOT TOKEN HERE")}>`; @@ -55,6 +64,8 @@ export default { return `https://api.telegram.org/bot${token}/getUpdates`; }, + + /** Get the telegram chat ID */ async autoGetTelegramChatID() { try { let res = await axios.get(this.telegramGetUpdatesURL("withToken")); diff --git a/src/components/notifications/ZohoCliq.vue b/src/components/notifications/ZohoCliq.vue new file mode 100644 index 00000000..9a9cd736 --- /dev/null +++ b/src/components/notifications/ZohoCliq.vue @@ -0,0 +1,18 @@ + +