Compare commits

...

11 Commits

Author SHA1 Message Date
Danushka Katubulla
f583291d8a Update README.md
Fixed broken links
2025-02-11 11:14:40 +05:30
Chamika J
03c0068991 Merge pull request #60 from kithmina1999/add-docker-networks
adding network configuration to docker-compose file
2024-12-31 11:08:04 +05:30
kithmina1999
2fb47c4c1d adding network configuration to docker-compose file 2024-12-30 15:55:39 +05:30
Chamika J
136dd5c42f Merge pull request #54 from thewulf7/docker-patch-1
Fixing docker image for backend service and grouping them in network
2024-10-25 16:57:25 +05:30
Evgenii Utkin
276d24143d Fixing docker image for backend service and grouping them in network 2024-10-15 22:52:49 +02:00
Chamika J
a8e9ad68bf Merge pull request #51 from Worklenz/development
Development
2024-09-30 15:28:35 +05:30
Chamika J
12c04d0798 Merge pull request #50 from Worklenz/feature/selfhosting-tiny-editor
feat(editor): add self-hosted TinyMCE editor and remove API key
2024-09-30 15:27:20 +05:30
chamikaJ
eb39dc363f feat(editor): add self-hosted TinyMCE editor and remove API key 2024-06-17 11:37:12 +05:30
Chamika J
5cce1f2d2c Merge pull request #29 from TheZoker/add-workflow
Add workflow to pre-build docker images
2024-06-04 11:18:42 +05:30
Florian Gareis
1b669f76b8 Add images to compose file 2024-06-02 22:04:47 +00:00
Florian Gareis
a6b6eca4d9 Add github docker image build workflow 2024-06-02 22:04:35 +00:00
12 changed files with 139 additions and 71 deletions

50
.github/workflows/build-images.yaml vendored Normal file
View File

@@ -0,0 +1,50 @@
name: Publish Docker Images
on:
push:
branches:
- 'main'
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
strategy:
matrix:
service:
- name: frontend
context: ./worklenz-frontend
container_name: worklenz_frontend
- name: backend
context: ./worklenz-backend
container_name: worklenz_backend
steps:
- name: Checkout the codebase
uses: actions/checkout@v4
- name: Login to the Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository_owner }}/${{ matrix.service.container_name }}
flavor: |
latest=true
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: ${{ matrix.service.context }}
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

View File

@@ -7,11 +7,11 @@
</h1> </h1>
<p align="center"> <p align="center">
<a href="https://worklenz.com/features/task-management/">Task Management</a> | <a href="https://worklenz.com/task-management/">Task Management</a> |
<a href="https://worklenz.com/features/time-tracking/">Time Tracking</a> | <a href="https://worklenz.com/time-tracking/">Time Tracking</a> |
<a href="https://worklenz.com/features/analytics/">Analytics</a> | <a href="https://worklenz.com/analytics/">Analytics</a> |
<a href="https://worklenz.com/features/resource-management/">Resource Management</a> | <a href="https://worklenz.com/resource-management/">Resource Management</a> |
<a href="https://worklenz.com/features/templates/">Project Templates</a> <a href="https://worklenz.com/templates/">Project Templates</a>
</p> </p>
<p align="center"> <p align="center">

View File

@@ -1,5 +1,6 @@
services: services:
frontend: frontend:
image: ghcr.io/worklenz/worklenz-frontend
build: build:
context: ./worklenz-frontend context: ./worklenz-frontend
dockerfile: Dockerfile dockerfile: Dockerfile
@@ -9,8 +10,11 @@ services:
depends_on: depends_on:
backend: backend:
condition: service_started condition: service_started
networks:
- worklenz
backend: backend:
image: ghcr.io/worklenz/worklenz-backend
build: build:
context: ./worklenz-backend context: ./worklenz-backend
dockerfile: Dockerfile dockerfile: Dockerfile
@@ -52,6 +56,8 @@ services:
- S3_URL - S3_URL
- S3_ACCESS_KEY_ID - S3_ACCESS_KEY_ID
- S3_SECRET_ACCESS_KEY - S3_SECRET_ACCESS_KEY
networks:
- worklenz
db: db:
image: postgres:15 image: postgres:15
@@ -64,9 +70,14 @@ services:
interval: 10s interval: 10s
timeout: 5s timeout: 5s
retries: 5 retries: 5
networks:
- worklenz
volumes: volumes:
- worklenz_postgres_data:/var/lib/postgresql/data - worklenz_postgres_data:/var/lib/postgresql/data
- ./worklenz-backend/database/:/docker-entrypoint-initdb.d - ./worklenz-backend/database/:/docker-entrypoint-initdb.d
volumes: volumes:
worklenz_postgres_data: worklenz_postgres_data:
networks:
worklenz:

View File

@@ -36,13 +36,20 @@
"glob": "**/*", "glob": "**/*",
"input": "./node_modules/@ant-design/icons-angular/src/inline-svg/", "input": "./node_modules/@ant-design/icons-angular/src/inline-svg/",
"output": "/assets/" "output": "/assets/"
},
{
"glob": "**/*",
"input": "node_modules/tinymce",
"output": "/tinymce/"
} }
], ],
"styles": [ "styles": [
"src/theme.less", "src/theme.less",
"src/styles.scss" "src/styles.scss"
], ],
"scripts": [], "scripts": [
"node_modules/tinymce/tinymce.min.js"
],
"serviceWorker": true, "serviceWorker": true,
"ngswConfigPath": "ngsw-config.json", "ngswConfigPath": "ngsw-config.json",
"allowedCommonJsDependencies": [ "allowedCommonJsDependencies": [

View File

@@ -36,7 +36,7 @@
"ngx-doc-viewer": "^15.0.1", "ngx-doc-viewer": "^15.0.1",
"ngx-socket-io": "^4.5.1", "ngx-socket-io": "^4.5.1",
"rxjs": "~7.4.0", "rxjs": "~7.4.0",
"tinymce": "^6.7.3", "tinymce": "^6.8.3",
"tslib": "^2.6.1", "tslib": "^2.6.1",
"zone.js": "^0.13.1" "zone.js": "^0.13.1"
}, },
@@ -15327,9 +15327,9 @@
"dev": true "dev": true
}, },
"node_modules/tinymce": { "node_modules/tinymce": {
"version": "6.7.3", "version": "6.8.3",
"resolved": "https://registry.npmjs.org/tinymce/-/tinymce-6.7.3.tgz", "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-6.8.3.tgz",
"integrity": "sha512-J7WmYIi/gt1RvZ6Ap2oQiUjzAoiS9pfV+d4GnKuZuPu8agmlAEAInNmMvMjfCNBzHv4JnZXY7qlHUAI0IuYQVA==" "integrity": "sha512-3fCHKAeqT+xNwBVESf6iDbDV0VNwZNmfrkx9c/6Gz5iB8piMfaO6s7FvoiTrj1hf1gVbfyLTnz1DooI6DhgINQ=="
}, },
"node_modules/tmp": { "node_modules/tmp": {
"version": "0.2.1", "version": "0.2.1",

View File

@@ -45,7 +45,7 @@
"ngx-doc-viewer": "^15.0.1", "ngx-doc-viewer": "^15.0.1",
"ngx-socket-io": "^4.5.1", "ngx-socket-io": "^4.5.1",
"rxjs": "~7.4.0", "rxjs": "~7.4.0",
"tinymce": "^6.7.3", "tinymce": "^6.8.3",
"tslib": "^2.6.1", "tslib": "^2.6.1",
"zone.js": "^0.13.1" "zone.js": "^0.13.1"
}, },

View File

@@ -11,7 +11,6 @@
class="description-editor" class="description-editor"
[class.editing]="isEditing" [class.editing]="isEditing"
[init]="CONFIG" [init]="CONFIG"
[apiKey]="apiKey"
[(ngModel)]="service.model.task.description" [(ngModel)]="service.model.task.description"
(onBlur)="onDescriptionInputBlur()" (onBlur)="onDescriptionInputBlur()"
#descriptionEditor #descriptionEditor

View File

@@ -25,8 +25,9 @@ export class TaskViewDescriptionComponent implements OnInit, OnDestroy {
@ViewChild("descriptionInput", {static: false}) descriptionInput!: ElementRef; @ViewChild("descriptionInput", {static: false}) descriptionInput!: ElementRef;
@ViewChild("descriptionEditor", {static: false}) descriptionEditor!: EditorComponent; @ViewChild("descriptionEditor", {static: false}) descriptionEditor!: EditorComponent;
readonly apiKey = "4nquevykvy1i0q0v62ksxuu3nz1muy8i5fsqpj3wp9qm2mgp";
readonly CONFIG = { readonly CONFIG = {
base_url: '/tinymce',
suffix: '.min',
plugins: "lists link code wordcount", plugins: "lists link code wordcount",
toolbar: 'blocks bold italic underline strikethrough | checklist numlist bullist link | alignleft aligncenter alignright alignjustify', toolbar: 'blocks bold italic underline strikethrough | checklist numlist bullist link | alignleft aligncenter alignright alignjustify',
menubar: false, menubar: false,

View File

@@ -51,7 +51,7 @@ import {NzPopconfirmModule} from 'ng-zorro-antd/popconfirm';
import {NzCardModule} from "ng-zorro-antd/card"; import {NzCardModule} from "ng-zorro-antd/card";
import {NzTableModule} from "ng-zorro-antd/table"; import {NzTableModule} from "ng-zorro-antd/table";
import {NzProgressModule} from "ng-zorro-antd/progress"; import {NzProgressModule} from "ng-zorro-antd/progress";
import {EditorModule} from '@tinymce/tinymce-angular'; import {EditorModule, TINYMCE_SCRIPT_SRC} from '@tinymce/tinymce-angular';
import {TaskViewTimeLogComponent} from './task-view-time-log/task-view-time-log.component'; import {TaskViewTimeLogComponent} from './task-view-time-log/task-view-time-log.component';
import {NzListModule} from "ng-zorro-antd/list"; import {NzListModule} from "ng-zorro-antd/list";
import {NzEmptyModule} from "ng-zorro-antd/empty"; import {NzEmptyModule} from "ng-zorro-antd/empty";
@@ -99,60 +99,61 @@ import {TaskCommentMentionPipe} from "@pipes/task-comment-mention.pipe";
TaskViewComponent TaskViewComponent
], ],
providers: [ providers: [
SearchByNamePipe SearchByNamePipe,
{ provide: TINYMCE_SCRIPT_SRC, useValue: 'tinymce/tinymce.min.js' }
], ],
imports: [ imports: [
CommonModule, CommonModule,
NzDrawerModule, NzDrawerModule,
NzSkeletonModule, NzSkeletonModule,
NzFormModule, NzFormModule,
FormsModule, FormsModule,
NzInputModule, NzInputModule,
NzSelectModule, NzSelectModule,
NzTabsModule, NzTabsModule,
NzTagModule, NzTagModule,
NzCollapseModule, NzCollapseModule,
NzDropDownModule, NzDropDownModule,
AvatarsComponent, AvatarsComponent,
NzAvatarModule, NzAvatarModule,
NzTypographyModule, NzTypographyModule,
NzCheckboxModule, NzCheckboxModule,
SearchByNamePipe, SearchByNamePipe,
NzToolTipModule, NzToolTipModule,
NzDatePickerModule, NzDatePickerModule,
NzInputNumberModule, NzInputNumberModule,
NzIconModule, NzIconModule,
NzBadgeModule, NzBadgeModule,
NzDividerModule, NzDividerModule,
FromNowPipe, FromNowPipe,
ReactiveFormsModule, ReactiveFormsModule,
TaskPriorityLabelComponent, TaskPriorityLabelComponent,
NzButtonModule, NzButtonModule,
NzCommentModule, NzCommentModule,
RouterLink, RouterLink,
NzSpaceModule, NzSpaceModule,
NzMentionModule, NzMentionModule,
NzAffixModule, NzAffixModule,
NzNoAnimationModule, NzNoAnimationModule,
NzPopconfirmModule, NzPopconfirmModule,
NzCardModule, NzCardModule,
NzTableModule, NzTableModule,
NzProgressModule, NzProgressModule,
EditorModule, EditorModule,
NzListModule, NzListModule,
NzEmptyModule, NzEmptyModule,
TaskTimerComponent, TaskTimerComponent,
FirstCharUpperPipe, FirstCharUpperPipe,
TaskListAddTaskInputComponent, TaskListAddTaskInputComponent,
SafeStringPipe, SafeStringPipe,
DateFormatterPipe, DateFormatterPipe,
NgxDocViewerModule, NgxDocViewerModule,
NzModalModule, NzModalModule,
NzSpinModule, NzSpinModule,
NzTimelineModule, NzTimelineModule,
NzTimePickerModule, NzTimePickerModule,
TaskCommentMentionPipe TaskCommentMentionPipe
] ]
}) })
export class TaskViewModule { export class TaskViewModule {
} }

View File

@@ -4,7 +4,6 @@ import {ProjectTemplateService} from "@services/project-template.service";
import {PtTaskPhasesApiService} from "@api/pt-task-phases-api.service"; import {PtTaskPhasesApiService} from "@api/pt-task-phases-api.service";
import {ITaskPhase} from "@interfaces/api-models/task-phase"; import {ITaskPhase} from "@interfaces/api-models/task-phase";
import {PhaseColorCodes} from "@shared/constants"; import {PhaseColorCodes} from "@shared/constants";
import {load} from "@angular-devkit/build-angular/src/utils/server-rendering/esm-in-memory-file-loader";
@Component({ @Component({
selector: 'worklenz-phase-settings-drawer', selector: 'worklenz-phase-settings-drawer',

View File

@@ -21,7 +21,6 @@
class="description-editor-list" class="description-editor-list"
[class.editing]="isEditing" [class.editing]="isEditing"
[init]="CONFIG" [init]="CONFIG"
[apiKey]="apiKey"
[(ngModel)]="task.description" [(ngModel)]="task.description"
(onBlur)="submit()" (onBlur)="submit()"
#descriptionEditor #descriptionEditor

View File

@@ -28,8 +28,9 @@ export class TaskDescriptionComponent implements OnInit, OnDestroy {
show = false; show = false;
loading = false; loading = false;
readonly apiKey = "4nquevykvy1i0q0v62ksxuu3nz1muy8i5fsqpj3wp9qm2mgp";
readonly CONFIG = { readonly CONFIG = {
base_url: '/tinymce',
suffix: '.min',
plugins: "lists link code wordcount", plugins: "lists link code wordcount",
toolbar: 'blocks bold italic underline strikethrough | checklist numlist bullist link | alignleft aligncenter alignright alignjustify', toolbar: 'blocks bold italic underline strikethrough | checklist numlist bullist link | alignleft aligncenter alignright alignjustify',
menubar: false, menubar: false,