diff --git a/.github/workflows/detect-breaking-changes-build-skip.yml b/.github/workflows/detect-breaking-changes-build-skip.yml index 58e3cb5642451..feac05d62c5cd 100644 --- a/.github/workflows/detect-breaking-changes-build-skip.yml +++ b/.github/workflows/detect-breaking-changes-build-skip.yml @@ -28,7 +28,7 @@ jobs: # Upload artifact (so it can be used in the more privileged "report" workflow) - name: Upload check output as artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: levitate path: levitate/ diff --git a/.github/workflows/detect-breaking-changes-build.yml b/.github/workflows/detect-breaking-changes-build.yml index daadcbde738e7..e8d73af52d52d 100644 --- a/.github/workflows/detect-breaking-changes-build.yml +++ b/.github/workflows/detect-breaking-changes-build.yml @@ -49,7 +49,7 @@ jobs: run: zip -r ./pr_built_packages.zip ./packages/**/*.tgz - name: Upload build output as artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: buildPr path: './pr/pr_built_packages.zip' @@ -97,7 +97,7 @@ jobs: run: zip -r ./base_built_packages.zip ./packages/**/*.tgz - name: Upload build output as artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: buildBase path: './base/base_built_packages.zip' @@ -149,7 +149,7 @@ jobs: echo "{ \"exit_code\": ${{ steps.breaking-changes.outputs.is_breaking }}, \"message\": \"${{ steps.breaking-changes.outputs.message }}\", \"job_link\": \"${{ steps.job.outputs.link }}#step:${GITHUB_STEP_NUMBER}:1\", \"pr_number\": \"${{ github.event.pull_request.number }}\" }" > ./levitate/result.json - name: Upload check output as artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: levitate path: levitate/ diff --git a/.github/workflows/ui-tests.yml b/.github/workflows/ui-tests.yml index 7f80b4095f5da..bcd5ae7cb3424 100644 --- a/.github/workflows/ui-tests.yml +++ b/.github/workflows/ui-tests.yml @@ -78,7 +78,7 @@ jobs: - name: Attaching artifacts if: ${{ always() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ui-tests-output path: ./pmm-ui-tests/tests/output diff --git a/public/app/percona/shared/components/PerconaBootstrapper/PerconaBootstrapper.tsx b/public/app/percona/shared/components/PerconaBootstrapper/PerconaBootstrapper.tsx index be1a330158e97..cf0f27c66cedb 100644 --- a/public/app/percona/shared/components/PerconaBootstrapper/PerconaBootstrapper.tsx +++ b/public/app/percona/shared/components/PerconaBootstrapper/PerconaBootstrapper.tsx @@ -1,4 +1,5 @@ import React, { useEffect, useState } from 'react'; +import { useLocalStorage } from 'react-use'; import { config } from '@grafana/runtime'; import { Button, HorizontalGroup, Icon, Modal, useStyles2, useTheme2 } from '@grafana/ui'; @@ -24,6 +25,7 @@ import { Messages } from './PerconaBootstrapper.messages'; import { getStyles } from './PerconaBootstrapper.styles'; import { PerconaBootstrapperProps } from './PerconaBootstrapper.types'; import PerconaNavigation from './PerconaNavigation/PerconaNavigation'; +import PerconaNewVersion from './PerconaNewVersion'; import PerconaTourBootstrapper from './PerconaTour'; // This component is only responsible for populating the store with Percona's settings initially @@ -36,6 +38,7 @@ export const PerconaBootstrapper = ({ onReady }: PerconaBootstrapperProps) => { const { user } = config.bootData; const { isSignedIn } = user; const theme = useTheme2(); + const [modalNewVersionShown, setModalNewVersionShown] = useLocalStorage(`${user.id}-grafana.pmm3.modalShown`, true); const dismissModal = () => { setModalIsOpen(false); @@ -94,54 +97,63 @@ export const PerconaBootstrapper = ({ onReady }: PerconaBootstrapperProps) => { } }, [dispatch, isSignedIn, setSteps, onReady, user]); + const onDismissModalNewVersion = () => { + setModalNewVersionShown(false); + }; + return ( <> {isSignedIn && } - {isSignedIn && showTour && ( - -
- -
-

- {Messages.pmm} - {Messages.pmmIs} -

-

- {Messages.pmmEnables} -

    -
  • {Messages.spotCriticalPerformance}
  • -
  • {Messages.ensureDbPerformance}
  • -
  • {Messages.backup}
  • -
-

-

- {Messages.moreInfo} - - {Messages.pmmOnlineHelp} - - . -

- - - - - - - -
+ {isSignedIn && user.id !== 0 && modalNewVersionShown ? ( + + ) : ( + isSignedIn && + showTour && ( + +
+ +
+

+ {Messages.pmm} + {Messages.pmmIs} +

+

+ {Messages.pmmEnables} +

    +
  • {Messages.spotCriticalPerformance}
  • +
  • {Messages.ensureDbPerformance}
  • +
  • {Messages.backup}
  • +
+

+

+ {Messages.moreInfo} + + {Messages.pmmOnlineHelp} + + . +

+ + + + + + + +
+ ) )} ); diff --git a/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.constants.ts b/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.constants.ts new file mode 100644 index 0000000000000..6e2d22e27b611 --- /dev/null +++ b/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.constants.ts @@ -0,0 +1,2 @@ +export const DOCUMENTATION_LINK_URL = 'https://per.co.na/PMM3_RelNotes'; +export const MIGRATION_LINK_URL = 'https://per.co.na/migrate_to_PMM3'; diff --git a/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.messages.ts b/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.messages.ts new file mode 100644 index 0000000000000..2e69eeccbdfd7 --- /dev/null +++ b/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.messages.ts @@ -0,0 +1,8 @@ +export const Messages = { + titleNewVersion: 'PMM 3 is here and it’s better', + viewMigrationGuide: 'View migration guide', + close: 'Close', + description: + 'Upgrade for enhanced security, improved stability, and a smoother experience. PMM 3 also sets the foundation for exciting future updates. ', + seeWhatsNew: 'See what’s new in PMM 3', +}; diff --git a/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.styles.ts b/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.styles.ts new file mode 100644 index 0000000000000..dcfd7aee82d3a --- /dev/null +++ b/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.styles.ts @@ -0,0 +1,22 @@ +import { css } from '@emotion/css'; + +import { GrafanaTheme2 } from '@grafana/data'; + +export const getStyles = (theme: GrafanaTheme2) => ({ + newVersionModal: css` + display: flex; + flex-direction: column; + width: 480px; + `, + buttons: css` + margin-top: 35px; + display: flex; + justify-content: flex-end; + `, + closeButton: css` + margin-right: 20px; + `, + link: css` + color: ${theme.colors.text.link}; + `, +}); diff --git a/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.tsx b/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.tsx new file mode 100644 index 0000000000000..22d76a748085e --- /dev/null +++ b/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.tsx @@ -0,0 +1,35 @@ +import React from 'react'; + +import { Modal, useStyles2, Button, LinkButton } from '@grafana/ui'; + +import { MIGRATION_LINK_URL, DOCUMENTATION_LINK_URL } from './PerconaNewVersion.constants'; +import { Messages } from './PerconaNewVersion.messages'; +import { getStyles } from './PerconaNewVersion.styles'; +import { PerconaNewVersionProps } from './PerconaNewVersion.types'; + +const PerconaNewVersion = ({ isOpen, onDismiss }: PerconaNewVersionProps) => { + const styles = useStyles2(getStyles); + + return ( + +
+ + {Messages.description} + + {Messages.seeWhatsNew} + + +
+ + + {Messages.viewMigrationGuide} + +
+
+
+ ); +}; + +export default PerconaNewVersion; diff --git a/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.types.ts b/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.types.ts new file mode 100644 index 0000000000000..6bd02bbaf92d3 --- /dev/null +++ b/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/PerconaNewVersion.types.ts @@ -0,0 +1,4 @@ +export interface PerconaNewVersionProps { + onDismiss: () => void; + isOpen: boolean; +} diff --git a/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/index.ts b/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/index.ts new file mode 100644 index 0000000000000..112c16f9d7d93 --- /dev/null +++ b/public/app/percona/shared/components/PerconaBootstrapper/PerconaNewVersion/index.ts @@ -0,0 +1,3 @@ +import PerconaNewVersion from './PerconaNewVersion'; + +export default PerconaNewVersion;