Skip to content

Commit 45e25ce

Browse files
release: v0.25.3 #6788
2 parents 4d88dba + 72307ec commit 45e25ce

File tree

114 files changed

+15081
-779
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+15081
-779
lines changed

.github/workflows/build-branch.yml

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,6 @@ jobs:
4747
gh_buildx_version: ${{ steps.set_env_variables.outputs.BUILDX_VERSION }}
4848
gh_buildx_platforms: ${{ steps.set_env_variables.outputs.BUILDX_PLATFORMS }}
4949
gh_buildx_endpoint: ${{ steps.set_env_variables.outputs.BUILDX_ENDPOINT }}
50-
build_proxy: ${{ steps.changed_files.outputs.proxy_any_changed }}
51-
build_apiserver: ${{ steps.changed_files.outputs.apiserver_any_changed }}
52-
build_admin: ${{ steps.changed_files.outputs.admin_any_changed }}
53-
build_space: ${{ steps.changed_files.outputs.space_any_changed }}
54-
build_web: ${{ steps.changed_files.outputs.web_any_changed }}
55-
build_live: ${{ steps.changed_files.outputs.live_any_changed }}
5650

5751
dh_img_web: ${{ steps.set_env_variables.outputs.DH_IMG_WEB }}
5852
dh_img_space: ${{ steps.set_env_variables.outputs.DH_IMG_SPACE }}
@@ -123,46 +117,7 @@ jobs:
123117
name: Checkout Files
124118
uses: actions/checkout@v4
125119

126-
- name: Get changed files
127-
id: changed_files
128-
uses: tj-actions/changed-files@v42
129-
with:
130-
files_yaml: |
131-
apiserver:
132-
- apiserver/**
133-
proxy:
134-
- nginx/**
135-
admin:
136-
- admin/**
137-
- packages/**
138-
- "package.json"
139-
- "yarn.lock"
140-
- "tsconfig.json"
141-
- "turbo.json"
142-
space:
143-
- space/**
144-
- packages/**
145-
- "package.json"
146-
- "yarn.lock"
147-
- "tsconfig.json"
148-
- "turbo.json"
149-
web:
150-
- web/**
151-
- packages/**
152-
- "package.json"
153-
- "yarn.lock"
154-
- "tsconfig.json"
155-
- "turbo.json"
156-
live:
157-
- live/**
158-
- packages/**
159-
- 'package.json'
160-
- 'yarn.lock'
161-
- 'tsconfig.json'
162-
- 'turbo.json'
163-
164120
branch_build_push_admin:
165-
if: ${{ needs.branch_build_setup.outputs.build_admin == 'true' || github.event_name == 'workflow_dispatch' || needs.branch_build_setup.outputs.gh_branch_name == 'master' }}
166121
name: Build-Push Admin Docker Image
167122
runs-on: ubuntu-22.04
168123
needs: [branch_build_setup]
@@ -185,7 +140,6 @@ jobs:
185140
buildx-endpoint: ${{ needs.branch_build_setup.outputs.gh_buildx_endpoint }}
186141

187142
branch_build_push_web:
188-
if: ${{ needs.branch_build_setup.outputs.build_web == 'true' || github.event_name == 'workflow_dispatch' || needs.branch_build_setup.outputs.gh_branch_name == 'master' }}
189143
name: Build-Push Web Docker Image
190144
runs-on: ubuntu-22.04
191145
needs: [branch_build_setup]
@@ -208,7 +162,6 @@ jobs:
208162
buildx-endpoint: ${{ needs.branch_build_setup.outputs.gh_buildx_endpoint }}
209163

210164
branch_build_push_space:
211-
if: ${{ needs.branch_build_setup.outputs.build_space == 'true' || github.event_name == 'workflow_dispatch' || needs.branch_build_setup.outputs.gh_branch_name == 'master' }}
212165
name: Build-Push Space Docker Image
213166
runs-on: ubuntu-22.04
214167
needs: [branch_build_setup]
@@ -231,7 +184,6 @@ jobs:
231184
buildx-endpoint: ${{ needs.branch_build_setup.outputs.gh_buildx_endpoint }}
232185

233186
branch_build_push_live:
234-
if: ${{ needs.branch_build_setup.outputs.build_live == 'true' || github.event_name == 'workflow_dispatch' || needs.branch_build_setup.outputs.gh_branch_name == 'master' }}
235187
name: Build-Push Live Collaboration Docker Image
236188
runs-on: ubuntu-22.04
237189
needs: [branch_build_setup]
@@ -254,7 +206,6 @@ jobs:
254206
buildx-endpoint: ${{ needs.branch_build_setup.outputs.gh_buildx_endpoint }}
255207

256208
branch_build_push_apiserver:
257-
if: ${{ needs.branch_build_setup.outputs.build_apiserver == 'true' || github.event_name == 'workflow_dispatch' || needs.branch_build_setup.outputs.gh_branch_name == 'master' }}
258209
name: Build-Push API Server Docker Image
259210
runs-on: ubuntu-22.04
260211
needs: [branch_build_setup]
@@ -277,7 +228,6 @@ jobs:
277228
buildx-endpoint: ${{ needs.branch_build_setup.outputs.gh_buildx_endpoint }}
278229

279230
branch_build_push_proxy:
280-
if: ${{ needs.branch_build_setup.outputs.build_proxy == 'true' || github.event_name == 'workflow_dispatch' || needs.branch_build_setup.outputs.gh_branch_name == 'master' }}
281231
name: Build-Push Proxy Docker Image
282232
runs-on: ubuntu-22.04
283233
needs: [branch_build_setup]

.github/workflows/build-test-pull-request.yml

Lines changed: 4 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -6,49 +6,9 @@ on:
66
types: ["opened", "synchronize", "ready_for_review"]
77

88
jobs:
9-
get-changed-files:
10-
if: github.event.pull_request.draft == false
11-
runs-on: ubuntu-latest
12-
outputs:
13-
apiserver_changed: ${{ steps.changed-files.outputs.apiserver_any_changed }}
14-
admin_changed: ${{ steps.changed-files.outputs.admin_any_changed }}
15-
space_changed: ${{ steps.changed-files.outputs.space_any_changed }}
16-
web_changed: ${{ steps.changed-files.outputs.web_any_changed }}
17-
steps:
18-
- uses: actions/checkout@v4
19-
- name: Get changed files
20-
id: changed-files
21-
uses: tj-actions/changed-files@v44
22-
with:
23-
files_yaml: |
24-
apiserver:
25-
- apiserver/**
26-
admin:
27-
- admin/**
28-
- packages/**
29-
- 'package.json'
30-
- 'yarn.lock'
31-
- 'tsconfig.json'
32-
- 'turbo.json'
33-
space:
34-
- space/**
35-
- packages/**
36-
- 'package.json'
37-
- 'yarn.lock'
38-
- 'tsconfig.json'
39-
- 'turbo.json'
40-
web:
41-
- web/**
42-
- packages/**
43-
- 'package.json'
44-
- 'yarn.lock'
45-
- 'tsconfig.json'
46-
- 'turbo.json'
47-
489
lint-apiserver:
49-
needs: get-changed-files
10+
if: github.event.pull_request.draft == false
5011
runs-on: ubuntu-latest
51-
if: needs.get-changed-files.outputs.apiserver_changed == 'true'
5212
steps:
5313
- uses: actions/checkout@v4
5414
- name: Set up Python
@@ -63,8 +23,7 @@ jobs:
6323
run: ruff check --fix apiserver
6424

6525
lint-admin:
66-
needs: get-changed-files
67-
if: needs.get-changed-files.outputs.admin_changed == 'true'
26+
if: github.event.pull_request.draft == false
6827
runs-on: ubuntu-latest
6928
steps:
7029
- uses: actions/checkout@v4
@@ -76,8 +35,7 @@ jobs:
7635
- run: yarn lint --filter=admin
7736

7837
lint-space:
79-
needs: get-changed-files
80-
if: needs.get-changed-files.outputs.space_changed == 'true'
38+
if: github.event.pull_request.draft == false
8139
runs-on: ubuntu-latest
8240
steps:
8341
- uses: actions/checkout@v4
@@ -89,8 +47,7 @@ jobs:
8947
- run: yarn lint --filter=space
9048

9149
lint-web:
92-
needs: get-changed-files
93-
if: needs.get-changed-files.outputs.web_changed == 'true'
50+
if: github.event.pull_request.draft == false
9451
runs-on: ubuntu-latest
9552
steps:
9653
- uses: actions/checkout@v4

admin/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "admin",
33
"description": "Admin UI for Plane",
4-
"version": "0.25.2",
4+
"version": "0.25.3",
55
"license": "AGPL-3.0",
66
"private": true,
77
"scripts": {
@@ -25,7 +25,7 @@
2525
"@tailwindcss/typography": "^0.5.9",
2626
"@types/lodash": "^4.17.0",
2727
"autoprefixer": "10.4.14",
28-
"axios": "^1.7.9",
28+
"axios": "^1.8.3",
2929
"lodash": "^4.17.21",
3030
"lucide-react": "^0.469.0",
3131
"mobx": "^6.12.0",

apiserver/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "plane-api",
3-
"version": "0.25.2",
3+
"version": "0.25.3",
44
"license": "AGPL-3.0",
55
"private": true,
66
"description": "API server powering Plane's backend"

apiserver/plane/app/serializers/issue.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,20 @@ class IssueActivitySerializer(BaseSerializer):
268268
issue_detail = IssueFlatSerializer(read_only=True, source="issue")
269269
project_detail = ProjectLiteSerializer(read_only=True, source="project")
270270
workspace_detail = WorkspaceLiteSerializer(read_only=True, source="workspace")
271+
source_data = serializers.SerializerMethodField()
272+
273+
def get_source_data(self, obj):
274+
if (
275+
hasattr(obj, "issue")
276+
and hasattr(obj.issue, "source_data")
277+
and obj.issue.source_data
278+
):
279+
return {
280+
"source": obj.issue.source_data[0].source,
281+
"source_email": obj.issue.source_data[0].source_email,
282+
"extra": obj.issue.source_data[0].extra,
283+
}
284+
return None
271285

272286
class Meta:
273287
model = IssueActivity

apiserver/plane/app/views/issue/activity.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from .. import BaseAPIView
1515
from plane.app.serializers import IssueActivitySerializer, IssueCommentSerializer
1616
from plane.app.permissions import ProjectEntityPermission, allow_permission, ROLE
17-
from plane.db.models import IssueActivity, IssueComment, CommentReaction
17+
from plane.db.models import IssueActivity, IssueComment, CommentReaction, IntakeIssue
1818

1919

2020
class IssueActivityEndpoint(BaseAPIView):
@@ -57,13 +57,22 @@ def get(self, request, slug, project_id, issue_id):
5757
)
5858
)
5959
)
60-
issue_activities = IssueActivitySerializer(issue_activities, many=True).data
61-
issue_comments = IssueCommentSerializer(issue_comments, many=True).data
6260

6361
if request.GET.get("activity_type", None) == "issue-property":
62+
issue_activities = issue_activities.prefetch_related(
63+
Prefetch(
64+
"issue__issue_intake",
65+
queryset=IntakeIssue.objects.only(
66+
"source_email", "source", "extra"
67+
),
68+
to_attr="source_data",
69+
)
70+
)
71+
issue_activities = IssueActivitySerializer(issue_activities, many=True).data
6472
return Response(issue_activities, status=status.HTTP_200_OK)
6573

6674
if request.GET.get("activity_type", None) == "issue-comment":
75+
issue_comments = IssueCommentSerializer(issue_comments, many=True).data
6776
return Response(issue_comments, status=status.HTTP_200_OK)
6877

6978
result_list = sorted(

apiserver/plane/app/views/project/base.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ def list(self, request, slug):
177177
"module_view",
178178
"page_view",
179179
"inbox_view",
180+
"guest_view_all_features",
180181
"project_lead",
181182
"created_at",
182183
"updated_at",

apiserver/plane/app/views/view/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def retrieve(self, request, slug, pk):
117117
return Response(serializer.data, status=status.HTTP_200_OK)
118118

119119
@allow_permission(
120-
allowed_roles=[], level="WORKSPACE", creator=True, model=IssueView
120+
allowed_roles=[ROLE.ADMIN], level="WORKSPACE", creator=True, model=IssueView
121121
)
122122
def destroy(self, request, slug, pk):
123123
workspace_view = IssueView.objects.get(pk=pk, workspace__slug=slug)

apiserver/plane/app/views/workspace/favorite.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ def get(self, request, slug):
3434
def post(self, request, slug):
3535
try:
3636
workspace = Workspace.objects.get(slug=slug)
37+
38+
# If the favorite exists return
39+
if request.data.get("entity_identifier"):
40+
user_favorites = UserFavorite.objects.filter(
41+
workspace=workspace,
42+
user_id=request.user.id,
43+
entity_type=request.data.get("entity_type"),
44+
entity_identifier=request.data.get("entity_identifier"),
45+
).first()
46+
47+
# If the favorite exists return
48+
if user_favorites:
49+
serializer = UserFavoriteSerializer(user_favorites)
50+
return Response(serializer.data, status=status.HTTP_200_OK)
51+
52+
# else create a new favorite
3753
serializer = UserFavoriteSerializer(data=request.data)
3854
if serializer.is_valid():
3955
serializer.save(

apiserver/plane/celery.py

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,35 @@
1515
app.config_from_object("django.conf:settings", namespace="CELERY")
1616

1717
app.conf.beat_schedule = {
18-
# Executes every day at 12 AM
18+
# Intra day recurring jobs
19+
"check-every-five-minutes-to-send-email-notifications": {
20+
"task": "plane.bgtasks.email_notification_task.stack_email_notification",
21+
"schedule": crontab(minute="*/5"), # Every 5 minutes
22+
},
23+
"run-every-6-hours-for-instance-trace": {
24+
"task": "plane.license.bgtasks.tracer.instance_traces",
25+
"schedule": crontab(hour="*/6", minute=0), # Every 6 hours
26+
},
27+
# Occurs once every day
28+
"check-every-day-to-delete-hard-delete": {
29+
"task": "plane.bgtasks.deletion_task.hard_delete",
30+
"schedule": crontab(hour=0, minute=0), # UTC 00:00
31+
},
1932
"check-every-day-to-archive-and-close": {
2033
"task": "plane.bgtasks.issue_automation_task.archive_and_close_old_issues",
21-
"schedule": crontab(hour=0, minute=0),
34+
"schedule": crontab(hour=1, minute=0), # UTC 01:00
2235
},
2336
"check-every-day-to-delete_exporter_history": {
2437
"task": "plane.bgtasks.exporter_expired_task.delete_old_s3_link",
25-
"schedule": crontab(hour=0, minute=0),
38+
"schedule": crontab(hour=1, minute=30), # UTC 01:30
2639
},
2740
"check-every-day-to-delete-file-asset": {
2841
"task": "plane.bgtasks.file_asset_task.delete_unuploaded_file_asset",
29-
"schedule": crontab(hour=0, minute=0),
30-
},
31-
"check-every-five-minutes-to-send-email-notifications": {
32-
"task": "plane.bgtasks.email_notification_task.stack_email_notification",
33-
"schedule": crontab(minute="*/5"),
34-
},
35-
"check-every-day-to-delete-hard-delete": {
36-
"task": "plane.bgtasks.deletion_task.hard_delete",
37-
"schedule": crontab(hour=0, minute=0),
42+
"schedule": crontab(hour=2, minute=0), # UTC 02:00
3843
},
3944
"check-every-day-to-delete-api-logs": {
4045
"task": "plane.bgtasks.api_logs_task.delete_api_logs",
41-
"schedule": crontab(hour=0, minute=0),
42-
},
43-
"run-every-6-hours-for-instance-trace": {
44-
"task": "plane.license.bgtasks.tracer.instance_traces",
45-
"schedule": crontab(hour="*/6", minute=0),
46+
"schedule": crontab(hour=2, minute=30), # UTC 02:30
4647
},
4748
}
4849

live/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
{
22
"name": "live",
3-
"version": "0.25.2",
3+
"version": "0.25.3",
44
"license": "AGPL-3.0",
55
"description": "A realtime collaborative server powers Plane's rich text editor",
66
"main": "./src/server.ts",
77
"private": true,
88
"type": "module",
99
"scripts": {
10-
"dev": "concurrently \"babel src --out-dir dist --extensions '.ts,.js' --watch\" \"nodemon dist/server.js\"",
10+
"dev": "PORT=3100 concurrently \"babel src --out-dir dist --extensions '.ts,.js' --watch\" \"nodemon dist/server.js\"",
1111
"build": "babel src --out-dir dist --extensions \".ts,.js\"",
1212
"start": "node dist/server.js",
1313
"lint": "eslint src --ext .ts,.tsx",
@@ -27,7 +27,7 @@
2727
"@sentry/profiling-node": "^8.28.0",
2828
"@tiptap/core": "2.10.4",
2929
"@tiptap/html": "2.11.0",
30-
"axios": "^1.7.9",
30+
"axios": "^1.8.3",
3131
"compression": "^1.7.4",
3232
"cors": "^2.8.5",
3333
"dotenv": "^16.4.5",
@@ -59,7 +59,7 @@
5959
"concurrently": "^9.0.1",
6060
"nodemon": "^3.1.7",
6161
"ts-node": "^10.9.2",
62-
"tsup": "^7.2.0",
62+
"tsup": "^8.4.0",
6363
"typescript": "5.3.3"
6464
}
6565
}

0 commit comments

Comments
 (0)