diff --git a/pkg/app/web/BUILD.bazel b/pkg/app/web/BUILD.bazel index dcd175d0b7..6821b232e2 100644 --- a/pkg/app/web/BUILD.bazel +++ b/pkg/app/web/BUILD.bazel @@ -73,13 +73,27 @@ genrule( visibility = ["//visibility:public"], ) +genrule( + name = "embed_version", + srcs = ["webpack.config.js", "webpack.common.js"], + outs = ["gen_webpack.config.js","gen_webpack.common.js"], + cmd = """ + for f in $(SRCS) + do + sed -e "s/unknown/$$(cat ./bazel-out/stable-status.txt | grep STABLE_VERSION | awk '{print $$2}')/g" $$f > $(@D)/gen_$$(basename $$f) + done + """, + output_to_bindir = 1, + stamp = True, +) + webpack( name = "public_files", args = [ "--mode", "production", "--config", - "$(execpath webpack.config.js)", + "$(execpath gen_webpack.config.js)", "--env htmlTemplate=./$(execpath base.html)", "--env bazelBinPath=./$(BINDIR)", "--output-path", @@ -92,9 +106,10 @@ webpack( "base.html", "compile", "copy_assets", + "embed_version", + "gen_webpack.config.js", + "gen_webpack.common.js", "model", - "webpack.common.js", - "webpack.config.js", "public/mockServiceWorker.js", "@npm//:node_modules", ] + glob(["assets/**/*"]), diff --git a/pkg/app/web/package.json b/pkg/app/web/package.json index e440cdde53..b12153f9c9 100644 --- a/pkg/app/web/package.json +++ b/pkg/app/web/package.json @@ -5,7 +5,7 @@ "private": true, "license": "Apache-2.0", "scripts": { - "dev": "webpack serve --env htmlTemplate=./base.html --config ./webpack.config.dev.js", + "dev": "STABLE_VERSION=`git describe --tags --always --dirty --abbrev=7` webpack serve --env htmlTemplate=./base.html --config ./webpack.config.dev.js", "gen": "scaffdog generate", "test": "TZ=Asia/Tokyo jest --config jest.config.local.js", "test:coverage": "yarn test --coverage", diff --git a/pkg/app/web/src/components/header/index.tsx b/pkg/app/web/src/components/header/index.tsx index 7fca1f3e29..1ba5006983 100644 --- a/pkg/app/web/src/components/header/index.tsx +++ b/pkg/app/web/src/components/header/index.tsx @@ -11,7 +11,7 @@ import { MenuItem, Menu, } from "@material-ui/core"; -import { MoreVert } from "@material-ui/icons"; +import { MoreVert, OpenInNew } from "@material-ui/icons"; import { PAGE_PATH_APPLICATIONS, PAGE_PATH_DEPLOYMENTS, @@ -206,11 +206,28 @@ export const Header: FC = memo(function Header() { Events - + Settings + + + Documentation + + + + + {process.env.STABLE_VERSION} + ); diff --git a/pkg/app/web/webpack.config.dev.js b/pkg/app/web/webpack.config.dev.js index 68b1418b76..d4af8ffc29 100644 --- a/pkg/app/web/webpack.config.dev.js +++ b/pkg/app/web/webpack.config.dev.js @@ -62,6 +62,9 @@ module.exports = (env) => }, plugins: [ new ForkTsCheckerWebpackPlugin(), - new webpack.EnvironmentPlugin(["API_ENDPOINT"]), + new webpack.EnvironmentPlugin({ + API_ENDPOINT: process.env.API_ENDPOINT || null, + STABLE_VERSION: process.env.STABLE_VERSION || null, + }), ], }); diff --git a/pkg/app/web/webpack.config.js b/pkg/app/web/webpack.config.js index 9bd02ee9c3..673707fb17 100644 --- a/pkg/app/web/webpack.config.js +++ b/pkg/app/web/webpack.config.js @@ -1,8 +1,12 @@ /* eslint @typescript-eslint/no-var-requires: 0 */ "use strict"; -const commonConfig = require("./webpack.common"); +const commonConfig = require("./gen_webpack.common"); const { merge } = require("webpack-merge"); const path = require("path"); +const webpack = require("webpack"); + +// overridden by bazel +const version = "unknown"; module.exports = (env) => { return merge(commonConfig(env), { @@ -25,5 +29,10 @@ module.exports = (env) => { ], }, mode: "production", + plugins: [ + new webpack.EnvironmentPlugin({ + STABLE_VERSION: version || null, + }), + ], }); };