├── .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