Skip to content

Commit

Permalink
Merge pull request #8362 from cvat-ai/release-2.17.0
Browse files Browse the repository at this point in the history
Release v2.17.0
  • Loading branch information
cvat-bot[bot] committed Aug 27, 2024
2 parents 8323104 + 4d8621a commit 148e607
Show file tree
Hide file tree
Showing 117 changed files with 3,514 additions and 1,047 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ jobs:
while [[ $(curl -s -o /dev/null -w "%{http_code}" localhost:8181/health?bundles) != "200" && max_tries -gt 0 ]]; do (( max_tries-- )); sleep 5; done
docker compose -f docker-compose.yml -f docker-compose.dev.yml -f docker-compose.ci.yml run cvat_ci /bin/bash \
-c 'coverage run -a manage.py test cvat/apps && coverage json && mv coverage.json ${CONTAINER_COVERAGE_DATA_DIR}/unit_tests_coverage.json'
-c 'coverage run -a manage.py test -v 2 cvat/apps && coverage json && mv coverage.json ${CONTAINER_COVERAGE_DATA_DIR}/unit_tests_coverage.json'
docker compose -f docker-compose.yml -f docker-compose.dev.yml -f docker-compose.ci.yml run cvat_ci /bin/bash \
-c 'DISABLE_HUSKY=1 yarn --frozen-lockfile && yarn workspace cvat-core run test && mv cvat-core/reports/coverage/coverage-final.json ${CONTAINER_COVERAGE_DATA_DIR}'
Expand Down
52 changes: 52 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

<!-- scriv-insert-here -->

<a id='changelog-2.17.0'></a>
## \[2.17.0\] - 2024-08-27

### Added

- Added support for YOLOv8 formats
(<https://github.com/cvat-ai/cvat/pull/8240>)

- Last assignee update date in quality reports, new options in quality settings
(<https://github.com/cvat-ai/cvat/pull/8321>)

### Changed

- User sessions now expire after two weeks of inactivity
(<https://github.com/cvat-ai/cvat/pull/8289>)

- A user changing their password will now invalidate all of their sessions
except for the current one
(<https://github.com/cvat-ai/cvat/pull/8289>)

### Deprecated

- Client events `upload:annotations`, `lock:object`, `change:attribute`, `change:label`
(<https://github.com/cvat-ai/cvat/pull/8304>)

### Removed

- Client event `restore:job` (<https://github.com/cvat-ai/cvat/pull/8304>)

- Removed the `/auth/login-with-token` page
(<https://github.com/cvat-ai/cvat/pull/8336>)

### Fixed

- Go back button behavior on analytics page
(<https://github.com/cvat-ai/cvat/pull/8277>)

- Logging out of one session will no longer log the user out of all their
other sessions
(<https://github.com/cvat-ai/cvat/pull/8289>)

- Prevent export process from restarting when downloading a result file,
that resulted in downloading a file with new request ID
(<https://github.com/cvat-ai/cvat/pull/8216>)
- Race condition occurred while handling parallel export requests
(<https://github.com/cvat-ai/cvat/pull/8216>)
- Requests filtering using format and target filters
(<https://github.com/cvat-ai/cvat/pull/8216>)

- Sometimes it is not possible to switch workspace because active control broken after
trying to create a tag with a shortcut (<https://github.com/cvat-ai/cvat/pull/8334>)

<a id='changelog-2.16.3'></a>
## \[2.16.3\] - 2024-08-13

Expand Down
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
ARG PIP_VERSION=24.0
ARG BASE_IMAGE=ubuntu:22.04

FROM ${BASE_IMAGE} as build-image-base
FROM ${BASE_IMAGE} AS build-image-base

RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends install -yq \
Expand Down Expand Up @@ -84,7 +84,7 @@ RUN --mount=type=cache,target=/root/.cache/pip/http-v2 \
-r /tmp/cvat/requirements/${CVAT_CONFIGURATION}.txt \
-w /tmp/wheelhouse

FROM golang:1.22.4 AS build-smokescreen
FROM golang:1.23.0 AS build-smokescreen

RUN git clone --filter=blob:none --no-checkout https://github.com/stripe/smokescreen.git
RUN cd smokescreen && git checkout eb1ac09 && go build -o /tmp/smokescreen
Expand Down
3 changes: 2 additions & 1 deletion Dockerfile.ui
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ DISABLE_SOURCE_MAPS="${DISABLE_SOURCE_MAPS}" \
UI_APP_CONFIG="${UI_APP_CONFIG}" \
SOURCE_MAPS_TOKEN="${SOURCE_MAPS_TOKEN}" yarn run build:cvat-ui

FROM nginx:1.25.4-alpine3.18
FROM nginx:1.26.1-alpine3.19-slim

# Replace default.conf configuration to remove unnecessary rules
COPY cvat-ui/react_nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=cvat-ui /tmp/cvat-ui/dist /usr/share/nginx/html/
4 changes: 2 additions & 2 deletions cvat-canvas/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,9 @@ Standard JS events are used.
- canvas.reshape
- canvas.fit
- canvas.regionselected => {points: number[]}
- canvas.dragshape => {id: number}
- canvas.dragshape => {duration: number, state: ObjectState}
- canvas.roiselected => {points: number[]}
- canvas.resizeshape => {id: number}
- canvas.resizeshape => {duration: number, state: ObjectState}
- canvas.contextmenu => { mouseEvent: MouseEvent, objectState: ObjectState, pointID: number }
- canvas.message => { messages: { type: 'text' | 'list'; content: string | string[]; className?: string; icon?: 'info' | 'loading' }[] | null, topic: string }
- canvas.error => { exception: Error, domain?: string }
Expand Down
2 changes: 1 addition & 1 deletion cvat-canvas/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cvat-canvas",
"version": "2.20.8",
"version": "2.20.9",
"type": "module",
"description": "Part of Computer Vision Annotation Tool which presents its canvas library",
"main": "src/canvas.ts",
Expand Down
10 changes: 8 additions & 2 deletions cvat-canvas/src/typescript/canvasView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1074,6 +1074,7 @@ export class CanvasViewImpl implements CanvasView, Listener {
}

if (state) {
let start = Date.now();
let aborted = false;
let skeletonSVGTemplate: SVG.G = null;
shape.addClass('cvat_canvas_shape_draggable');
Expand All @@ -1084,6 +1085,7 @@ export class CanvasViewImpl implements CanvasView, Listener {
draggableInstance.on('dragstart', (): void => {
onDragStart();
this.draggableShape = shape;
start = Date.now();
}).on('dragmove', (e: CustomEvent): void => {
onDragMove();
if (state.shapeType === 'skeleton' && e.target) {
Expand Down Expand Up @@ -1159,7 +1161,8 @@ export class CanvasViewImpl implements CanvasView, Listener {
bubbles: false,
cancelable: true,
detail: {
id: state.clientID,
state,
duration: Date.now() - start,
},
}),
);
Expand Down Expand Up @@ -1243,6 +1246,7 @@ export class CanvasViewImpl implements CanvasView, Listener {
if (state) {
let resized = false;
let aborted = false;
let start = Date.now();

(resizableInstance as any)
.resize({
Expand All @@ -1252,6 +1256,7 @@ export class CanvasViewImpl implements CanvasView, Listener {
.on('resizestart', (): void => {
onResizeStart();
resized = false;
start = Date.now();
this.resizableShape = shape;
})
.on('resizing', (e: CustomEvent): void => {
Expand Down Expand Up @@ -1344,7 +1349,8 @@ export class CanvasViewImpl implements CanvasView, Listener {
bubbles: false,
cancelable: true,
detail: {
id: state.clientID,
state,
duration: Date.now() - start,
},
}),
);
Expand Down
2 changes: 1 addition & 1 deletion cvat-cli/requirements/base.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
cvat-sdk~=2.16.3
cvat-sdk~=2.17.0
Pillow>=10.3.0
setuptools>=70.0.0 # not directly required, pinned by Snyk to avoid a vulnerability
2 changes: 1 addition & 1 deletion cvat-cli/src/cvat_cli/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
VERSION = "2.16.3"
VERSION = "2.17.0"
2 changes: 1 addition & 1 deletion cvat-core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cvat-core",
"version": "15.1.1",
"version": "15.1.2",
"type": "module",
"description": "Part of Computer Vision Tool which presents an interface for client-side integration",
"main": "src/api.ts",
Expand Down
4 changes: 0 additions & 4 deletions cvat-core/src/api-implementation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,10 +137,6 @@ export default function implementAPI(cvat: CVATCore): CVATCore {
const result = await serverProxy.server.setAuthData(response);
return result;
});
implementationMixin(cvat.server.removeAuthData, async () => {
const result = await serverProxy.server.removeAuthData();
return result;
});
implementationMixin(cvat.server.installedApps, async () => {
const result = await serverProxy.server.installedApps();
return result;
Expand Down
4 changes: 0 additions & 4 deletions cvat-core/src/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,10 +122,6 @@ function build(): CVATCore {
const result = await PluginRegistry.apiWrapper(cvat.server.setAuthData, response);
return result;
},
async removeAuthData() {
const result = await PluginRegistry.apiWrapper(cvat.server.removeAuthData);
return result;
},
async installedApps() {
const result = await PluginRegistry.apiWrapper(cvat.server.installedApps);
return result;
Expand Down
87 changes: 87 additions & 0 deletions cvat-core/src/axios-tus.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
// Copyright (C) 2024 CVAT.ai Corporation
//
// SPDX-License-Identifier: MIT

import Axios, { AxiosRequestConfig, AxiosResponse } from 'axios';
import * as tus from 'tus-js-client';

class AxiosHttpResponse implements tus.HttpResponse {
readonly #axiosResponse: AxiosResponse;

constructor(axiosResponse: AxiosResponse) {
this.#axiosResponse = axiosResponse;
}

getStatus(): number {
return this.#axiosResponse.status;
}
getHeader(header: string): string | undefined {
return this.#axiosResponse.headers[header.toLowerCase()];
}
getBody(): string {
return this.#axiosResponse.data;
}
getUnderlyingObject(): AxiosResponse {
return this.#axiosResponse;
}
}

class AxiosHttpRequest implements tus.HttpRequest {
readonly #axiosConfig: AxiosRequestConfig;
readonly #abortController: AbortController;

constructor(method: string, url: string) {
this.#abortController = new AbortController();
this.#axiosConfig = {
method,
url,
headers: {},
signal: this.#abortController.signal,
validateStatus: () => true,
};
}

getMethod(): string {
return this.#axiosConfig.method;
}
getURL(): string {
return this.#axiosConfig.url;
}

setHeader(header: string, value: string): void {
this.#axiosConfig.headers[header.toLowerCase()] = value;
}
getHeader(header: string): string | undefined {
return this.#axiosConfig.headers[header.toLowerCase()];
}

setProgressHandler(handler: (bytesSent: number) => void): void {
this.#axiosConfig.onUploadProgress = (progressEvent) => {
handler(progressEvent.loaded);
};
}

async send(body: any): Promise<tus.HttpResponse> {
const axiosResponse = await Axios({ ...this.#axiosConfig, data: body });
return new AxiosHttpResponse(axiosResponse);
}

async abort(): Promise<void> {
this.#abortController.abort();
}

getUnderlyingObject(): AxiosRequestConfig {
return this.#axiosConfig;
}
}

class AxiosHttpStack implements tus.HttpStack {
createRequest(method: string, url: string): tus.HttpRequest {
return new AxiosHttpRequest(method, url);
}
getName(): string {
return 'AxiosHttpStack';
}
}

export const axiosTusHttpStack = new AxiosHttpStack();
7 changes: 1 addition & 6 deletions cvat-core/src/enums.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,9 @@ export enum EventScope {
loadTool = 'load:cvat',

loadJob = 'load:job',
loadWorkspace = 'load:workspace',
saveJob = 'save:job',
restoreJob = 'restore:job',
uploadAnnotations = 'upload:annotations',
exception = 'send:exception',
sendTaskInfo = 'send:task_info',

drawObject = 'draw:object',
pasteObject = 'paste:object',
Expand All @@ -107,14 +105,11 @@ export enum EventScope {
dragObject = 'drag:object',
resizeObject = 'resize:object',
deleteObject = 'delete:object',
lockObject = 'lock:object',
mergeObjects = 'merge:objects',
splitObjects = 'split:objects',
groupObjects = 'group:objects',
sliceObject = 'slice:object',
joinObjects = 'join:objects',
changeAttribute = 'change:attribute',
changeLabel = 'change:label',

changeFrame = 'change:frame',
zoomImage = 'zoom:image',
Expand Down
1 change: 0 additions & 1 deletion cvat-core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ export default interface CVATCore {
healthCheck: any;
request: any;
setAuthData: any;
removeAuthData: any;
installedApps: any;
apiSchema: typeof serverProxy.server.apiSchema;
};
Expand Down
Loading

0 comments on commit 148e607

Please sign in to comment.