A simplified Jira clone built with seed.rs and actix
Go to file
2021-10-17 13:05:23 +02:00
actors Fix email content type. Style lists 2021-10-15 15:58:15 +02:00
derive Unify dependencies 2021-08-13 12:56:11 +02:00
docs Broken start of issue cleanup 2021-10-14 17:03:36 +02:00
jirs-cli Broken start of issue cleanup 2021-10-14 17:03:36 +02:00
jirs-server Broken start of issue cleanup 2021-10-14 17:03:36 +02:00
migrations Upgrade and fix slow autoresize 2021-04-27 23:57:15 +02:00
shared Reduce model memory usage 2021-10-15 14:40:51 +02:00
web Reduce memory usage and prevent HashMap overflow 2021-10-17 13:05:23 +02:00
.dockerignore X 2021-10-05 14:34:20 +02:00
.env Remove some builders 2021-04-15 22:32:05 +02:00
.gitignore Remove some builders 2021-04-15 22:32:05 +02:00
Cargo.lock Broken start of issue cleanup 2021-10-14 17:03:36 +02:00
Cargo.toml X 2021-10-05 14:34:20 +02:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md (#1) 2020-05-07 15:40:28 +02:00
CONTRIBUTING.md Add CONTRIBUTING 2020-03-30 21:26:35 +00:00
diesel.toml Proc macros 2021-01-07 23:34:34 +01:00
docker-compose.yml Add edit epic and delete epic, refactor, fix drag sorting 2021-01-15 18:13:48 +01:00
Dockerfile.build Add more verbose errors. Fix register 2020-10-21 23:59:17 +02:00
LICENSE Add LICENSE 2020-03-30 21:19:29 +00:00
README.md Fix drop create modal, add deploy info 2021-10-08 23:42:15 +02:00
rustfmt.toml Better fmt, remove select builder 2021-04-16 15:20:25 +02:00

A simplified Jira clone built with seed.rs and actix

JIRS

Server: builds.sr.ht status Client: builds.sr.ht status

https://git.sr.ht/~tsumanu/jirs

Features

  • Actor based asynchronous backend
  • Ultra fast functional frontend build with WASM
  • 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

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
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
  • Remove Custom Elements
  • Replace CSS with SCSS
  • Disable RTE until properly optimized
Work Progress
  • Add Epic
  • Edit Epic
  • Delete Epic
  • Epic starts and ends date
  • Grouping by Epic
  • Basic Rich Text Editor
  • Insert Code in Rich Text Editor
  • Code syntax
  • Personal settings to choose MDE (Markdown Editor) or RTE
  • Issues and filters view
  • Issues and filters working filters

How to run it

Config files

WEB

# web.toml
concurrency = 2
port = "5000"
bind = "0.0.0.0"
ssl = false
tmp_dir = "./tmp"

[s3]
access_key_id = ""
secret_access_key = ""
bucket = ""
region_name = "eu-central-1"

[filesystem]
store_path = ""
client_path = "/img"
Upload local storage

If default feature "local-storage" is on your uploaded files will be stored on your machine. This requires additional configuration.

[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.

[s3]
access_key_id = ""
secret_access_key = ""
bucket = ""
region_name = "eu-central-1"

Database

# db.toml
concurrency = 2
database_url = "postgres://postgres@localhost:5432/jirs"

Mail Service

You can send e-mail only via service which will handle this. This application was build using sendgrid.

# mail.toml
concurrency = 2
user = "apikey"
pass = "YOUR-TOKEN"
host = "smtp.sendgrid.net"
from = "contact@jirs.pl"

Local variables

Within jirs directory place .env file with following content

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

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.

Backend

Requirements:

  • PostgreSQL
cargo install diesel_cli --no-default-features --features postgres
export DATABASE_URL=postgres://postgres@localhost/jirs
diesel setup
diesel migration run

cargo run --bin jirs_server

Frontend

curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
cd jirs_client
./web/scripts/prod.sh
sudo ln -s ./jirs.nginx /etc/nginx/sites-enabled/
sudo nginx -s reload

Issue trackers

https://todo.sr.ht/~tsumanu/JIRS

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
<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