diff --git a/superset/assets/spec/javascripts/components/Menu_spec.jsx b/superset/assets/spec/javascripts/components/Menu_spec.jsx
index ce7e912370d..29d6e3a5cf0 100644
--- a/superset/assets/spec/javascripts/components/Menu_spec.jsx
+++ b/superset/assets/spec/javascripts/components/Menu_spec.jsx
@@ -17,7 +17,7 @@
* under the License.
*/
import React from 'react';
-import { shallow } from 'enzyme';
+import { shallow, mount } from 'enzyme';
import { Nav } from 'react-bootstrap';
import Menu from '../../../src/components/Menu/Menu';
@@ -137,4 +137,26 @@ describe('Menu', () => {
expect(loggedOutWrapper.find('i.fa-sign-in')).toHaveLength(1);
expect(loggedOutWrapper.find('i.fa-user')).toHaveLength(0);
});
+
+ it('renders version number and SHA', () => {
+ const overrideProps = {
+ data: {
+ ...defaultProps.data,
+ navbar_right: {
+ ...defaultProps.data.navbar_right,
+ version_string: 'A1',
+ version_sha: 'X',
+ },
+ },
+ };
+
+ const props = {
+ ...defaultProps,
+ ...overrideProps,
+ };
+
+ const versionedWrapper = mount(
);
+
+ expect(versionedWrapper.find('.version-info div')).toHaveLength(2);
+ });
});
diff --git a/superset/assets/src/components/Menu/Menu.jsx b/superset/assets/src/components/Menu/Menu.jsx
index 7375d22594d..a9301da171b 100644
--- a/superset/assets/src/components/Menu/Menu.jsx
+++ b/superset/assets/src/components/Menu/Menu.jsx
@@ -36,6 +36,8 @@ const propTypes = {
}).isRequired,
navbar_right: PropTypes.shape({
bug_report_url: PropTypes.string,
+ version_string: PropTypes.string,
+ version_sha: PropTypes.string,
documentation_url: PropTypes.string,
languages: PropTypes.object,
show_language_picker: PropTypes.bool.isRequired,
@@ -91,6 +93,8 @@ export default function Menu({
)}
{navbarRight.user_is_anonymous && (
diff --git a/superset/assets/src/components/Menu/Menu.less b/superset/assets/src/components/Menu/Menu.less
index 6a785282e11..2e597fdb004 100644
--- a/superset/assets/src/components/Menu/Menu.less
+++ b/superset/assets/src/components/Menu/Menu.less
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+@import '../../../stylesheets/less/variables.less';
#main-menu {
.navbar .caret {
@@ -26,4 +27,12 @@
top: -2px;
}
}
+ .version-info {
+ padding: 5px 20px;
+ color: @gray-heading;
+ font-size: @font-size-xs;
+ div {
+ white-space: nowrap;
+ }
+ }
}
diff --git a/superset/assets/src/components/Menu/UserMenu.jsx b/superset/assets/src/components/Menu/UserMenu.jsx
index a9eca15576f..d70c5795e73 100644
--- a/superset/assets/src/components/Menu/UserMenu.jsx
+++ b/superset/assets/src/components/Menu/UserMenu.jsx
@@ -24,9 +24,16 @@ import { t } from '@superset-ui/translation';
const propTypes = {
userInfoUrl: PropTypes.string.isRequired,
userLogoutUrl: PropTypes.string.isRequired,
+ versionString: PropTypes.string,
+ versionSha: PropTypes.string,
};
-export default function UserMenu({ userInfoUrl, userLogoutUrl }) {
+export default function UserMenu({
+ userInfoUrl,
+ userLogoutUrl,
+ versionString,
+ versionSha,
+}) {
return (
{t('Logout')}
+ {(versionString || versionSha) && (
+
+ {versionString && Version: {versionString}
}
+ {versionSha && SHA: {versionSha}
}
+
+ )}
);
}
diff --git a/superset/config.py b/superset/config.py
index cc069a58032..51b5e91bbaf 100644
--- a/superset/config.py
+++ b/superset/config.py
@@ -55,7 +55,7 @@ else:
# ---------------------------------------------------------
PACKAGE_DIR = os.path.join(BASE_DIR, "static", "assets")
VERSION_INFO_FILE = os.path.join(PACKAGE_DIR, "version_info.json")
-PACKAGE_JSON_FILE = os.path.join(BASE_DIR, "assets" "package.json")
+PACKAGE_JSON_FILE = os.path.join(BASE_DIR, "assets", "package.json")
def _try_json_readversion(filepath):
@@ -69,7 +69,7 @@ def _try_json_readversion(filepath):
def _try_json_readsha(filepath, length): # pylint: disable=unused-argument
try:
with open(filepath, "r") as f:
- return json.load(f).get("GIT_SHA")
+ return json.load(f).get("GIT_SHA")[:length]
except Exception: # pylint: disable=broad-except
return None
diff --git a/superset/views/base.py b/superset/views/base.py
index 6db5b03577a..54ed0811b18 100644
--- a/superset/views/base.py
+++ b/superset/views/base.py
@@ -208,6 +208,8 @@ def menu_data():
"navbar_right": {
"bug_report_url": appbuilder.app.config.get("BUG_REPORT_URL"),
"documentation_url": appbuilder.app.config.get("DOCUMENTATION_URL"),
+ "version_string": appbuilder.app.config.get("VERSION_STRING"),
+ "version_sha": appbuilder.app.config.get("VERSION_SHA"),
"languages": languages,
"show_language_picker": len(languages.keys()) > 1,
"user_is_anonymous": g.user.is_anonymous,