Compare commits
No commits in common. "ef17fb8e8ed238633bc9df5e7670c58216b5dbe5" and "5756770b64f23a5d98b573f321caa0c0a02a61d6" have entirely different histories.
ef17fb8e8e
...
5756770b64
|
@ -0,0 +1,49 @@
|
|||
name: Backend docker image
|
||||
run-name: ${{ gitea.actor }} is runs ci pipeline
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
jobs:
|
||||
release-image:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: catthehacker/ubuntu:act-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Extract tag
|
||||
uses: olegtarasov/get-tag@v2.1.2
|
||||
id: tagName
|
||||
with:
|
||||
tagRegex: "v(.*)"
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
config-inline: |
|
||||
[registry."git.bhasher.com"]
|
||||
http = true
|
||||
insecure = true
|
||||
|
||||
- name: Login
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: git.bhasher.com
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Build and push frontend
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: ./backend
|
||||
file: ./backend/Dockerfile
|
||||
push: true
|
||||
platforms: |
|
||||
linux/amd64
|
||||
linux/arm64
|
||||
tags: |
|
||||
git.bhasher.com/bhasher/focus-backend:latest
|
||||
git.bhasher.com/bhasher/focus-backend:${{ steps.tagName.outputs.tag }}
|
|
@ -0,0 +1,49 @@
|
|||
name: Frontend and backend docker image
|
||||
run-name: ${{ gitea.actor }} is runs ci pipeline
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
jobs:
|
||||
release-image:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: catthehacker/ubuntu:act-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Extract tag
|
||||
uses: olegtarasov/get-tag@v2.1.2
|
||||
id: tagName
|
||||
with:
|
||||
tagRegex: "v(.*)"
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
config-inline: |
|
||||
[registry."git.bhasher.com"]
|
||||
http = true
|
||||
insecure = true
|
||||
|
||||
- name: Login
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: git.bhasher.com
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Build and push frontend
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: .
|
||||
file: ./Dockerfile
|
||||
push: true
|
||||
platforms: |
|
||||
linux/amd64
|
||||
linux/arm64
|
||||
tags: |
|
||||
git.bhasher.com/bhasher/focus:latest
|
||||
git.bhasher.com/bhasher/focus:${{ steps.tagName.outputs.tag }}
|
|
@ -0,0 +1,56 @@
|
|||
name: Tauri based desktop app
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
jobs:
|
||||
publish-tauri-desktop:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: catthehacker/ubuntu:act-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Extract tag
|
||||
uses: olegtarasov/get-tag@v2.1.2
|
||||
id: tagName
|
||||
with:
|
||||
tagRegex: "v(.*)"
|
||||
|
||||
- name: Set up node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- name: Install Rust stable
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libwebkit2gtk-4.0-dev libgtk-3-dev libappindicator3-dev librsvg2-dev patchelf
|
||||
|
||||
- name: Install frontend dependencies
|
||||
run: |
|
||||
cd frontend
|
||||
npm install
|
||||
cd ..
|
||||
|
||||
- name: Build desktop app
|
||||
run: |
|
||||
cd frontend
|
||||
npm run tauri build
|
||||
cd ..
|
||||
|
||||
- name: Publish desktop app
|
||||
uses: akkuman/gitea-release-action@v1
|
||||
with:
|
||||
name: Focus ${{ steps.tagName.outputs.tag }}
|
||||
prerelease: true
|
||||
files: |-
|
||||
frontend/src-tauri/target/release/focus
|
||||
frontend/src-tauri/target/release/bundle/deb/*.deb
|
||||
frontend/src-tauri/target/release/bundle/appimage/*.AppImage
|
|
@ -0,0 +1,49 @@
|
|||
name: Frontend docker image
|
||||
run-name: ${{ gitea.actor }} is runs ci pipeline
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
jobs:
|
||||
release-image:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: catthehacker/ubuntu:act-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Extract tag
|
||||
uses: olegtarasov/get-tag@v2.1.2
|
||||
id: tagName
|
||||
with:
|
||||
tagRegex: "v(.*)"
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
config-inline: |
|
||||
[registry."git.bhasher.com"]
|
||||
http = true
|
||||
insecure = true
|
||||
|
||||
- name: Login
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: git.bhasher.com
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Build and push frontend
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: ./frontend
|
||||
file: ./frontend/Dockerfile
|
||||
push: true
|
||||
platforms: |
|
||||
linux/amd64
|
||||
linux/arm64
|
||||
tags: |
|
||||
git.bhasher.com/bhasher/focus-frontend:latest
|
||||
git.bhasher.com/bhasher/focus-frontend:${{ steps.tagName.outputs.tag }}
|
|
@ -1,112 +0,0 @@
|
|||
name: Build releases
|
||||
run-name: ${{ gitea.actor }} is runs ci pipeline
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
jobs:
|
||||
build-docker:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: catthehacker/ubuntu:act-latest
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- context: ./backend
|
||||
image: focus-backend
|
||||
- context: ./frontend
|
||||
dockerfile: ./frontend/Dockerfile
|
||||
image: focus-frontend
|
||||
- context: .
|
||||
image: focu
|
||||
env:
|
||||
RUNNER_TOOL_CACHE: /toolcaches
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Extract tag
|
||||
uses: olegtarasov/get-tag@v2.1.2
|
||||
id: tagName
|
||||
with:
|
||||
tagRegex: "v(.*)"
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
with:
|
||||
config-inline: |
|
||||
[registry."git.bhasher.com"]
|
||||
http = true
|
||||
insecure = true
|
||||
|
||||
- name: Login
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: git.bhasher.com
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Build and push ${{ matrix.image }}
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: ${{ matrix.context }}
|
||||
file: ${{ matrix.context }}/Dockerfile
|
||||
push: true
|
||||
platforms: |
|
||||
linux/amd64
|
||||
linux/arm64
|
||||
tags: |
|
||||
git.bhasher.com/bhasher/${{ matrix.image }}:latest
|
||||
git.bhasher.com/bhasher/${{ matrix.image }}:${{ steps.tagName.outputs.tag }}
|
||||
|
||||
build-tauri:
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: catthehacker/ubuntu:act-latest
|
||||
env:
|
||||
RUNNER_TOOL_CACHE: /toolcache
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Extract tag
|
||||
uses: olegtarasov/get-tag@v2.1.2
|
||||
id: tagName
|
||||
with:
|
||||
tagRegex: "v(.*)"
|
||||
|
||||
- name: Set up node
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 20
|
||||
|
||||
- name: Install Rust stable
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libwebkit2gtk-4.0-dev libgtk-3-dev libappindicator3-dev librsvg2-dev patchelf
|
||||
|
||||
- name: Install frontend dependencies
|
||||
run: |
|
||||
cd frontend
|
||||
npm install
|
||||
cd ..
|
||||
|
||||
- name: Build desktop app
|
||||
run: |
|
||||
cd frontend
|
||||
npm run tauri build
|
||||
cd ..
|
||||
|
||||
- name: Publish desktop app
|
||||
uses: akkuman/gitea-release-action@v1
|
||||
with:
|
||||
name: Focus ${{ steps.tagName.outputs.tag }}
|
||||
prerelease: true
|
||||
files: |-
|
||||
frontend/src-tauri/target/release/focus
|
||||
frontend/src-tauri/target/release/bundle/deb/*.deb
|
||||
frontend/src-tauri/target/release/bundle/appimage/*.AppImage
|
59
README.md
59
README.md
|
@ -1,91 +1,36 @@
|
|||
# Focus
|
||||
|
||||
> [!CAUTION]
|
||||
> Focus is in alpha development stage. It is not yet recommended for production use. Please report any bugs or issues you encounter.
|
||||
> Focus is in alpha development stage. Expect breaking changes in every version.
|
||||
|
||||
Focus is an open-source, Kanban-style project management tool, emphasizing simplicity and efficiency. The backend is written in go and the frontend is in svelte.
|
||||
|
||||
The official source code repository is at [git.bhasher.com/Bhasher/focus](https://git.bhasher.com/Bhasher/focus). It runs the CI pipeline and hosts the Docker images and releases. However, a mirror is available at [github.com/Bhasher/focus](https://github.com/Bhasher/focus).
|
||||
|
||||
## Features
|
||||
|
||||
- Kanban-style boards
|
||||
- RESTful API
|
||||
|
||||
### Planned Features
|
||||
|
||||
- Markdown support
|
||||
- Real-time collaboration
|
||||
|
||||
## KISS Principles
|
||||
|
||||
Adhering to [KISS principles](https://en.wikipedia.org/wiki/KISS_principle), Focus boasts a minimalist, efficient codebase, concentrating on essential features. This streamlined approach minimizes complexity, enhancing maintainability and ease of deployment across different architectures.
|
||||
|
||||
Go was chosen for the backend because of its simplicity, speed, and cross-platform support. Svelte was chosen for the frontend because it can be compiled to static HTML, CSS, and JavaScript, which can easily be served by any web server.
|
||||
|
||||
Certain features are intentionally excluded, left to specialized tools. These include:
|
||||
|
||||
- Authentication
|
||||
- HTTPS
|
||||
- Notifications
|
||||
- Mobile App
|
||||
|
||||
HTTPS and authentication have been successfully tested with [traefik](https://traefik.io/) and [authelia](https://www.authelia.com/) middleware but it should work with most reverse proxies and authentication middleware as it is platform-agnostic.
|
||||
|
||||
Focus offers a comprehensive RESTful API for extensions and integrations.
|
||||
|
||||
## Installation
|
||||
|
||||
### Docker
|
||||
|
||||
The easiest way to run Focus is with Docker. There is three images available:
|
||||
|
||||
- `git.bhasher.com/Bhasher/focus-frontend` for the svelte UI frontend
|
||||
- `git.bhasher.com/Bhasher/focus-backend` for the go backend
|
||||
- `git.bhasher.com/Bhasher/focus` for both in one image
|
||||
|
||||
Each image has a `latest` tag and a `vX.Y.Z` tag for each release. The `latest` tag is updated with each release.
|
||||
|
||||
Example `docker-compose.yaml` is available [here](docker-compose.yaml).
|
||||
|
||||
### Desktop App
|
||||
|
||||
Focus is available as a desktop app using [Tauri](https://tauri.app). Automatic releases are only available for Linux as binaries, AppImage, and DEB packages. Download the latest release from the [releases page](https://git.bhasher.com/Bhasher/focus/releases).
|
||||
|
||||
For other platforms, you can build the desktop app yourself using `npm run tauri build` in the `frontend` directory.
|
||||
|
||||
> [!CAUTION]
|
||||
> The desktop app requires the backend to be running. You can specify the backend URL via the `PUBLIC_BACKEND_URL` environment variable. The default is `http://localhost:3000`.
|
||||
|
||||
```sh
|
||||
PUBLIC_BACKEND_URL=http://localhost:3000 ./focus
|
||||
```
|
||||
|
||||
#### AUR
|
||||
|
||||
```sh
|
||||
yay -S focus-desktop-bin
|
||||
```
|
||||
|
||||
### Debug Mode
|
||||
## Launching Focus in Debug Mode
|
||||
|
||||
To run Focus locally, follow these steps:
|
||||
|
||||
1. Clone the repository:
|
||||
|
||||
```sh
|
||||
git clone https://git.bhasher.com/Bhasher/focus
|
||||
```
|
||||
|
||||
2. Start the backend:
|
||||
|
||||
```sh
|
||||
cd backend
|
||||
go run .
|
||||
```
|
||||
|
||||
3. Start the frontend:
|
||||
|
||||
```sh
|
||||
cd frontend
|
||||
npm run dev
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
services:
|
||||
focus-backend:
|
||||
container_name: focus-backend
|
||||
image: git.bhasher.com/bhasher/focus-backend:latest
|
||||
ports:
|
||||
- 3000:3000
|
||||
volumes:
|
||||
- ./data:/data
|
||||
|
||||
focus-frontend:
|
||||
container_name: focus-frontend
|
||||
image: git.bhasher.com/bhasher/focus-frontend:latest
|
||||
ports:
|
||||
- 8080:80
|
||||
environment:
|
||||
- PUBLIC_BACKEND_URL=http://127.0.0.1:3000
|
|
@ -8,4 +8,3 @@ public
|
|||
.svelte-kot
|
||||
build
|
||||
.dockerignore
|
||||
src-tauri
|
|
@ -1,5 +1,3 @@
|
|||
# Generated by Cargo
|
||||
# will have compiled files and executables
|
||||
/target/
|
||||
LICENSE-*
|
||||
*.deb
|
|
@ -1,48 +0,0 @@
|
|||
# Maintainer: Brieuc Dubois <focus dot aur at bhasher dot com>
|
||||
pkgname=focus-desktop-bin
|
||||
pkgver=0.3.2
|
||||
pkgrel=1
|
||||
pkgdesc="Focus is an open-source, Kanban-style project management tool, emphasizing simplicity and efficiency."
|
||||
arch=('x86_64')
|
||||
license=('MIT')
|
||||
provides=("${pkgname%-bin}=${pkgver}")
|
||||
conflicts=("${pkgname%-bin}")
|
||||
url="https://git.bhasher.com/bhasher/focus"
|
||||
|
||||
depends=(
|
||||
'webkit2gtk'
|
||||
'gtk3'
|
||||
'cairo'
|
||||
'glib2'
|
||||
'hicolor-icon-theme'
|
||||
'gdk-pixbuf2'
|
||||
'libsoup'
|
||||
'gcc-libs'
|
||||
'glibc'
|
||||
'pango'
|
||||
)
|
||||
|
||||
source=(
|
||||
"https://git.bhasher.com/Bhasher/focus/releases/download/v${pkgver}/focus_${pkgver}_amd64.deb"
|
||||
"LICENSE-${pkgver}::https://git.bhasher.com/Bhasher/focus/raw/branch/master/LICENSE.md"
|
||||
)
|
||||
|
||||
sha256sums=(
|
||||
'64dc3fbd2476ef5ff9b0705c6ec287657ef7ce96c4b72d063088eb05c519f227'
|
||||
'00f70f9c4cb1c351877b690002c21564dc022f7b5d7fd1273ff52c5911356384'
|
||||
)
|
||||
|
||||
build() {
|
||||
bsdtar -xf "${srcdir}/data.tar.gz"
|
||||
}
|
||||
|
||||
package() {
|
||||
install -Dm755 "${srcdir}/usr/bin/focus" "${pkgdir}/usr/bin/focus"
|
||||
install -Dm644 "${srcdir}/usr/share/applications/focus.desktop" "${pkgdir}/usr/share/applications"
|
||||
for _icons in 32x32 128x128 256x256@2;do
|
||||
install -Dm644 "${srcdir}/usr/share/icons/hicolor/${_icons}/apps/focus.png" \
|
||||
-t "${pkgdir}/usr/share/icons/hicolor/${_icons//@2/}/apps"
|
||||
done
|
||||
install -Dm644 "${srcdir}/LICENSE-${pkgver}" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
|
||||
}
|
||||
|
Loading…
Reference in New Issue