├── .nvmrc ├── .github ├── labeler.yml ├── CODEOWNERS ├── dependabot.yml ├── PULL_REQUEST_TEMPLATE.md └── workflows │ └── triage.yml ├── .node-version ├── packages ├── web │ ├── src │ │ ├── redux │ │ │ ├── initialState.ts │ │ │ └── utils │ │ │ │ └── executorIcon.ts │ │ ├── components │ │ │ ├── atoms │ │ │ │ ├── Dots │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Dots.styled.ts │ │ │ │ ├── Pre │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── Pre.styled.tsx │ │ │ │ │ └── Pre.tsx │ │ │ │ ├── Tag │ │ │ │ │ └── index.ts │ │ │ │ ├── Loader │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Loader.styled.tsx │ │ │ │ ├── Asterisk │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Asterisk.ts │ │ │ │ ├── IconLabel │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── IconLabel.styled.tsx │ │ │ │ │ └── IconLabel.tsx │ │ │ │ ├── CopyButton │ │ │ │ │ ├── index.ts │ │ │ │ │ └── CopyButton.styled.tsx │ │ │ │ ├── StatusIcon │ │ │ │ │ ├── index.ts │ │ │ │ │ └── StatusIcon.styled.tsx │ │ │ │ ├── CommandInput │ │ │ │ │ ├── index.ts │ │ │ │ │ └── CommandInput.tsx │ │ │ │ ├── DownloadButton │ │ │ │ │ ├── index.ts │ │ │ │ │ └── DownloadButton.styled.tsx │ │ │ │ ├── ExecutorIcon │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ExecutorIcon.styled.tsx │ │ │ │ ├── ExternalLink │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ExternalLink.tsx │ │ │ │ ├── LabelListItem │ │ │ │ │ ├── index.ts │ │ │ │ │ └── LabelListItem.styled.ts │ │ │ │ ├── ScrollTrigger │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ScrollTrigger.styled.tsx │ │ │ │ ├── SplitLabelText │ │ │ │ │ ├── index.ts │ │ │ │ │ └── SplitLabelText.styled.ts │ │ │ │ ├── UploadWithInput │ │ │ │ │ └── index.ts │ │ │ │ ├── MonacoEditor │ │ │ │ │ └── index.ts │ │ │ │ ├── CreatableMultiSelect │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── CustomComponents │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── LabelsMultiValueLabel.tsx │ │ │ │ │ └── DefaultComponents │ │ │ │ │ │ ├── Option.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── MultiValueLabel.tsx │ │ │ │ │ │ ├── DropdownIndicator.tsx │ │ │ │ │ │ └── MultiValueRemove.tsx │ │ │ │ ├── InstallationInfoItem │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── InstallationInfoItem.styled.tsx │ │ │ │ │ └── InstallationInfoItem.tsx │ │ │ │ └── Icon │ │ │ │ │ ├── Icon.styled.tsx │ │ │ │ │ └── types.ts │ │ │ ├── molecules │ │ │ │ ├── Hint │ │ │ │ │ └── index.ts │ │ │ │ ├── HelpCard │ │ │ │ │ └── index.ts │ │ │ │ ├── LogOutput │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── LogOutputPure.styled.tsx │ │ │ │ │ ├── utils.ts │ │ │ │ │ ├── LogOutput.tsx │ │ │ │ │ ├── LogOutputHeader.tsx │ │ │ │ │ └── FullscreenLogOutput.tsx │ │ │ │ ├── CLICommands │ │ │ │ │ └── index.ts │ │ │ │ ├── Definition │ │ │ │ │ ├── index.ts │ │ │ │ │ └── DefinitionSkeleton.tsx │ │ │ │ ├── DeleteModal │ │ │ │ │ ├── index.ts │ │ │ │ │ └── DeleteModal.styled.tsx │ │ │ │ ├── DotsDropdown │ │ │ │ │ ├── index.ts │ │ │ │ │ └── DotsDropdown.styled.tsx │ │ │ │ ├── EntityGrid │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── EntityGridLoader.tsx │ │ │ │ │ └── EntityGridSkeleton.tsx │ │ │ │ ├── LabelsList │ │ │ │ │ ├── index.ts │ │ │ │ │ └── LabelsList.styled.ts │ │ │ │ ├── LabelsSelect │ │ │ │ │ ├── index.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── MessagePanel │ │ │ │ │ └── index.ts │ │ │ │ ├── SummaryGrid │ │ │ │ │ ├── index.ts │ │ │ │ │ └── SummaryGridItem.tsx │ │ │ │ ├── ArtifactsList │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ArtifactsList.styled.tsx │ │ │ │ ├── EndpointModal │ │ │ │ │ ├── index.ts │ │ │ │ │ └── EndpointModal.styled.tsx │ │ │ │ ├── ExecutionName │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── ExecutionName.styled.tsx │ │ │ │ │ └── ExecutionName.tsx │ │ │ │ ├── CommonSettings │ │ │ │ │ └── index.ts │ │ │ │ ├── ConfigurationCard │ │ │ │ │ └── index.ts │ │ │ │ ├── DeleteEntityModal │ │ │ │ │ ├── index.ts │ │ │ │ │ └── DeleteEntityModal.styled.tsx │ │ │ │ ├── EmptyListContent │ │ │ │ │ ├── index.ts │ │ │ │ │ └── EmptyListContent.styled.tsx │ │ │ │ ├── MetricsBarChart │ │ │ │ │ ├── index.ts │ │ │ │ │ └── components │ │ │ │ │ │ └── BarWithTooltip.tsx │ │ │ │ ├── VariablesFormList │ │ │ │ │ ├── index.ts │ │ │ │ │ └── VariablesFormList.constants.tsx │ │ │ │ ├── ExecutionStepsList │ │ │ │ │ └── index.ts │ │ │ │ ├── InlineNotification │ │ │ │ │ ├── index.ts │ │ │ │ │ └── InlineNotification.tsx │ │ │ │ ├── TestActionsDropdown │ │ │ │ │ └── index.ts │ │ │ │ ├── FilterMenu │ │ │ │ │ ├── FilterMenuFooter │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── FilterMenuFooter.styled.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── LabelSelectorHelpIcon │ │ │ │ │ ├── index.ts │ │ │ │ │ └── LabelSelectorHelpIcon.tsx │ │ │ │ ├── SettingsLeftNavigation │ │ │ │ │ ├── index.ts │ │ │ │ │ └── SettingsLeftNavigation.styled.tsx │ │ │ │ ├── KubernetesResourceEditor │ │ │ │ │ └── index.ts │ │ │ │ ├── TestSuiteActionsDropdown │ │ │ │ │ └── index.ts │ │ │ │ ├── Variables │ │ │ │ │ ├── TestsVariablesList │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── TestsVariablesList.tsx │ │ │ │ │ ├── ExecutionsVariablesList │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ExecutionsVariablesList.styled.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── RunningContext │ │ │ │ │ └── index.ts │ │ │ │ ├── Notification │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── Notification.styled.tsx │ │ │ │ │ └── Notification.tsx │ │ │ │ ├── SettingsLayout │ │ │ │ │ ├── index.ts │ │ │ │ │ └── SettingsLayout.styled.tsx │ │ │ │ ├── GitFormItems │ │ │ │ │ ├── index.ts │ │ │ │ │ └── RevisionSwitcher.tsx │ │ │ │ └── Console │ │ │ │ │ ├── utils.ts │ │ │ │ │ ├── ConsoleLines.tsx │ │ │ │ │ └── ConsoleLine.tsx │ │ │ ├── pages │ │ │ │ ├── Error │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Error.styled.ts │ │ │ │ ├── Loading │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── Loading.styled.tsx │ │ │ │ │ └── Loading.tsx │ │ │ │ ├── NotFound │ │ │ │ │ ├── index.ts │ │ │ │ │ └── NotFound.tsx │ │ │ │ ├── ErrorBoundary │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── ErrorBoundary.styled.tsx │ │ │ │ │ └── ErrorBoundary.tsx │ │ │ │ ├── GlobalSettings │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── General │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── YourInstallation │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── YourInstallation.styled.tsx │ │ │ │ │ │ └── General.tsx │ │ │ │ │ └── GlobalSettings.tsx │ │ │ │ ├── Tests │ │ │ │ │ ├── TestDetails │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── TestSettings │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── SettingsTest │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── SettingsGeneral │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── FailureHandling.styled.tsx │ │ │ │ │ │ │ ├── SettingsDefinition │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── SettingsExecution │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── SettingsExecution.tsx │ │ │ │ │ │ │ └── SettingsVariables │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── Arguments.styled.tsx │ │ │ │ │ │ └── TestExecution │ │ │ │ │ │ │ └── TestExecutionDrawer.tsx │ │ │ │ │ └── TestsList │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── TestCreationModalContent │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── CreationModal.styled.tsx │ │ │ │ ├── Sources │ │ │ │ │ ├── SourcesList │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── SourcesList.styled.tsx │ │ │ │ │ │ └── SourceCard.tsx │ │ │ │ │ └── SourceDetails │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── SourceSettings │ │ │ │ │ │ ├── General │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── Definition │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── SourceSettings.tsx │ │ │ │ ├── Triggers │ │ │ │ │ ├── TriggersList │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── AddTriggerModal │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ └── AddTriggerModal.styled.tsx │ │ │ │ │ │ ├── TriggersList.styled.tsx │ │ │ │ │ │ └── TriggerCard.tsx │ │ │ │ │ └── TriggerDetails │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── TriggerSettings │ │ │ │ │ │ ├── General │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── Name.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── Definition │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── TriggerAction │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── TriggerCondition │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── TriggerCondition.tsx │ │ │ │ ├── Webhooks │ │ │ │ │ ├── WebhooksList │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── WebhooksList.styled.tsx │ │ │ │ │ ├── WebhookDetails │ │ │ │ │ │ ├── ActionTab │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── Headers.styled.tsx │ │ │ │ │ │ │ ├── ActionTab.tsx │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── ConditionTab │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── ConditionTab.tsx │ │ │ │ │ │ └── GeneralTab │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── WebhookCreationModal │ │ │ │ │ │ └── index.ts │ │ │ │ ├── EndpointProcessing │ │ │ │ │ ├── index.ts │ │ │ │ │ └── EndpointProcessing.styled.ts │ │ │ │ ├── Executors │ │ │ │ │ ├── ExecutorsList │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── ExecutorDetails │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ExecutorSettings │ │ │ │ │ │ ├── General │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── ContainerImage │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ContainerImage.tsx │ │ │ │ │ │ ├── CommandAndArguments │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── CommandAndArguments.tsx │ │ │ │ │ │ └── ExecutorDefinition │ │ │ │ │ │ └── index.ts │ │ │ │ ├── TestSuites │ │ │ │ │ ├── TestSuiteDetails │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── TestSuiteSettings │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── SettingsTests │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── Nodes │ │ │ │ │ │ │ │ │ └── AddNode.tsx │ │ │ │ │ │ │ ├── SettingsGeneral │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── SettingsDefinition │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── SettingsVariables │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── TestSuiteExecution │ │ │ │ │ │ │ └── TestSuiteExecutionTabs.tsx │ │ │ │ │ └── TestSuitesList │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── TestSuiteCreationModalContent │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── CreationModal.styled.tsx │ │ │ │ ├── index.ts │ │ │ │ └── PageMetadata.tsx │ │ │ ├── custom-antd │ │ │ │ ├── Button │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Button.tsx │ │ │ │ ├── Input │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── Input.tsx │ │ │ │ │ └── Input.styled.tsx │ │ │ │ ├── Modal │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Modal.styled.tsx │ │ │ │ ├── Upload │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Upload.tsx │ │ │ │ ├── Checkbox │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Checkbox.tsx │ │ │ │ ├── Skeleton │ │ │ │ │ └── index.ts │ │ │ │ ├── Form │ │ │ │ │ ├── FormItem │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── FormItem.tsx │ │ │ │ │ ├── FormRow │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── FormRow.styled.tsx │ │ │ │ │ │ └── FormRow.tsx │ │ │ │ │ └── Form.styled.tsx │ │ │ │ ├── Typography │ │ │ │ │ ├── Text │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── Text.tsx │ │ │ │ │ │ └── Text.styled.tsx │ │ │ │ │ └── Title │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── Title.styled.tsx │ │ │ │ │ │ └── Title.tsx │ │ │ │ ├── FullWidthSpace │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── FullWidthSpace.tsx │ │ │ │ │ └── FullWidthSpace.styled.tsx │ │ │ │ └── index.ts │ │ │ └── organisms │ │ │ │ ├── Sider │ │ │ │ └── index.ts │ │ │ │ ├── CardForm │ │ │ │ └── index.ts │ │ │ │ ├── EntityView │ │ │ │ ├── index.ts │ │ │ │ ├── EntityViewFilters │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── LabelsFilter │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── LabelsFilter.styled.tsx │ │ │ │ │ │ └── KeyValueInput.styled.tsx │ │ │ │ │ ├── StatusFilter │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── TextSearchFilter │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── TextSearchFilter.styled.tsx │ │ │ │ ├── EmptyDataWithFilters │ │ │ │ │ ├── index.ts │ │ │ │ │ └── EmptyDataWithFilters.styled.tsx │ │ │ │ └── EntityView.styled.tsx │ │ │ │ ├── ExecutionsTable │ │ │ │ ├── TableRow │ │ │ │ │ ├── index.ts │ │ │ │ │ └── TableRow.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── ExecutionsFilters │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ExecutionsFilters.styled.tsx │ │ │ │ └── EmptyExecutionsListContent │ │ │ │ │ └── index.ts │ │ │ │ ├── EntityDetails │ │ │ │ ├── Settings │ │ │ │ │ └── SettingsScheduling │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── Schedule.styled.tsx │ │ │ │ │ │ ├── utils.ts │ │ │ │ │ │ └── CronInput.tsx │ │ │ │ ├── EntityDetails.styled.tsx │ │ │ │ └── index.ts │ │ │ │ ├── TestConfigurationForm │ │ │ │ ├── FileContentFields │ │ │ │ │ └── index.ts │ │ │ │ ├── StringContentFields │ │ │ │ │ └── index.ts │ │ │ │ ├── Git │ │ │ │ │ └── index.ts │ │ │ │ ├── Custom │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── CreationFormFields.tsx │ │ │ │ │ └── SourceEditFormFields.tsx │ │ │ │ ├── TestConfigurationForm.styled.ts │ │ │ │ └── index.ts │ │ │ │ ├── TriggersFormItems │ │ │ │ ├── ResourceTriggerSelect │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ResourceTriggerSelect.styled.tsx │ │ │ │ ├── TriggerSelectorSwitcher │ │ │ │ │ ├── index.ts │ │ │ │ │ └── TriggerSelectorSwitcher.tsx │ │ │ │ └── index.ts │ │ │ │ ├── ExecutionDrawer │ │ │ │ └── index.ts │ │ │ │ ├── PageBlueprint │ │ │ │ ├── index.ts │ │ │ │ └── PageToolbar.tsx │ │ │ │ └── index.ts │ │ ├── react-app-env.d.ts │ │ ├── models │ │ │ ├── args.ts │ │ │ ├── objectRef.ts │ │ │ ├── form.ts │ │ │ ├── secretRef.ts │ │ │ ├── actionsDropdown.ts │ │ │ ├── artifact.ts │ │ │ ├── assertionResult.ts │ │ │ ├── notifications.ts │ │ │ ├── config.ts │ │ │ ├── entityMap.ts │ │ │ ├── fetch.ts │ │ │ ├── variable.ts │ │ │ ├── repository.ts │ │ │ ├── sources.ts │ │ │ ├── metrics.ts │ │ │ ├── executors.ts │ │ │ └── webhook.ts │ │ ├── utils │ │ │ ├── index.ts │ │ │ ├── numbers.ts │ │ │ ├── prettifyArguments.ts │ │ │ ├── escapeArguments.ts │ │ │ ├── strings.ts │ │ │ ├── isExecutionFinished.ts │ │ │ ├── mocks.ts │ │ │ ├── validate.ts │ │ │ ├── formatMilliseconds.ts │ │ │ ├── executors.ts │ │ │ ├── formatDate.ts │ │ │ ├── apiInfo.ts │ │ │ ├── composeProviders.tsx │ │ │ ├── anonymizeQueryString.ts │ │ │ ├── form.tsx │ │ │ └── rtk.ts │ │ ├── feature-flags │ │ │ ├── index.ts │ │ │ ├── hooks.ts │ │ │ └── context.tsx │ │ ├── hooks │ │ │ ├── useSecureContext.ts │ │ │ ├── useIsRunning.ts │ │ │ ├── useInViewport.ts │ │ │ ├── useIsMobile.ts │ │ │ ├── usePressEnter.ts │ │ │ ├── useScrolledToBottom.ts │ │ │ ├── useExecutorIcon.ts │ │ │ ├── useLoadingIndicator.ts │ │ │ ├── useURLSearchParams.ts │ │ │ ├── useLastCallback.ts │ │ │ ├── useClusterVersionMatch.ts │ │ │ ├── useLocation.ts │ │ │ ├── useIsRunning.spec.ts │ │ │ ├── useAxiosInterceptors.tsx │ │ │ ├── useEventCallback.ts │ │ │ ├── useDashboardNavigate.ts │ │ │ └── useClientRect.ts │ │ ├── antd-theme │ │ │ └── antd-customized.less │ │ ├── App.styled.tsx │ │ ├── constants │ │ │ └── config.ts │ │ ├── telemetry │ │ │ ├── context.ts │ │ │ └── provider.tsx │ │ ├── plugins │ │ │ ├── promo-banners │ │ │ │ ├── utils │ │ │ │ │ ├── applyUrlParams.ts │ │ │ │ │ └── applyUrlParams.spec.ts │ │ │ │ └── hooks.ts │ │ │ ├── labels │ │ │ │ ├── plugin.tsx │ │ │ │ └── hooks.ts │ │ │ ├── config │ │ │ │ ├── plugin.ts │ │ │ │ └── hooks.ts │ │ │ ├── feature-flags │ │ │ │ ├── plugin.tsx │ │ │ │ └── hooks.ts │ │ │ ├── rtk │ │ │ │ └── hooks.ts │ │ │ ├── modal │ │ │ │ ├── hooks.ts │ │ │ │ └── plugin.tsx │ │ │ ├── router │ │ │ │ └── hooks.ts │ │ │ ├── cluster │ │ │ │ └── hooks.ts │ │ │ ├── general │ │ │ │ └── hooks.ts │ │ │ ├── settings │ │ │ │ └── hooks.ts │ │ │ ├── triggers │ │ │ │ └── hooks.ts │ │ │ ├── webhooks │ │ │ │ └── hooks.ts │ │ │ ├── executors │ │ │ │ └── hooks.ts │ │ │ ├── sider-logo │ │ │ │ ├── hooks.ts │ │ │ │ └── plugin.tsx │ │ │ ├── telemetry │ │ │ │ └── hooks.ts │ │ │ ├── test-sources │ │ │ │ └── hooks.ts │ │ │ ├── tests-and-test-suites │ │ │ │ └── hooks.ts │ │ │ ├── sider-support │ │ │ │ └── hooks.ts │ │ │ ├── permissions │ │ │ │ └── hooks.ts │ │ │ ├── cluster-status │ │ │ │ └── hooks.ts │ │ │ ├── ai-insights-promo │ │ │ │ ├── hooks.ts │ │ │ │ └── components │ │ │ │ │ └── AiInsightsTab.styled.tsx │ │ │ ├── status-pages-promo │ │ │ │ ├── hooks.ts │ │ │ │ └── plugin.tsx │ │ │ └── sider-cloud-migrate │ │ │ │ ├── hooks.ts │ │ │ │ └── plugin.tsx │ │ ├── styles │ │ │ ├── Fonts.ts │ │ │ └── Shadows.ts │ │ ├── setupTests.ts │ │ ├── modal │ │ │ ├── types.ts │ │ │ └── hooks.ts │ │ ├── assets │ │ │ └── images │ │ │ │ ├── triggers.svg │ │ │ │ ├── linkIcon.svg │ │ │ │ ├── artilleryIcon.svg │ │ │ │ └── k6Icon.svg │ │ ├── services │ │ │ ├── labels.ts │ │ │ ├── repository.ts │ │ │ └── config.ts │ │ ├── index.tsx │ │ ├── store │ │ │ ├── webhooks.ts │ │ │ ├── sources.ts │ │ │ └── triggers.ts │ │ └── DashboardRewrite.tsx │ ├── .gitignore │ ├── public │ │ ├── robots.txt │ │ ├── favicon.png │ │ └── manifest.json │ ├── stubs │ │ └── prettier.js │ ├── tsconfig.check.json │ ├── scripts │ │ ├── inject-base-href.sh │ │ ├── env.sh │ │ └── security.sh │ └── .prettierrc.js ├── e2e-tests │ ├── .gitignore │ ├── .env │ ├── fixtures │ │ ├── files │ │ │ └── k6-smoke-test-without-envs.js │ │ ├── testsuites.ts │ │ ├── executors.ts │ │ ├── webhooks.ts │ │ ├── testsources.ts │ │ └── triggers.ts │ ├── tests │ │ ├── tests-dashboard.spec.ts │ │ ├── testsuites-dashboard.spec.ts │ │ ├── testsuite-settings.spec.ts │ │ └── test-settings.spec.ts │ ├── types.ts │ ├── pages │ │ ├── ExecutorsPage.ts │ │ ├── NavigationSiderPage.ts │ │ ├── TriggersPage.ts │ │ ├── WebhooksPage.ts │ │ ├── TestSourcesPage.ts │ │ └── TestSuitesPage.ts │ └── tsconfig.json └── plugins │ ├── test │ ├── index.ts │ ├── setupTests.ts │ └── PluginScopeMockProvider.tsx │ ├── index.ts │ ├── jest.config.js │ ├── src │ ├── internal │ │ ├── PluginScopeProvider.tsx │ │ ├── PluginLocalProvider.tsx │ │ ├── ConditionalProvider.tsx │ │ └── detectCircularDependencies.ts │ ├── createPlugin.ts │ ├── StoreProvider.ts │ └── createDataPlugin.ts │ └── tsconfig.json ├── .husky └── pre-commit ├── Makefile ├── commitlint.config.js ├── .prettierignore ├── .eslintignore ├── .dockerignore ├── .gitignore ├── .editorconfig ├── .npmrc └── .prettierrc.js /.nvmrc: -------------------------------------------------------------------------------- 1 | v20 2 | -------------------------------------------------------------------------------- /.github/labeler.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | 20.0.0 2 | -------------------------------------------------------------------------------- /packages/web/src/redux/initialState.ts: -------------------------------------------------------------------------------- 1 | export const initialPageSize = 20; 2 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @exu @rangoo94 @haneabogdan @devcatalin @topliceanurazvan 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/Dots/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Dots'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/Pre/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Pre'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/Tag/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Tag'; 2 | -------------------------------------------------------------------------------- /packages/web/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/Loader/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Loader'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/Hint/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Hint'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Error/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Error'; 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npm run precommit 5 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/Asterisk/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Asterisk'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/IconLabel/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './IconLabel'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/Button/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Button'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/Input/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Input'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/Modal/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Modal'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/Upload/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Upload'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/Sider/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Sider'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Loading/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Loading'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/NotFound/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './NotFound'; 2 | -------------------------------------------------------------------------------- /packages/web/src/models/args.ts: -------------------------------------------------------------------------------- 1 | export type Arg = string; 2 | export type Args = Arg[]; 3 | -------------------------------------------------------------------------------- /packages/web/src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export {validateDuplicateValueByKey} from './validate'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/CopyButton/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './CopyButton'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/StatusIcon/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './StatusIcon'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/Checkbox/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Checkbox'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/Skeleton/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Skeleton'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/HelpCard/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './HelpCard'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/LogOutput/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './LogOutput'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/CardForm/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './CardForm'; 2 | -------------------------------------------------------------------------------- /packages/web/.gitignore: -------------------------------------------------------------------------------- 1 | /src/antd-theme/antd-customized.css 2 | /build 3 | /dist 4 | env-config.js 5 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/CommandInput/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './CommandInput'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/DownloadButton/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './DownloadButton'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/ExecutorIcon/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ExecutorIcon'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/ExternalLink/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ExternalLink'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/LabelListItem/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './LabelListItem'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/ScrollTrigger/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ScrollTrigger'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/SplitLabelText/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SplitLabelText'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/Form/FormItem/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './FormItem'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/Form/FormRow/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './FormRow'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/Typography/Text/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Text'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/Typography/Title/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Title'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/CLICommands/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './CLICommands'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/Definition/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Definition'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/DeleteModal/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './DeleteModal'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/DotsDropdown/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './DotsDropdown'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/EntityGrid/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './EntityGrid'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/LabelsList/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './LabelsList'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/LabelsSelect/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './LabelsSelect'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/MessagePanel/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './MessagePanel'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/SummaryGrid/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SummaryGrid'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/EntityView/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './EntityView'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/ErrorBoundary/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ErrorBoundary'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/GlobalSettings/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './GlobalSettings'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Tests/TestDetails/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TestDetails'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Tests/TestsList/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TestsList'; 2 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: docker-build 2 | 3 | docker-build: 4 | docker build -t testkube-dashboard:latest . 5 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/UploadWithInput/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './UploadWithInput'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/ArtifactsList/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ArtifactsList'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/EndpointModal/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './EndpointModal'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/ExecutionName/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ExecutionName'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/GlobalSettings/General/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './General'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Sources/SourcesList/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SourcesList'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Triggers/TriggersList/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TriggersList'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Webhooks/WebhooksList/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './WebhooksList'; 2 | -------------------------------------------------------------------------------- /packages/web/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/MonacoEditor/index.ts: -------------------------------------------------------------------------------- 1 | export {default, lineHeight} from './MonacoEditor'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/FullWidthSpace/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './FullWidthSpace'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/CommonSettings/index.ts: -------------------------------------------------------------------------------- 1 | export {default as Delete} from './Delete'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/ConfigurationCard/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ConfigurationCard'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/DeleteEntityModal/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './DeleteEntityModal'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/EmptyListContent/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './EmptyListContent'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/MetricsBarChart/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './MetricsBarChart'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/VariablesFormList/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './VariablesFormList'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/ExecutionsTable/TableRow/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TableRow'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/ExecutionsTable/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ExecutionsTable'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/EndpointProcessing/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './EndpointProcessing'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Executors/ExecutorsList/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ExecutorsList'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Sources/SourceDetails/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SourceDetails'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Triggers/TriggerDetails/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TriggerDetails'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Triggers/TriggersList/index.tsx: -------------------------------------------------------------------------------- 1 | export {default} from './TriggersList'; 2 | -------------------------------------------------------------------------------- /packages/e2e-tests/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | /test-results/ 3 | /playwright-report/ 4 | /playwright/.cache/ 5 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/CreatableMultiSelect/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './CreatableMultiSelect'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/InstallationInfoItem/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './InstallationInfoItem'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/ExecutionStepsList/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ExecutionStepsList'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/InlineNotification/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './InlineNotification'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/TestActionsDropdown/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TestActionsDropdown'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Executors/ExecutorDetails/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ExecutorDetails'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/TestSuites/TestSuiteDetails/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TestSuiteDetails'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/TestSuites/TestSuitesList/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TestSuitesList'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Tests/TestDetails/TestSettings/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TestSettings'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Webhooks/WebhookDetails/ActionTab/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ActionTab'; 2 | -------------------------------------------------------------------------------- /packages/e2e-tests/.env: -------------------------------------------------------------------------------- 1 | BASE_URL=http://localhost:8080 2 | DASHBOARD_API_URL=localhost:8088/v1 3 | API_URL=localhost:8088/v1 -------------------------------------------------------------------------------- /packages/plugins/test/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PluginScopeMockProvider'; 2 | export * from './createPluginScopeMock'; 3 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/FilterMenu/FilterMenuFooter/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './FilterMenuFooter'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/LabelSelectorHelpIcon/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './LabelSelectorHelpIcon'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/SettingsLeftNavigation/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SettingsLeftNavigation'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Webhooks/WebhookDetails/ConditionTab/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ConditionTab'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Webhooks/WebhookDetails/GeneralTab/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './GeneralTab'; 2 | -------------------------------------------------------------------------------- /packages/web/src/feature-flags/index.ts: -------------------------------------------------------------------------------- 1 | export * from './hooks'; 2 | export {FeatureFlagsProvider} from './context'; 3 | -------------------------------------------------------------------------------- /packages/web/src/models/objectRef.ts: -------------------------------------------------------------------------------- 1 | export type ObjectRef = { 2 | namespace?: string; 3 | name: string; 4 | }; 5 | -------------------------------------------------------------------------------- /packages/web/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kubeshop/testkube-dashboard/HEAD/packages/web/public/favicon.png -------------------------------------------------------------------------------- /packages/web/src/components/molecules/KubernetesResourceEditor/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './KubernetesResourceEditor'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/TestSuiteActionsDropdown/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TestSuiteActionsDropdown'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/Variables/TestsVariablesList/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TestsVariablesList'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/EntityDetails/Settings/SettingsScheduling/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Schedule'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/EntityView/EntityViewFilters/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './EntityViewFilters'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Sources/SourceDetails/SourceSettings/General/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './General'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Sources/SourceDetails/SourceSettings/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SourceSettings'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Triggers/TriggersList/AddTriggerModal/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './AddTriggerModal'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Webhooks/WebhookCreationModal/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './WebhookCreationModal'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/EntityView/EmptyDataWithFilters/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './EmptyDataWithFilters'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/EntityView/EntityViewFilters/LabelsFilter/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './LabelsFilters'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/EntityView/EntityViewFilters/StatusFilter/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './StatusFilter'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/ExecutionsTable/ExecutionsFilters/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ExecutionsFilters'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Executors/ExecutorDetails/ExecutorSettings/General/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './General'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Executors/ExecutorDetails/ExecutorSettings/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ExecutorSettings'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/GlobalSettings/General/YourInstallation/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './YourInstallation'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Tests/TestDetails/TestSettings/SettingsTest/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SettingsTest'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Triggers/TriggerDetails/TriggerSettings/General/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './General'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Triggers/TriggerDetails/TriggerSettings/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TriggerSettings'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/Variables/ExecutionsVariablesList/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ExecutionsVariablesList'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/TestConfigurationForm/FileContentFields/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './FileContentFields'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/TestSuites/TestSuiteDetails/TestSuiteSettings/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TestSuiteSettings'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Tests/TestDetails/TestSettings/SettingsGeneral/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SettingsGeneral'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Triggers/TriggerDetails/TriggerSettings/Definition/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './Definition'; 2 | -------------------------------------------------------------------------------- /packages/web/src/models/form.ts: -------------------------------------------------------------------------------- 1 | export type Option = { 2 | value: string | number; 3 | label: string; 4 | key?: string; 5 | }; 6 | -------------------------------------------------------------------------------- /packages/web/src/models/secretRef.ts: -------------------------------------------------------------------------------- 1 | export type SecretRef = { 2 | namespace?: string; 3 | name: string; 4 | key: string; 5 | }; 6 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/EntityView/EntityViewFilters/TextSearchFilter/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TextSearchFilter'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/TestConfigurationForm/StringContentFields/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './StringContentFields'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/TriggersFormItems/ResourceTriggerSelect/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ResourceTriggerSelect'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/TriggersFormItems/TriggerSelectorSwitcher/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TriggerSelectorSwitcher'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Tests/TestDetails/TestSettings/SettingsDefinition/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SettingsDefinition'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Tests/TestDetails/TestSettings/SettingsExecution/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SettingsExecution'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Tests/TestDetails/TestSettings/SettingsVariables/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SettingsVariables'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Tests/TestsList/TestCreationModalContent/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TestCreationModalContent'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Triggers/TriggerDetails/TriggerSettings/TriggerAction/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TriggerAction'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/ExecutionsTable/EmptyExecutionsListContent/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './EmptyExecutionsListContent'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Executors/ExecutorDetails/ExecutorSettings/ContainerImage/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ContainerImage'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Sources/SourceDetails/SourceSettings/Definition/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SourceSettingsDefinition'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/TestSuites/TestSuiteDetails/TestSuiteSettings/SettingsTests/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SettingsTests'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Triggers/TriggerDetails/TriggerSettings/TriggerCondition/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TriggerCondition'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/TestSuites/TestSuiteDetails/TestSuiteSettings/SettingsGeneral/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SettingsGeneral'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Triggers/TriggersList/AddTriggerModal/types.ts: -------------------------------------------------------------------------------- 1 | export enum StepsEnum { 2 | condition = 0, 3 | action = 1, 4 | } 5 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Executors/ExecutorDetails/ExecutorSettings/CommandAndArguments/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './CommandAndArguments'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Executors/ExecutorDetails/ExecutorSettings/ExecutorDefinition/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ExecutorDefinition'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/TestSuites/TestSuiteDetails/TestSuiteSettings/SettingsDefinition/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SettingsDefinition'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/TestSuites/TestSuiteDetails/TestSuiteSettings/SettingsVariables/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './SettingsVariables'; 2 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/TestSuites/TestSuitesList/TestSuiteCreationModalContent/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './TestSuiteCreationModalContent'; 2 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['@commitlint/config-conventional'], 3 | rules: { 4 | 'subject-case': [2, 'never', []], 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/RunningContext/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './RunningContext'; 2 | export {RunningContextType} from './RunningContext'; 3 | -------------------------------------------------------------------------------- /packages/web/src/hooks/useSecureContext.ts: -------------------------------------------------------------------------------- 1 | const useSecureContext = () => { 2 | return window.isSecureContext; 3 | }; 4 | 5 | export default useSecureContext; 6 | -------------------------------------------------------------------------------- /packages/web/src/antd-theme/antd-customized.less: -------------------------------------------------------------------------------- 1 | @import 'antd/lib/style/themes/default.less'; 2 | @import 'antd/dist/antd.less'; 3 | @import './my-antd-theme.less'; 4 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .git 3 | build 4 | .husky 5 | node_modules 6 | playwright-report 7 | test-results 8 | dashboard-e2e/fixtures/files 9 | package-lock.json 10 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/ExecutionDrawer/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './ExecutionDrawer'; 2 | export {default as ExecutionDrawerHeader} from './ExecutionDrawerHeader'; 3 | -------------------------------------------------------------------------------- /packages/web/src/models/actionsDropdown.ts: -------------------------------------------------------------------------------- 1 | export interface ActionsDropdownProps { 2 | name: string; 3 | namespace?: string; 4 | outOfSync?: boolean; 5 | type?: string; 6 | } 7 | -------------------------------------------------------------------------------- /packages/web/src/models/artifact.ts: -------------------------------------------------------------------------------- 1 | export type Artifact = { 2 | executionName: string; 3 | name: string; 4 | size: number; 5 | status?: 'ready' | 'failed' | 'processing'; 6 | }; 7 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/Notification/index.ts: -------------------------------------------------------------------------------- 1 | export {default as notificationCall} from './Notification'; 2 | export {default as NotificationContent} from './NotificationContent'; 3 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/TriggersFormItems/index.ts: -------------------------------------------------------------------------------- 1 | export {default as ConditionFormItems} from './ConditionFormItems'; 2 | export {default as ActionFormItems} from './ActionFormItems'; 3 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/IconLabel/IconLabel.styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const IconLabelContainer = styled.div` 4 | display: flex; 5 | gap: 8px; 6 | `; 7 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/TestConfigurationForm/Git/index.ts: -------------------------------------------------------------------------------- 1 | export {default as CreationForm} from './CreationFormFields'; 2 | export {default as SourceEdit} from './SourceEditFormFields'; 3 | -------------------------------------------------------------------------------- /packages/web/src/App.styled.tsx: -------------------------------------------------------------------------------- 1 | import {Layout} from 'antd'; 2 | 3 | import styled from 'styled-components'; 4 | 5 | export const StyledLayoutContentWrapper = styled(Layout)` 6 | overflow: hidden; 7 | `; 8 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/Variables/index.ts: -------------------------------------------------------------------------------- 1 | export {default as TestsVariablesList} from './TestsVariablesList'; 2 | export {default as ExecutionsVariablesList} from './ExecutionsVariablesList'; 3 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/CreatableMultiSelect/CustomComponents/index.ts: -------------------------------------------------------------------------------- 1 | export {default as LabelsMultiValueLabel} from './LabelsMultiValueLabel'; 2 | export {default as LabelsOption} from './LabelsOption'; 3 | -------------------------------------------------------------------------------- /packages/web/src/utils/numbers.ts: -------------------------------------------------------------------------------- 1 | export enum PollingIntervals { 2 | halfMin = 30_000, 3 | long = 10_000, 4 | default = 5_000, 5 | everyTwoSeconds = 2_000, 6 | everySecond = 1_000, 7 | zero = 0, 8 | } 9 | -------------------------------------------------------------------------------- /packages/e2e-tests/fixtures/files/k6-smoke-test-without-envs.js: -------------------------------------------------------------------------------- 1 | import http from 'k6/http'; 2 | 3 | // eslint-disable-next-line func-names 4 | export default function () { 5 | http.get('https://testkube.io/'); 6 | } 7 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/TestConfigurationForm/Custom/index.ts: -------------------------------------------------------------------------------- 1 | export {default as CreationFormFields} from './CreationFormFields'; 2 | export {default as SourceEditFormFields} from './SourceEditFormFields'; 3 | -------------------------------------------------------------------------------- /packages/web/src/constants/config.ts: -------------------------------------------------------------------------------- 1 | export const config = { 2 | apiEndpoint: 'apiEndpoint', 3 | apiVersion: '/v1/executions', 4 | isAiBannerHidden: 'isAiBannerHidden', 5 | 6 | overrides: '$tkOverrides', 7 | }; 8 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/SplitLabelText/SplitLabelText.styled.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const SplitLabelTextContainer = styled.div` 4 | display: inline-flex; 5 | gap: 3px; 6 | `; 7 | -------------------------------------------------------------------------------- /packages/web/src/utils/prettifyArguments.ts: -------------------------------------------------------------------------------- 1 | export const prettifyArguments = (args: string) => 2 | Array.from(args.match(/(\\.|("(\\.|[^"])*")|('(\\.|[^'])*')|\S)+/g) || []) 3 | .map(x => x.trim()) 4 | .join('\n'); 5 | -------------------------------------------------------------------------------- /packages/web/stubs/prettier.js: -------------------------------------------------------------------------------- 1 | // To avoid including Prettier functionality in YAML Editor, 2 | // we overwrite regular Prettier formatting with no formatiing. 3 | export function format(text) { 4 | return text; 5 | } 6 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Loading/Loading.styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const LoadingContainer = styled.div` 4 | align-self: center; 5 | margin: auto; 6 | font-size: 32px; 7 | `; 8 | -------------------------------------------------------------------------------- /packages/web/src/telemetry/context.ts: -------------------------------------------------------------------------------- 1 | import {createContext} from 'react'; 2 | 3 | import {TelemetryService} from './TelemetryService'; 4 | 5 | export const TelemetryContext = createContext<{telemetry?: TelemetryService}>({}); 6 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | cache 4 | playwright-report 5 | test-results 6 | lib 7 | dist 8 | .husky 9 | webpack.*.js 10 | server.js 11 | build.js 12 | init.js 13 | site 14 | test/dashboard-e2e/fixtures/files 15 | -------------------------------------------------------------------------------- /packages/e2e-tests/tests/tests-dashboard.spec.ts: -------------------------------------------------------------------------------- 1 | import {test} from '@playwright/test'; 2 | 3 | test.skip(`Tests dashboard - test "item" `, async ({page}) => {}); 4 | 5 | test.skip(`Tests dashboard - filters`, async ({page}) => {}); 6 | -------------------------------------------------------------------------------- /packages/web/src/hooks/useIsRunning.ts: -------------------------------------------------------------------------------- 1 | import {ExecutionStatusEnum} from '@models/execution'; 2 | 3 | const useIsRunning = (status: ExecutionStatusEnum) => { 4 | return status === 'running'; 5 | }; 6 | 7 | export default useIsRunning; 8 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/DeleteModal/DeleteModal.styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const DeleteModalWrapper = styled.div` 4 | display: flex; 5 | flex-direction: column; 6 | gap: 40px; 7 | `; 8 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/InstallationInfoItem/InstallationInfoItem.styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const Container = styled.div` 4 | display: flex; 5 | flex-direction: column; 6 | gap: 10px; 7 | `; 8 | -------------------------------------------------------------------------------- /packages/web/src/models/assertionResult.ts: -------------------------------------------------------------------------------- 1 | export type AssertionResultStatusEnum = 'success' | 'error'; 2 | 3 | export type AssertionResult = { 4 | name: string; 5 | status: AssertionResultStatusEnum; 6 | errorMessage: string | null; 7 | }; 8 | -------------------------------------------------------------------------------- /packages/web/src/models/notifications.ts: -------------------------------------------------------------------------------- 1 | export type ErrorNotificationConfig = { 2 | title: string; 3 | message?: string | undefined; 4 | }; 5 | 6 | export type ErrorNotification = ErrorNotificationConfig | {errors: ErrorNotificationConfig[]}; 7 | -------------------------------------------------------------------------------- /packages/e2e-tests/tests/testsuites-dashboard.spec.ts: -------------------------------------------------------------------------------- 1 | import {test} from '@playwright/test'; 2 | 3 | test.skip(`Test Suites dashboard - test "item" `, async ({page}) => {}); 4 | 5 | test.skip(`Test Suites dashboard - filters`, async ({page}) => {}); 6 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Webhooks/WebhookDetails/ConditionTab/ConditionTab.tsx: -------------------------------------------------------------------------------- 1 | import {FC} from 'react'; 2 | 3 | import Condition from './Condition'; 4 | 5 | const ConditionTab: FC = () => ; 6 | 7 | export default ConditionTab; 8 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/SettingsLayout/index.ts: -------------------------------------------------------------------------------- 1 | export {StyledTabContentContainer} from './SettingsLayout.styled'; 2 | export {StyledSettingsContainer} from './SettingsLayout.styled'; 3 | export {default, type SettingsLayoutTab} from './SettingsLayout'; 4 | -------------------------------------------------------------------------------- /packages/web/tsconfig.check.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "noEmit": false, 5 | "composite": true, 6 | "build": true, 7 | "emitDeclarationOnly": true, 8 | "outDir": "./dist/types" 9 | }, 10 | } 11 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "npm" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | 8 | - package-ecosystem: "docker" 9 | directory: "/" 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/DeleteEntityModal/DeleteEntityModal.styled.tsx: -------------------------------------------------------------------------------- 1 | import {Space} from 'antd'; 2 | 3 | import styled from 'styled-components'; 4 | 5 | export const FooterSpace = styled(Space)` 6 | display: flex; 7 | justify-content: flex-end; 8 | `; 9 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/PageBlueprint/index.ts: -------------------------------------------------------------------------------- 1 | export {default} from './PageBlueprint'; 2 | export {PageWrapper} from './PageBlueprint.styled'; 3 | export {default as PageHeader} from './PageHeader'; 4 | export {default as PageToolbar} from './PageToolbar'; 5 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/Form/FormRow/FormRow.styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const FormRowWrapper = styled.div<{$justify: string}>` 4 | display: flex; 5 | justify-content: ${({$justify}) => $justify}; 6 | gap: 10px; 7 | `; 8 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/EndpointModal/EndpointModal.styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const StyledSearchUrlForm = styled.form` 4 | display: flex; 5 | flex-direction: column; 6 | align-items: center; 7 | gap: 20px; 8 | `; 9 | -------------------------------------------------------------------------------- /packages/web/src/plugins/promo-banners/utils/applyUrlParams.ts: -------------------------------------------------------------------------------- 1 | export const applyUrlParams = (url: string, params: Record): string => 2 | url.replace(/(^|\/)\{([^}]+)}/g, (_, prefix, param) => `${prefix}${encodeURIComponent(params[param] || '')}`); 3 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/Input/Input.tsx: -------------------------------------------------------------------------------- 1 | import {AntdCustomStyledInput, ICustomInputProps} from './Input.styled'; 2 | 3 | const Input: React.FC = props => { 4 | return ; 5 | }; 6 | 7 | export default Input; 8 | -------------------------------------------------------------------------------- /packages/web/src/models/config.ts: -------------------------------------------------------------------------------- 1 | export type Coordinates = { 2 | top: number; 3 | left: number; 4 | width: number; 5 | height: number; 6 | }; 7 | 8 | export type ClusterConfig = { 9 | id: string; 10 | clusterId: string; 11 | enableTelemetry: boolean; 12 | }; 13 | -------------------------------------------------------------------------------- /packages/web/src/components/custom-antd/Checkbox/Checkbox.tsx: -------------------------------------------------------------------------------- 1 | import {CustomCheckbox, CustomCheckboxProps} from './Checkbox.styled'; 2 | 3 | const Checkbox: React.FC = props => { 4 | return ; 5 | }; 6 | 7 | export default Checkbox; 8 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/EntityView/EntityViewFilters/TextSearchFilter/TextSearchFilter.styled.tsx: -------------------------------------------------------------------------------- 1 | import {Input} from 'antd'; 2 | 3 | import styled from 'styled-components'; 4 | 5 | export const SearchInput = styled(Input)` 6 | height: 46px; 7 | width: auto; 8 | `; 9 | -------------------------------------------------------------------------------- /packages/web/src/hooks/useInViewport.ts: -------------------------------------------------------------------------------- 1 | import {RefObject} from 'react'; 2 | import {useIntersection} from 'react-use'; 3 | 4 | export default function useInViewport(ref: RefObject) { 5 | const entry = useIntersection(ref, {}); 6 | return Boolean(entry?.isIntersecting); 7 | } 8 | -------------------------------------------------------------------------------- /packages/web/src/feature-flags/hooks.ts: -------------------------------------------------------------------------------- 1 | import {useContext} from 'react'; 2 | 3 | import {FeatureFlagsContext} from './context'; 4 | 5 | export const useFeatureFlag = (name: string): boolean => { 6 | const flags = useContext(FeatureFlagsContext); 7 | return Boolean(flags[name]); 8 | }; 9 | -------------------------------------------------------------------------------- /packages/web/src/models/entityMap.ts: -------------------------------------------------------------------------------- 1 | export type EntityKey = string; 2 | export type EntityValue = string; 3 | 4 | export type Entity = { 5 | key: EntityKey; 6 | value: EntityValue; 7 | }; 8 | 9 | export type EntityMap = Record; 10 | -------------------------------------------------------------------------------- /packages/web/src/components/organisms/EntityView/EntityViewFilters/LabelsFilter/LabelsFilter.styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const LabelsMenuContainer = styled.div` 4 | display: flex; 5 | flex-direction: column; 6 | gap: 16px; 7 | padding: 24px; 8 | `; 9 | -------------------------------------------------------------------------------- /packages/web/src/styles/Fonts.ts: -------------------------------------------------------------------------------- 1 | enum Fonts { 2 | nunito = 'Nunito, sans-serif', 3 | ptSans = 'PT Sans, sans-serif', 4 | roboto = 'Roboto, sans-serif', 5 | mono = '"IBM Plex Mono", monospace', // Actual "Roboto Mono" have some glyphs with different width 6 | } 7 | 8 | export default Fonts; 9 | -------------------------------------------------------------------------------- /packages/web/src/styles/Shadows.ts: -------------------------------------------------------------------------------- 1 | enum Shadows { 2 | soft = '0 1px 2px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.07), 0 4px 8px rgba(0, 0, 0, 0.07), 0 8px 16px rgba(0, 0, 0, 0.07), 0 16px 32px rgba(0, 0, 0, 0.07), 0 32px 64px rgba(0, 0, 0, 0.07);', 3 | } 4 | 5 | export default Shadows; 6 | -------------------------------------------------------------------------------- /packages/web/src/hooks/useIsMobile.ts: -------------------------------------------------------------------------------- 1 | import {useWindowSize} from 'react-use'; 2 | 3 | import {size} from '@styles/MediaQueries'; 4 | 5 | const useIsMobile = (): boolean => { 6 | const {width} = useWindowSize(); 7 | return width < size.tablet; 8 | }; 9 | 10 | export default useIsMobile; 11 | -------------------------------------------------------------------------------- /packages/web/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom/extend-expect'; 6 | -------------------------------------------------------------------------------- /packages/web/src/utils/escapeArguments.ts: -------------------------------------------------------------------------------- 1 | export const escapeArguments = (args: string[]) => { 2 | return args.map(arg => { 3 | const escapedArg = arg.replace(/(["'`\\])/g, '\\$1'); 4 | 5 | return /\s/.test(escapedArg) ? `"${escapedArg.replace(/\\'/g, "'")}"` : escapedArg; 6 | }); 7 | }; 8 | -------------------------------------------------------------------------------- /packages/plugins/test/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom/extend-expect'; 6 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/Pre/Pre.styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const StyledPre = styled.pre` 4 | padding: 12px 0 12px 12px; 5 | margin-bottom: 0; 6 | border-radius: 4px; 7 | 8 | &::-webkit-scrollbar { 9 | display: none; 10 | } 11 | `; 12 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/LogOutput/LogOutputPure.styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const InitialisingLogContainer = styled.div` 4 | margin: 16px 0 0 16px; 5 | display: flex; 6 | gap: 16px; 7 | align-items: center; 8 | font-size: 12px; 9 | `; 10 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/EndpointProcessing/EndpointProcessing.styled.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const EndpointProcessingContainer = styled.div` 4 | display: flex; 5 | justify-content: center; 6 | align-items: center; 7 | 8 | height: 100%; 9 | `; 10 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Webhooks/WebhookDetails/ActionTab/Headers.styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const StyledButtonsContainer = styled.div` 4 | display: flex; 5 | align-items: center; 6 | justify-content: center; 7 | 8 | width: 100%; 9 | `; 10 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/NotFound/NotFound.tsx: -------------------------------------------------------------------------------- 1 | import {FC} from 'react'; 2 | 3 | import Error from '../Error'; 4 | 5 | const NotFound: FC = () => ( 6 | 7 | ); 8 | 9 | export default NotFound; 10 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/ExecutionName/ExecutionName.styled.tsx: -------------------------------------------------------------------------------- 1 | import {Typography} from 'antd'; 2 | 3 | import styled from 'styled-components'; 4 | 5 | import Colors from '@styles/Colors'; 6 | 7 | export const StyledExecutionName = styled(Typography.Text)` 8 | color: ${Colors.whitePure}; 9 | `; 10 | -------------------------------------------------------------------------------- /packages/web/src/plugins/labels/plugin.tsx: -------------------------------------------------------------------------------- 1 | import {createPlugin} from '@testkube/plugins'; 2 | 3 | import RtkPlugin from '@plugins/rtk/plugin'; 4 | 5 | import {labelsApi} from '@services/labels'; 6 | 7 | export default createPlugin('oss/labels').init(); 8 | 9 | RtkPlugin.overlay.appendContext({labelsApi}); 10 | -------------------------------------------------------------------------------- /packages/e2e-tests/fixtures/testsuites.ts: -------------------------------------------------------------------------------- 1 | import config from '../config'; 2 | 3 | export default { 4 | 'testsuite-empty': { 5 | name: 'temp-ts-1', 6 | namespace: config.namespace, 7 | description: 'testsuite-description-1', 8 | labels: { 9 | testsuite: 'label1', 10 | }, 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/Loading/Loading.tsx: -------------------------------------------------------------------------------- 1 | import {LoadingOutlined} from '@ant-design/icons'; 2 | 3 | import {LoadingContainer} from './Loading.styled'; 4 | 5 | const Loading = () => ( 6 | 7 | 8 | 9 | ); 10 | 11 | export default Loading; 12 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/Pre/Pre.tsx: -------------------------------------------------------------------------------- 1 | import {PropsWithChildren} from 'react'; 2 | 3 | import {StyledPre} from './Pre.styled'; 4 | 5 | const Pre: React.FC> = props => { 6 | const {children} = props; 7 | 8 | return {children}; 9 | }; 10 | 11 | export default Pre; 12 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | This PR... 2 | 3 | ## Changes 4 | 5 | - 6 | 7 | ## Fixes 8 | 9 | - 10 | 11 | ## How to test it 12 | 13 | - 14 | 15 | ## screenshots 16 | 17 | - 18 | 19 | ## Checklist 20 | 21 | - [ ] tested locally 22 | - [ ] added new dependencies 23 | - [ ] updated the docs 24 | - [ ] added a test 25 | -------------------------------------------------------------------------------- /packages/web/src/plugins/config/plugin.ts: -------------------------------------------------------------------------------- 1 | import {createDataPlugin} from '@testkube/plugins'; 2 | 3 | export interface OssConfig { 4 | pageTitle: string; 5 | slackUrl: string; 6 | } 7 | 8 | export default createDataPlugin('dashboard/config')({ 9 | pageTitle: 'Testkube', 10 | slackUrl: undefined, 11 | }); 12 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/Asterisk/Asterisk.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | import Colors from '@styles/Colors'; 4 | 5 | const Asterisk = styled.span` 6 | &::after { 7 | content: '*'; 8 | margin: 0 4px; 9 | } 10 | 11 | color: ${Colors.rose500}; 12 | `; 13 | 14 | export default Asterisk; 15 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/Icon/Icon.styled.tsx: -------------------------------------------------------------------------------- 1 | import AntdIcon from '@ant-design/icons'; 2 | 3 | import styled from 'styled-components'; 4 | 5 | export const StyledAntdIcon = styled(AntdIcon)` 6 | svg { 7 | height: 100%; 8 | width: 100%; 9 | fill: currentcolor; 10 | color: currentcolor; 11 | } 12 | `; 13 | -------------------------------------------------------------------------------- /packages/web/src/hooks/usePressEnter.ts: -------------------------------------------------------------------------------- 1 | import {KeyboardEvent} from 'react'; 2 | 3 | type Callback = () => any; 4 | 5 | const onEvent = (e: KeyboardEvent, cb: Callback) => { 6 | if (e.code === 'Enter') { 7 | cb(); 8 | } 9 | }; 10 | 11 | const usePressEnter = () => onEvent; 12 | 13 | export default usePressEnter; 14 | -------------------------------------------------------------------------------- /packages/web/scripts/inject-base-href.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Fail fast 4 | set -e 5 | 6 | # Include the proper based on the root route 7 | BASE_URL="$(echo "${REACT_APP_ROOT_ROUTE:-""}" | sed 's|\/*$||')" 8 | RENDERED="$(sed -e "s|]*>||" index.html)" 9 | echo "$RENDERED" > index.html 10 | -------------------------------------------------------------------------------- /packages/web/src/components/molecules/FilterMenu/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | StyledFilterMenu, 3 | StyledFilterCheckbox, 4 | StyledFilterMenuItem, 5 | StyledFilterDropdown, 6 | AppliedFiltersNotification, 7 | StyledFilterLabel, 8 | } from './MenuFilter.styled'; 9 | export {default as FilterMenuFooter} from './FilterMenuFooter'; 10 | -------------------------------------------------------------------------------- /packages/web/src/components/pages/GlobalSettings/General/YourInstallation/YourInstallation.styled.tsx: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const YourInstallationContainer = styled.div` 4 | display: flex; 5 | flex-flow: row wrap; 6 | justify-content: space-between; 7 | gap: 20px; 8 | padding-right: 20px; 9 | `; 10 | -------------------------------------------------------------------------------- /packages/e2e-tests/fixtures/executors.ts: -------------------------------------------------------------------------------- 1 | import config from '../config'; 2 | 3 | export default { 4 | 'container-executor-curl-1': { 5 | name: 'temp-executor-curl', 6 | image: 'curlimages/curl:7.85.0', 7 | namespace: config.namespace, 8 | types: ['temp-executor-curl-1/id'], 9 | executorType: 'container', 10 | }, 11 | }; 12 | -------------------------------------------------------------------------------- /packages/web/src/components/atoms/CreatableMultiSelect/DefaultComponents/Option.tsx: -------------------------------------------------------------------------------- 1 | import {OptionProps, components} from 'react-select'; 2 | 3 | import {Option} from '@models/form'; 4 | 5 | const MultiValueLabel = (props: OptionProps