2020-03-30 23:36:52 +02:00
|
|
|
# A simplified Jira clone built with seed.rs and actix
|
|
|
|
|
2020-05-31 22:47:48 +02:00
|
|
|
![JIRS](https://raw.githubusercontent.com/Eraden/jirs/master/jirs-client/static/project-icon.svg)
|
|
|
|
|
2020-05-01 22:34:09 +02:00
|
|
|
Server: [![builds.sr.ht status](https://builds.sr.ht/~tsumanu/jirs/server.yml.svg)](https://builds.sr.ht/~tsumanu/jirs/server.yml?)
|
|
|
|
Client: [![builds.sr.ht status](https://builds.sr.ht/~tsumanu/jirs/client.yml.svg)](https://builds.sr.ht/~tsumanu/jirs/client.yml?)
|
2020-05-01 22:21:28 +02:00
|
|
|
|
|
|
|
https://git.sr.ht/~tsumanu/jirs
|
|
|
|
|
2020-03-30 23:36:52 +02:00
|
|
|
## Features
|
|
|
|
|
2020-03-30 23:41:26 +02:00
|
|
|
* Actor based asynchronous backend
|
2020-03-30 23:36:52 +02:00
|
|
|
* Ultra fast functional frontend build with WASM
|
2020-05-31 16:14:26 +02:00
|
|
|
* Showing message when person is invited to project
|
|
|
|
* Send e-mail with invitation to project
|
|
|
|
* Switch project in profile page
|
|
|
|
* Choose time tracking in project
|
|
|
|
* Edit, delete and move issues
|
|
|
|
* Comment issue
|
|
|
|
* Add people to project
|
2020-03-30 23:41:26 +02:00
|
|
|
|
2020-06-08 21:13:16 +02:00
|
|
|
## Known bugs
|
|
|
|
|
|
|
|
* Bad sorting when dragging up and down
|
|
|
|
|
|
|
|
## Roadmap
|
|
|
|
|
|
|
|
##### Version 1.0
|
|
|
|
|
|
|
|
* Basic issue management
|
|
|
|
* Basic columns management
|
|
|
|
* Basic user management
|
|
|
|
|
|
|
|
##### Version 1.1
|
|
|
|
|
|
|
|
* Add Epic
|
|
|
|
* Add grouping by Epic
|
|
|
|
* Add backend maximal per seconds request or die
|
|
|
|
* Add fibonacci tracked issue reports
|
|
|
|
* Add hourly tracked issue reports
|
|
|
|
* Add Rich Text Editor
|
|
|
|
* Add personal settings to choose MDE (Markdown Editor) or RTE
|
|
|
|
* Add issues and filters
|
|
|
|
|
2021-01-06 18:47:54 +01:00
|
|
|
##### Version 1.1.1
|
|
|
|
|
|
|
|
* Refactor actors
|
|
|
|
* Extract code highlight to server actor
|
|
|
|
* Handle upload avatar with stream
|
|
|
|
* Move config to `./config` directory
|
|
|
|
* Fix S3 upload with upgraded version of `rusoto`
|
2021-01-15 22:57:26 +01:00
|
|
|
* Remove Custom Elements
|
|
|
|
* Replace CSS with SCSS
|
2021-01-19 21:57:48 +01:00
|
|
|
* Disable RTE until properly optimized
|
2021-01-06 18:47:54 +01:00
|
|
|
|
2020-08-12 20:54:00 +02:00
|
|
|
##### Work Progress
|
|
|
|
|
|
|
|
* [X] Add Epic
|
2021-01-19 21:57:48 +01:00
|
|
|
* [X] Edit Epic
|
|
|
|
* [X] Delete Epic
|
2021-04-25 11:31:52 +02:00
|
|
|
* [X] Epic `starts` and `ends` date
|
2020-08-12 20:54:00 +02:00
|
|
|
* [X] Grouping by Epic
|
2021-04-25 11:31:52 +02:00
|
|
|
* [X] Basic Rich Text Editor
|
2021-01-19 21:57:48 +01:00
|
|
|
* [ ] Insert Code in Rich Text Editor
|
2020-08-15 00:55:40 +02:00
|
|
|
* [X] Code syntax
|
2021-04-25 11:31:52 +02:00
|
|
|
* [X] Personal settings to choose MDE (Markdown Editor) or RTE
|
2021-04-29 17:10:02 +02:00
|
|
|
* [X] Issues and filters view
|
|
|
|
* [X] Issues and filters working filters
|
2020-08-12 20:54:00 +02:00
|
|
|
|
2020-03-30 23:41:26 +02:00
|
|
|
## How to run it
|
|
|
|
|
2020-05-01 22:21:28 +02:00
|
|
|
### Config files
|
|
|
|
|
2020-05-05 16:09:26 +02:00
|
|
|
#### WEB
|
|
|
|
|
2020-05-01 22:21:28 +02:00
|
|
|
```toml
|
|
|
|
# web.toml
|
|
|
|
concurrency = 2
|
|
|
|
port = "5000"
|
|
|
|
bind = "0.0.0.0"
|
|
|
|
ssl = false
|
2020-05-05 16:09:26 +02:00
|
|
|
tmp_dir = "./tmp"
|
|
|
|
|
|
|
|
[s3]
|
|
|
|
access_key_id = ""
|
|
|
|
secret_access_key = ""
|
|
|
|
bucket = ""
|
|
|
|
region_name = "eu-central-1"
|
|
|
|
|
|
|
|
[filesystem]
|
|
|
|
store_path = ""
|
|
|
|
client_path = "/img"
|
2020-05-01 22:21:28 +02:00
|
|
|
```
|
|
|
|
|
2020-05-05 16:09:26 +02:00
|
|
|
##### Upload local storage
|
|
|
|
|
|
|
|
If default feature `"local-storage"` is on your uploaded files will be stored on your machine.
|
|
|
|
This requires additional configuration.
|
|
|
|
|
|
|
|
```toml
|
|
|
|
[filesystem]
|
|
|
|
store_path = "/var/jirs/uploads"
|
|
|
|
client_path = "/img"
|
|
|
|
```
|
|
|
|
|
|
|
|
* `store_path` is your local machine path. Files will be saved there. This can be relative to `CWD` path or absolute path.
|
|
|
|
* `client_path` is web path
|
|
|
|
|
|
|
|
Both must be set and non-empty
|
|
|
|
|
|
|
|
##### Upload to AWS S3
|
|
|
|
|
|
|
|
If default feature `"aws-s3"` is on your uploaded files will be send to AWS S3 service.
|
|
|
|
This requires additional configuration.
|
|
|
|
|
|
|
|
```toml
|
|
|
|
[s3]
|
|
|
|
access_key_id = ""
|
|
|
|
secret_access_key = ""
|
|
|
|
bucket = ""
|
|
|
|
region_name = "eu-central-1"
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Database
|
|
|
|
|
2020-05-01 22:21:28 +02:00
|
|
|
```toml
|
|
|
|
# db.toml
|
|
|
|
concurrency = 2
|
|
|
|
database_url = "postgres://postgres@localhost:5432/jirs"
|
|
|
|
```
|
|
|
|
|
2020-05-05 16:09:26 +02:00
|
|
|
#### Mail Service
|
|
|
|
|
|
|
|
You can send e-mail only via service which will handle this. This application was build using sendgrid.
|
|
|
|
|
2020-05-01 22:21:28 +02:00
|
|
|
```toml
|
|
|
|
# mail.toml
|
|
|
|
concurrency = 2
|
|
|
|
user = "apikey"
|
|
|
|
pass = "YOUR-TOKEN"
|
|
|
|
host = "smtp.sendgrid.net"
|
|
|
|
from = "contact@jirs.pl"
|
|
|
|
```
|
|
|
|
|
2020-03-30 23:41:26 +02:00
|
|
|
### Local variables
|
|
|
|
|
|
|
|
Within `jirs` directory place `.env` file with following content
|
|
|
|
|
|
|
|
```dotenv
|
|
|
|
DATABASE_URL=postgres://postgres@localhost:5432/jirs
|
|
|
|
RUST_LOG=actix_web=info,diesel=info
|
|
|
|
JIRS_CLIENT_PORT=7000
|
|
|
|
JIRS_CLIENT_BIND=0.0.0.0
|
|
|
|
JIRS_SERVER_PORT=5000
|
|
|
|
JIRS_SERVER_BIND=0.0.0.0
|
|
|
|
NODE_ENV=development
|
|
|
|
DEBUG=true
|
|
|
|
```
|
|
|
|
|
2020-05-05 16:09:26 +02:00
|
|
|
Client and Server bind/port must be provided. Client will be build using those variables and will send requests only using this address.
|
|
|
|
`DATABASE_URL` is required only to setup database. Runtime will use `db.toml`.
|
|
|
|
|
2020-03-30 23:41:26 +02:00
|
|
|
### Backend
|
|
|
|
|
|
|
|
Requirements:
|
|
|
|
|
|
|
|
* PostgreSQL
|
|
|
|
|
|
|
|
```bash
|
|
|
|
cargo install diesel_cli --no-default-features --features postgres
|
2020-05-05 16:09:26 +02:00
|
|
|
export DATABASE_URL=postgres://postgres@localhost/jirs
|
2020-03-30 23:41:26 +02:00
|
|
|
diesel setup
|
|
|
|
diesel migration run
|
|
|
|
|
|
|
|
cargo run --bin jirs_server
|
|
|
|
```
|
|
|
|
|
|
|
|
### Frontend
|
|
|
|
|
|
|
|
```bash
|
|
|
|
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
|
|
|
cd jirs_client
|
|
|
|
yarn
|
2020-05-19 12:02:55 +02:00
|
|
|
./scripts/prod.sh
|
|
|
|
```
|
|
|
|
|
|
|
|
```bash
|
|
|
|
sudo ln -s ./jirs.nginx /etc/nginx/sites-enabled/
|
|
|
|
sudo nginx -s reload
|
2020-03-30 23:41:26 +02:00
|
|
|
```
|
2020-05-01 21:40:32 +02:00
|
|
|
|
|
|
|
## Issue trackers
|
|
|
|
|
|
|
|
https://todo.sr.ht/~tsumanu/JIRS
|
2020-08-15 00:55:40 +02:00
|
|
|
|
|
|
|
## Details
|
|
|
|
|
|
|
|
### Display code syntax
|
|
|
|
|
|
|
|
Custom element glued with WASM
|
|
|
|
|
|
|
|
* `file-path` have connected on attr changed callback and will change displayed path
|
|
|
|
* `lang` does not have callback and it's used only on `connectedCallback`
|
|
|
|
|
|
|
|
```html
|
|
|
|
<jirs-code-view lang="Rust" file-path="/some/path.rs">
|
|
|
|
struct Foo {
|
|
|
|
}
|
|
|
|
</jirs-code-view>
|
|
|
|
```
|
|
|
|
|
|
|
|
### Supported languages
|
|
|
|
|
|
|
|
* ASP
|
|
|
|
* AWK
|
|
|
|
* ActionScript
|
|
|
|
* Advanced CSV
|
|
|
|
* AppleScript
|
|
|
|
* Assembly x86 (NASM)
|
|
|
|
* Batch File
|
|
|
|
* BibTeX
|
|
|
|
* Bourne Again Shell (bash)
|
|
|
|
* C
|
|
|
|
* C#
|
|
|
|
* C++
|
|
|
|
* CMake
|
|
|
|
* CMake C Header
|
|
|
|
* CMake C++ Header
|
|
|
|
* CMakeCache
|
|
|
|
* CMakeCommands
|
|
|
|
* CSS
|
|
|
|
* Cargo Build Results
|
|
|
|
* Clojure
|
|
|
|
* Crystal
|
|
|
|
* D
|
|
|
|
* DMD Output
|
|
|
|
* Dart
|
|
|
|
* Diff
|
|
|
|
* Dockerfile
|
|
|
|
* Elixir
|
|
|
|
* Elm
|
|
|
|
* Elm Compile Messages
|
|
|
|
* Elm Documentation
|
|
|
|
* Erlang
|
|
|
|
* F#
|
|
|
|
* Fortran (Fixed Form)
|
|
|
|
* Fortran (Modern)
|
|
|
|
* Fortran Namelist
|
|
|
|
* Friendly Interactive Shell (fish)
|
|
|
|
* GFortran Build Results
|
|
|
|
* Generic Config
|
|
|
|
* Git Attributes
|
|
|
|
* Git Commit
|
|
|
|
* Git Common
|
|
|
|
* Git Config
|
|
|
|
* Git Ignore
|
|
|
|
* Git Link
|
|
|
|
* Git Log
|
|
|
|
* Git Mailmap
|
|
|
|
* Git Rebase Todo
|
|
|
|
* Go
|
|
|
|
* GraphQL
|
|
|
|
* Graphviz (DOT)
|
|
|
|
* Groovy
|
|
|
|
* HTML
|
|
|
|
* HTML (ASP)
|
|
|
|
* HTML (EEx)
|
|
|
|
* HTML (Erlang)
|
|
|
|
* HTML (Jinja2)
|
|
|
|
* HTML (Rails)
|
|
|
|
* HTML (Tcl)
|
|
|
|
* Handlebars
|
|
|
|
* Haskell
|
|
|
|
* JSON
|
|
|
|
* Java
|
|
|
|
* Java Properties
|
|
|
|
* Java Server Page (JSP)
|
|
|
|
* JavaScript
|
|
|
|
* JavaScript (Rails)
|
|
|
|
* Javadoc
|
|
|
|
* Jinja2
|
|
|
|
* Julia
|
|
|
|
* Kotlin
|
|
|
|
* LaTeX
|
|
|
|
* LaTeX Log
|
|
|
|
* Less
|
|
|
|
* Linker Script
|
|
|
|
* Lisp
|
|
|
|
* Literate Haskell
|
|
|
|
* Lua
|
|
|
|
* MATLAB
|
|
|
|
* Make Output
|
|
|
|
* Makefile
|
|
|
|
* Markdown
|
|
|
|
* MiniZinc (MZN)
|
|
|
|
* MultiMarkdown
|
|
|
|
* NAnt Build File
|
|
|
|
* Nim
|
|
|
|
* Nix
|
|
|
|
* OCaml
|
|
|
|
* OCamllex
|
|
|
|
* OCamlyacc
|
|
|
|
* Objective-C
|
|
|
|
* Objective-C++
|
|
|
|
* OpenMP (Fortran)
|
|
|
|
* PHP
|
|
|
|
* PHP Source
|
|
|
|
* Pascal
|
|
|
|
* Perl
|
|
|
|
* Plain Text
|
|
|
|
* PowerShell
|
|
|
|
* PureScript
|
|
|
|
* Python
|
|
|
|
* R
|
|
|
|
* R Console
|
|
|
|
* Racket
|
|
|
|
* Rd (R Documentation)
|
|
|
|
* Reason
|
|
|
|
* Regular Expression
|
|
|
|
* Regular Expressions (Elixir)
|
|
|
|
* Regular Expressions (Javascript)
|
|
|
|
* Regular Expressions (PHP)
|
|
|
|
* Regular Expressions (Python)
|
|
|
|
* Ruby
|
|
|
|
* Ruby Haml
|
|
|
|
* Ruby on Rails
|
|
|
|
* Rust
|
|
|
|
* SCSS
|
|
|
|
* SQL
|
|
|
|
* SQL (Rails)
|
|
|
|
* SWI-Prolog
|
|
|
|
* Sass
|
|
|
|
* Scala
|
|
|
|
* Shell-Unix-Generic
|
|
|
|
* Stylus
|
|
|
|
* Swift
|
|
|
|
* TOML
|
|
|
|
* Tcl
|
|
|
|
* TeX
|
|
|
|
* Textile
|
|
|
|
* TypeScript
|
|
|
|
* TypeScriptReact
|
|
|
|
* VimL
|
|
|
|
* XML
|
|
|
|
* YAML
|
|
|
|
* camlp4
|
|
|
|
* commands-builtin-shell-bash
|
|
|
|
* lrc
|
|
|
|
* reStructuredText
|
|
|
|
* srt
|