diff --git a/chaoscenter/graphql/server/pkg/chaoshub/ops/gitops.go b/chaoscenter/graphql/server/pkg/chaoshub/ops/gitops.go index 0a4950efef4..9480b144e6d 100644 --- a/chaoscenter/graphql/server/pkg/chaoshub/ops/gitops.go +++ b/chaoscenter/graphql/server/pkg/chaoshub/ops/gitops.go @@ -6,6 +6,7 @@ import ( "strings" "github.com/litmuschaos/litmus/chaoscenter/graphql/server/graph/model" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/utils" "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" @@ -284,7 +285,7 @@ func (c ChaosHubConfig) generateAuthMethod() (transport.AuthMethod, error) { var auth transport.AuthMethod if c.AuthType == model.AuthTypeToken { auth = &http.BasicAuth{ - Username: "litmus", // this can be anything except an empty string + Username: utils.Config.GitUsername, // must be a non-empty string or 'x-token-auth' for Bitbucket Password: *c.Token, } } else if c.AuthType == model.AuthTypeBasic { diff --git a/chaoscenter/graphql/server/pkg/gitops/gitops.go b/chaoscenter/graphql/server/pkg/gitops/gitops.go index c7b2afda308..8065ace8c30 100644 --- a/chaoscenter/graphql/server/pkg/gitops/gitops.go +++ b/chaoscenter/graphql/server/pkg/gitops/gitops.go @@ -11,6 +11,8 @@ import ( "strings" "time" + "github.com/litmuschaos/litmus/chaoscenter/graphql/server/utils" + "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/object" @@ -184,7 +186,7 @@ func (c GitConfig) getAuthMethod() (transport.AuthMethod, error) { case model.AuthTypeToken: return &http.BasicAuth{ - Username: "litmus", // this can be anything except an empty string + Username: utils.Config.GitUsername, // must be a non-empty string or 'x-token-auth' for Bitbucket Password: *c.Token, }, nil diff --git a/chaoscenter/graphql/server/utils/variables.go b/chaoscenter/graphql/server/utils/variables.go index 678c7feb731..3818dc211f4 100644 --- a/chaoscenter/graphql/server/utils/variables.go +++ b/chaoscenter/graphql/server/utils/variables.go @@ -30,6 +30,7 @@ type Configuration struct { GrpcPort string `split_words:"true" default:"8000"` InfraCompatibleVersions string `required:"true" split_words:"true"` DefaultHubGitURL string `required:"true" default:"https://github.com/litmuschaos/chaos-charts"` + GitUsername string `required:"true" split_words:"true" default:"litmus"` DefaultHubBranchName string `required:"true" split_words:"true"` CustomChaosHubPath string `split_words:"true" default:"/tmp/"` DefaultChaosHubPath string `split_words:"true" default:"/tmp/default/"` diff --git a/chaoscenter/web/src/views/ExperimentBuilderTemplateSelection/blankCanvasTemplate.ts b/chaoscenter/web/src/views/ExperimentBuilderTemplateSelection/blankCanvasTemplate.ts index 6f13e4a8e61..1474014dcc2 100644 --- a/chaoscenter/web/src/views/ExperimentBuilderTemplateSelection/blankCanvasTemplate.ts +++ b/chaoscenter/web/src/views/ExperimentBuilderTemplateSelection/blankCanvasTemplate.ts @@ -10,7 +10,12 @@ export default function blankCanvasTemplate( switch (infrastructureType) { case InfrastructureType.KUBERNETES: - return kubernetesBlankCanvasTemplate(experimentName, experiment?.chaosInfrastructure?.namespace); + return kubernetesBlankCanvasTemplate( + experimentName, + experiment?.chaosInfrastructure?.namespace, + undefined, + experiment?.imageRegistry, + ); } } diff --git a/chaoscenter/web/src/views/ExperimentDashboardV2/ExperimentDashboardV2Table.tsx b/chaoscenter/web/src/views/ExperimentDashboardV2/ExperimentDashboardV2Table.tsx index 92eb81be5fb..3f0877d832f 100644 --- a/chaoscenter/web/src/views/ExperimentDashboardV2/ExperimentDashboardV2Table.tsx +++ b/chaoscenter/web/src/views/ExperimentDashboardV2/ExperimentDashboardV2Table.tsx @@ -215,10 +215,10 @@ const ExperimentDashboardV2Table = ({ ); case ExperimentRunStatus.QUEUED: return ( - ); default: diff --git a/chaoscenter/web/src/views/ExperimentDashboardV2/ExperimentDashboardV2TableMenu.tsx b/chaoscenter/web/src/views/ExperimentDashboardV2/ExperimentDashboardV2TableMenu.tsx index 51389833aa3..48385401474 100644 --- a/chaoscenter/web/src/views/ExperimentDashboardV2/ExperimentDashboardV2TableMenu.tsx +++ b/chaoscenter/web/src/views/ExperimentDashboardV2/ExperimentDashboardV2TableMenu.tsx @@ -33,7 +33,9 @@ export const MenuCell = ({ onError: error => showError(error.message) }); - const lastExperimentRunStatus = data.recentExecutions[0]?.experimentRunStatus; + const isDeleteButtonEnabled = !data.recentExecutions.some( + execution => execution?.experimentRunStatus === ExperimentRunStatus.RUNNING + ); // const confirmationDialogProps = { @@ -108,10 +110,7 @@ export const MenuCell = ({ icon="main-trash" text={getString('deleteExperiment')} onClick={openDeleteDialog} - disabled={ - lastExperimentRunStatus === ExperimentRunStatus.RUNNING || - lastExperimentRunStatus === ExperimentRunStatus.QUEUED - } + disabled={isDeleteButtonEnabled == false} permission={PermissionGroup.OWNER} /> diff --git a/chaoscenter/web/src/views/StudioOverview/StudioOverview.tsx b/chaoscenter/web/src/views/StudioOverview/StudioOverview.tsx index 89f8207357d..ac0b9ac926c 100644 --- a/chaoscenter/web/src/views/StudioOverview/StudioOverview.tsx +++ b/chaoscenter/web/src/views/StudioOverview/StudioOverview.tsx @@ -23,6 +23,8 @@ import { ChaosInfrastructureReferenceFieldProps, StudioErrorState, StudioTabs } import experimentYamlService from 'services/experiment'; import KubernetesChaosInfrastructureReferenceFieldController from '@controllers/KubernetesChaosInfrastructureReferenceField'; import { InfrastructureType } from '@api/entities'; +import { getImageRegistry } from '@api/core/ImageRegistry'; +import { getScope } from '@utils'; import css from './StudioOverview.module.scss'; interface StudioOverviewViewProps { @@ -52,6 +54,20 @@ export default function StudioOverviewView({ const [currentExperiment, setCurrentExperiment] = React.useState(); + const scope = getScope(); + + // Fetch the image registry data using Apollo's useQuery hook + const { data: getImageRegistryData, loading: imageRegistryLoading } = getImageRegistry({ + projectID: scope.projectID, + }); + + const imageRegistry = getImageRegistryData?.getImageRegistry?{ + name: getImageRegistryData.getImageRegistry.imageRegistryInfo.imageRegistryName, + repo: getImageRegistryData.getImageRegistry.imageRegistryInfo.imageRepoName, + secret: getImageRegistryData.getImageRegistry.imageRegistryInfo.secretName, + } + : undefined; + React.useEffect(() => { experimentHandler?.getExperiment(experimentKey).then(experiment => { delete experiment?.manifest; @@ -85,6 +101,9 @@ export default function StudioOverviewView({ }) })} onSubmit={values => { + + values.imageRegistry = imageRegistry + if (values.chaosInfrastructure.namespace === undefined) { delete values.chaosInfrastructure.namespace; } @@ -144,7 +163,13 @@ export default function StudioOverviewView({ text={getString('cancel')} onClick={openDiscardDialog} /> -