2021-07-31 19:29:30 +03:00
# Project Info
2021-11-17 09:09:12 +03:00
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.
2021-07-31 19:29:30 +03:00
2021-12-02 13:15:14 +03:00
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.
2021-07-31 19:29:30 +03:00
2021-10-03 11:04:16 +03:00
The frontend code build into "dist" directory. The server (express.js) exposes the "dist" directory as root of the endpoint. This is how production is working.
2021-10-13 03:01:34 +03:00
## Key Technical Skills
2021-10-03 11:04:16 +03:00
- Node.js (You should know what are promise, async/await and arrow function etc.)
- Socket.io
- SCSS
- Vue.js
- Bootstrap
- SQLite
2021-10-13 03:01:34 +03:00
## Directories
2021-10-03 11:04:16 +03:00
- data (App data)
- dist (Frontend build)
- extra (Extra useful scripts)
- public (Frontend resources for dev only)
- server (Server source code)
- src (Frontend source code)
- test (unit test)
2021-07-31 19:29:30 +03:00
2021-10-13 03:01:34 +03:00
## Can I create a pull request for Uptime Kuma?
2021-08-24 09:42:35 +03:00
2021-12-02 13:15:14 +03:00
Generally, if the pull request is working fine, and it does not affect any existing logic, workflow and performance, I will merge into the master branch once it is tested.
2021-08-24 09:42:35 +03:00
2021-10-25 07:06:01 +03:00
If you are not sure whether I will accept your pull request, feel free to create an empty pull request draft first.
### Recommended Pull Request Guideline
1. Fork the project
1. Clone your fork repo to local
1. Create a new branch
1. Create an empty commit
`git commit -m "[empty commit] pull request for <YOUR TASK NAME>" --allow-empty`
1. Push to your fork repo
2021-10-26 06:28:38 +03:00
1. Create a pull request: https://github.com/louislam/uptime-kuma/compare
2021-12-02 13:15:14 +03:00
1. Write a proper description
2021-10-25 07:06:01 +03:00
1. Click "Change to draft"
2021-08-24 09:42:35 +03:00
2021-10-13 03:01:34 +03:00
### Pull Request Examples
2021-08-24 09:42:35 +03:00
2021-10-25 07:06:01 +03:00
Here are some example situations in the past.
2021-10-13 03:01:34 +03:00
#### ✅ High - Medium Priority
2021-08-24 09:42:35 +03:00
2021-10-25 07:06:01 +03:00
Easy to review, no breaking change and not touching the existing code
2021-08-24 09:42:35 +03:00
- Add a new notification
- Add a chart
- Fix a bug
2021-10-06 10:36:45 +03:00
- Translations
2021-10-25 07:06:49 +03:00
- Add a independent new feature
2021-08-24 09:42:35 +03:00
2021-10-13 03:01:34 +03:00
#### *️⃣ Requires one more reviewer
2021-08-24 09:42:35 +03:00
2021-08-28 08:46:47 +03:00
I do not have such knowledge to test it.
2021-08-24 09:42:35 +03:00
2021-09-12 20:23:51 +03:00
- Add k8s supports
2021-08-24 09:42:35 +03:00
2021-10-25 07:07:44 +03:00
#### ⚠ Low Priority - Harsh Mode
2021-10-25 07:06:01 +03:00
2021-12-02 13:15:14 +03:00
Some pull requests are required to modify the core. To be honest, I do not want anyone to try to do that, because it would spend a lot of your time. I will review your pull request harshly. Also, you may need to write a lot of unit tests to ensure that there is no breaking change.
2021-10-25 07:06:01 +03:00
2021-10-26 06:28:38 +03:00
- Touch large parts of code of any very important features
- Touch monitoring logic
2021-10-25 07:06:01 +03:00
- Drop a table or drop a column for any reason
2021-10-26 06:28:38 +03:00
- Touch the entry point of Docker or Node.js
2021-11-17 09:09:12 +03:00
- Modify auth
2021-10-26 11:38:00 +03:00
2021-10-13 03:01:34 +03:00
#### *️⃣ Low Priority
2021-08-24 09:42:35 +03:00
2021-08-28 08:46:47 +03:00
It changed my current workflow and require further studies.
2021-08-24 09:42:35 +03:00
- Change my release approach
2021-10-13 03:01:34 +03:00
#### ❌ Won't Merge
2021-08-24 09:42:35 +03:00
2021-10-25 07:06:01 +03:00
- Any breaking changes
2021-08-24 09:42:35 +03:00
- Duplicated pull request
- Buggy
- Existing logic is completely modified or deleted
- A function that is completely out of scope
2021-10-13 03:01:34 +03:00
## Project Styles
2021-07-31 19:29:30 +03:00
2021-09-12 20:23:51 +03:00
I personally do not like something need to learn so much and need to config so much before you can finally start the app.
2021-07-31 19:29:30 +03:00
- 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
2021-10-10 09:40:19 +03:00
- Single container for Docker users, no very complex docker-compose file. Just map the volume and expose the port, then good to go
2021-10-03 11:04:16 +03:00
- Settings should be configurable in the frontend. Env var is not encouraged.
2021-07-31 19:29:30 +03:00
- Easy to use
2021-10-13 03:01:34 +03:00
## Coding Styles
2021-08-24 09:06:23 +03:00
2021-10-03 11:04:16 +03:00
- 4 spaces indentation
2021-09-12 20:23:51 +03:00
- Follow `.editorconfig`
- Follow ESLint
2021-08-24 09:06:23 +03:00
2021-10-13 03:01:34 +03:00
## Name convention
2021-08-24 09:06:23 +03:00
- Javascript/Typescript: camelCaseType
- SQLite: underscore_type
- CSS/SCSS: dash-type
2021-10-13 03:01:34 +03:00
## Tools
2021-09-12 20:23:51 +03:00
2021-07-31 19:29:30 +03:00
- Node.js >= 14
- Git
2021-11-17 09:09:12 +03:00
- IDE that supports ESLint and EditorConfig (I am using IntelliJ IDEA)
2021-10-03 11:04:16 +03:00
- A SQLite tool (SQLite Expert Personal is suggested)
2021-07-31 19:29:30 +03:00
2021-10-13 03:01:34 +03:00
## Install dependencies
2021-07-31 19:29:30 +03:00
```bash
2021-10-03 11:04:16 +03:00
npm ci
2021-08-31 15:36:17 +03:00
```
2021-10-13 03:01:34 +03:00
## How to start the Backend Dev Server
2021-07-31 19:29:30 +03:00
2021-09-23 17:48:19 +03:00
(2021-09-23 Update)
2021-07-31 19:29:30 +03:00
2021-09-23 17:48:19 +03:00
```bash
npm run start-server-dev
2021-07-31 19:29:30 +03:00
```
2021-09-12 20:23:51 +03:00
It binds to `0.0.0.0:3001` by default.
2021-07-31 19:29:30 +03:00
2021-10-13 03:01:34 +03:00
### Backend Details
2021-07-31 19:29:30 +03:00
It is mainly a socket.io app + express.js.
2021-09-12 20:23:51 +03:00
express.js is just used for serving the frontend built files (index.html, .js and .css etc.)
2021-07-31 19:29:30 +03:00
2021-10-03 11:04:16 +03:00
- model/ (Object model, auto mapping to the database table name)
- modules/ (Modified 3rd-party modules)
2021-11-17 09:09:12 +03:00
- notification-providers/ (individual notification logic)
2021-10-03 11:04:16 +03:00
- routers/ (Express Routers)
2021-12-02 13:15:14 +03:00
- socket-handler (Socket.io Handlers)
2021-10-03 11:04:16 +03:00
- server.js (Server main logic)
2021-07-31 19:29:30 +03:00
2021-10-13 03:01:34 +03:00
## How to start the Frontend Dev Server
2021-07-31 19:29:30 +03:00
2021-10-03 11:04:16 +03:00
1. Set the env var `NODE_ENV` to "development".
2021-10-05 03:44:50 +03:00
2. Start the frontend dev server by the following command.
2021-10-13 03:01:34 +03:00
2021-10-03 11:04:16 +03:00
```bash
npm run dev
```
2021-10-13 03:01:34 +03:00
2021-10-03 11:04:16 +03:00
It binds to `0.0.0.0:3000` by default.
2021-07-31 19:29:30 +03:00
2021-09-12 20:23:51 +03:00
You can use Vue.js devtools Chrome extension for debugging.
2021-07-31 19:29:30 +03:00
2021-10-13 03:01:34 +03:00
### Build the frontend
2021-07-31 19:29:30 +03:00
```bash
npm run build
```
2021-10-13 03:01:34 +03:00
### Frontend Details
2021-07-31 19:29:30 +03:00
Uptime Kuma Frontend is a single page application (SPA). Most paths are handled by Vue Router.
2021-09-12 20:23:51 +03:00
The router is in `src/router.js`
2021-07-31 19:29:30 +03:00
As you can see, most data in frontend is stored in root level, even though you changed the current router to any other pages.
2021-09-12 20:23:51 +03:00
The data and socket logic are in `src/mixins/socket.js` .
2021-07-31 19:29:30 +03:00
2021-10-13 03:01:34 +03:00
## Database Migration
2021-07-31 19:29:30 +03:00
2021-10-03 11:04:16 +03:00
1. Create `patch-{name}.sql` in `./db/`
2. Add your patch filename in the `patchList` list in `./server/database.js`
2021-07-31 19:29:30 +03:00
2021-10-13 03:01:34 +03:00
## Unit Test
2021-07-31 19:29:30 +03:00
2021-10-05 15:27:43 +03:00
It is an end-to-end testing. It is using Jest and Puppeteer.
2021-10-05 13:17:54 +03:00
2021-10-13 03:01:34 +03:00
```bash
2021-10-05 15:27:43 +03:00
npm run build
npm test
```
By default, the Chromium window will be shown up during the test. Specifying `HEADLESS_TEST=1` for terminal environments.
2021-10-05 13:17:54 +03:00
2021-10-13 03:01:34 +03:00
## Update Dependencies
2021-10-05 13:17:54 +03:00
Install `ncu`
https://github.com/raineorshine/npm-check-updates
```bash
ncu -u -t patch
npm install
```
2021-12-02 13:15:14 +03:00
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.
2021-10-05 13:17:54 +03:00
2021-10-13 03:01:34 +03:00
Patch release = the third digit ([Semantic Versioning](https://semver.org/))
2021-10-06 10:36:45 +03:00
2021-10-13 03:01:34 +03:00
## Translations
2021-10-06 10:36:45 +03:00
Please read: https://github.com/louislam/uptime-kuma/tree/master/src/languages
2021-10-20 19:03:55 +03:00
2021-10-26 18:56:14 +03:00
## Wiki
2021-12-02 13:15:14 +03:00
Since there is no way to make a pull request to wiki's repo, I have set up another repo to do that.
2021-10-26 18:56:14 +03:00
2021-10-26 19:02:20 +03:00
https://github.com/louislam/uptime-kuma-wiki
2021-10-26 18:56:14 +03:00
2021-12-02 13:15:14 +03:00
## Maintainer
2021-10-20 19:03:55 +03:00
2021-10-20 19:08:46 +03:00
Check the latest issues and pull requests:
2021-10-20 19:03:55 +03:00
https://github.com/louislam/uptime-kuma/issues?q=sort%3Aupdated-desc
### Release Procedures
2021-12-02 13:15:14 +03:00
2021-10-20 19:03:55 +03:00
1. Draft a release note
1. Make sure the repo is cleared
1. `npm run update-version 1.X.X`
2021-10-31 08:07:10 +03:00
1. `npm run build`
2021-10-20 19:03:55 +03:00
1. `npm run build-docker`
2021-10-31 08:07:10 +03:00
1. `git push`
2021-10-20 19:03:55 +03:00
1. Publish the release note as 1.X.X
2021-10-31 08:07:10 +03:00
1. `npm run upload-artifacts`
2021-10-20 19:03:55 +03:00
1. SSH to demo site server and update to 1.X.X
2021-10-20 19:08:46 +03:00
Checking:
2021-12-02 13:15:14 +03:00
2021-10-20 19:08:46 +03:00
- Check all tags is fine on https://hub.docker.com/r/louislam/uptime-kuma/tags
- Try the Docker image with tag 1.X.X (Clean install / amd64 / arm64 / armv7)
2021-12-02 13:15:14 +03:00
- Try clean installation with Node.js
2021-10-26 18:56:14 +03:00
### Release Wiki
#### Setup Repo
2021-12-02 13:15:14 +03:00
```bash
2021-10-26 18:56:14 +03:00
git clone https://github.com/louislam/uptime-kuma-wiki.git
cd uptime-kuma-wiki
git remote add production https://github.com/louislam/uptime-kuma.wiki.git
```
#### Push to Production Wiki
2021-12-02 13:15:14 +03:00
```bash
2021-10-26 18:56:14 +03:00
git pull
git push production master
```