Unverified Commit 95862f92 authored by Evgeny Stepanovych's avatar Evgeny Stepanovych Committed by GitHub
Browse files

NAS-117704 / 22.12 / NAS-117704: Enforce linting rules in CI (#6984)

parent 02333adb
base DOCS NAS-010101 NAS-110800 NAS-111962-master NAS-116715-v2 NAS-117028-22.12-BETA.2 NAS-117239 NAS-117481-test NAS-117573-v2 NAS-117688-bluefin NAS-117714 NAS-117718 NAS-117734 NAS-117768 NAS-117813 NAS-117823 NAS-117841-2 NAS-117846 NAS-117959 NAS-118036 NAS-118044 NAS-118113 NAS-118165 NAS-118303 NAS-118454-22.12 NAS-118505-22.12 NAS-118545 NAS-118548 NAS-119131 NAS-119140 NAS-119180-22.12.1 NAS-119431 NAS-119556-23.10 NAS-119615-22.12.1 NAS-119668 NAS-119695 NAS-119749-bluefin NAS-119750-22.12.1 NAS-119806 NAS-119812 NAS-119886-22.12.1 NAS-119996 NAS-119996-bluefin NAS-120045 NAS-120047 NAS-120057 NAS-120173-22.12.1 NAS-120181-22.12.1 NAS-120264-22.12.1 NAS-120274 NAS-120296-22.12.1 NAS-120326-22.12.1 NAS-120490_ NAS-120503 NAS-121006-22.12.2 NAS-121124 NAS-121128-22.12.2 NAS-121128-release-22.12.2 NAS-121136 NAS-121177 NAS-121218-22.12.3 NAS-121300 NAS-121316 NAS-121541 NAS-121542 NAS-121686 NAS-121721-22.12.3 NAS-121778 NAS-121827 NAS-121884-22.12.3 NAS-122267-22.12.4 NAS-122372 NAS-122601 NAS-122686 NAS-122706 NAS-122721 NAS-122751-23.10-BETA.1 NAS-122759 NAS-122781 NAS-122794-23.10 NAS-122855 NAS-122870-bluefin NAS-122969 NAS-122993-22.12.4 NAS-123055-22.12.4 NAS-123278 NAS-123295 NAS-123437 NAS-123478-22.12.4 NAS-123484 NAS-123492 NAS-123526-22.12.4 NAS-123651 NAS-123651-23.10-BETA.1 NAS-123666 NAS-123723 NAS-123723-cobia NAS-123762 NAS-123762-23.10 NAS-123778-23.10 NAS-123778-23.10-RC.1 NAS-123778-RC.1 NAS-123801 NAS-123810-23.10 NAS-123813-22.12.4 NAS-123836 NAS-123836-23.10-BETA.1 NAS-123836-24.04 NAS-123861 NAS-123911-23.10-BETA.1 NAS-123928-23.10 NAS-123931-22.12.4 NAS-123945 NAS-124044 NAS-124077 NAS-124131-23.10 NAS-124137 NAS-124183 NAS-124231 NAS-124232 NAS-124237-23.10 NAS-124325-23.10.0 NAS-124335 NAS-124354 NAS-124430 NAS-124454 NAS-124481-23.10.0 NAS-124481-23.10.1 NAS-124555-23.10.0 NAS-124555-23.10.1 NAS-124666 NAS-124707-23.10.0 NAS-124707-23.10.1 NAS-124716 NAS-124846-23.10.0 NAS-124846-23.10.1 NAS-124892 NAS-124895-23.10.1 NAS-124908 NAS-124951 NAS-124964 NAS-124999 NAS-125092 NAS-125213-23.10.1 NAS-125307 NAS-125532 NAS-125568 NAS-125607-validator NAS-125616-23.10.2 NAS-125654 NAS-125703-23.10.2 NAS-125728 NAS-125931 NAS-126699 NAS-126774-24.04-RC.1 NAS-126774-dragonfish NAS-126795 NAS-126795-test NAS-126795-test2 NAS-127001 NAS-127002-24.04-RC.1 NAS-127022 NAS-127041-24.04-BETA.1 NAS-127049-24.04-RC.1 NAS-127297-24.04-RC.1 NAS-127297-24.10 NAS-127369 NAS-127551 NAS-127551-alt NAS-127589-24.04.0 NAS-127593 NAS-127615-24.04.0 NAS-127660 NAS-127794 NAS-127829-24.10 NAS-127854-24.04.0 NAS-128030 NAS-128045 NAS-128071 NAS-128173 NAS-128209 NAS-128287 NAS-128289 TE-1553-dragonfish TE-1628 auto-129 bugfix/NAS-117859-sidebar-menu-fix bugfix/NAS-117941-error-when-removing-pools-and-visit-datasets bugfix/NAS-118171-rsynk-task-local-path bugfix/NAS-118260-boot-env-keep-table-row bugfix/NAS-118282-search-input-fixes bugfix/NAS-118404-dataset-icon-role-double-toooltip bugfix/NAS-118414-warning-modal-icon bugfix/NAS-118415-tree-select-undefined bugfix/NAS-118454-acl-manager-after-dataset-creation-fix bugfix/NAS-118470-multiselext-styles-are-broken bugfix/NAS-118503-datasets-glitch-fix bugfix/NAS-118504-redirect-to-correct-dataset-after-permissions-submit bugfix/NAS-118510-redirect-url-fix-after-manual-change bugfix/NAS-118530-advanced-settings-box-duplicates bugfix/NAS-118541-progress-bar-oberflows bugfix/NAS-118557-replication-task-forbid-custom-retention-policy-cases bugfix/NAS-118600-smb-share-redirect bugfix/NAS-118601-remove-mixed-for-zfs-datasets dataset-tree-tooltips developer/lyy feature/NAS-117754-font-rendering feature/NAS-117968-tooltips-to-status-icons-on-pools feature/NAS-118058-improve-dashboard-icons-sync-pool-and-storage feature/NAS-118147-html-refactoring feature/NAS-118269-improve-ui feature/NAS-118303 feature/NAS-118333-storage-dashboard-icons-update feature/NAS-118334-screentype-enum feature/NAS-118335-improve-spinners-look feature/NAS-118349-datasets-long-names feature/NAS-118360-handle-clipboard-api-not-available feature/NAS-118412-pool-processing-modal feature/NAS-118466-root-path-mnt feature/NAS-118543-user-password-field feauture/NAS-117474-datasets-table-header-sticky llll master metrics-enable patch-1 patch-235 rel-v0.0.1 release/22.12 release/22.12-BETA.1 release/22.12-BETA.2 release/22.12-RC.1 release/22.12.1 release/22.12.2 release/22.12.3 release/22.12.4 release/23.10-BETA.1 release/23.10-RC.1 release/23.10.0 release/23.10.1 release/23.10.1.1 release/23.10.1.2 release/23.10.1.3 release/23.10.2 release/24.04-BETA.1 release/24.04-RC.1 release/24.04.0 renediepenbroek/master revert-7745-NAS-120274 stable/bluefin stable/cobia stable/dragonfish test-xxxyyy testing-refine-branchout-process testing-refine-branchout-process2 v0.0.2 TS-24.04-RC.1 TS-24.04-BETA.1 TS-23.10.2 TS-23.10.1.3 TS-23.10.1.2 TS-23.10.1.1 TS-23.10.1 TS-23.10.0.1 TS-23.10.0 TS-23.10-RC.1 TS-23.10-BETA.1 TS-22.12.4.2 TS-22.12.4.1 TS-22.12.4 TS-22.12.3.3 TS-22.12.3.2 TS-22.12.3.1 TS-22.12.3 TS-22.12.2 TS-22.12.1 TS-22.12.0 TS-22.12-RC.1 TS-22.12-BETA.2 TS-22.12-BETA.1 TS-12.12.3 DN110M-CS-v2.0
No related merge requests found
Showing with 113 additions and 55 deletions
+113 -55
name: 'Prepare: Checkout and Install'
description: 'Prepares the repo for a job by checking out and installing dependencies'
runs:
using: 'composite'
steps:
- name: Setup Node
uses: actions/setup-node@v3
with:
node-version: '16'
cache: 'yarn'
- name: Install packages
shell: bash
run: yarn install --frozen-lockfile
name: CI
name: WebUI
on:
push:
branches:
- main
pull_request:
types: [synchronize]
branches:
- '**'
jobs:
install:
name: Checkout and Install
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install
uses: ./.github/actions/prepare
build:
name: Build and Test
name: Build
needs: [install]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16'
cache: 'yarn'
- run: yarn install --frozen-lockfile
- run: yarn run extract # Extracts messages again to make sure they are not broken
- run: yarn build:prod:aot
- run: yarn test:pr
- uses: codecov/codecov-action@v3
- name: Checkout
uses: actions/checkout@v3
- name: Install
uses: ./.github/actions/prepare
- name: Build
run: yarn build:prod:aot
lint:
name: Validate code style
needs: [install]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install
uses: ./.github/actions/prepare
- name: Build
run: yarn lint
lint-translations:
name: Validate translation strings
needs: [install]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install
uses: ./.github/actions/prepare
- name: Build
run: yarn run extract
test:
name: Run tests
needs: [install]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install
uses: ./.github/actions/prepare
- name: Run tests
run: yarn test:pr
- name: Upload coverage to codecov
uses: codecov/codecov-action@v3
with:
name: webui
fail_ci_if_error: true
import { Component } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { MatDialog } from '@angular/material/dialog';
import { ActivatedRoute } from '@angular/router';
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
import { TranslateService } from '@ngx-translate/core';
import { JobState } from 'app/enums/job-state.enum';
......@@ -78,7 +78,7 @@ export class CloudsyncListComponent implements EntityTableConfig<CloudSyncTaskUi
},
};
private dataset: string = '';
private dataset = '';
constructor(
protected ws: WebSocketService,
......@@ -101,12 +101,11 @@ export class CloudsyncListComponent implements EntityTableConfig<CloudSyncTaskUi
});
}
resourceTransformIncomingRestData(data: CloudSyncTask[]): CloudSyncTaskUi[] {
const _data = data.filter((cloud) =>
cloud.path.replace('/mnt/', '') === this.dataset ||
cloud.path.includes(`${this.dataset}/`)
);
return _data.map((task) => {
resourceTransformIncomingRestData(tasks: CloudSyncTask[]): CloudSyncTaskUi[] {
const tasksToShow = tasks.filter((cloud) => {
return cloud.path.replace('/mnt/', '') === this.dataset || cloud.path.includes(`${this.dataset}/`);
});
return tasksToShow.map((task) => {
const transformed = { ...task } as CloudSyncTaskUi;
const formattedCronSchedule = `${task.schedule.minute} ${task.schedule.hour} ${task.schedule.dom} ${task.schedule.month} ${task.schedule.dow}`;
transformed.credential = task.credentials.name;
......
......@@ -55,7 +55,7 @@ export const dataProtectionRoutes: Routes = [{
component: SnapshotListComponent,
data: { title: 'Periodic Snapshot Tasks', breadcrumb: 'Periodic Snapshot Tasks' },
}],
},{
}, {
path: 'replication',
data: { title: 'Replication Tasks', breadcrumb: 'Replication Tasks', icon: 'event_note' },
children: [{
......@@ -87,7 +87,7 @@ export const dataProtectionRoutes: Routes = [{
path: '',
component: RsyncTaskListComponent,
data: { title: 'Rsync Tasks', breadcrumb: 'Rsync Tasks' },
},{
}, {
path: ':dataset',
component: RsyncTaskListComponent,
data: { title: 'Rsync Tasks', breadcrumb: 'Rsync Tasks' },
......
import { DatePipe } from '@angular/common';
import { Component } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { MatDialog } from '@angular/material/dialog';
import { ActivatedRoute } from '@angular/router';
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
import { TranslateService } from '@ngx-translate/core';
import { filter } from 'rxjs/operators';
......@@ -79,7 +79,7 @@ export class ReplicationListComponent implements EntityTableConfig {
},
};
private dataset: string = '';
private dataset = '';
constructor(
private ws: WebSocketService,
......@@ -102,12 +102,10 @@ export class ReplicationListComponent implements EntityTableConfig {
}
resourceTransformIncomingRestData(tasks: ReplicationTask[]): ReplicationTaskUi[] {
const _tasks = tasks.filter((task) =>
task.target_dataset === this.dataset ||
task.source_datasets.includes(this.dataset) ||
task.name.includes(`${this.dataset}/`)
);
return _tasks.map((task) => {
const tasksToShow = tasks.filter((task) => task.target_dataset === this.dataset
|| task.source_datasets.includes(this.dataset)
|| task.name.includes(`${this.dataset}/`));
return tasksToShow.map((task) => {
return {
...task,
ssh_connection: task.ssh_credentials ? (task.ssh_credentials as any).name : '-',
......
......@@ -67,7 +67,7 @@ export class RsyncTaskListComponent implements EntityTableConfig {
},
};
private dataset: string = '';
private dataset = '';
constructor(
protected ws: WebSocketService,
......@@ -145,12 +145,12 @@ export class RsyncTaskListComponent implements EntityTableConfig {
}];
}
resourceTransformIncomingRestData(data: RsyncTaskUi[]): RsyncTaskUi[] {
const _data = data.filter((task) =>
task.path.replace('/mnt/', '') === this.dataset ||
task.path.includes(`${this.dataset}/`)
);
return _data.map((task) => {
resourceTransformIncomingRestData(tasks: RsyncTaskUi[]): RsyncTaskUi[] {
const tasksToShow = tasks.filter((task) => {
return task.path.replace('/mnt/', '') === this.dataset
|| task.path.includes(`${this.dataset}/`);
});
return tasksToShow.map((task) => {
task.cron_schedule = `${task.schedule.minute} ${task.schedule.hour} ${task.schedule.dom} ${task.schedule.month} ${task.schedule.dow}`;
task.next_run = this.taskService.getTaskNextRun(task.cron_schedule);
task.frequency = this.taskService.getTaskCronDescription(task.cron_schedule);
......
......@@ -53,7 +53,7 @@ export class SnapshotListComponent implements EntityTableConfig<PeriodicSnapshot
},
};
private dataset: string = '';
private dataset = '';
constructor(
private dialogService: DialogService,
......@@ -73,12 +73,12 @@ export class SnapshotListComponent implements EntityTableConfig<PeriodicSnapshot
});
}
resourceTransformIncomingRestData(data: PeriodicSnapshotTask[]): PeriodicSnapshotTaskUi[] {
const _data = data.filter((row) =>
row.dataset === this.dataset ||
row.dataset.includes(`${this.dataset}/`)
);
return _data.map((task) => {
resourceTransformIncomingRestData(tasks: PeriodicSnapshotTask[]): PeriodicSnapshotTaskUi[] {
const tasksToShow = tasks.filter((row) => {
return row.dataset === this.dataset
|| row.dataset.includes(`${this.dataset}/`);
});
return tasksToShow.map((task) => {
const transformedTask = {
...task,
keepfor: `${task.lifetime_value} ${task.lifetime_unit}(S)`,
......
import { HarnessLoader } from '@angular/cdk/testing';
import { TestbedHarnessEnvironment } from '@angular/cdk/testing/testbed';
import { ActivatedRoute } from '@angular/router';
import { createComponentFactory, mockProvider, Spectator } from '@ngneat/spectator/jest';
import { MockStore, provideMockStore } from '@ngrx/store/testing';
import { MockPipe } from 'ng-mocks';
import { FileSizePipe } from 'ngx-filesize';
import { ActivatedRoute } from '@angular/router';
import { CoreComponents } from 'app/core/core-components.module';
import { FormatDateTimePipe } from 'app/core/pipes/format-datetime.pipe';
import { mockCall, mockWebsocket } from 'app/core/testing/utils/mock-websocket.utils';
......@@ -90,8 +90,8 @@ describe('SnapshotListComponent', () => {
},
},
},
}
]
},
],
});
loader = TestbedHarnessEnvironment.loader(spectator.fixture);
store$ = spectator.inject(MockStore);
......
import {
Component, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild, OnInit, TemplateRef, AfterViewInit,
} from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { MatDialog } from '@angular/material/dialog';
import { MatSort, Sort } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table';
import { ActivatedRoute } from '@angular/router';
import { untilDestroyed, UntilDestroy } from '@ngneat/until-destroy';
import { select, Store } from '@ngrx/store';
import { TranslateService } from '@ngx-translate/core';
......@@ -80,7 +80,7 @@ export class SnapshotListComponent implements OnInit, AfterViewInit {
readonly defaultColumns: string[] = ['select', 'dataset', 'snapshot_name', 'actions'];
readonly defaultExtraColumns: string[] = ['select', 'dataset', 'snapshot_name', 'used', 'created', 'referenced', 'actions'];
displayedColumns: string[] = this.defaultColumns;
private dataset: string = '';
private dataset = '';
constructor(
private dialogService: DialogService,
......@@ -125,11 +125,11 @@ export class SnapshotListComponent implements OnInit, AfterViewInit {
select(selectSnapshots),
untilDestroyed(this),
).subscribe((snapshots) => {
const _snapshots = snapshots.filter((snapshot) =>
snapshot.dataset === this.dataset ||
snapshot.dataset.includes(`${this.dataset}/`)
);
this.createDataSource(_snapshots);
const snapshotsToShow = snapshots.filter((snapshot) => {
return snapshot.dataset === this.dataset
|| snapshot.dataset.includes(`${this.dataset}/`);
});
this.createDataSource(snapshotsToShow);
this.cdr.markForCheck();
}, () => {
this.createDataSource();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment