Skip to content

Commit a3312e7

Browse files
authored
Version 0.59.0
- feat: allow drag and drop to upload files (#2115) - fix: typos in paper - fix: preview of files using the seaweedFS storage backend (#2128) - bugfixes and dependency updates
2 parents 1ca7ff2 + 399e75d commit a3312e7

94 files changed

Lines changed: 5352 additions & 2697 deletions

File tree

Some content is hidden

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

.github/workflows/build-sample-actions.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ jobs:
3636
uses: actions/checkout@v6
3737

3838
- name: Set up Docker Buildx
39-
uses: docker/setup-buildx-action@v3
39+
uses: docker/setup-buildx-action@v4
4040

4141
- name: Login to Docker Hub
42-
uses: docker/login-action@v3
42+
uses: docker/login-action@v4
4343
with:
4444
username: ${{ secrets.DOCKERHUB_USERNAME }}
4545
password: ${{ secrets.DOCKERHUB_TOKEN }}
@@ -63,7 +63,7 @@ jobs:
6363
fi
6464
6565
- name: Build and push
66-
uses: docker/build-push-action@v6
66+
uses: docker/build-push-action@v7
6767
with:
6868
context: examples/kleinkram-actions/${{ matrix.action }}
6969
push: true

.github/workflows/dev-build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
steps:
1313
- uses: actions/checkout@v6
1414
- name: Login to DockerHub
15-
uses: docker/login-action@v3
15+
uses: docker/login-action@v4
1616
with:
1717
username: ${{ secrets.DOCKERHUB_USERNAME }}
1818
password: ${{ secrets.DOCKERHUB_TOKEN }}

.github/workflows/draft-pdf.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
# This should be the path to the paper within your repo.
1919
paper-path: openjournals/paper.md
2020
- name: Upload
21-
uses: actions/upload-artifact@v6
21+
uses: actions/upload-artifact@v7
2222
with:
2323
name: paper
2424
# This is the output path where Pandoc will write the compiled

.github/workflows/production-build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
steps:
1313
- uses: actions/checkout@v6
1414
- name: Login to DockerHub
15-
uses: docker/login-action@v3
15+
uses: docker/login-action@v4
1616
with:
1717
username: ${{ secrets.DOCKERHUB_USERNAME }}
1818
password: ${{ secrets.DOCKERHUB_TOKEN }}

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,16 @@ The <code>--build</code> flag ensures that the Docker images are built before st
3838
> [!WARNING]
3939
> If you have run Kleinkram locally before, you should consider deleting all existing data. See the <a href="https://docs.datasets.leggedrobotics.com/development/try-locally">Try Kleinkram Locally</a> documentation for more details.
4040
41+
> [!TIP]
42+
> **Troubleshooting missing modules / API not reachable on localhost:3000**
43+
> If logs contain `Cannot find module ...`, recreate app `node_modules` volumes and rebuild:
44+
>
45+
> ```bash
46+
> docker compose rm -sf api-server queue-consumer frontend docs \
47+
> && docker volume rm kleinkram_backend_node_modules kleinkram_frontend_node_modules kleinkram_queue_consumer_node_modules kleinkram_node_modules \
48+
> && docker compose up -d --build api-server queue-consumer frontend docs
49+
> ```
50+
4151
3. **Access the application**
4252
4353
You can now access the frontend at `http://localhost:8003`.

backend/migration/migrations/1769509296006-ignore-soft-deleted-while-checking-name-constraints.ts

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,58 @@ export class IgnoreSoftDeletedWhileCheckingNameConstraints1769509296006 implemen
55

66
public async up(queryRunner: QueryRunner): Promise<void> {
77
await queryRunner.query(
8-
`ALTER TABLE "mission" DROP CONSTRAINT "FK_6d71c0142267fbeaba6cae0e5db"`,
8+
`ALTER TABLE "mission" DROP CONSTRAINT IF EXISTS "FK_6d71c0142267fbeaba6cae0e5db"`,
99
);
1010
await queryRunner.query(
11-
`ALTER TABLE "file_entity" DROP CONSTRAINT "unique_file_name_per_mission"`,
11+
`ALTER TABLE "file_entity" DROP CONSTRAINT IF EXISTS "unique_file_name_per_mission"`,
1212
);
1313
await queryRunner.query(
14-
`ALTER TABLE "category" DROP CONSTRAINT "unique_category_name_per_project"`,
14+
`DROP INDEX IF EXISTS "unique_file_name_per_mission"`,
1515
);
1616
await queryRunner.query(
17-
`ALTER TABLE "mission" DROP CONSTRAINT "unique_mission_name_per_project"`,
17+
`ALTER TABLE "category" DROP CONSTRAINT IF EXISTS "unique_category_name_per_project"`,
1818
);
1919
await queryRunner.query(
20-
`ALTER TABLE "action_template" DROP CONSTRAINT "unique_versioned_action_name"`,
20+
`DROP INDEX IF EXISTS "unique_category_name_per_project"`,
2121
);
2222
await queryRunner.query(
23-
`ALTER TABLE "project" DROP CONSTRAINT "UQ_dedfea394088ed136ddadeee89c"`,
23+
`ALTER TABLE "mission" DROP CONSTRAINT IF EXISTS "unique_mission_name_per_project"`,
2424
);
2525
await queryRunner.query(
26-
`ALTER TABLE "access_group" DROP CONSTRAINT "unique_access_group_name"`,
26+
`DROP INDEX IF EXISTS "unique_mission_name_per_project"`,
2727
);
2828
await queryRunner.query(
29-
`ALTER TABLE "apikey" DROP CONSTRAINT "UQ_e1a6e9c0229f80fc2604aa3dc61"`,
29+
`ALTER TABLE "action_template" DROP CONSTRAINT IF EXISTS "unique_versioned_action_name"`,
3030
);
3131
await queryRunner.query(
32-
`ALTER TABLE "worker" DROP CONSTRAINT "UQ_187e709b9ca210ebafd74e59746"`,
32+
`DROP INDEX IF EXISTS "unique_versioned_action_name"`,
3333
);
34+
await queryRunner.query(
35+
`ALTER TABLE "project" DROP CONSTRAINT IF EXISTS "UQ_dedfea394088ed136ddadeee89c"`,
36+
);
37+
// Assuming earlier it was named unique_project_name_active or something else, but dropping the constraint name
38+
await queryRunner.query(
39+
`DROP INDEX IF EXISTS "UQ_dedfea394088ed136ddadeee89c"`,
40+
);
41+
await queryRunner.query(
42+
`ALTER TABLE "access_group" DROP CONSTRAINT IF EXISTS "unique_access_group_name"`,
43+
);
44+
await queryRunner.query(
45+
`DROP INDEX IF EXISTS "unique_access_group_name"`,
46+
);
47+
await queryRunner.query(
48+
`ALTER TABLE "apikey" DROP CONSTRAINT IF EXISTS "UQ_e1a6e9c0229f80fc2604aa3dc61"`,
49+
);
50+
await queryRunner.query(
51+
`DROP INDEX IF EXISTS "UQ_e1a6e9c0229f80fc2604aa3dc61"`,
52+
);
53+
await queryRunner.query(
54+
`ALTER TABLE "worker" DROP CONSTRAINT IF EXISTS "UQ_187e709b9ca210ebafd74e59746"`,
55+
);
56+
await queryRunner.query(
57+
`DROP INDEX IF EXISTS "UQ_187e709b9ca210ebafd74e59746"`,
58+
);
59+
3460
await queryRunner.query(
3561
`CREATE UNIQUE INDEX "unique_file_name_per_mission" ON "file_entity" ("filename", "missionUuid") WHERE "deletedAt" IS NULL`,
3662
);
@@ -62,29 +88,31 @@ export class IgnoreSoftDeletedWhileCheckingNameConstraints1769509296006 implemen
6288

6389
public async down(queryRunner: QueryRunner): Promise<void> {
6490
await queryRunner.query(
65-
`ALTER TABLE "mission" DROP CONSTRAINT "FK_6d71c0142267fbeaba6cae0e5db"`,
91+
`ALTER TABLE "mission" DROP CONSTRAINT IF EXISTS "FK_6d71c0142267fbeaba6cae0e5db"`,
92+
);
93+
await queryRunner.query(
94+
`DROP INDEX IF EXISTS "public"."unique_worker_identifier_active"`,
6695
);
6796
await queryRunner.query(
68-
`DROP INDEX "public"."unique_worker_identifier_active"`,
97+
`DROP INDEX IF EXISTS "public"."unique_versioned_action_name"`,
6998
);
7099
await queryRunner.query(
71-
`DROP INDEX "public"."unique_versioned_action_name"`,
100+
`DROP INDEX IF EXISTS "public"."unique_apikey_active"`,
72101
);
73-
await queryRunner.query(`DROP INDEX "public"."unique_apikey_active"`);
74102
await queryRunner.query(
75-
`DROP INDEX "public"."unique_mission_name_per_project"`,
103+
`DROP INDEX IF EXISTS "public"."unique_mission_name_per_project"`,
76104
);
77105
await queryRunner.query(
78-
`DROP INDEX "public"."unique_access_group_name"`,
106+
`DROP INDEX IF EXISTS "public"."unique_access_group_name"`,
79107
);
80108
await queryRunner.query(
81-
`DROP INDEX "public"."unique_project_name_active"`,
109+
`DROP INDEX IF EXISTS "public"."unique_project_name_active"`,
82110
);
83111
await queryRunner.query(
84-
`DROP INDEX "public"."unique_category_name_per_project"`,
112+
`DROP INDEX IF EXISTS "public"."unique_category_name_per_project"`,
85113
);
86114
await queryRunner.query(
87-
`DROP INDEX "public"."unique_file_name_per_mission"`,
115+
`DROP INDEX IF EXISTS "public"."unique_file_name_per_mission"`,
88116
);
89117
await queryRunner.query(
90118
`ALTER TABLE "worker" ADD CONSTRAINT "UQ_187e709b9ca210ebafd74e59746" UNIQUE ("identifier")`,

backend/package.json

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "kleinkram-backend",
3-
"version": "0.58.0",
3+
"version": "0.59.0",
44
"description": "",
55
"author": "",
66
"license": "MIT",
@@ -21,7 +21,7 @@
2121
"gen:docs": "node -r ts-node/register -r tsconfig-paths/register ./scripts/generate-openapi.ts"
2222
},
2323
"dependencies": {
24-
"@aws-sdk/client-sts": "3.939.0",
24+
"@aws-sdk/client-sts": "3.1005.0",
2525
"@kleinkram/api-dto": "workspace:*",
2626
"@kleinkram/backend-common": "workspace:*",
2727
"@kleinkram/shared": "workspace:*",
@@ -33,27 +33,27 @@
3333
"@nestjs/jwt": "^11.0.2",
3434
"@nestjs/mapped-types": "^2.1.0",
3535
"@nestjs/passport": "^11.0.5",
36-
"@nestjs/platform-express": "^11.1.9",
37-
"@nestjs/schedule": "^6.1.0",
38-
"@nestjs/swagger": "^11.2.3",
36+
"@nestjs/platform-express": "^11.1.12",
37+
"@nestjs/schedule": "^6.1.1",
38+
"@nestjs/swagger": "^11.2.5",
3939
"@nestjs/throttler": "^6.5.0",
4040
"@nestjs/typeorm": "^11.0.0",
4141
"@opentelemetry/api": "^1.9.0",
42-
"@opentelemetry/exporter-prometheus": "^0.209.0",
43-
"@opentelemetry/exporter-trace-otlp-http": "^0.209.0",
44-
"@opentelemetry/instrumentation-express": "^0.57.1",
45-
"@opentelemetry/instrumentation-fetch": "^0.209.0",
46-
"@opentelemetry/instrumentation-http": "^0.209.0",
47-
"@opentelemetry/instrumentation-nestjs-core": "^0.55.0",
48-
"@opentelemetry/instrumentation-pg": "^0.61.2",
49-
"@opentelemetry/instrumentation-winston": "^0.53.0",
50-
"@opentelemetry/sdk-node": "^0.209.0",
51-
"@opentelemetry/sdk-trace-base": "^2.0.0",
42+
"@opentelemetry/exporter-prometheus": "^0.213.0",
43+
"@opentelemetry/exporter-trace-otlp-http": "^0.213.0",
44+
"@opentelemetry/instrumentation-express": "^0.61.0",
45+
"@opentelemetry/instrumentation-fetch": "^0.213.0",
46+
"@opentelemetry/instrumentation-http": "^0.213.0",
47+
"@opentelemetry/instrumentation-nestjs-core": "^0.59.0",
48+
"@opentelemetry/instrumentation-pg": "^0.65.0",
49+
"@opentelemetry/instrumentation-winston": "^0.57.0",
50+
"@opentelemetry/sdk-node": "^0.213.0",
51+
"@opentelemetry/sdk-trace-base": "^2.5.0",
5252
"@willsoto/nestjs-prometheus": "^6.0.2",
5353
"axios": "^1.13.2",
5454
"bull": "^4.12.2",
5555
"class-transformer": "^0.5.1",
56-
"class-validator": "^0.14.2",
56+
"class-validator": "^0.15.1",
5757
"cookie-parser": "^1.4.6",
5858
"date-fns": "^4.1.0",
5959
"dotenv": "^17.2.3",
@@ -119,9 +119,9 @@
119119
"ts-node": "^10.9.1",
120120
"tsconfig-paths": "^4.2.0",
121121
"typescript": "5.9.3",
122-
"vue": "^3.5.25",
122+
"vue": "^3.5.27",
123123
"vue-json-pretty": "^2.6.0",
124-
"webpack": "5.104.1",
124+
"webpack": "5.105.4",
125125
"webpack-node-externals": "^3.0.0"
126126
}
127127
}

backend/src/app.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { PrometheusModule } from '@willsoto/nestjs-prometheus';
1111
import { PostgresConnectionOptions } from 'typeorm/driver/postgres/PostgresConnectionOptions';
1212
import accessConfig from './access_config.json';
1313
import { appVersion } from './app-version';
14+
import { AccessModule } from './endpoints/access/access.module';
1415
import { ActionModule } from './endpoints/action/action.module';
1516
import { AuthModule } from './endpoints/auth/auth.module';
1617
import { CategoryModule } from './endpoints/category/category.module';
@@ -79,6 +80,7 @@ import { DBDumper } from './services/dbdumper.service';
7980
TriggerModule,
8081
UserModule,
8182
AuthModule,
83+
AccessModule,
8284
PassportModule,
8385
ActionModule,
8486
TemplatesModule,

0 commit comments

Comments
 (0)