From 86d1f286bff78c34cb121a2b17b7452312dff78a Mon Sep 17 00:00:00 2001 From: Adam Souzis <adam@souzis.com> Date: Mon, 13 Feb 2023 13:38:18 -0800 Subject: [PATCH] Revert "Consolidate webpack aliases/imports, add error reporting store and component" This reverts commit d2be065238fb7bd1f403c0d0ca01bebdf83b3c0a. --- .../components/cells/application-cell.vue | 2 +- .../deployment-controls/control-buttons.vue | 2 +- .../components/cells/environment-cell.vue | 2 +- .../components/cells/environment-status.vue | 2 +- .../components/cells/resource-cell.vue | 4 +- .../cells/shared/deployment-status-icon.vue | 2 +- .../components/create-environment-modal.vue | 2 +- .../components/share-resource-toggle.vue | 4 +- .../tables/deployment-index-table.vue | 19 +- .../tables/environment-index-table.vue | 2 +- packages/oc-pages/dashboard/dashboard.vue | 29 ++- packages/oc-pages/dashboard/index.js | 15 +- .../oc-pages/dashboard/pages/deployment.vue | 22 ++- .../oc-pages/dashboard/pages/environment.vue | 11 +- packages/oc-pages/dashboard/pages/home.vue | 2 +- packages/oc-pages/dashboard/router/index.js | 4 +- packages/oc-pages/dashboard/store/index.js | 8 +- .../store/modules/deployment-info.js | 33 ++-- .../deployment-info/deployment-item.js | 2 +- .../dashboard/store/modules/table_data.js | 25 +-- .../components/deployed-blueprints.vue | 2 +- .../environment-creation-dialog.vue | 12 +- .../project_overview/components/main.vue | 9 +- .../components/open-cloud-deployments.vue | 6 +- .../components/project_description.vue | 2 +- .../components/shared/dependency.vue | 4 +- .../components/shared/logos_cloud.vue | 2 +- .../components/shared/oc_card.vue | 8 +- .../components/shared/oc_inputs.vue | 4 +- .../GithubMirroredRepoImageSource.vue | 20 ++- .../shared/oc_inputs/LocalImageRepoSource.vue | 4 +- .../shared/oc_inputs/UnfurlCNamedDNSZone.vue | 8 +- .../UnfurlCloudMirroredRepoImageSource.vue | 4 +- .../components/shared/oc_inputs/mixins.js | 4 +- .../components/shared/oc_list.vue | 18 +- .../components/shared/oc_list_resource.vue | 2 +- .../shared/oc_list_resource/icon.vue | 2 +- .../components/shared/oc_template_header.vue | 6 +- .../components/template/deploy_button.vue | 2 +- .../components/your-deployments.vue | 2 +- packages/oc-pages/project_overview/index.js | 4 +- .../project_overview/pages/projects/index.vue | 19 +- .../pages/templates/index.vue | 168 +++++++++--------- .../oc-pages/project_overview/router/index.js | 6 +- .../project_overview/router/routes.js | 2 +- .../oc-pages/project_overview/store/index.js | 6 +- .../modules/deployment_template_updates.js | 55 ++---- .../store/modules/deployments.js | 10 +- .../store/modules/environments.js | 89 +++------- .../project_overview/store/modules/misc.js | 36 ++-- .../project_overview/store/modules/project.js | 2 +- .../modules/project_application_blueprint.js | 38 +--- .../store/modules/template_resources.js | 4 +- .../vue_shared/client_utils/environments.js | 50 +----- .../vue_shared/client_utils/unfurl-server.js | 1 + .../vue_shared/components/console-wrapper.vue | 2 +- .../vue_shared/components/notes-wrapper.vue | 6 +- .../components/oc/deployment-resources.vue | 4 +- .../components/oc/deployment-scheduler.vue | 2 +- .../components/oc/environment-selection.vue | 4 +- .../oc/experimental-settings-indicator.vue | 41 +---- .../vue_shared/components/oc/import-link.vue | 2 +- .../vue_shared/components/oc/index.js | 40 ----- .../vue_shared/components/oc/local-deploy.vue | 6 +- .../components/oc/oc-properties-list.vue | 21 +-- .../vue_shared/components/oc/plugin.js | 45 ----- .../components/oc/table_list_row.vue | 2 +- .../vue_shared/components/oc/ufgui-errors.vue | 79 -------- packages/oc-pages/vue_shared/oc-components.js | 37 ++++ packages/oc-pages/vue_shared/storage-keys.js | 21 +-- .../vue_shared/store_modules/errors.js | 45 ----- 71 files changed, 385 insertions(+), 775 deletions(-) delete mode 100644 packages/oc-pages/vue_shared/components/oc/index.js delete mode 100644 packages/oc-pages/vue_shared/components/oc/plugin.js delete mode 100644 packages/oc-pages/vue_shared/components/oc/ufgui-errors.vue create mode 100644 packages/oc-pages/vue_shared/oc-components.js delete mode 100644 packages/oc-pages/vue_shared/store_modules/errors.js diff --git a/packages/oc-pages/dashboard/components/cells/application-cell.vue b/packages/oc-pages/dashboard/components/cells/application-cell.vue index ffcda65c..63e36e30 100644 --- a/packages/oc-pages/dashboard/components/cells/application-cell.vue +++ b/packages/oc-pages/dashboard/components/cells/application-cell.vue @@ -1,6 +1,6 @@ <script> import * as routes from '../../router/constants' -import ProjectIcon from 'oc/vue_shared/components/oc/project-icon.vue' +import ProjectIcon from 'oc_vue_shared/components/oc/project-icon.vue' export default { components: { ProjectIcon }, props: { diff --git a/packages/oc-pages/dashboard/components/cells/deployment-controls/control-buttons.vue b/packages/oc-pages/dashboard/components/cells/deployment-controls/control-buttons.vue index 54627acd..14095974 100644 --- a/packages/oc-pages/dashboard/components/cells/deployment-controls/control-buttons.vue +++ b/packages/oc-pages/dashboard/components/cells/deployment-controls/control-buttons.vue @@ -1,6 +1,6 @@ <script> import {GlIcon, GlButton, GlDropdown, GlDropdownItem} from '@gitlab/ui' -import {generateGitLabIssueSync} from 'oc/vue_shared/client_utils/gitlab-issues' +import {generateGitLabIssueSync} from 'oc_vue_shared/client_utils/gitlab-issues' import OpenLiveApp from './open-live-app.vue' export default { props: { diff --git a/packages/oc-pages/dashboard/components/cells/environment-cell.vue b/packages/oc-pages/dashboard/components/cells/environment-cell.vue index 62c13057..1ca68c70 100644 --- a/packages/oc-pages/dashboard/components/cells/environment-cell.vue +++ b/packages/oc-pages/dashboard/components/cells/environment-cell.vue @@ -1,7 +1,7 @@ <script> import * as routes from '../../router/constants' import {mapGetters} from 'vuex' -import {DetectIcon} from 'oc/vue_shared/components/oc' +import {DetectIcon} from 'oc_vue_shared/oc-components' export default { components: { DetectIcon }, props: { diff --git a/packages/oc-pages/dashboard/components/cells/environment-status.vue b/packages/oc-pages/dashboard/components/cells/environment-status.vue index ee375359..9df1606e 100644 --- a/packages/oc-pages/dashboard/components/cells/environment-status.vue +++ b/packages/oc-pages/dashboard/components/cells/environment-status.vue @@ -1,5 +1,5 @@ <script> -import StatusIcon from 'oc/vue_shared/components/oc/Status.vue' +import StatusIcon from 'oc_vue_shared/components/oc/Status.vue' export default { name: 'EnvironmentStatus', diff --git a/packages/oc-pages/dashboard/components/cells/resource-cell.vue b/packages/oc-pages/dashboard/components/cells/resource-cell.vue index c83b778a..a7527b51 100644 --- a/packages/oc-pages/dashboard/components/cells/resource-cell.vue +++ b/packages/oc-pages/dashboard/components/cells/resource-cell.vue @@ -1,8 +1,8 @@ <script> import {mapGetters} from 'vuex' import * as routes from '../../router/constants' -import StatusIcon from 'oc/vue_shared/components/oc/Status.vue'; -import {generateCardId} from 'oc/vue_shared/util.mjs' +import StatusIcon from 'oc_vue_shared/components/oc/Status.vue'; +import {generateCardId} from 'oc_vue_shared/util.mjs' import DashboardRouterLink from "../../components/dashboard-router-link.vue" export default { diff --git a/packages/oc-pages/dashboard/components/cells/shared/deployment-status-icon.vue b/packages/oc-pages/dashboard/components/cells/shared/deployment-status-icon.vue index 11aebf4d..b1d15c55 100644 --- a/packages/oc-pages/dashboard/components/cells/shared/deployment-status-icon.vue +++ b/packages/oc-pages/dashboard/components/cells/shared/deployment-status-icon.vue @@ -1,5 +1,5 @@ <script> -import StatusIcon from 'oc/vue_shared/components/oc/Status.vue' +import StatusIcon from 'oc_vue_shared/components/oc/Status.vue' import {GlIcon, GlButton, GlTooltipDirective} from '@gitlab/ui' import _ from 'lodash' import {mapGetters} from 'vuex' diff --git a/packages/oc-pages/dashboard/components/create-environment-modal.vue b/packages/oc-pages/dashboard/components/create-environment-modal.vue index 37f97e8b..0ce1553f 100644 --- a/packages/oc-pages/dashboard/components/create-environment-modal.vue +++ b/packages/oc-pages/dashboard/components/create-environment-modal.vue @@ -2,7 +2,7 @@ import {mapGetters} from 'vuex' import EnvironmentCreationDialog from '../../project_overview/components/environment-creation-dialog.vue' import {GlModal} from '@gitlab/ui' -import {slugify, USER_HOME_PROJECT} from 'oc/vue_shared/util.mjs' +import {slugify, USER_HOME_PROJECT} from 'oc_vue_shared/util.mjs' import {__} from '~/locale' export default { name: 'CreateEnvironmentModal', diff --git a/packages/oc-pages/dashboard/components/share-resource-toggle.vue b/packages/oc-pages/dashboard/components/share-resource-toggle.vue index f65a40cf..5fe04cc3 100644 --- a/packages/oc-pages/dashboard/components/share-resource-toggle.vue +++ b/packages/oc-pages/dashboard/components/share-resource-toggle.vue @@ -1,7 +1,7 @@ <script> import {mapGetters, mapActions} from 'vuex' -import {DetectIcon} from 'oc/vue_shared/components/oc' -import {generateGitLabIssueSync} from 'oc/vue_shared/client_utils/gitlab-issues' +import {DetectIcon} from 'oc_vue_shared/oc-components' +import {generateGitLabIssueSync} from 'oc_vue_shared/client_utils/gitlab-issues' import {GlDropdown, GlDropdownItem, GlDropdownDivider} from '@gitlab/ui' export default { props: { diff --git a/packages/oc-pages/dashboard/components/tables/deployment-index-table.vue b/packages/oc-pages/dashboard/components/tables/deployment-index-table.vue index 7b5926d6..c14de34e 100644 --- a/packages/oc-pages/dashboard/components/tables/deployment-index-table.vue +++ b/packages/oc-pages/dashboard/components/tables/deployment-index-table.vue @@ -1,14 +1,14 @@ <script> -import TableComponent from 'oc/vue_shared/components/oc/table.vue' -import {OcTab, EnvironmentSelection, LocalDeploy} from 'oc/vue_shared/components/oc' +import TableComponent from 'oc_vue_shared/components/oc/table.vue' +import {OcTab, EnvironmentSelection, LocalDeploy} from 'oc_vue_shared/oc-components' import EnvironmentCell from '../cells/environment-cell.vue' import ResourceCell from '../cells/resource-cell.vue' import DeploymentControls from '../cells/deployment-controls.vue' import DeploymentStatusIcon from '../cells/shared/deployment-status-icon.vue' import LastDeploy from './deployment-index-table/last-deploy.vue' import {GlTabs, GlModal, GlFormInput, GlFormGroup} from '@gitlab/ui' -import {mapGetters, mapActions, mapMutations} from 'vuex' -import {triggerIncrementalDeployment} from 'oc/vue_shared/client_utils/pipelines' +import {mapGetters, mapActions} from 'vuex' +import {triggerIncrementalDeployment} from 'oc_vue_shared/client_utils/pipelines' import _ from 'lodash' import * as routes from '../../router/constants' import DashboardRouterLink from "../../components/dashboard-router-link.vue" @@ -19,7 +19,7 @@ function deploymentGroupBy(item) { let result try{ result = `${item.deployment.name}:${item.application.name}:${item.environment.name}` - } catch(e) { return } + } catch(e) {return } return result } @@ -152,10 +152,8 @@ export default { 'cloneDeployment', 'addUrlPoll', ]), - ...mapMutations(['createError']), async deploy() { await this.deployInto(this.deploymentParameters) - if(this.hasCriticalErrors) return const {deployment, environment} = this.target window.location.href = this.$router.resolve({ name: routes.OC_DASHBOARD_DEPLOYMENTS, @@ -170,7 +168,6 @@ export default { }, async undeploy() { await this.undeployFrom(this.deploymentParameters) - if(this.hasCriticalErrors) return const {deployment, environment} = this.target window.location.href = this.$router.resolve({ name: routes.OC_DASHBOARD_DEPLOYMENTS, @@ -240,7 +237,6 @@ export default { newDeploymentTitle: this.newDeploymentTitle, targetEnvironment, }) - if(this.hasCriticalErrors) return const redirectLocation = `/${this.getHomeProjectPath}/-/deployments/${this.cloneTargetEnvironment?.name}/${clonedDeploymentName}` window.location.href = redirectLocation return @@ -345,8 +341,7 @@ export default { 'getDeploymentTemplate', 'deploymentItemDirect', 'deleteDeploymentPreventedBy', - 'undeployPreventedBy', - 'hasCriticalErrors' + 'undeployPreventedBy' ]), intentToDeletePreventedBy() { if(this.intent != 'delete') return [] @@ -461,7 +456,7 @@ export default { for(const item of this.itemsSorted) { const deploymentItem = this.deploymentItem({item}) if(!deploymentItem) { - this.createError({message: `Deployment item not found for ${item?.deployment?.name}`, context: item, severity: 'major', issue: 'Unfurl GUI should not be considering these valid deployments'}) + console.error('deployment item not found for', item) continue } if(!tab.filter || tab.filter(deploymentItem)) { diff --git a/packages/oc-pages/dashboard/components/tables/environment-index-table.vue b/packages/oc-pages/dashboard/components/tables/environment-index-table.vue index 610292fc..c758f4cb 100644 --- a/packages/oc-pages/dashboard/components/tables/environment-index-table.vue +++ b/packages/oc-pages/dashboard/components/tables/environment-index-table.vue @@ -1,5 +1,5 @@ <script> -import TableComponent from 'oc/vue_shared/components/oc/table.vue' +import TableComponent from 'oc_vue_shared/components/oc/table.vue' import EnvironmentCell from '../cells/environment-cell.vue' import ApplicationCell from '../cells/application-cell.vue' import DeploymentCell from '../cells/deployment-cell.vue' diff --git a/packages/oc-pages/dashboard/dashboard.vue b/packages/oc-pages/dashboard/dashboard.vue index 98ae3cec..cc819483 100644 --- a/packages/oc-pages/dashboard/dashboard.vue +++ b/packages/oc-pages/dashboard/dashboard.vue @@ -1,16 +1,17 @@ <script> -import { FLASH_TYPES } from 'oc/vue_shared/client_utils/oc-flash'; +import { FLASH_TYPES } from 'oc_vue_shared/client_utils/oc-flash'; import {mapActions, mapMutations, mapGetters, mapState} from 'vuex' -import {lookupCloudProviderAlias} from 'oc/vue_shared/util.mjs' -import {deleteEnvironmentByName} from 'oc/vue_shared/client_utils/environments' -import {notFoundError} from 'oc/vue_shared/client_utils/error' +import {lookupCloudProviderAlias} from 'oc_vue_shared/util.mjs' +import {deleteEnvironmentByName} from 'oc_vue_shared/client_utils/environments' +import {notFoundError} from 'oc_vue_shared/client_utils/error' import {GlLoadingIcon} from '@gitlab/ui' import * as routes from './router/constants' +import ExperimentalSettingIndicator from 'oc_vue_shared/components/oc/experimental-settings-indicator.vue' const USER_TOURED_EXPLORE_PAGE = 'USER_TOURED_EXPLORE_PAGE' export default { name: 'Dashboard', data() {return {isLoaded: false, doNotRender: false}}, - components: {GlLoadingIcon}, + components: {GlLoadingIcon, ExperimentalSettingIndicator}, methods: { ...mapActions([ 'loadDashboard', @@ -47,17 +48,14 @@ export default { this.populateCurrentUser() this.populateDashboardProject() - - try { - await Promise.all([this.loadDashboard(), this.populateJobsList()]) + await Promise.all([this.loadDashboard(), this.populateJobsList()]) } catch(e) { - if(currentNamespace != this.getUsername) { - notFoundError() - console.error('displaying 404 for ', e) - } else { - throw(e) - } + if(currentNamespace != this.getUsername) { + notFoundError() + } else { + throw(e) + } } this.populateDeploymentItems(this.getDashboardItems) this.handleResize() @@ -82,8 +80,7 @@ export default { </script> <template> <div> - <oc-experimental-settings-indicator /> - <oc-unfurl-gui-errors /> + <experimental-setting-indicator /> <gl-loading-icon v-if="!isLoaded" label="Loading" size="lg" style="margin-top: 5em;" /> <router-view v-else-if="!doNotRender"/> </div> diff --git a/packages/oc-pages/dashboard/index.js b/packages/oc-pages/dashboard/index.js index 77b429fe..4dc91d16 100644 --- a/packages/oc-pages/dashboard/index.js +++ b/packages/oc-pages/dashboard/index.js @@ -5,15 +5,13 @@ import apolloProvider from './graphql'; import { GlToast, GlTooltipDirective } from '@gitlab/ui'; import store from './store'; import createRouter from './router'; -import { FLASH_TYPES } from 'oc/vue_shared/client_utils/oc-flash'; -import {setupTheme} from 'oc/vue_shared/theme' +import { FLASH_TYPES } from 'oc_vue_shared/client_utils/oc-flash'; +import {setupTheme} from 'oc_vue_shared/theme' import ElementUI, {Popover as ElPopover} from 'element-ui' // formily not finding popover correctly -import {OcComponents} from 'oc/vue_shared/components/oc/plugin' import '../project_overview/assets/global.css' // TODO move this somewhere better Vue.use(GlToast); Vue.use(ElementUI) -Vue.use(OcComponents) Vue.directive('gl-tooltip', GlTooltipDirective) Vue.component('el-popover', ElPopover) @@ -33,10 +31,6 @@ export default (elemId='js-table-component') => { const element = document.getElementById(elemId); window.gon = {...window.gon, ...element.dataset} - if(window.Cypress || sessionStorage['debug'] || sessionStorage['unfurl-gui:state']) { - window.$store = store - } - const vm = new Vue({ el: element, apolloProvider, @@ -47,5 +41,10 @@ export default (elemId='js-table-component') => { }, }); + + if(window.Cypress || sessionStorage['debug']) { + window.$store = vm.$store + } + return vm }; diff --git a/packages/oc-pages/dashboard/pages/deployment.vue b/packages/oc-pages/dashboard/pages/deployment.vue index 2134d0dd..044fbf47 100644 --- a/packages/oc-pages/dashboard/pages/deployment.vue +++ b/packages/oc-pages/dashboard/pages/deployment.vue @@ -1,20 +1,20 @@ <script> import {mapGetters, mapActions} from 'vuex' -import DeploymentResources from 'oc/vue_shared/components/oc/deployment-resources.vue' +import DeploymentResources from 'oc_vue_shared/components/oc/deployment-resources.vue' import DashboardBreadcrumbs from '../components/dashboard-breadcrumbs.vue' import ShareResourceToggle from '../components/share-resource-toggle.vue' -import {bus} from 'oc/vue_shared/bus' +import {bus} from 'oc_vue_shared/bus' import * as routes from '../router/constants' import {cloneDeep} from 'lodash' -import ConsoleWrapper from 'oc/vue_shared/components/console-wrapper.vue' +import ConsoleWrapper from 'oc_vue_shared/components/console-wrapper.vue' import {GlTabs, GlLoadingIcon} from '@gitlab/ui' -import {OcTab} from 'oc/vue_shared/components/oc' -import {getJobsData} from 'oc/vue_shared/client_utils/pipelines' -import {fetchProjectPipelines} from 'oc/vue_shared/client_utils/projects' -import {FLASH_TYPES} from 'oc/vue_shared/client_utils/oc-flash' -import {notFoundError} from 'oc/vue_shared/client_utils/error' -import {sleep} from 'oc/vue_shared/client_utils/misc' -import {DeploymentIndexTable} from 'oc/dashboard/components' +import {OcTab} from 'oc_vue_shared/oc-components' +import {getJobsData} from 'oc_vue_shared/client_utils/pipelines' +import {fetchProjectPipelines} from 'oc_vue_shared/client_utils/projects' +import {FLASH_TYPES} from 'oc_vue_shared/client_utils/oc-flash' +import {notFoundError} from 'oc_vue_shared/client_utils/error' +import {sleep} from 'oc_vue_shared/client_utils/misc' +import {DeploymentIndexTable} from 'oc_dashboard/components' export default { components: {DeploymentResources, DashboardBreadcrumbs, ConsoleWrapper, GlTabs, OcTab, DeploymentIndexTable, ShareResourceToggle, GlLoadingIcon}, @@ -37,7 +37,6 @@ export default { 'environmentsAreReady', 'pollingStatus', 'formattedDeploymentEta', - 'hasCriticalErrors', ]), breadcrumbItems() { return [ @@ -133,7 +132,6 @@ export default { if(this.deployment.__typename == 'DeploymentTemplate') { const projectPath = this.deployment.projectPath await this.fetchProject({projectPath}) - if(this.hasCriticalErrors) return this.useProjectState({root: cloneDeep({...this.state, DeploymentEnvironment}), shouldMerge: true, projectPath}) } else { console.assert(this.deployment.__typename == 'Deployment', 'Expected deployment to be either DeploymentTemplate or Deployment') diff --git a/packages/oc-pages/dashboard/pages/environment.vue b/packages/oc-pages/dashboard/pages/environment.vue index 39c494cd..3125772e 100644 --- a/packages/oc-pages/dashboard/pages/environment.vue +++ b/packages/oc-pages/dashboard/pages/environment.vue @@ -1,16 +1,16 @@ <script> import * as routes from '../router/constants' -import { FLASH_TYPES } from 'oc/vue_shared/client_utils/oc-flash' +import { FLASH_TYPES } from 'oc_vue_shared/client_utils/oc-flash' import {mapActions, mapGetters, mapMutations} from 'vuex' import DashboardBreadcrumbs from '../components/dashboard-breadcrumbs.vue' import {GlFormInput, GlButton, GlIcon, GlTabs, GlModal} from '@gitlab/ui' import {Tooltip as ElTooltip} from 'element-ui' -import {OcTab, DetectIcon, CiVariableSettings, DeploymentResources} from 'oc/vue_shared/components/oc' +import {OcTab, DetectIcon, CiVariableSettings, OcPropertiesList, DeploymentResources} from 'oc_vue_shared/oc-components' import _ from 'lodash' import { __, n__ } from '~/locale' -import {lookupCloudProviderAlias, cloudProviderFriendlyName, slugify} from 'oc/vue_shared/util.mjs' -import {deleteEnvironment} from 'oc/vue_shared/client_utils/environments' -import {notFoundError} from 'oc/vue_shared/client_utils/error' +import {lookupCloudProviderAlias, cloudProviderFriendlyName, slugify} from 'oc_vue_shared/util.mjs' +import {deleteEnvironment} from 'oc_vue_shared/client_utils/environments' +import {notFoundError} from 'oc_vue_shared/client_utils/error' import { redirectTo } from '~/lib/utils/url_utility'; @@ -55,6 +55,7 @@ export default { OcTab, CiVariableSettings, DashboardBreadcrumbs, + OcPropertiesList, GlTabs, GlFormInput, GlButton, GlIcon, GlModal, DeploymentResources, DetectIcon, diff --git a/packages/oc-pages/dashboard/pages/home.vue b/packages/oc-pages/dashboard/pages/home.vue index 2c1f53d8..b0994642 100644 --- a/packages/oc-pages/dashboard/pages/home.vue +++ b/packages/oc-pages/dashboard/pages/home.vue @@ -1,5 +1,5 @@ <script> -import TableComponent from 'oc/vue_shared/components/oc/table.vue'; +import TableComponent from 'oc_vue_shared/components/oc/table.vue'; import QuantityCard from '../components/quantity-card.vue' import ApplicationCell from '../components/cells/application-cell.vue' diff --git a/packages/oc-pages/dashboard/router/index.js b/packages/oc-pages/dashboard/router/index.js index 8f117166..1e0261f2 100644 --- a/packages/oc-pages/dashboard/router/index.js +++ b/packages/oc-pages/dashboard/router/index.js @@ -3,7 +3,7 @@ import VueRouter from 'vue-router'; import {baseRouteNaive} from './base-route'; import { joinPaths } from '~/lib/utils/url_utility'; import routes from './routes'; -import { PageNotFound } from 'oc/vue_shared/components/oc' +import { PageNotFound } from 'oc_vue_shared/oc-components' import * as ROUTES from './constants' Vue.use(VueRouter); @@ -87,7 +87,7 @@ export default function createRouter() { } catch(e) { console.error("Couldn't set class on side navigation;", e.message) } - if(typeof router.app.$store?.getters?.getRouterHook == 'function') { + if(router.app.$store) { router.app.$store.getters.getRouterHook(to, from, next) } else next() diff --git a/packages/oc-pages/dashboard/store/index.js b/packages/oc-pages/dashboard/store/index.js index db90817b..3f5e2c3c 100644 --- a/packages/oc-pages/dashboard/store/index.js +++ b/packages/oc-pages/dashboard/store/index.js @@ -10,9 +10,8 @@ import deployment_template_updates from '../../project_overview/store/modules/de import template_resources from '../../project_overview/store/modules/template_resources' import table_data from './modules/table_data' import deployment_info from './modules/deployment-info' -import health_check from 'oc/vue_shared/store_modules/health-check' -import errors from 'oc/vue_shared/store_modules/errors' -import {createCiVariablesStore} from 'oc/vue_shared/components/oc' +import health_check from 'oc_vue_shared/store_modules/health-check' +import {createCiVariablesStore} from 'oc_vue_shared/oc-components' Vue.use(Vuex); @@ -28,8 +27,7 @@ const modules = { table_data, deployment_info, user_settings, - health_check, - errors + health_check } const variableDataEl = document.querySelector('#js-oc-ci-variables') diff --git a/packages/oc-pages/dashboard/store/modules/deployment-info.js b/packages/oc-pages/dashboard/store/modules/deployment-info.js index 91eb9d65..d8b202b5 100644 --- a/packages/oc-pages/dashboard/store/modules/deployment-info.js +++ b/packages/oc-pages/dashboard/store/modules/deployment-info.js @@ -70,31 +70,18 @@ const actions = { itemKey = `${item.context.environment.name}:${item.context.deployment.name}` } catch(e) {continue} if(!dict[itemKey]) { - function recordDeploymentItem() { - const context = {} - context.environment = item.context.environment - context.deployment = item.context.deployment - context.application = item.context.application - context.deployPath = rootGetters.lookupDeployPath(context.deployment.name, context.environment.name) + const context = {} + context.environment = item.context.environment + context.deployment = item.context.deployment + context.application = item.context.application + context.deployPath = rootGetters.lookupDeployPath(context.deployment.name, context.environment.name) - if(!context.deployPath) throw new Error(`Couldn't look up deploy path for ${context.deployment.name} in ${context.environment.name}`) + if(!context.deployPath) throw new Error(`Couldn't look up deploy path for ${context.deployment.name} in ${context.environment.name}`) - context.job = getters.jobByPipelineId(context.deployPath?.pipeline?.id) - context.projectPath = rootGetters.getHomeProjectPath - context.namespace = rootGetters.getCurrentNamespace - dict[itemKey] = new DeploymentItem(context) - } - - try { - recordDeploymentItem() - } catch({message}) { - commit( - 'createError', { - message, - severity: 'major', - context: item - }, {root: true}) - } + context.job = getters.jobByPipelineId(context.deployPath?.pipeline?.id) + context.projectPath = rootGetters.getHomeProjectPath + context.namespace = rootGetters.getCurrentNamespace + dict[itemKey] = new DeploymentItem(context) } } commit('setDeploymentItems', dict) diff --git a/packages/oc-pages/dashboard/store/modules/deployment-info/deployment-item.js b/packages/oc-pages/dashboard/store/modules/deployment-info/deployment-item.js index 9d0279ee..728be372 100644 --- a/packages/oc-pages/dashboard/store/modules/deployment-info/deployment-item.js +++ b/packages/oc-pages/dashboard/store/modules/deployment-info/deployment-item.js @@ -1,6 +1,6 @@ import axios from '~/lib/utils/axios_utils' import * as routes from '../../../router/constants' -import {fetchCommit, fetchProjectInfo} from 'oc/vue_shared/client_utils/projects' +import {fetchCommit, fetchProjectInfo} from 'oc_vue_shared/client_utils/projects' export default class DeploymentItem { constructor(context) { Object.assign(this, context) diff --git a/packages/oc-pages/dashboard/store/modules/table_data.js b/packages/oc-pages/dashboard/store/modules/table_data.js index c186fd4c..6771c7ed 100644 --- a/packages/oc-pages/dashboard/store/modules/table_data.js +++ b/packages/oc-pages/dashboard/store/modules/table_data.js @@ -1,6 +1,5 @@ -import {deepFreeze} from 'oc/vue_shared/client_utils/misc' -import {fetchProjectInfo} from 'oc/vue_shared/client_utils/projects' -import {useImportedStateOnBreakpointOrElse} from 'oc/vue_shared/storage-keys' +import {deepFreeze} from 'oc_vue_shared/client_utils/misc' +import {fetchProjectInfo} from 'oc_vue_shared/client_utils/projects' import _ from 'lodash' const state = () => ({ @@ -24,11 +23,7 @@ const actions = { async loadDashboard({commit, dispatch, rootGetters}, options={}) { const {fetchPolicy} = options commit('setDashboardLoaded', false) - - await useImportedStateOnBreakpointOrElse('loadDashboard', async() => { - await dispatch('ocFetchEnvironments', {fullPath: rootGetters.getHomeProjectPath, fetchPolicy}); - }) - + await dispatch('ocFetchEnvironments', {fullPath: rootGetters.getHomeProjectPath, fetchPolicy}); const items = []; let deployments = 0 let applications = 0 @@ -64,8 +59,8 @@ const actions = { let projectPath try { projectPath = Object.values(frozenDeploymentDict.DeploymentTemplate)[0].projectPath - } catch(context) { - commit('createError', {message: `@loadDashboard: Couldn't find project path`, severity: 'minor', context}) + } catch(e) { + console.error(e) } dispatch('useProjectState', {root: clonedDeploymentDict, projectPath}) @@ -118,7 +113,7 @@ const actions = { try { application.projectIcon = (await fetchProjectInfo(encodeURIComponent(application.projectPath)))?.avatar_url } catch(e) { - commit('createError', {message: `@loadDashboard: Couldn't fetch project icon for ${application.projectPath}`, severity: 'minor', context: e}) + console.error(`@loadDashboard: Couldn't fetch project icon for ${application.projectPath}`, e) } } @@ -128,13 +123,7 @@ const actions = { context.application = application context.deployment = deployment - const deployPath = rootGetters.lookupDeployPath(context.deployment?.name, context.environment?.name) - if(!deployPath) { - const message = `Couldn't look up deploy path for ${context.deployment?.name} in ${context.environment?.name}` - commit('createError', {message, severity: 'major', context}) - continue - } - + //for(const resource of rootGetters.getResources) { for(const resource of deployment.resources) { const i = ++iterationCounter const resourceTemplate = rootGetters.resolveResourceTemplate(resource.template); diff --git a/packages/oc-pages/project_overview/components/deployed-blueprints.vue b/packages/oc-pages/project_overview/components/deployed-blueprints.vue index 7d33c396..98d06bb3 100644 --- a/packages/oc-pages/project_overview/components/deployed-blueprints.vue +++ b/packages/oc-pages/project_overview/components/deployed-blueprints.vue @@ -1,7 +1,7 @@ <script> import {mapGetters} from 'vuex' import {GlCard, GlIcon} from '@gitlab/ui' -import {lookupCloudProviderAlias} from 'oc/vue_shared/util.mjs' +import {lookupCloudProviderAlias} from 'oc_vue_shared/util.mjs' const DISPLAY_MAP = { [lookupCloudProviderAlias('gcp')]: 'Google Cloud', [lookupCloudProviderAlias('aws')]: 'AWS', diff --git a/packages/oc-pages/project_overview/components/environment-creation-dialog.vue b/packages/oc-pages/project_overview/components/environment-creation-dialog.vue index 621448c7..68c2da6b 100644 --- a/packages/oc-pages/project_overview/components/environment-creation-dialog.vue +++ b/packages/oc-pages/project_overview/components/environment-creation-dialog.vue @@ -2,13 +2,13 @@ import axios from '~/lib/utils/axios_utils'; import { __ } from '~/locale'; import _ from 'lodash' -import { slugify, USER_HOME_PROJECT } from 'oc/vue_shared/util.mjs' -import {postGitlabEnvironmentForm, initUnfurlEnvironment} from 'oc/vue_shared/client_utils/environments' -import {projectPathToHomeRoute} from 'oc/vue_shared/client_utils/dashboard' +import { slugify, USER_HOME_PROJECT } from 'oc_vue_shared/util.mjs' +import {postGitlabEnvironmentForm, initUnfurlEnvironment} from 'oc_vue_shared/client_utils/environments' +import {projectPathToHomeRoute} from 'oc_vue_shared/client_utils/dashboard' import {GlFormGroup, GlFormInput, GlDropdown, GlDropdownItem, GlDropdownDivider, GlFormCheckbox} from '@gitlab/ui' -import {DetectIcon, ErrorSmall} from 'oc/vue_shared/components/oc' -import {lookupCloudProviderAlias} from 'oc/vue_shared/util.mjs' -import {token} from 'oc/vue_shared/compat.js' +import {DetectIcon, ErrorSmall} from 'oc_vue_shared/oc-components' +import {lookupCloudProviderAlias} from 'oc_vue_shared/util.mjs' +import {token} from 'oc_vue_shared/compat.js' import {mapGetters, mapActions} from 'vuex' diff --git a/packages/oc-pages/project_overview/components/main.vue b/packages/oc-pages/project_overview/components/main.vue index a1e0ee75..44a66ddf 100644 --- a/packages/oc-pages/project_overview/components/main.vue +++ b/packages/oc-pages/project_overview/components/main.vue @@ -1,8 +1,9 @@ <script> -import { FLASH_TYPES } from 'oc/vue_shared/client_utils/oc-flash'; +import { FLASH_TYPES } from 'oc_vue_shared/client_utils/oc-flash'; import { __ } from '~/locale'; import gql from 'graphql-tag' import graphqlClient from '../graphql'; +import ExperimentalSettingIndicator from 'oc_vue_shared/components/oc/experimental-settings-indicator.vue' const ERROR_CONTEXT = { @@ -12,6 +13,9 @@ const ERROR_CONTEXT = { export default { name: 'MainComponent', // TODO move this into page level components + components: { + ExperimentalSettingIndicator + }, async beforeCreate() { let errorContext @@ -93,8 +97,7 @@ export default { <template> <!-- <gl-loading-icon v-if="!fetchingComplete" label="Loading" size="lg" style="margin-top: 5em;" /> --> <div id="OcAppDeployments"> - <oc-experimental-settings-indicator /> - <oc-unfurl-gui-errors /> + <experimental-setting-indicator /> <router-view /> </div> </template> diff --git a/packages/oc-pages/project_overview/components/open-cloud-deployments.vue b/packages/oc-pages/project_overview/components/open-cloud-deployments.vue index 25f00050..20be5b7f 100644 --- a/packages/oc-pages/project_overview/components/open-cloud-deployments.vue +++ b/packages/oc-pages/project_overview/components/open-cloud-deployments.vue @@ -1,8 +1,8 @@ <script> import {mapGetters} from 'vuex' -import TableComponent from 'oc/vue_shared/components/oc/table.vue' -import {DetectIcon} from 'oc/vue_shared/components/oc' -import {lookupCloudProviderAlias, cloudProviderFriendlyName} from 'oc/vue_shared/util.mjs' +import TableComponent from 'oc_vue_shared/components/oc/table.vue' +import {DetectIcon} from 'oc_vue_shared/oc-components' +import {lookupCloudProviderAlias, cloudProviderFriendlyName} from 'oc_vue_shared/util.mjs' export default { name: 'OpenCloudDeployments', diff --git a/packages/oc-pages/project_overview/components/project_description.vue b/packages/oc-pages/project_overview/components/project_description.vue index 4ad895b7..a7f1a82b 100644 --- a/packages/oc-pages/project_overview/components/project_description.vue +++ b/packages/oc-pages/project_overview/components/project_description.vue @@ -3,7 +3,7 @@ import { GlTabs, GlTab, GlBadge } from "@gitlab/ui"; import { __ } from '~/locale'; import commonMethods from './mixins/commonMethods'; import {mapGetters, mapState} from 'vuex' -import {OcTab, DetectIcon} from 'oc/vue_shared/components/oc' +import {OcTab, DetectIcon} from 'oc_vue_shared/oc-components' export default { name: 'ProjectDescriptionBox', diff --git a/packages/oc-pages/project_overview/components/shared/dependency.vue b/packages/oc-pages/project_overview/components/shared/dependency.vue index 31f5ef3d..ce12d491 100644 --- a/packages/oc-pages/project_overview/components/shared/dependency.vue +++ b/packages/oc-pages/project_overview/components/shared/dependency.vue @@ -1,8 +1,8 @@ <script> import {GlButton, GlTooltipDirective} from '@gitlab/ui' -import {DetectIcon, StatusIcon} from 'oc/vue_shared/components/oc' +import {DetectIcon, StatusIcon} from 'oc_vue_shared/oc-components' import {mapGetters, mapActions} from 'vuex' -import {bus} from 'oc/vue_shared/bus' +import {bus} from 'oc_vue_shared/bus' import { __ } from '~/locale'; // TODO clean up dependency vs requirement in here! diff --git a/packages/oc-pages/project_overview/components/shared/logos_cloud.vue b/packages/oc-pages/project_overview/components/shared/logos_cloud.vue index c21d4230..9c5b8ef7 100644 --- a/packages/oc-pages/project_overview/components/shared/logos_cloud.vue +++ b/packages/oc-pages/project_overview/components/shared/logos_cloud.vue @@ -6,7 +6,7 @@ import SmallAWS from '../../assets/aws-small.svg?inline' import SmallGCP from '../../assets/gcp-small.svg?inline' import SmallAzure from '../../assets/azure-small.svg?inline' -import {lookupCloudProviderAlias} from 'oc/vue_shared/util.mjs' +import {lookupCloudProviderAlias} from 'oc_vue_shared/util.mjs' const MAPPINGS = { [lookupCloudProviderAlias('gcp')]: GCP, diff --git a/packages/oc-pages/project_overview/components/shared/oc_card.vue b/packages/oc-pages/project_overview/components/shared/oc_card.vue index 84b340a9..90db6ce2 100644 --- a/packages/oc-pages/project_overview/components/shared/oc_card.vue +++ b/packages/oc-pages/project_overview/components/shared/oc_card.vue @@ -2,10 +2,10 @@ import { GlButton, GlCard, GlIcon, GlBadge, GlTooltipDirective} from "@gitlab/ui"; import commonMethods from '../mixins/commonMethods'; import {mapGetters} from 'vuex' -import { bus } from 'oc/vue_shared/bus'; -import StatusIcon from 'oc/vue_shared/components/oc/Status.vue' -import {DetectIcon} from 'oc/vue_shared/components/oc' -import {generateCardId} from 'oc/vue_shared/util.mjs' +import { bus } from 'oc_vue_shared/bus'; +import StatusIcon from 'oc_vue_shared/components/oc/Status.vue' +import {DetectIcon} from 'oc_vue_shared/oc-components' +import {generateCardId} from 'oc_vue_shared/util.mjs' import {Tooltip as ElTooltip} from 'element-ui' import { __ } from '~/locale'; diff --git a/packages/oc-pages/project_overview/components/shared/oc_inputs.vue b/packages/oc-pages/project_overview/components/shared/oc_inputs.vue index b70f8a03..79d96cb5 100644 --- a/packages/oc-pages/project_overview/components/shared/oc_inputs.vue +++ b/packages/oc-pages/project_overview/components/shared/oc_inputs.vue @@ -1,13 +1,13 @@ <script> import _ from 'lodash'; -import {bus} from 'oc/vue_shared/bus'; +import {bus} from 'oc_vue_shared/bus'; import {__} from '~/locale'; import {mapActions, mapMutations, mapGetters} from 'vuex' import {FormProvider, createSchemaField} from "@formily/vue"; import {FormLayout, FormItem, ArrayItems, Input, InputNumber, Checkbox, Select, Password, Editable, Space} from "@formily/element"; import {Card as ElCard} from 'element-ui' import {createForm, onFieldInputValueChange} from "@formily/core"; -import {tryResolveDirective} from 'oc/vue_shared/lib' +import {tryResolveDirective} from 'oc_vue_shared/lib' import {getCustomTooltip} from './oc_inputs' diff --git a/packages/oc-pages/project_overview/components/shared/oc_inputs/GithubMirroredRepoImageSource.vue b/packages/oc-pages/project_overview/components/shared/oc_inputs/GithubMirroredRepoImageSource.vue index e1c4b8b4..646a1e32 100644 --- a/packages/oc-pages/project_overview/components/shared/oc_inputs/GithubMirroredRepoImageSource.vue +++ b/packages/oc-pages/project_overview/components/shared/oc_inputs/GithubMirroredRepoImageSource.vue @@ -4,13 +4,17 @@ import gql from 'graphql-tag' import graphqlClient from 'oc/graphql-shim' import axios from '~/lib/utils/axios_utils' import {Autocomplete as ElAutocomplete, Card as ElCard, Checkbox as ElCheckbox} from 'element-ui' -import {fetchContainerRepositories, fetchRepositoryBranches, fetchProjectInfo} from 'oc/vue_shared/client_utils/projects' -import {triggerPipeline} from 'oc/vue_shared/client_utils/pipelines' -import {GithubImportHandler, importStatus, oauthStatus} from 'oc/vue_shared/client_utils/github-import' +import {fetchContainerRepositories, fetchRepositoryBranches, fetchProjectInfo} from 'oc_vue_shared/client_utils/projects' +import {triggerPipeline} from 'oc_vue_shared/client_utils/pipelines' +import {GithubImportHandler, importStatus, oauthStatus} from 'oc_vue_shared/client_utils/github-import' import {mapMutations, mapActions, mapGetters, mapState} from 'vuex' -import GithubAuth from 'oc/vue_shared/components/oc/github-auth.vue' -import ImportButton from 'oc/vue_shared/components/oc/import-button.vue' +import GithubAuth from 'oc_vue_shared/components/oc/github-auth.vue' +import ImportButton from 'oc_vue_shared/components/oc/import-button.vue' +import DeploymentScheduler from '../../../../vue_shared/components/oc/deployment-scheduler.vue' +import {OcPropertiesList} from 'oc_vue_shared/oc-components' +// webpack can't figure this out +// import {OcPropertiesList, DeploymentScheduler} from 'oc_vue_shared/oc-components' import {connectedRepo} from './mixins' @@ -26,7 +30,7 @@ function callbackFilter(query, items) { export default { name: 'GithubMirroredRepoImageSource', - components: {ElAutocomplete, GithubAuth, ImportButton, ElCheckbox}, + components: {ElAutocomplete, GithubAuth, ImportButton, ElCheckbox, OcPropertiesList, DeploymentScheduler}, mixins: [connectedRepo], props: { card: Object, @@ -265,7 +269,7 @@ export default { <h4>Existing properties:</h4> <oc-properties-list :properties="displayableCardProperties"/> - <oc-deployment-scheduler v-if="project_id" :deploymentName="getDeploymentTemplate.name" :resourceName="card.name" :upstreamProject="project_id"/> + <deployment-scheduler v-if="project_id" :deploymentName="getDeploymentTemplate.name" :resourceName="card.name" :upstreamProject="project_id"/> </template> <div v-if="isExternalUser"> <h3>Your profile must be set to developer mode to deploy with GitHub...</h3> @@ -299,7 +303,7 @@ export default { </div> </div> </div> - <oc-deployment-scheduler v-if="project_id" :deploymentName="getDeploymentTemplate.name" :resourceName="card.name" :upstreamProject="project_id"/> + <deployment-scheduler v-if="project_id" :deploymentName="getDeploymentTemplate.name" :resourceName="card.name" :upstreamProject="project_id"/> </div> </github-auth> </el-card> diff --git a/packages/oc-pages/project_overview/components/shared/oc_inputs/LocalImageRepoSource.vue b/packages/oc-pages/project_overview/components/shared/oc_inputs/LocalImageRepoSource.vue index 6426d0fd..5d0bd3ef 100644 --- a/packages/oc-pages/project_overview/components/shared/oc_inputs/LocalImageRepoSource.vue +++ b/packages/oc-pages/project_overview/components/shared/oc_inputs/LocalImageRepoSource.vue @@ -2,8 +2,8 @@ import gql from 'graphql-tag' import graphqlClient from 'oc/graphql-shim' import {Autocomplete as ElAutocomplete, Input as ElInput, Card as ElCard} from 'element-ui' -import {fetchProjects, fetchRegistryRepositories, fetchContainerRepositories, fetchProjectInfo} from 'oc/vue_shared/client_utils/projects' -import {toDepTokenEnvKey} from 'oc/vue_shared/client_utils/envvars' +import {fetchProjects, fetchRegistryRepositories, fetchContainerRepositories, fetchProjectInfo} from 'oc_vue_shared/client_utils/projects' +import {toDepTokenEnvKey} from 'oc_vue_shared/client_utils/envvars' import {mapGetters, mapActions, mapMutations} from 'vuex' import DeploymentScheduler from '../../../../vue_shared/components/oc/deployment-scheduler.vue' diff --git a/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCNamedDNSZone.vue b/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCNamedDNSZone.vue index d7547ea4..deb0a435 100644 --- a/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCNamedDNSZone.vue +++ b/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCNamedDNSZone.vue @@ -1,10 +1,10 @@ <script> import {mapGetters, mapActions} from 'vuex' -import {sleep} from 'oc/vue_shared/client_utils/misc' +import {sleep} from 'oc_vue_shared/client_utils/misc' import {Card as ElCard, Input as ElInput, Button as ElButton, Tooltip as ElTooltip} from 'element-ui' -import { XhrIFrame } from 'oc/vue_shared/client_utils/crossorigin-xhr' -import CodeClipboard from 'oc/vue_shared/components/oc/code-clipboard.vue' -import ErrorSmall from 'oc/vue_shared/components/oc/ErrorSmall.vue' +import { XhrIFrame } from 'oc_vue_shared/client_utils/crossorigin-xhr' +import CodeClipboard from 'oc_vue_shared/components/oc/code-clipboard.vue' +import ErrorSmall from 'oc_vue_shared/components/oc/ErrorSmall.vue' import {hasUpdates} from './mixins' import _ from 'lodash' diff --git a/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCloudMirroredRepoImageSource.vue b/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCloudMirroredRepoImageSource.vue index 2815b246..f1b9740d 100644 --- a/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCloudMirroredRepoImageSource.vue +++ b/packages/oc-pages/project_overview/components/shared/oc_inputs/UnfurlCloudMirroredRepoImageSource.vue @@ -1,8 +1,8 @@ <script> import axios from '~/lib/utils/axios_utils' import {mapActions, mapMutations, mapGetters} from 'vuex' -import {toDepTokenEnvKey} from 'oc/vue_shared/client_utils/envvars' -import {fetchProjects, fetchRepositoryBranches, fetchProjectInfo} from 'oc/vue_shared/client_utils/projects' +import {toDepTokenEnvKey} from 'oc_vue_shared/client_utils/envvars' +import {fetchProjects, fetchRepositoryBranches, fetchProjectInfo} from 'oc_vue_shared/client_utils/projects' import DeploymentScheduler from '../../../../vue_shared/components/oc/deployment-scheduler.vue' import {connectedRepo} from './mixins' diff --git a/packages/oc-pages/project_overview/components/shared/oc_inputs/mixins.js b/packages/oc-pages/project_overview/components/shared/oc_inputs/mixins.js index da9cc287..59336846 100644 --- a/packages/oc-pages/project_overview/components/shared/oc_inputs/mixins.js +++ b/packages/oc-pages/project_overview/components/shared/oc_inputs/mixins.js @@ -1,5 +1,5 @@ -import {toDepTokenEnvKey} from 'oc/vue_shared/client_utils/envvars' -import {fetchProjectInfo} from 'oc/vue_shared/client_utils/projects' +import {toDepTokenEnvKey} from 'oc_vue_shared/client_utils/envvars' +import {fetchProjectInfo} from 'oc_vue_shared/client_utils/projects' async function updateValue(propertyName) { if(!this.getStatus) { diff --git a/packages/oc-pages/project_overview/components/shared/oc_list.vue b/packages/oc-pages/project_overview/components/shared/oc_list.vue index 1a833897..8189e613 100644 --- a/packages/oc-pages/project_overview/components/shared/oc_list.vue +++ b/packages/oc-pages/project_overview/components/shared/oc_list.vue @@ -1,9 +1,14 @@ <script> import { GlTabs, GlIcon, GlButton } from '@gitlab/ui'; -import {DetectIcon} from 'oc/vue_shared/components/oc' +import {DetectIcon, OcPropertiesList} from 'oc_vue_shared/oc-components' + +// webpack gets confused with these two +import OcTab from 'oc_vue_shared/components/oc/oc-tab.vue' +import IncrementalDeploymentSwitch from 'oc_vue_shared/components/oc/incremental-deployment-switch.vue' +// import OcInputs from './oc_inputs.vue' -import { bus } from 'oc/vue_shared/bus'; +import { bus } from 'oc_vue_shared/bus'; import { __ } from '~/locale'; import commonMethods from '../mixins/commonMethods'; import { mapGetters, mapActions } from 'vuex' @@ -14,8 +19,11 @@ export default { name: 'OcList', components: { GlTabs, + OcTab, + OcPropertiesList, OcInputs, Dependency, + IncrementalDeploymentSwitch }, mixins: [commonMethods], @@ -317,7 +325,7 @@ export default { </oc-tab> <oc-tab v-if="shouldRenderInputs && !customInputComponent" title="Inputs" :title-testid="`tab-inputs-${_card.name}`" :titleCount="properties.length"> <oc-properties-list v-if="_readonly" :container-style="propertiesStyle" :properties="properties"> - <template #Incremental_Deploy> <oc-incremental-deployment-switch :card="_card" /> </template> + <template #Incremental_Deploy> <incremental-deployment-switch :card="_card" /> </template> </oc-properties-list> <oc-inputs v-else :card="_card" /> @@ -327,13 +335,13 @@ export default { </oc-tab> <oc-tab v-if="shouldRenderAttributes" title="Attributes" :titleCount="attributes.length"> <oc-properties-list :container-style="propertiesStyle" :properties="attributes"> - <template #Incremental_Deploy> <oc-incremental-deployment-switch :card="card" /> </template> + <template #Incremental_Deploy> <incremental-deployment-switch :card="card" /> </template> </oc-properties-list> </oc-tab> <oc-tab v-if="shouldRenderOutputs" title="Outputs" :titleCount="_card.outputs.length"> <oc-properties-list :container-style="propertiesStyle" :card="_card" property="outputs"> <!-- not sure this template would ever be reached --> - <template #Incremental_Deploy> <oc-incremental-deployment-switch :card="card" /> </template> + <template #Incremental_Deploy> <incremental-deployment-switch :card="card" /> </template> </oc-properties-list> </oc-tab> <oc-tab v-if="shouldRenderExtras" title="Extras" :title-testid="`tab-extras-${_card.name}`" :titleCount="extras.length"> diff --git a/packages/oc-pages/project_overview/components/shared/oc_list_resource.vue b/packages/oc-pages/project_overview/components/shared/oc_list_resource.vue index f2be93f3..653cd83a 100644 --- a/packages/oc-pages/project_overview/components/shared/oc_list_resource.vue +++ b/packages/oc-pages/project_overview/components/shared/oc_list_resource.vue @@ -2,7 +2,7 @@ import { GlFormRadio, GlIcon } from '@gitlab/ui'; import OcListResourceIcon from './oc_list_resource/icon.vue'; import { __ } from '~/locale'; -import {lookupCloudProviderAlias} from 'oc/vue_shared/util.mjs' +import {lookupCloudProviderAlias} from 'oc_vue_shared/util.mjs' import {mapGetters} from 'vuex'; const CLOUD_PROVIDER_NAMES = { diff --git a/packages/oc-pages/project_overview/components/shared/oc_list_resource/icon.vue b/packages/oc-pages/project_overview/components/shared/oc_list_resource/icon.vue index bc3dd91d..737a94b5 100644 --- a/packages/oc-pages/project_overview/components/shared/oc_list_resource/icon.vue +++ b/packages/oc-pages/project_overview/components/shared/oc_list_resource/icon.vue @@ -1,6 +1,6 @@ <script> import commonMethods from '../../mixins/commonMethods.js' -import {DetectIcon} from 'oc/vue_shared/components/oc' +import {DetectIcon} from 'oc_vue_shared/oc-components' export default { name: 'OcListResourceIcon', mixins: [commonMethods], diff --git a/packages/oc-pages/project_overview/components/shared/oc_template_header.vue b/packages/oc-pages/project_overview/components/shared/oc_template_header.vue index f460fb3d..8725b769 100644 --- a/packages/oc-pages/project_overview/components/shared/oc_template_header.vue +++ b/packages/oc-pages/project_overview/components/shared/oc_template_header.vue @@ -1,9 +1,9 @@ <script> import { __ } from '~/locale'; -import {DetectIcon} from 'oc/vue_shared/components/oc' +import {DetectIcon} from 'oc_vue_shared/oc-components' import {mapGetters} from 'vuex' -import {ProjectIcon} from 'oc/vue_shared/components/oc' -import {projectPathToHomeRoute} from 'oc/vue_shared/client_utils/dashboard' +import {ProjectIcon} from 'oc_vue_shared/oc-components' +import {projectPathToHomeRoute} from 'oc_vue_shared/client_utils/dashboard' export default { name: 'OcTemplateHeader', diff --git a/packages/oc-pages/project_overview/components/template/deploy_button.vue b/packages/oc-pages/project_overview/components/template/deploy_button.vue index 495e4125..ecbc3719 100644 --- a/packages/oc-pages/project_overview/components/template/deploy_button.vue +++ b/packages/oc-pages/project_overview/components/template/deploy_button.vue @@ -3,7 +3,7 @@ import { mapGetters } from 'vuex' import { Tooltip as ElTooltip } from 'element-ui' import { GlButton, GlButtonGroup, GlDropdown, GlDropdownItem } from '@gitlab/ui'; -import ErrorSmall from 'oc/vue_shared/components/oc/ErrorSmall.vue' +import ErrorSmall from 'oc_vue_shared/components/oc/ErrorSmall.vue' export default { name: 'DeployButton', diff --git a/packages/oc-pages/project_overview/components/your-deployments.vue b/packages/oc-pages/project_overview/components/your-deployments.vue index 55688941..6478cb0a 100644 --- a/packages/oc-pages/project_overview/components/your-deployments.vue +++ b/packages/oc-pages/project_overview/components/your-deployments.vue @@ -1,7 +1,7 @@ <script> import { GlCard, GlIcon } from '@gitlab/ui' import {mapState, mapGetters} from 'vuex' -import {DeploymentIndexTable} from 'oc/dashboard/components' +import {DeploymentIndexTable} from 'oc_dashboard/components' /* const fields = [ { diff --git a/packages/oc-pages/project_overview/index.js b/packages/oc-pages/project_overview/index.js index 8f9b7f60..b90d0275 100644 --- a/packages/oc-pages/project_overview/index.js +++ b/packages/oc-pages/project_overview/index.js @@ -6,12 +6,10 @@ import store from './store'; import {GlTooltipDirective} from '@gitlab/ui'; import __ from '~/locale'; import ElementUI from 'element-ui' -import {OcComponents} from 'oc/vue_shared/components/oc/plugin' -import {setupTheme} from 'oc/vue_shared/theme' +import {setupTheme} from 'oc_vue_shared/theme' import './assets/global.css'; -Vue.use(OcComponents) Vue.use(ElementUI) Vue.directive('gl-tooltip', GlTooltipDirective) diff --git a/packages/oc-pages/project_overview/pages/projects/index.vue b/packages/oc-pages/project_overview/pages/projects/index.vue index a61e61ec..a0ce7dca 100644 --- a/packages/oc-pages/project_overview/pages/projects/index.vue +++ b/packages/oc-pages/project_overview/pages/projects/index.vue @@ -1,7 +1,7 @@ <script> import createFlash, { FLASH_TYPES } from '~/flash'; import { GlIcon, GlCard, GlTabs, GlModal, GlModalDirective, GlDropdown, GlFormGroup, GlFormInput, GlDropdownItem, GlDropdownDivider, GlMarkdown } from '@gitlab/ui'; -import TableWithoutHeader from 'oc/vue_shared/components/oc/table_without_header.vue'; +import TableWithoutHeader from 'oc_vue_shared/components/oc/table_without_header.vue'; import { mapGetters, mapActions, mapMutations } from 'vuex'; import _ from 'lodash' import { s__, __ } from '~/locale'; @@ -10,12 +10,12 @@ import ProjectDescriptionBox from '../../components/project_description.vue'; import EnvironmentCreationDialog from '../../components/environment-creation-dialog.vue' import YourDeployments from '../../components/your-deployments.vue' import OpenCloudDeployments from '../../components/open-cloud-deployments.vue' -import NotesWrapper from 'oc/vue_shared/components/notes-wrapper.vue' -import {OcTab, DetectIcon, EnvironmentSelection} from 'oc/vue_shared/components/oc' -import { bus } from 'oc/vue_shared/bus'; -import { slugify, lookupCloudProviderAlias, USER_HOME_PROJECT } from 'oc/vue_shared/util.mjs' -import {deleteEnvironmentByName} from 'oc/vue_shared/client_utils/environments' -import {fetchProjectPermissions} from 'oc/vue_shared/client_utils/projects' +import NotesWrapper from 'oc_vue_shared/components/notes-wrapper.vue' +import {OcTab, DetectIcon, EnvironmentSelection} from 'oc_vue_shared/oc-components' +import { bus } from 'oc_vue_shared/bus'; +import { slugify, lookupCloudProviderAlias, USER_HOME_PROJECT } from 'oc_vue_shared/util.mjs' +import {deleteEnvironmentByName} from 'oc_vue_shared/client_utils/environments' +import {fetchProjectPermissions} from 'oc_vue_shared/client_utils/projects' import { createDeploymentTemplate } from '../../store/modules/deployment_template_updates.js' import * as routes from '../../router/constants' @@ -114,8 +114,7 @@ export default { 'getLastUsedEnvironment', 'environmentsAreReady', 'commentsCount', - 'commentsIssueUrl', - 'hasCriticalErrors' + 'commentsIssueUrl' ]), primaryProps() { return { @@ -229,7 +228,6 @@ export default { // await this.loadPrimaryDeploymentBlueprint() - if(this.hasCriticalErrors) return this.fetchCloudmap() // async, not awaiting if (this.environmentsAreReady && this.yourDeployments.length && !this.triedPopulatingDeploymentItems) { @@ -312,7 +310,6 @@ export default { const projectPath = this.$projectGlobal.projectPath if(!projectPath) throw new Error('projectGlobal.projectPath is not defined') await this.fetchProject({projectPath}); - if(this.hasCriticalErrors) return const templateSlug = this.getApplicationBlueprint?.primaryDeploymentBlueprint if(!templateSlug) return return await this.populateTemplateResources({ diff --git a/packages/oc-pages/project_overview/pages/templates/index.vue b/packages/oc-pages/project_overview/pages/templates/index.vue index 7e7cfb81..1149247e 100644 --- a/packages/oc-pages/project_overview/pages/templates/index.vue +++ b/packages/oc-pages/project_overview/pages/templates/index.vue @@ -2,7 +2,7 @@ import { GlModal, GlModalDirective, GlSkeletonLoader, GlFormGroup, GlFormInput } from '@gitlab/ui'; import { cloneDeep } from 'lodash'; import { mapState, mapGetters, mapActions, mapMutations } from 'vuex'; -import { FLASH_TYPES } from 'oc/vue_shared/client_utils/oc-flash'; +import { FLASH_TYPES } from 'oc_vue_shared/client_utils/oc-flash'; import axios from '~/lib/utils/axios_utils'; import { redirectTo } from '~/lib/utils/url_utility'; import _ from 'lodash' @@ -13,11 +13,11 @@ import OcInputs from '../../components/shared/oc_inputs.vue' import OcListResource from '../../components/shared/oc_list_resource.vue'; import OcTemplateHeader from '../../components/shared/oc_template_header.vue'; import TemplateButtons from '../../components/template/template_buttons.vue'; -import { bus } from 'oc/vue_shared/bus'; -import { slugify } from 'oc/vue_shared/util.mjs' +import { bus } from 'oc_vue_shared/bus'; +import { slugify } from 'oc_vue_shared/util.mjs' import { deleteDeploymentTemplate } from '../../store/modules/deployment_template_updates' -import {getJobsData, redirectToJobConsole} from 'oc/vue_shared/client_utils/pipelines' -import ConsoleWrapper from 'oc/vue_shared/components/console-wrapper.vue' +import {getJobsData, redirectToJobConsole} from 'oc_vue_shared/client_utils/pipelines' +import ConsoleWrapper from 'oc_vue_shared/components/console-wrapper.vue' import * as routes from '../../router/constants' @@ -105,8 +105,7 @@ export default { 'getPrimary', 'environmentsAreReady', 'editingDeployed', - 'deployTooltip', - 'hasCriticalErrors' + 'deployTooltip' ]), deploymentDir() { @@ -319,8 +318,7 @@ export default { 'setEnvironmentScope', 'pushPreparedMutation', 'setCommitMessage', - 'setUpdateType', - 'createError' + 'setUpdateType' ]), ...mapActions([ 'syncGlobalVars', @@ -383,7 +381,6 @@ export default { } // TODO see if we can get rid of this, since it's probably already loaded await this.fetchProject({projectPath, fetchPolicy: 'network-only', n, projectGlobal: this.project.globalVars}); // NOTE this.project.globalVars - if(this.hasCriticalErrors) return const populateTemplateResult = await this.populateTemplateResources({ projectPath, templateSlug, @@ -413,8 +410,6 @@ export default { this.setUpdateType('deployment') await this.commitPreparedMutations(); - if(this.hasCriticalErrors) return - // will be handled by unfurl server // await this.createDeploymentPathPointer({deploymentDir: this.deploymentDir, projectPath: this.getHomeProjectPath, environmentName: this.$route.params.environment}) @@ -438,14 +433,11 @@ export default { //window.location.href = `/${this.project.globalVars.projectPath}#${slugify(this.$route.query.fn)}` } else { await this.commitPreparedMutations(); - return !this.hasCriticalErrors; + return true; } } catch (e) { - this.createError({ - message: `An unexpected error occurred while saving (${e.message})`, - context: e.message, - severity: 'major' - }) + console.error(e); + this.createFlash({ message: e.message, type: FLASH_TYPES.ALERT }); return false; } }, @@ -453,84 +445,98 @@ export default { triggerLocalDeploy: _.debounce(async function() { // TODO consolodate implementation with triggerDeployment - this.createFlash({ - message: __('Preparing deployment...'), - type: FLASH_TYPES.SUCCESS, - duration: this.durationOfAlerts, - }); - - this.startedTriggeringDeployment = true; - const name = this.$route.query.fn; - this.setUpdateType('deployment') - this.setCommitMessage(`Trigger deployment of ${name}`) - - await this.triggerSave(); - if(this.hasCriticalErrors) return - - const result = await this.deployInto({ - environmentName: this.$route.params.environment, - projectUrl: `${window.gon.gitlab_url}/${this.project.globalVars.projectPath}.git`, - deployPath: this.deploymentDir, - deploymentName: this.$route.params.slug, - deploymentBlueprint: this.$route.query.ts || this.getDeploymentTemplate?.source, - deployOptions: { - schedule: 'defer' - } - }) - - if(this.hasCriticalErrors) return + try { + this.createFlash({ + message: __('Preparing deployment...'), + type: FLASH_TYPES.SUCCESS, + duration: this.durationOfAlerts, + }); + + this.startedTriggeringDeployment = true; + const name = this.$route.query.fn; + this.setUpdateType('deployment') + this.setCommitMessage(`Trigger deployment of ${name}`) + await this.triggerSave(); + const result = await this.deployInto({ + environmentName: this.$route.params.environment, + projectUrl: `${window.gon.gitlab_url}/${this.project.globalVars.projectPath}.git`, + deployPath: this.deploymentDir, + deploymentName: this.$route.params.slug, + deploymentBlueprint: this.$route.query.ts || this.getDeploymentTemplate?.source, + deployOptions: { + schedule: 'defer' + } + }) + if(result === false) return - if(result === false) return + const {pipelineData, error} = result - const {pipelineData} = result + if(error) { + throw new Error(error) + } - if(pipelineData) this.createFlash({ message: __('The pipeline was triggered successfully'), type: FLASH_TYPES.SUCCESS, duration: this.durationOfAlerts }); + if(pipelineData) this.createFlash({ message: __('The pipeline was triggered successfully'), type: FLASH_TYPES.SUCCESS, duration: this.durationOfAlerts }); - const router = this.$router + const router = this.$router - const {href} = router.resolve({name: routes.OC_PROJECT_VIEW_HOME , query: {}}) - window.history.replaceState({}, null, href) + const {href} = router.resolve({name: routes.OC_PROJECT_VIEW_HOME , query: {}}) + window.history.replaceState({}, null, href) - this.dataWritten = true - window.location.href = `/${this.getHomeProjectPath}/-/deployments/${this.$route.params.environment}/${this.$route.params.slug}?show=local-deploy` + this.dataWritten = true + window.location.href = `/${this.getHomeProjectPath}/-/deployments/${this.$route.params.environment}/${this.$route.params.slug}?show=local-deploy` + } catch (err) { + console.error(err) + const errors = err?.response?.data?.errors || []; + const [error] = errors; + this.dataWritten = true + return this.createFlash({ message: `Pipeline ${error || err}`, type: FLASH_TYPES.ALERT, duration: this.durationOfAlerts, projectPath: this.getHomeProjectPath, issue: 'Failed to trigger deployment pipeline'}); + } }, 250), triggerDeployment: _.debounce(async function() { - this.createFlash({ - message: __('Starting deployment...'), - type: FLASH_TYPES.SUCCESS, - duration: this.durationOfAlerts, - }); - - this.startedTriggeringDeployment = true; - const name = this.$route.query.fn; - this.setUpdateType('deployment') - this.setCommitMessage(`Trigger deployment of ${name}`) - - await this.triggerSave(); - if(this.hasCriticalErrors) return - - const result = await this.deployInto({ - environmentName: this.$route.params.environment, - projectUrl: `${window.gon.gitlab_url}/${this.project.globalVars.projectPath}.git`, - deployPath: this.deploymentDir, - deploymentName: this.$route.params.slug, - deploymentBlueprint: this.$route.query.ts || this.getDeploymentTemplate?.source - }) + try { + this.createFlash({ + message: __('Starting deployment...'), + type: FLASH_TYPES.SUCCESS, + duration: this.durationOfAlerts, + }); + + this.startedTriggeringDeployment = true; + const name = this.$route.query.fn; + this.setUpdateType('deployment') + this.setCommitMessage(`Trigger deployment of ${name}`) + await this.triggerSave(); + const result = await this.deployInto({ + environmentName: this.$route.params.environment, + projectUrl: `${window.gon.gitlab_url}/${this.project.globalVars.projectPath}.git`, + deployPath: this.deploymentDir, + deploymentName: this.$route.params.slug, + deploymentBlueprint: this.$route.query.ts || this.getDeploymentTemplate?.source + }) + if(result === false) return - if(this.hasCriticalErrors) return + const {pipelineData, error} = result - const {pipelineData} = result + if(error) { + throw new Error(error) + } - if(pipelineData) this.createFlash({ message: __('The pipeline was triggered successfully'), type: FLASH_TYPES.SUCCESS, duration: this.durationOfAlerts }); + if(pipelineData) this.createFlash({ message: __('The pipeline was triggered successfully'), type: FLASH_TYPES.SUCCESS, duration: this.durationOfAlerts }); - const router = this.$router + const router = this.$router - const {href} = router.resolve({name: routes.OC_PROJECT_VIEW_HOME , query: {}}) - window.history.replaceState({}, null, href) + const {href} = router.resolve({name: routes.OC_PROJECT_VIEW_HOME , query: {}}) + window.history.replaceState({}, null, href) - this.dataWritten = true - window.location.href = `/${this.getHomeProjectPath}/-/deployments/${this.$route.params.environment}/${this.$route.params.slug}?show=console` + this.dataWritten = true + window.location.href = `/${this.getHomeProjectPath}/-/deployments/${this.$route.params.environment}/${this.$route.params.slug}?show=console` + } catch (err) { + console.error(err) + const errors = err?.response?.data?.errors || []; + const [error] = errors; + this.dataWritten = true + return this.createFlash({ message: `Pipeline ${error || err}`, type: FLASH_TYPES.ALERT, duration: this.durationOfAlerts, projectPath: this.getHomeProjectPath, issue: 'Failed to trigger deployment pipeline'}); + } }, 250), cleanModalResource() { diff --git a/packages/oc-pages/project_overview/router/index.js b/packages/oc-pages/project_overview/router/index.js index 9f1a3dcd..8ebf8c76 100644 --- a/packages/oc-pages/project_overview/router/index.js +++ b/packages/oc-pages/project_overview/router/index.js @@ -3,9 +3,9 @@ import VueRouter from 'vue-router'; import { joinPaths } from '~/lib/utils/url_utility'; import routes from './routes'; import * as routeNames from './constants.js' -import { PageNotFound } from 'oc/vue_shared/components/oc' +import { PageNotFound } from 'oc_vue_shared/oc-components' import { filterFromRoutes, createDenyList } from './sign-in-filter' -import { hideLastFlash } from 'oc/vue_shared/client_utils/oc-flash' +import { hideLastFlash } from 'oc_vue_shared/client_utils/oc-flash' Vue.use(VueRouter); @@ -47,7 +47,7 @@ export default function createRouter(base) { return false } } - if(typeof router.app.$store?.getters?.getRouterHook == 'function') { + if(router.app.$store) { router.app.$store.getters.getRouterHook(to, from, next) } else next() diff --git a/packages/oc-pages/project_overview/router/routes.js b/packages/oc-pages/project_overview/router/routes.js index fbb0ae97..4c421fb9 100644 --- a/packages/oc-pages/project_overview/router/routes.js +++ b/packages/oc-pages/project_overview/router/routes.js @@ -1,7 +1,7 @@ import ProjectPageHome from '../pages/projects/index.vue'; import TemplatesPage from '../pages/templates/index.vue'; import { SIGN_IN, OC_PROJECT_VIEW_HOME, OC_PROJECT_VIEW_CREATE_TEMPLATE, OC_PROJECT_VIEW_EDIT_DEPLOYMENT, OC_PROJECT_VIEW_DRAFT_DEPLOYMENT } from './constants'; -import { PageNotFound, SignIn } from 'oc/vue_shared/components/oc' +import { PageNotFound, SignIn } from 'oc_vue_shared/oc-components' export default [ { diff --git a/packages/oc-pages/project_overview/store/index.js b/packages/oc-pages/project_overview/store/index.js index 0af855ea..7b47fe4e 100644 --- a/packages/oc-pages/project_overview/store/index.js +++ b/packages/oc-pages/project_overview/store/index.js @@ -10,8 +10,7 @@ import deployment_info from '../../dashboard/store/modules/deployment-info' import misc from './modules/misc' import deployments from './modules/deployments' import user_settings from './modules/user_settings' -import health_check from 'oc/vue_shared/store_modules/health-check' -import errors from 'oc/vue_shared/store_modules/errors' +import health_check from 'oc_vue_shared/store_modules/health-check' Vue.use(Vuex); @@ -28,8 +27,7 @@ const store = new Vuex.Store({ project_application_blueprint, deployment_info, user_settings, - health_check, - errors + health_check }, strict: development, plugins: development && process.env.VUEX_LOGGER === "true" ? [createLogger()] : [], diff --git a/packages/oc-pages/project_overview/store/modules/deployment_template_updates.js b/packages/oc-pages/project_overview/store/modules/deployment_template_updates.js index d94a0fc0..8f997ece 100644 --- a/packages/oc-pages/project_overview/store/modules/deployment_template_updates.js +++ b/packages/oc-pages/project_overview/store/modules/deployment_template_updates.js @@ -1,11 +1,11 @@ import { __ } from "~/locale"; import _ from 'lodash' -import {slugify} from 'oc/vue_shared/util.mjs' -import {lookupCloudProviderAlias} from 'oc/vue_shared/util.mjs' -import {patchEnv} from 'oc/vue_shared/client_utils/envvars' -import {fetchProjectInfo} from 'oc/vue_shared/client_utils/projects' -import {fetchUserAccessToken} from 'oc/vue_shared/client_utils/user' -import {unfurl_cloud_vars_url} from 'oc/vue_shared/client_utils/unfurl-invocations' +import {slugify} from 'oc_vue_shared/util.mjs' +import {lookupCloudProviderAlias} from 'oc_vue_shared/util.mjs' +import {patchEnv} from 'oc_vue_shared/client_utils/envvars' +import {fetchProjectInfo} from 'oc_vue_shared/client_utils/projects' +import {fetchUserAccessToken} from 'oc_vue_shared/client_utils/user' +import {unfurl_cloud_vars_url} from 'oc_vue_shared/client_utils/unfurl-invocations' import {declareAvailableProviders} from "../../../vue_shared/client_utils/environments"; import {unfurlServerUpdate} from "../../../vue_shared/client_utils/unfurl-server"; @@ -744,28 +744,12 @@ const actions = { commit('setBaseState', _.cloneDeep(state)) }, - async sendUpdateSubrequests({state, getters, commit, rootState, rootGetters}, o){ + async sendUpdateSubrequests({state, getters, rootState, rootGetters}, o){ // send environment variables before trying to commit changes - try { - if(o?.dryRun) { - console.log(state.env, state.environmentScope, state.projectPath) - } else { - await patchEnv(state.env, state.environmentScope, state.projectPath, 0) - } - } catch(e) { - commit( - 'createError', - { - message: `Failed to update secrets -- aborting commit (${e.message})`, - context: { - environmentScope: state.environmentScope, - projectPath: state.projectPath - }, - severity: 'critical' - }, - {root: true} - ) - return + if(o?.dryRun) { + console.log(state.env, state.environmentScope, state.projectPath) + } else { + await patchEnv(state.env, state.environmentScope, state.projectPath, 0) } const patch = [] @@ -875,23 +859,6 @@ const actions = { patch, commitMessage: state.commitMessage, variables - }).catch(e => { - commit( - 'createError', - { - message: `Failed to commit update to ${path} (${e.message})`, - context: { - method, - projectPath, - branch, - patch, - commitMessage: state.commitMessage, - variables - }, - severity: 'critical' - }, - {root: true} - ) }) await Promise.all([post, sync]) diff --git a/packages/oc-pages/project_overview/store/modules/deployments.js b/packages/oc-pages/project_overview/store/modules/deployments.js index 5c9eae43..15d71d3b 100644 --- a/packages/oc-pages/project_overview/store/modules/deployments.js +++ b/packages/oc-pages/project_overview/store/modules/deployments.js @@ -1,8 +1,8 @@ -import {slugify} from 'oc/vue_shared/util.mjs' -import {environmentVariableDependencies, prefixEnvironmentVariables} from 'oc/vue_shared/lib/deployment-template' -import {shareEnvironmentVariables} from 'oc/vue_shared/client_utils/environments' -import {fetchUserAccessToken} from 'oc/vue_shared/client_utils/user' -import {fetchLastCommit} from 'oc/vue_shared/client_utils/projects' +import {slugify} from 'oc_vue_shared/util.mjs' +import {environmentVariableDependencies, prefixEnvironmentVariables} from 'oc_vue_shared/lib/deployment-template' +import {shareEnvironmentVariables} from 'oc_vue_shared/client_utils/environments' +import {fetchUserAccessToken} from 'oc_vue_shared/client_utils/user' +import {fetchLastCommit} from 'oc_vue_shared/client_utils/projects' import Vue from 'vue' import _ from 'lodash' import axios from '~/lib/utils/axios_utils' diff --git a/packages/oc-pages/project_overview/store/modules/environments.js b/packages/oc-pages/project_overview/store/modules/environments.js index e7571b37..1e040d84 100644 --- a/packages/oc-pages/project_overview/store/modules/environments.js +++ b/packages/oc-pages/project_overview/store/modules/environments.js @@ -2,17 +2,17 @@ import axios from '~/lib/utils/axios_utils' import { __ } from "~/locale"; import _ from 'lodash' import {cloneDeep} from 'lodash' -import {lookupCloudProviderAlias } from 'oc/vue_shared/util.mjs' -import {isDiscoverable} from 'oc/vue_shared/client_utils/resource_types' -import { FLASH_TYPES } from 'oc/vue_shared/client_utils/oc-flash'; -import {prepareVariables, triggerAtomicDeployment} from 'oc/vue_shared/client_utils/pipelines' -import {toDepTokenEnvKey, patchEnv, fetchEnvironmentVariables} from 'oc/vue_shared/client_utils/envvars' -import {fetchProjectInfo, generateProjectAccessToken} from 'oc/vue_shared/client_utils/projects' -import {fetchEnvironments, shareEnvironmentVariables} from 'oc/vue_shared/client_utils/environments' -import {tryResolveDirective} from 'oc/vue_shared/lib' -import {environmentVariableDependencies} from 'oc/vue_shared/lib/deployment-template' -import {deleteFiles} from 'oc/vue_shared/client_utils/commits' -import {slugify} from 'oc/vue_shared/util.mjs' +import {lookupCloudProviderAlias } from 'oc_vue_shared/util.mjs' +import {isDiscoverable} from 'oc_vue_shared/client_utils/resource_types' +import { FLASH_TYPES } from 'oc_vue_shared/client_utils/oc-flash'; +import {prepareVariables, triggerAtomicDeployment} from 'oc_vue_shared/client_utils/pipelines' +import {toDepTokenEnvKey, patchEnv, fetchEnvironmentVariables} from 'oc_vue_shared/client_utils/envvars' +import {fetchProjectInfo, generateProjectAccessToken} from 'oc_vue_shared/client_utils/projects' +import {fetchEnvironments, shareEnvironmentVariables} from 'oc_vue_shared/client_utils/environments' +import {tryResolveDirective} from 'oc_vue_shared/lib' +import {environmentVariableDependencies} from 'oc_vue_shared/lib/deployment-template' +import {deleteFiles} from 'oc_vue_shared/client_utils/commits' +import {slugify} from 'oc_vue_shared/util.mjs' import Vue from 'vue' @@ -170,20 +170,9 @@ const actions = { } const projects = await Promise.all( - state.repositoryDependencies.map( - dep => fetchProjectInfo(encodeURIComponent(dep)) - .catch(e => { - commit( - 'createError', - {message: `Couldn't lookup dependency info (${e.message})`, context: dep, severity: 'critical'}, - {root: true} - ) - }) - ) + state.repositoryDependencies.map(dep => fetchProjectInfo(encodeURIComponent(dep))) ) - if(rootGetters.hasCriticalErrors) return - const dashboardProjectId = (await fetchProjectInfo(encodeURIComponent(rootGetters.getHomeProjectPath))).id let writableBlueprintProjectUrl, blueprintToken @@ -225,37 +214,24 @@ const actions = { }) - let data + let data, error - try { - data = await triggerAtomicDeployment( - rootGetters.getHomeProjectPath, - { - variables: deployVariables, - dependencies, - ...parameters.deployOptions - } - ) - } catch(e) { - commit( - 'createError', - { - message: `Failed to trigger deployment (${e.message})`, - context: { - projectPath: rootGetters.getHomeProjectPath, - variables: deployVariables, - dependencies, - ...parameters.deployOptions - }, - severity: 'critical' - }, - {root: true} - ) - return - } + data = await triggerAtomicDeployment( + rootGetters.getHomeProjectPath, + { + variables: deployVariables, + dependencies, + ...parameters.deployOptions + } + ) + + if(error = data?.errors) { + return {pipelineData: data, error} + } const pipelines = [...(dp?.pipelines || [])] + const pipeline = data? { id: data.id, @@ -270,6 +246,7 @@ const actions = { } : null + if(pipeline) {pipelines.push(pipeline)} commit('setUpdateType', 'environment', {root: true}) @@ -348,10 +325,6 @@ const actions = { projectId, includeDeployments: true }) - - result.errors.forEach(e => commit('createError', e, {root: true})) - - if(rootGetters.hasCriticalErrors) return environments = result.environments @@ -366,13 +339,9 @@ const actions = { commit('setDeployments', result.deployments) } catch(e){ + console.error('Could not fetch project environments', e) if(window.gon.current_username) { - commit('createError', { - message: `Could not fetch project environments (${e})`, - context: e, - severity: 'critical', - issue: 'Missing environment', - }) + dispatch('createFlash', { projectPath: fullPath, message: 'Could not fetch project environments. Is your unfurl.yaml valid?', type: FLASH_TYPES.ALERT, issue: 'Missing environment' }, {root: true}) } environments = [] diff --git a/packages/oc-pages/project_overview/store/modules/misc.js b/packages/oc-pages/project_overview/store/modules/misc.js index 201b6b2d..e9334cd8 100644 --- a/packages/oc-pages/project_overview/store/modules/misc.js +++ b/packages/oc-pages/project_overview/store/modules/misc.js @@ -1,9 +1,9 @@ import _ from 'lodash' -import { USER_HOME_PROJECT} from 'oc/vue_shared/util.mjs' -import { fetchUser } from 'oc/vue_shared/client_utils/user' -import {fetchProjectInfo} from 'oc/vue_shared/client_utils/projects' -import {createFlash, hideLastFlash, FLASH_TYPES} from 'oc/vue_shared/client_utils/oc-flash' -import {unfurlServerUrlOverride} from 'oc/vue_shared/storage-keys' +import { USER_HOME_PROJECT} from 'oc_vue_shared/util.mjs' +import { fetchUser } from 'oc_vue_shared/client_utils/user' +import {fetchProjectInfo} from 'oc_vue_shared/client_utils/projects' +import {createFlash, hideLastFlash, FLASH_TYPES} from 'oc_vue_shared/client_utils/oc-flash' +import {unfurlServerUrlOverride} from 'oc_vue_shared/storage-keys' const DEFAULT_ROUTER_HOOK = (to, from, next) => next() @@ -19,8 +19,7 @@ const state = () => ({ dashboard: null, dashboardProjectInfo: null, user: null, - windowWidth: window.innerWidth, - scrollTop: document.scrollingElement.scrollTop + windowWidth: window.innerWidth }) const mutations = { @@ -51,10 +50,6 @@ const mutations = { setWindowWidth(state, windowWidth) { state.windowWidth = windowWidth - }, - - setScrollTop(state, scrollTop) { - state.scrollTop = scrollTop } } @@ -90,7 +85,6 @@ const getters = { return sessionStorage['registry-url'] }, windowWidth(state) {return state.windowWidth}, - scrollTop(state) {return state.scrollTop}, serviceDesk() { // TODO make this configurable return 'onecommons/support' @@ -99,24 +93,16 @@ const getters = { const actions = { handleResize({commit, state}) { - function onResize(e) { - const _isMobileLayout = isMobileLayout() - if(_isMobileLayout != state.isMobileLayout) { - commit('setMobileLayout', _isMobileLayout) - } - commit('setWindowWidth', window.innerWidth) - } - function onScroll(e) { - commit('setScrollTop', document.scrollingElement.scrollTop) - } window.addEventListener('resize', _.throttle( function(e) { - onResize(e) - onScroll(e) + const _isMobileLayout = isMobileLayout() + if(_isMobileLayout != state.isMobileLayout) { + commit('setMobileLayout', _isMobileLayout) + } + commit('setWindowWidth', window.innerWidth) }, 30 )) - window.addEventListener('scroll', _.throttle( onScroll, 15 )) }, async populateCurrentUser({commit}) { diff --git a/packages/oc-pages/project_overview/store/modules/project.js b/packages/oc-pages/project_overview/store/modules/project.js index e99518e5..57400559 100644 --- a/packages/oc-pages/project_overview/store/modules/project.js +++ b/packages/oc-pages/project_overview/store/modules/project.js @@ -1,7 +1,7 @@ import _ from 'lodash'; import { __ } from "~/locale"; import axios from '~/lib/utils/axios_utils' -import {lookupNumberOfComments} from 'oc/vue_shared/client_utils/comments' +import {lookupNumberOfComments} from 'oc_vue_shared/client_utils/comments' const state = () => ({ commentsIssueUrl: null, diff --git a/packages/oc-pages/project_overview/store/modules/project_application_blueprint.js b/packages/oc-pages/project_overview/store/modules/project_application_blueprint.js index b0107cde..46ea80c0 100644 --- a/packages/oc-pages/project_overview/store/modules/project_application_blueprint.js +++ b/packages/oc-pages/project_overview/store/modules/project_application_blueprint.js @@ -1,7 +1,7 @@ import {uniq} from 'lodash' -import {isConfigurable} from 'oc/vue_shared/client_utils/resource_types' -import {unfurlServerExport} from 'oc/vue_shared/client_utils/unfurl-server' -import {localNormalize} from 'oc/vue_shared/lib/normalize' +import {isConfigurable} from 'oc_vue_shared/client_utils/resource_types' +import {unfurlServerExport} from 'oc_vue_shared/client_utils/unfurl-server' +import {localNormalize} from 'oc_vue_shared/lib/normalize' import _ from 'lodash' import Vue from 'vue' @@ -39,34 +39,13 @@ const mutations = { const actions = { async fetchProject({commit, dispatch}, params) { const {projectPath, projectGlobal} = params - const format = 'blueprint' commit('loaded', false) - let root - try { - root = await unfurlServerExport({ - format, - projectPath, - //TODO pass branch - }) - } catch(e) { - // TODO handle this from the caller - commit( - 'createError', - { - message: `An error occurred while exporting ${projectPath}`, - context: { - error: e.message, - projectPath, - format - }, - severity: 'critical', - } - ) - - return - } - + const root = await unfurlServerExport({ + format: 'blueprint', + projectPath, + //TODO pass branch + }) root.projectGlobal = projectGlobal @@ -407,7 +386,6 @@ const getters = { lookupConfigurableTypes(state, _a, _b, rootGetters) { return function(environment) { //const resolver = rootGetters.resolveResourceTypeFromAvailable // didn't work for some reason - if(!state.ResourceType) return const resolver = rootGetters.environmentResolveResourceType.bind(null, environment) return Object.values(state.ResourceType).filter(rt => isConfigurable(rt, environment, resolver)) } diff --git a/packages/oc-pages/project_overview/store/modules/template_resources.js b/packages/oc-pages/project_overview/store/modules/template_resources.js index 6327a372..a7e4c4d4 100644 --- a/packages/oc-pages/project_overview/store/modules/template_resources.js +++ b/packages/oc-pages/project_overview/store/modules/template_resources.js @@ -1,8 +1,8 @@ import { cloneDeep, create } from 'lodash'; import _ from 'lodash' import { __ } from "~/locale"; -import { lookupCloudProviderAlias, slugify } from 'oc/vue_shared/util.mjs'; -import {shouldConnectWithoutCopy} from 'oc/vue_shared/storage-keys.js'; +import { lookupCloudProviderAlias, slugify } from 'oc_vue_shared/util.mjs'; +import {shouldConnectWithoutCopy} from 'oc_vue_shared/storage-keys.js'; import {appendDeploymentTemplateInBlueprint, appendResourceTemplateInDependent, createResourceTemplate, createEnvironmentInstance, deleteResourceTemplate, deleteResourceTemplateInDependent, deleteEnvironmentInstance, updatePropertyInInstance, updatePropertyInResourceTemplate} from './deployment_template_updates.js'; import Vue from 'vue' diff --git a/packages/oc-pages/vue_shared/client_utils/environments.js b/packages/oc-pages/vue_shared/client_utils/environments.js index 7943c1e4..02d1a47f 100644 --- a/packages/oc-pages/vue_shared/client_utils/environments.js +++ b/packages/oc-pages/vue_shared/client_utils/environments.js @@ -149,36 +149,16 @@ export function connectionsToArray(environment) { } export async function fetchEnvironments({fullPath, includeDeployments, branch}) { - const projectPath = fullPath - const format = 'environments' - const errors = [] // TODO get the branch passed into fetch environments // TODO use ?include_deployments=true - let data - - try { - data = await unfurlServerExport({ - format, - projectPath, - includeDeployments, - branch, - }) - } catch(e) { - errors.push({ - message: `@fatchEnvironments: An error occurred during an export request (${e.message})`, - context: { - error: e.message, - format, - projectPath, - includeDeployments, - branch - }, - severity: 'critical' - }) - return {errors} - } + const data = await unfurlServerExport({ + format: 'environments', + projectPath: fullPath, + includeDeployments, + branch, + }) const environments = Object.values(data.DeploymentEnvironment) .filter(env => env.name != 'defaults') @@ -200,20 +180,12 @@ export async function fetchEnvironments({fullPath, includeDeployments, branch}) localNormalize(resourceType, 'ResourceType', null) }) - const result = {environments, deploymentPaths, fullPath, defaults, ResourceType: data.ResourceType, errors} + const result = {environments, deploymentPaths, fullPath, defaults, ResourceType: data.ResourceType} if(includeDeployments) { - const deployments = data.deployments.filter(dep => !dep.ApplicationBlueprint || !Object.keys(dep.ApplicationBlueprint).includes('generic-cloud-provider-implementations')) + const deployments = data.deployments.filter(dep => !Object.keys(dep.ApplicationBlueprint).includes('generic-cloud-provider-implementations')) deployments.forEach(deployment => { - if(deployment.error) { - errors.push({ - message: `@fetchEnvironments: An error occured while exporting a deployment ${deployment.deployment}`, - context: deployment, - severity: 'major' - }) - return - } try { const [deploymentName, deploymentObject] = Object.entries(deployment.Deployment)[0] @@ -226,11 +198,7 @@ export async function fetchEnvironments({fullPath, includeDeployments, branch}) localNormalize(deploymentObject, 'Deployment', deployment) } catch(e) { - errors.push({ - message: '@fetchEnvironments: Unexpected shape for deployment', - context: e, - severity: 'major' - }) + console.error('@fetchEnvironments: unexpected shape for deployment', deployment, e) } }) result.deployments = deployments diff --git a/packages/oc-pages/vue_shared/client_utils/unfurl-server.js b/packages/oc-pages/vue_shared/client_utils/unfurl-server.js index 3b23399a..f18faee7 100644 --- a/packages/oc-pages/vue_shared/client_utils/unfurl-server.js +++ b/packages/oc-pages/vue_shared/client_utils/unfurl-server.js @@ -24,6 +24,7 @@ async function doXhr(_method, url, body, headers) { let response if(method == 'GET') { response = await axios.get(url, {headers}) } else if(method == 'POST') { response = await axios.post(url, body, {headers}) } + return response?.data } else { return await ufsvIFrame.doXhr(...arguments) diff --git a/packages/oc-pages/vue_shared/components/console-wrapper.vue b/packages/oc-pages/vue_shared/components/console-wrapper.vue index 64567e22..c66a4725 100644 --- a/packages/oc-pages/vue_shared/components/console-wrapper.vue +++ b/packages/oc-pages/vue_shared/components/console-wrapper.vue @@ -1,6 +1,6 @@ <script> import {mapMutations, mapActions, mapGetters} from 'vuex' -import {compatibilityMountJobConsole} from 'oc/vue_shared/compat' +import {compatibilityMountJobConsole} from 'oc_vue_shared/compat' const TEXT_HTML = 'text/html' // my editor can't figure out how to indent this string export default { props: { diff --git a/packages/oc-pages/vue_shared/components/notes-wrapper.vue b/packages/oc-pages/vue_shared/components/notes-wrapper.vue index db15e3fc..3cd336ce 100644 --- a/packages/oc-pages/vue_shared/components/notes-wrapper.vue +++ b/packages/oc-pages/vue_shared/components/notes-wrapper.vue @@ -1,8 +1,8 @@ <script> import {mapMutations, mapActions, mapGetters} from 'vuex' -import {compatibilityMountNotesApp} from 'oc/vue_shared/compat' -import {sleep} from 'oc/vue_shared/client_utils/misc' -import {countComments} from 'oc/vue_shared/client_utils/comments' +import {compatibilityMountNotesApp} from 'oc_vue_shared/compat' +import {sleep} from 'oc_vue_shared/client_utils/misc' +import {countComments} from 'oc_vue_shared/client_utils/comments' const TEXT_HTML = 'text/html' // my editor can't figure out how to indent this string const POLL_PERIOD = 1000 diff --git a/packages/oc-pages/vue_shared/components/oc/deployment-resources.vue b/packages/oc-pages/vue_shared/components/oc/deployment-resources.vue index 2e57627a..6ddd00c8 100644 --- a/packages/oc-pages/vue_shared/components/oc/deployment-resources.vue +++ b/packages/oc-pages/vue_shared/components/oc/deployment-resources.vue @@ -11,10 +11,10 @@ import OcList from '../../../project_overview/components/shared/oc_list.vue'; import OcListResource from '../../../project_overview/components/shared/oc_list_resource.vue'; import OcTemplateHeader from '../../../project_overview/components/shared/oc_template_header.vue'; import TemplateButtons from '../../../project_overview/components/template/template_buttons.vue'; -import OcTab from 'oc/vue_shared/components/oc/oc-tab.vue' +import OcTab from 'oc_vue_shared/components/oc/oc-tab.vue' import { cloudProviderFriendlyName, slugify } from '../../util.mjs' import { deleteDeploymentTemplate } from '../../../project_overview/store/modules/deployment_template_updates' -import {bus} from 'oc/vue_shared/bus' +import {bus} from 'oc_vue_shared/bus' console.assert(OcTab) diff --git a/packages/oc-pages/vue_shared/components/oc/deployment-scheduler.vue b/packages/oc-pages/vue_shared/components/oc/deployment-scheduler.vue index af3e7011..8147db49 100644 --- a/packages/oc-pages/vue_shared/components/oc/deployment-scheduler.vue +++ b/packages/oc-pages/vue_shared/components/oc/deployment-scheduler.vue @@ -1,7 +1,7 @@ <script> import { mapGetters, mapActions } from 'vuex' import { Checkbox as ElCheckbox} from 'element-ui' -import { DetectIcon } from 'oc/vue_shared/components/oc' +import { DetectIcon } from 'oc_vue_shared/oc-components' const UNFURL_PROJECT_SUBSCRIPTIONS = 'UNFURL_PROJECT_SUBSCRIPTIONS' diff --git a/packages/oc-pages/vue_shared/components/oc/environment-selection.vue b/packages/oc-pages/vue_shared/components/oc/environment-selection.vue index 52d59a6b..4521dd35 100644 --- a/packages/oc-pages/vue_shared/components/oc/environment-selection.vue +++ b/packages/oc-pages/vue_shared/components/oc/environment-selection.vue @@ -1,8 +1,8 @@ <script> import {GlDropdown, GlDropdownItem, GlDropdownDivider} from '@gitlab/ui' -import {ErrorSmall, DetectIcon} from 'oc/vue_shared/components/oc' +import {ErrorSmall, DetectIcon} from 'oc_vue_shared/oc-components' import {mapGetters} from 'vuex' -import {fetchAvailableProviderDashboards} from 'oc/vue_shared/client_utils/environments' +import {fetchAvailableProviderDashboards} from 'oc_vue_shared/client_utils/environments' const DEPLOY_INTO_ENV_MIN_ACCESS = 30 diff --git a/packages/oc-pages/vue_shared/components/oc/experimental-settings-indicator.vue b/packages/oc-pages/vue_shared/components/oc/experimental-settings-indicator.vue index a502cc0e..17a747a1 100644 --- a/packages/oc-pages/vue_shared/components/oc/experimental-settings-indicator.vue +++ b/packages/oc-pages/vue_shared/components/oc/experimental-settings-indicator.vue @@ -1,7 +1,7 @@ <script> import {CONFIGURABLE_HIDDEN_OPTIONS, lookupKey, setLocalStorageKey, clearSettings} from '../../storage-keys' import {GlButton, GlIcon, GlModal} from '@gitlab/ui' -import {Card as ElCard, Input as ElInput, Button as ElButton} from 'element-ui' +import {Card as ElCard, Input as ElInput} from 'element-ui' import ErrorSmall from './ErrorSmall.vue' import {mapGetters} from 'vuex' export default { @@ -22,38 +22,6 @@ export default { this.yPos = y + 'px' this.xPos = x + 'px' }, - downloadState() { - const link = document.createElement('A') - const location = window.location.pathname + window.location.search - const state = this.$store.state - const contents = JSON.stringify({location, state}) - const file = new Blob([contents], {type: 'application/json'}) - link.href = URL.createObjectURL(file) - link.download = encodeURIComponent(location.slice(1)) + '.json' - link.click() - URL.revokeObjectURL(link.href) - }, - uploadState() { - const input = document.createElement('INPUT') - input.setAttribute('type', 'file') - input.setAttribute('accept', 'application/json') - input.click() - input.addEventListener('change', () => { - try { - input.files[0].text().then(text => { - const {location, state} = JSON.parse(text) - //location = '/' + decodeURIComponent(location) - const dest = new URL(window.location.href) - const [pathname, query] = location.split('?') - dest.pathname = pathname || '' - dest.search = query || '' - sessionStorage['unfurl-gui:state'] = JSON.stringify(state) - window.location.href = dest.toString() - }) - } - catch(e) { console.error(e) } - }) - }, lookupKey, setLocalStorageKey, clearSettings, @@ -118,13 +86,6 @@ export default { <template slot="prepend"><span style="font-size: 12px;" class="text-monospace">{{option.label}}</span></template> </el-input> <error-small :condition="changed" message="Changes will be reflected after page refresh" /> - - <div class="d-flex justify-content-end mt-4"> - <el-button @click="downloadState" type="text" icon="el-icon-download"> Download app state </el-button> - <div class="border-right mr-2 ml-2" /> - <el-button @click="uploadState" type="text" icon="el-icon-upload2"> Upload app state </el-button> - </div> - </el-card> </gl-modal> <div class="position-fixed" style=" z-index: 1000; pointer-events: none;" :style="{left: xPos, top: yPos}"> diff --git a/packages/oc-pages/vue_shared/components/oc/import-link.vue b/packages/oc-pages/vue_shared/components/oc/import-link.vue index 57844c78..265407ca 100644 --- a/packages/oc-pages/vue_shared/components/oc/import-link.vue +++ b/packages/oc-pages/vue_shared/components/oc/import-link.vue @@ -1,6 +1,6 @@ <script> import {mapGetters} from 'vuex' -import {DetectIcon} from 'oc/vue_shared/components/oc' +import {DetectIcon} from 'oc_vue_shared/oc-components' import {Tooltip as ElTooltip} from 'element-ui' export default { diff --git a/packages/oc-pages/vue_shared/components/oc/index.js b/packages/oc-pages/vue_shared/components/oc/index.js deleted file mode 100644 index 2ef11a14..00000000 --- a/packages/oc-pages/vue_shared/components/oc/index.js +++ /dev/null @@ -1,40 +0,0 @@ -import Vue from 'vue'; - -export {default as DetectIcon} from 'oc/vue_shared/components/oc/detect-icon.vue' -export {default as StatusIcon} from 'oc/vue_shared/components/oc/Status.vue' -export {default as ProjectIcon} from 'oc/vue_shared/components/oc/project-icon.vue' -export {default as Status} from 'oc/vue_shared/components/oc/Status.vue' -export {default as OcPropertiesList} from 'oc/vue_shared/components/oc/oc-properties-list.vue' -export {default as DeploymentResources} from 'oc/vue_shared/components/oc/deployment-resources.vue' -export {default as OcTab} from 'oc/vue_shared/components/oc/oc-tab.vue' -export {default as GitHubRepos} from 'oc/vue_shared/components/oc/github-repos.vue' -export {default as ErrorSmall} from 'oc/vue_shared/components/oc/ErrorSmall.vue' -export {default as EmptyStateJob} from 'oc/vue_shared/components/oc/empty-state-job.vue' -export {default as EnvironmentSelection} from 'oc/vue_shared/components/oc/environment-selection.vue' -export {default as DeploymentScheduler} from 'oc/vue_shared/components/oc/deployment-scheduler.vue' -export {default as IncrementalDeploymentSwitch} from 'oc/vue_shared/components/oc/incremental-deployment-switch.vue' -export {default as LocalDeploy} from 'oc/vue_shared/components/oc/local-deploy.vue' -export {default as CodeClipboard} from 'oc/vue_shared/components/oc/code-clipboard.vue' -export {default as UnfurlGuiErrors} from 'oc/vue_shared/components/oc/ufgui-errors.vue' -export {default as ExperimentalSettingsIndicator} from 'oc/vue_shared/components/oc/experimental-settings-indicator.vue' - -export let CiVariableSettings, createCiVariablesStore -import {notFoundError, removeNotFoundError} from 'oc/vue_shared/client_utils/error.js' -export const PageNotFound = Vue.component("page-not-found", { - template: "", - created() { - notFoundError() - }, - unmounted() { - removeNotFoundError() - } -}) -export const SignIn = Vue.component("sign-in", { template: "", }) -// #!if false -import _CiVariableSettings from 'oc/vue_shared/oc_ci_variable_list/components/ci_variable_settings.vue' -// #!if false -import {asModule} from 'oc/vue_shared/oc_ci_variable_list/store' -// #!if false -CiVariableSettings = _CiVariableSettings; createCiVariablesStore = asModule - - diff --git a/packages/oc-pages/vue_shared/components/oc/local-deploy.vue b/packages/oc-pages/vue_shared/components/oc/local-deploy.vue index 5711ad6c..81f0060c 100644 --- a/packages/oc-pages/vue_shared/components/oc/local-deploy.vue +++ b/packages/oc-pages/vue_shared/components/oc/local-deploy.vue @@ -2,9 +2,9 @@ import CodeClipboard from './code-clipboard.vue' import {GlLoadingIcon} from '@gitlab/ui' import {mapGetters, mapActions} from 'vuex' -import {cloneProject, cloneBlueprint} from 'oc/vue_shared/client_utils/unfurl-invocations' -import {toDepTokenEnvKey} from 'oc/vue_shared/client_utils/envvars' -import {fetchProjectInfo} from 'oc/vue_shared/client_utils/projects' +import {cloneProject, cloneBlueprint} from 'oc_vue_shared/client_utils/unfurl-invocations' +import {toDepTokenEnvKey} from 'oc_vue_shared/client_utils/envvars' +import {fetchProjectInfo} from 'oc_vue_shared/client_utils/projects' const protocol = window.location.protocol let server = window.location.hostname diff --git a/packages/oc-pages/vue_shared/components/oc/oc-properties-list.vue b/packages/oc-pages/vue_shared/components/oc/oc-properties-list.vue index 115cdecb..d6e92ddc 100644 --- a/packages/oc-pages/vue_shared/components/oc/oc-properties-list.vue +++ b/packages/oc-pages/vue_shared/components/oc/oc-properties-list.vue @@ -1,7 +1,7 @@ <script> import {mapGetters} from 'vuex' import {GlIcon} from '@gitlab/ui' -import {DetectIcon, Status} from 'oc/vue_shared/components/oc' +import {DetectIcon, Status} from 'oc_vue_shared/oc-components' import {JSONView} from 'vue-json-component' import Redacted from './redacted.vue' @@ -9,15 +9,13 @@ export default { name: 'OcPropertiesList', components: {GlIcon, Status, 'json-view': JSONView, Redacted, DetectIcon}, data() { - return {expanded: !this.startCollapsed} + return {expanded: true} }, props: { card: { type: Object, required: false }, - startCollapsed: Boolean, - fullWidth: Boolean, properties: { type: Array, required: false, @@ -28,8 +26,7 @@ export default { }, header: String, property: String, - containerStyle: [Object, String], - headerStyle: [Object, String] + containerStyle: Object }, computed: { ...mapGetters([ @@ -84,6 +81,7 @@ export default { return property.sensitive }, tableSizingHack() { + // TODO use CSS grid instead this.$nextTick(() => { try { const headerWidth = this.$refs.header?.clientWidth @@ -91,7 +89,7 @@ export default { if(!(headerWidth && nameColumnWdith)) return this.$refs.transitionTarget.style.width = headerWidth + 'px' this.$refs.transitionTarget.querySelectorAll('td.value-column').forEach(cell => { - cell.style.width = (headerWidth - nameColumnWdith) + 'px' + cell.style.width = (headerWidth - nameColumnWdith - 30) + 'px' }) this.$refs.transitionTarget.style.tableLayout = 'fixed' } catch(e) {console.error(e)} @@ -113,7 +111,7 @@ export default { <template> <div style="max-width: 100%; overflow-x: auto;"> <div :style="containerStyle" class="properties-list-container"> - <div @click="toggleExpanded" v-if="header" class="header" :style="headerStyle" ref="header"> + <div @click="toggleExpanded" v-if="header" class="header" ref="header"> <slot name="header-text"> <div>{{header}}</div> </slot> @@ -122,7 +120,7 @@ export default { <gl-icon v-if="_properties.length" :name="expanded? 'chevron-down': 'chevron-left'" :size="18"></gl-icon> </div> </div> - <table ref="transitionTarget" class="properties-list-inner" :style="{display: startCollapsed && !expanded? 'none': 'table'}" style="width: 100%;"> + <table ref="transitionTarget" class="properties-list-inner" style="display: table; width: 100%;"> <tr style="display: table-row" class="properties-list-item" v-for="property in _properties" :key="property.name"> <td class="name-column">{{formatName(property)}}</td> <td :style="property.valueStyle" class="value-column"> @@ -191,9 +189,6 @@ export default { margin: -1px; min-width: min(100%, 22em); } -.name-column { - text-transform: capitalize; -} .name-column, .value-column { padding: 0.75em; border-width: 1px; @@ -221,8 +216,6 @@ export default { font-size: 1.25em; display: flex; justify-content: space-between; - user-select: none; - cursor: pointer; } .gl-dark .header { diff --git a/packages/oc-pages/vue_shared/components/oc/plugin.js b/packages/oc-pages/vue_shared/components/oc/plugin.js deleted file mode 100644 index a29dad5c..00000000 --- a/packages/oc-pages/vue_shared/components/oc/plugin.js +++ /dev/null @@ -1,45 +0,0 @@ -import { - OcPropertiesList, - StatusIcon, - ProjectIcon, - Status, - DeploymentResources, - OcTab, - GitHubRepos, - ErrorSmall, - EmptyStateJob, - EnvironmentSelection, - DeploymentScheduler, - IncrementalDeploymentSwitch, - LocalDeploy, - CodeClipboard, - CiVariableSettings, - SignIn, - PageNotFound, - UnfurlGuiErrors, - ExperimentalSettingsIndicator -} from './index' - -export const OcComponents = { - install(app, options) { - app.component('oc-properties-list', OcPropertiesList) - app.component('oc-status-icon', StatusIcon) - app.component('oc-project-icon', ProjectIcon) - app.component('oc-status', Status) - app.component('oc-deployment-resources', DeploymentResources) - app.component('oc-tab', OcTab) - app.component('oc-github-repos', GitHubRepos) - app.component('oc-error-small', ErrorSmall) - app.component('oc-empty-state-job', EmptyStateJob) - app.component('oc-environment-selection', EnvironmentSelection) - app.component('oc-deployment-scheduler', DeploymentScheduler) - app.component('oc-incremental-deployment-switch', IncrementalDeploymentSwitch) - app.component('oc-local-deploy', LocalDeploy) - app.component('oc-code-clipboard', CodeClipboard) - app.component('oc-ci-variable-settings', CiVariableSettings) - app.component('oc-sign-in', SignIn) - app.component('oc-404', PageNotFound) - app.component('oc-unfurl-gui-errors', UnfurlGuiErrors) - app.component('oc-experimental-settings-indicator', ExperimentalSettingsIndicator) - } -} diff --git a/packages/oc-pages/vue_shared/components/oc/table_list_row.vue b/packages/oc-pages/vue_shared/components/oc/table_list_row.vue index 3301f429..149ca4a9 100644 --- a/packages/oc-pages/vue_shared/components/oc/table_list_row.vue +++ b/packages/oc-pages/vue_shared/components/oc/table_list_row.vue @@ -1,6 +1,6 @@ <script> import { GlIcon , GlButton, GlModalDirective } from "@gitlab/ui"; -import { bus } from 'oc/vue_shared/bus'; +import { bus } from 'oc_vue_shared/bus'; import { mapGetters } from 'vuex'; import { __ } from '~/locale'; diff --git a/packages/oc-pages/vue_shared/components/oc/ufgui-errors.vue b/packages/oc-pages/vue_shared/components/oc/ufgui-errors.vue deleted file mode 100644 index 70638f1f..00000000 --- a/packages/oc-pages/vue_shared/components/oc/ufgui-errors.vue +++ /dev/null @@ -1,79 +0,0 @@ -<script> -import Vue from 'vue' -import {mapGetters, mapMutations} from 'vuex' -import {defaultSeverityLevel} from '../../storage-keys' -import {GlAlert, GlTabs, GlPagination} from '@gitlab/ui' - -const ERROR_LEVELS = ['minor', 'major', 'critical'] - -const PER_PAGE = 5 -export default { - name: 'UnfurlGuiErrors', - components: { - GlAlert, GlTabs, GlPagination - }, - data() { - const headerElement = document.querySelector('[data-qa-selector="navbar"]') - const {y, height} = headerElement.getBoundingClientRect() - return { - currentTab: ERROR_LEVELS.indexOf(defaultSeverityLevel()), - defaultSeverityLevel: defaultSeverityLevel(), - page: 1, - PER_PAGE, - headerElementPos: y + height - } - }, - computed: { - ...mapGetters(['errors', 'errorsBySeverity', 'scrollTop']), - presentableErrors() { - return this.errorsBySeverity(ERROR_LEVELS[this.currentTab]) || [] - }, - minorCount() { return this.errorsBySeverity('minor').length }, - majorCount() { return this.errorsBySeverity('major').length }, - criticalCount() { return this.errorsBySeverity('critical').length }, - defaultErrorCount() { return this.errorsBySeverity(this.defaultSeverityLevel).length }, - errorsOnPage() { - return this.presentableErrors.slice((this.page - 1) * this.PER_PAGE, this.page * this.PER_PAGE) - } - - }, - watch: { - currentTab() { - this.page = 1 - }, - scrollTop: { - immediate: true, - handler(val) { - try { - this.$refs.container.style.top = Math.min(val, this.headerElementPos) + 'px' - } catch(e) {} - } - }, - }, - methods: { - ...mapMutations(['clearErrors']), - }, -} -</script> -<template> - <div ref="container" style="position: sticky; top: 0px; z-index: 999;"> - <gl-alert @dismiss="clearErrors" variant="danger" v-if="defaultErrorCount > 0"> - <gl-tabs v-if="defaultErrorCount > 1 && defaultErrorCount != errors.length" v-model="currentTab" style="margin-bottom: -24px" > - <oc-tab title="All" v-if="minorCount > majorCount" :title-count="minorCount" /> - <oc-tab v-if="majorCount > criticalCount" title="Major" :title-count="majorCount" /> - <oc-tab v-if="criticalCount" title="Critical" :title-count="criticalCount" /> - </gl-tabs> - <oc-properties-list - v-for="error in errorsOnPage" - :key="error.time" - :header="`${error.message}`" - :properties="Object.entries(error).map(([name, value]) => ({name, value}))" - container-style="width: 100%" - start-collapsed - /> - <gl-pagination v-if="presentableErrors.length > PER_PAGE" v-model="page" :per-page=PER_PAGE :total-items="presentableErrors.length" /> - </gl-alert > - <div v-else /> - </div> - -</template> diff --git a/packages/oc-pages/vue_shared/oc-components.js b/packages/oc-pages/vue_shared/oc-components.js new file mode 100644 index 00000000..2c297880 --- /dev/null +++ b/packages/oc-pages/vue_shared/oc-components.js @@ -0,0 +1,37 @@ +import Vue from 'vue'; + +export { default as DetectIcon } from './components/oc/detect-icon.vue' +export { default as StatusIcon } from './components/oc/Status.vue' +export { default as ProjectIcon } from './components/oc/project-icon.vue' +export { default as Status } from './components/oc/Status.vue' +export {default as OcPropertiesList} from './components/oc/oc-properties-list.vue' +export {default as DeploymentResources} from './components/oc/deployment-resources.vue' +export {default as OcTab} from './components/oc/oc-tab.vue' +export {default as GitHubRepos} from './components/oc/github-repos.vue' +export {default as ErrorSmall} from './components/oc/ErrorSmall.vue' +export {default as EmptyStateJob} from './components/oc/empty-state-job.vue' +export {default as EnvironmentSelection} from './components/oc/environment-selection.vue' +export {default as DeploymentScheduler} from './components/oc/deployment-scheduler.vue' +export {default as IncrementalDeploymentSwitch} from './components/oc/incremental-deployment-switch.vue' +export {default as LocalDeploy} from './components/oc/local-deploy.vue' +export {default as CodeClipboard} from './components/oc/code-clipboard.vue' + +export let CiVariableSettings, createCiVariablesStore +import {notFoundError, removeNotFoundError} from 'oc_vue_shared/client_utils/error' +export const PageNotFound = Vue.component("page-not-found", { + template: "", + created() { + notFoundError() + }, + unmounted() { + removeNotFoundError() + } +}) +export const SignIn = Vue.component("sign-in", { template: "", }) +// #!if false +import _CiVariableSettings from './oc_ci_variable_list/components/ci_variable_settings.vue' +// #!if false +import {asModule} from './oc_ci_variable_list/store' +// #!if false +CiVariableSettings = _CiVariableSettings; createCiVariablesStore = asModule + diff --git a/packages/oc-pages/vue_shared/storage-keys.js b/packages/oc-pages/vue_shared/storage-keys.js index 17e3da48..57245901 100644 --- a/packages/oc-pages/vue_shared/storage-keys.js +++ b/packages/oc-pages/vue_shared/storage-keys.js @@ -6,10 +6,7 @@ export const HIDDEN_OPTION_KEYS = { encodedPasswordExportUrls: 'encoded-password-export-urls', unfurlServerUrl: 'unfurl-server-url', connectWithoutCopy: 'connect-without-copy', - sendLatestCommit: 'always-send-latest-commit', - uploadStateBreakpoint: 'upload-state-breakpoint', - preserveImportedVuexState: 'preserveImportedVuexState', - defaultSeverityLevel: 'defaultSeverityLevel' + sendLatestCommit: 'always-send-latest-commit' } export const CONFIGURABLE_HIDDEN_OPTIONS = [ @@ -17,9 +14,6 @@ export const CONFIGURABLE_HIDDEN_OPTIONS = [ { key: 'encodedPasswordExportUrls', label: 'Encode Passwords in URL', placeholder: 'false' }, { key: 'connectWithoutCopy', label: 'Connect External Without Copy', placeholder: 'false' }, { key: 'sendLatestCommit', label: 'Latest Commit for UFSV URL', placeholder: 'false' }, - { key: 'uploadStateBreakpoint', label: 'Replace Vuex State at X', placeholder: 'loadDashboard' }, - { key: 'preserveImportedVuexState', label: "Load Vuex from file onreload", placeholder: 'false' }, - { key: 'defaultSeverityLevel', label: "Show Errors of at least X Severity", placeholder: 'minor, [major], critical' }, ] function isTruthyStorageValue(value) { @@ -79,22 +73,9 @@ export function alwaysSendLatestCommit() { return lookupKey( HIDDEN_OPTION_KEYS.sendLatestCommit ) } -export function defaultSeverityLevel() { - return lookupKey( HIDDEN_OPTION_KEYS.defaultSeverityLevel ) || 'major' -} - -export function useImportedStateOnBreakpointOrElse(breakpointName, cb) { - const newState = sessionStorage['unfurl-gui:state'] - if(newState && [lookupKey('uploadStateBreakpoint'), 'loadDashboard'].includes(breakpointName)) { - window.$store.replaceState({...window.$store.state, ...JSON.parse(newState)}) - if(!lookupKey('preserveImportedVuexState')) delete sessionStorage['unfurl-gui:state'] - } else {return cb()} - -} export const XHR_JAIL_URL = '/oc/assets/-/crossorigin-xhr.html' export const DEFAULT_UNFURL_SERVER_URL = '/services/unfurl-server' - window.lsHiddenOptions = function() { for(const opt of Object.values(HIDDEN_OPTION_KEYS)) console.log(opt) } diff --git a/packages/oc-pages/vue_shared/store_modules/errors.js b/packages/oc-pages/vue_shared/store_modules/errors.js deleted file mode 100644 index eb6bca30..00000000 --- a/packages/oc-pages/vue_shared/store_modules/errors.js +++ /dev/null @@ -1,45 +0,0 @@ -import Vue from 'vue' -import _ from 'lodash' -const ERROR_LEVELS = ['minor', 'major', 'critical'] -function stateFn() { - return { - errors: [], - errorsClearedTo: 0, - } -} - -const state = stateFn() - -const mutations = { - createError(state, {severity, message, context, ...optional}) { - const now = new Date(Date.now()) - - state.errors.push({ - severity: severity || 'major', - message, - context: context?.constructor?.name == 'Error'? context.message: _.cloneDeep(context), - ...optional, - time: now.toISOString() - }) - }, - clearErrors(state) { - Vue.set(state, 'errorsClearedTo', state.errors.length) - } -} - -const actions = { -} - -const getters = { - errors(state) {return state.errors.slice(state.errorsClearedTo)}, - errorsBySeverity(_, getters) { - return function(severity) { - return getters.errors.filter(e => ERROR_LEVELS.indexOf(e.severity) >= ERROR_LEVELS.indexOf(severity)) - } - }, - hasCriticalErrors(_, getters) { - return getters.errorsBySeverity('critical').length > 0 - } -} - -export default {state, mutations, actions, getters} -- GitLab