mirror of
https://github.com/grafana/grafana.git
synced 2025-07-25 16:23:49 +08:00
Build swagger ui in seperate webpack build (#102046)
* Build swagger ui in seperate webpack build * render grafana and swagger * include light theme * merge main * update webassets usage --------- Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@ -7,6 +7,7 @@ awsconfig
|
||||
/.awcache
|
||||
/dist
|
||||
/public/build
|
||||
/public/build-swagger
|
||||
/emails/dist
|
||||
/reports
|
||||
/e2e/tmp
|
||||
|
1
Makefile
1
Makefile
@ -471,6 +471,7 @@ clean: ## Clean up intermediate build artifacts.
|
||||
@echo "cleaning"
|
||||
rm -rf node_modules
|
||||
rm -rf public/build
|
||||
rm -rf public/build-swagger
|
||||
|
||||
.PHONY: gen-ts
|
||||
gen-ts:
|
||||
|
@ -826,6 +826,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
||||
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
|
||||
github.com/creasty/defaults v1.8.0 h1:z27FJxCAa0JKt3utc0sCImAEb+spPucmKoOdLHvHYKk=
|
||||
github.com/creasty/defaults v1.8.0/go.mod h1:iGzKe6pbEHnpMPtfDXZEr0NVxWnPTjb1bbDy08fPzYM=
|
||||
github.com/crewjam/httperr v0.2.0 h1:b2BfXR8U3AlIHwNeFFvZ+BV1LFvKLlzMjzaTnZMybNo=
|
||||
@ -1075,6 +1076,7 @@ github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qA
|
||||
github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4=
|
||||
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
|
||||
github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA=
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
|
||||
github.com/googleapis/cloud-bigtable-clients-test v0.0.2 h1:S+sCHWAiAc+urcEnvg5JYJUOdlQEm/SEzQ/c/IdAH5M=
|
||||
github.com/googleapis/cloud-bigtable-clients-test v0.0.2/go.mod h1:mk3CrkrouRgtnhID6UZQDK3DrFFa7cYCAJcEmNsHYrY=
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
|
||||
|
@ -49,6 +49,7 @@
|
||||
"stats": "webpack --mode production --config scripts/webpack/webpack.prod.js --profile --json > compilation-stats.json",
|
||||
"storybook": "yarn workspace @grafana/ui storybook --ci",
|
||||
"storybook:build": "yarn workspace @grafana/ui storybook:build",
|
||||
"swaggerui:build": "webpack --config scripts/webpack/webpack.swagger.js --progress",
|
||||
"themes-generate": "esbuild --target=es6 ./scripts/cli/generateSassVariableFiles.ts --bundle --platform=node --tsconfig=./scripts/cli/tsconfig.json | node",
|
||||
"themes:usage": "eslint . --ignore-pattern '*.test.ts*' --ignore-pattern '*.spec.ts*' --cache --plugin '@grafana' --rule '{ @grafana/theme-token-usage: \"error\" }'",
|
||||
"typecheck": "tsc --noEmit && yarn run packages:typecheck",
|
||||
|
@ -42,8 +42,6 @@ type EntryPointAssets struct {
|
||||
CSSFiles []EntryPointAsset `json:"cssFiles"`
|
||||
Dark string `json:"dark"`
|
||||
Light string `json:"light"`
|
||||
Swagger []EntryPointAsset `json:"swagger"`
|
||||
SwaggerCSSFiles []EntryPointAsset `json:"swaggerCssFiles"`
|
||||
}
|
||||
|
||||
type EntryPointAsset struct {
|
||||
@ -64,10 +62,4 @@ func (a *EntryPointAssets) SetContentDeliveryURL(prefix string) {
|
||||
for i, p := range a.CSSFiles {
|
||||
a.CSSFiles[i].FilePath = prefix + p.FilePath
|
||||
}
|
||||
for i, p := range a.Swagger {
|
||||
a.Swagger[i].FilePath = prefix + p.FilePath
|
||||
}
|
||||
for i, p := range a.SwaggerCSSFiles {
|
||||
a.SwaggerCSSFiles[i].FilePath = prefix + p.FilePath
|
||||
}
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ func (hs *HTTPServer) GetFrontendAssets(c *contextmodel.ReqContext) {
|
||||
|
||||
// Assets
|
||||
hash.Reset()
|
||||
dto, err := webassets.GetWebAssets(c.Req.Context(), hs.Cfg, hs.License)
|
||||
dto, err := webassets.GetWebAssets(c.Req.Context(), "build", hs.Cfg, hs.License)
|
||||
if err == nil && dto != nil {
|
||||
_, _ = hash.Write([]byte(dto.ContentDeliveryURL))
|
||||
_, _ = hash.Write([]byte(dto.Dark))
|
||||
|
@ -114,7 +114,7 @@ func (hs *HTTPServer) setIndexViewData(c *contextmodel.ReqContext) (*dtos.IndexV
|
||||
}
|
||||
|
||||
theme := hs.getThemeForIndexData(prefs.Theme, urlPrefs.Theme)
|
||||
assets, err := webassets.GetWebAssets(c.Req.Context(), hs.Cfg, hs.License)
|
||||
assets, err := webassets.GetWebAssets(c.Req.Context(), "build", hs.Cfg, hs.License)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ func (hs *HTTPServer) registerSwaggerUI(r routing.RouteRegister) {
|
||||
// The swagger based api navigator
|
||||
r.Get("/swagger", func(c *contextmodel.ReqContext) {
|
||||
ctx := c.Req.Context()
|
||||
assets, err := webassets.GetWebAssets(ctx, hs.Cfg, hs.License)
|
||||
assets, err := webassets.GetWebAssets(ctx, "build-swagger", hs.Cfg, hs.License)
|
||||
if err != nil {
|
||||
errhttp.Write(ctx, err, c.Resp)
|
||||
return
|
||||
|
@ -1,135 +1,49 @@
|
||||
{
|
||||
"AdminAuthentication.js": {
|
||||
"src": "public/build/AdminAuthentication.abcc504db867d1fa3469.js",
|
||||
"integrity": "sha256-GtJEBbWfWAU2h2hoW+OiHUHNhHuKDzJ6mBEsVKyRc6M= sha384-SfBCROVbdjMZbxWZzYcYq1Ur4qVOmMgCQwRj9rc23op01045mOoRnCSwnENSNnhY sha512-RwKiHjN7M4Wf5BtO0nKFMoZTp0mCPVttkg4SU76+93VVdf8XEnTIpM6Trd+v4GX37wNrWEd34lh/Xaidq5t33g=="
|
||||
"1085.e73a523ceed532bcdab0.js": {
|
||||
"src": "public/build/runtime.d0d77f9ceac402028085.js",
|
||||
"integrity": "sha384-AAAA"
|
||||
},
|
||||
"AdminEditOrgPage.js": {
|
||||
"src": "public/build/AdminEditOrgPage.960dc1174d73f4fd46c3.js",
|
||||
"integrity": "sha256-y9TYWD3xHk5MQiBpvSpKvFgtp7yHovE0hfrUppxsQuw= sha384-kCrsPv6DmRzbRW/ajBaGu5X67nNRRAuOaZZYONCm8YA6KQclrEHG8navPSsMROnk sha512-2oE8w7f0s/vo6SOgDteuYSvuvAAjqMFjPpD4t7b11sah4B007L9dIVs9MF3jTSKsSHlG61hK6L2QCgv+9FtrFg=="
|
||||
"1085.0549a3fcb50e73c4b256.js": {
|
||||
"src": "public/build/6029.0549a3fcb50e73c4b256.js",
|
||||
"integrity": "sha384-BBBB"
|
||||
},
|
||||
"AdminFeatureTogglesPage.js": {
|
||||
"src": "public/build/AdminFeatureTogglesPage.999db7797f1efddde074.js",
|
||||
"integrity": "sha256-fhZz2BcvirKLQlxqcEprDplsSRAWYu+FiZWMRtFig1g= sha384-V2e+1wmlsKjorbNlJNzDfizXd1E4q8VpqaIX8S8FkumdZwFPPCXMsnHd77rjFKks sha512-LSiPxyiP0tmZ7fS/QOQBnC98pqgLDSATU0V9He5ubNEgziolxd/XmqoSDTGtp1WWZfjDxW6SUoKVmwstc0VzxA=="
|
||||
},
|
||||
"AdminListOrgsPage.js": {
|
||||
"src": "public/build/AdminListOrgsPage.c573cf876050fc991990.js",
|
||||
"integrity": "sha256-RSxk6cc52+j9cITdwi4k5lgzER+sKF7Mx5pn6atMYdE= sha384-xE53wdhi0O9e9A+9NKHGlvJgEeSew6ooXYl6oS8e5Qq9slP2TQygvO48/3CCYWJM sha512-YfXZHm9jyZbHAzcAimOv96ZJWEpQrzjZPxxvyVZZVPfB/8Z1FL7rhKhk0HGIhufXTTLhobZp/9CkFKT4no7zTA=="
|
||||
},
|
||||
"AdminSettings.js": {
|
||||
"src": "public/build/AdminSettings.cfdfc2e959a29968d661.js",
|
||||
"integrity": "sha256-v/5L4MXpTnSZXjApozisGbt+y+DPfpjWhH3D6bY83zE= sha384-FTIo/3tLgPKqgxwpxXSa8SLoU5hz4HJcgrVgXD2g06/GUnBFLrJcN3lYqYrvsgLu sha512-kBBoMB2XBtXM/iWW0zAFdI9O3ggetQZdpj6LhsiPDLy9pwRhwPQlnwZjlFkJMMEX0YK2uYl3dn9DUUyTKjtVMg=="
|
||||
},
|
||||
"AlertAmRoutes.js": {
|
||||
"src": "public/build/AlertAmRoutes.bd900447d272cba91413.js",
|
||||
"integrity": "sha256-K6hY1ruuidLNg5aYV4XZVBpTFCcS7T2q4b1mF9lPOf4= sha384-SFNQUdxgwLjHW/JsukI7Juhs6f2+qdxMCNbsD4ix3Ha44HbiXTKPBTmvxMl4r+CS sha512-eSrh2wrOXlLp9bXd+0zsZS4v8xjJTufSi0Kfgx0FSB8WhnjhOnIOX37wszsV00w1AwyO6VE6yN3q2PGTrpUoeg=="
|
||||
},
|
||||
"AlertGroups.js": {
|
||||
"src": "public/build/AlertGroups.d04aee7a0d92a3726e5c.js",
|
||||
"integrity": "sha256-GrsAPOHbrj3qJx97ugYdqF7fEtD1KU+VGZC9EnCzXhM= sha384-WjJwpX218WLCpDgRSkYbHvwjFy0ttlIb9fYpG0pLDgRu9iYQKBZXaYMU9PDKB4Iu sha512-hpE6YahXnP4RSOJ3Xd+oS55gmtDWHDnMrDNr2UOXpWbLuQQJu8e8uRAW5cIBl8u2S63F1SC1vGx6d535hECq2A=="
|
||||
},
|
||||
"AlertRuleListIndex.js": {
|
||||
"src": "public/build/AlertRuleListIndex.4682f9ab8dd5a8e68722.js",
|
||||
"integrity": "sha256-xlMu10aTkvXAw8hmtsaEZXTrAqQjaglNkwS6GLRISnU= sha384-hTb2gf6p1Q/M7fULhnDzGOlVjuYjnrVAJCrQ+yNNr0T0EWZkJ+yxrjNh9Q7/9F+G sha512-8xMEU7qfa+rlm62FHWYFb4JNN3E0WNqbhjVdNA2Awq+ZbhSHuzb4XPnmDJoOzakZoG1s+ZgK7GL1wSXBrKbPkw=="
|
||||
},
|
||||
"AlertSilences.js": {
|
||||
"src": "public/build/AlertSilences.84de2bedd3634a40f4a4.js",
|
||||
"integrity": "sha256-LamykmTC703pkL5q7hPdOp9zTQWn6ZsMKzRv7v35ubU= sha384-VWDeB7KZFOYL0RWBBXcmvzKds+Yxn2cDU8fSo4Srg165GY29s8+jO6sEG6OY9zj9 sha512-UvlIwoREIwdwkRWdut8+p+GGRgWTyAijW3pNQ1lQRUE8wGNYqBuHa1lGK6Jq4mmhkp1Pqo4/iI4Uk7vrbYFKow=="
|
||||
},
|
||||
"app.css": {
|
||||
"src": "public/build/grafana.app.91aaa9d81398c147a57c.css",
|
||||
"integrity": "sha256-77rfikk+dYkH82TOmcmleVoDOHZQdhzVX9gDLcgPbtQ= sha384-IOTlZ1IvTVq5ekKLoaE3/SoZ12K1eExOAnSw9BzkgQ3+RcyQpb1S5hO2w//IIkRB sha512-0Ct3uJBFQIkyxYTvMxseA1cphe2RivXQ2MCbiV0hEm5NzWPiY9sq2P4ay5dXz5v35c++4W47KaknoWlc83bQJQ=="
|
||||
},
|
||||
"app.js": {
|
||||
"src": "public/build/app.js",
|
||||
"integrity": "sha256-IOZKp3piC3vddDXP5jy5rIw0vb0KKEOg/k9EGrIxskk= sha384-CBNr5W0pJ23LQMnz5BZI1iVBIExOmF/wpqkEnBtYu9R/yYJIzjpv8KT0a3TBulOi sha512-ockzlzgosuZvLittZrSzh8lexEIZF9iKpy6J9Ii4es3e4D34FpWhHJhDZGpxLVraX4ypLofrDp2Yy0sdUbdi7w=="
|
||||
},
|
||||
"dark.css": {
|
||||
"src": "public/build/grafana.dark.722d809dba5a31f57d49.css",
|
||||
"integrity": "sha256-kyPBeKRFdG+i4aLA6vZ0nIkSD25YTHjcCfQ3e2+M6AA= sha384-o2yYT3suDP1EtvTj4UzLsSS+AAlv0F+n5YVaxDePRM6LSGAEPTxFOfxB3myAqD/x sha512-H3Eos9Ff7d+tB7e+6RORDXY49LjNMa8X3ZxiFn8T/OlHUFRnsfXsvj65p9cMqaRom/4qqx0JtmhtnuBoeaysrg=="
|
||||
},
|
||||
"dark.js": {
|
||||
"src": "public/build/dark.js",
|
||||
"integrity": "sha256-ON8tNAimyYNoju+WIQP7ux1Aq/oYspSbqoOKvVkeEJY= sha384-figjklDEMn19kCLZ9aq9pUeMGVOC3nlFkQI0PT016cep5KvAd4nyrAl4WA1MALHX sha512-P1xsw+PNS2AVneN4UFfYhYiS3FeEIDPAj4VXAjiQtHqw7qLETqv2K0sYRogoXma23Q/b+h3VL+fw6qtwhJ8WCQ=="
|
||||
},
|
||||
"default-packages_grafana-data_src_field_fieldComparers_ts-packages_grafana-data_src_transform-9dcf20.js": {
|
||||
"src": "public/build/default-packages_grafana-data_src_field_fieldComparers_ts-packages_grafana-data_src_transform-9dcf20.js",
|
||||
"integrity": "sha256-BfaH57oBHA9HC5GwpCNAREwyuEGsxbPR+eOEarSMqr0= sha384-elHEqjfd9Guir6jsvCIBsh/wCF4oJ6/wTFfgK9TsKyfyUJecmK3y1qlczBevMotL sha512-92Uk9x490/MViSclM7PjI6iQrM3FNRuiHGP5CWqNFjKX7PWLTcBirSs1xkoZ3tc0QG0m+klaJg6eNVEvpF25dQ=="
|
||||
},
|
||||
"default-packages_grafana-schema_src_raw_composable_barchart_panelcfg_x_BarChartPanelCfg_types-d3da31.js": {
|
||||
"src": "public/build/default-packages_grafana-schema_src_raw_composable_barchart_panelcfg_x_BarChartPanelCfg_types-d3da31.js",
|
||||
"integrity": "sha256-elDlrzSExWWpznC49+xQWQletnWQ1Fl6VaarANz2oLk= sha384-2UdE8X6NbOjt/i0WXpvew+eSBXKSTySfFdfxrIrALT0erSyvdbB9oASWPfRuTZyi sha512-so/nTAcSfmcReoZrJUusUbj6xxtGdrKiJ50n0CMZ1yqBh2hB7Y15s4POeX8axeJTNlo59wJ5GAbsdVTy4c0QhA=="
|
||||
},
|
||||
"default-packages_grafana-ui_src_components_Layout_Stack_Stack_tsx-packages_grafana-ui_src_com-2a3620.js": {
|
||||
"src": "public/build/default-packages_grafana-ui_src_components_Layout_Stack_Stack_tsx-packages_grafana-ui_src_com-2a3620.js",
|
||||
"integrity": "sha256-+0bPuBGKFGglkXvW4oPiolrNveozRLZVLUrbCYsbVcM= sha384-EIayAgykdDWmyilAuXo4ad96v3tRqdWZp+BHdeDpSSsbAMeg+eoBBbk2Yh219kDg sha512-+jn7kmQ9Id8aTIe66TD+vM+W19cTIVexEfkxbxgqXdJyJ72qalN6ccWyP1ro1w/E1R/laZGNLz1LBc1I4u2Isw=="
|
||||
},
|
||||
"defaultVendors-node_modules_braintree_sanitize-url_dist_index_js-node_modules_emotion_css_dis-e9d917.js": {
|
||||
"src": "public/build/defaultVendors-node_modules_braintree_sanitize-url_dist_index_js-node_modules_emotion_css_dis-e9d917.js",
|
||||
"integrity": "sha256-6et8tLQscwAftNYIM4u8L42Xi+tFIlkPsKIlyATTuY4= sha384-9AKIelnSKqxpMktU6Fw1uE1Kz6ZuEtI2ExvQ1PTjwPmpAE41LS6WxQ3pSV6qlLyz sha512-zcqwJExa8qzqZ1cCIK/y+HrWhJxP6rgSC+SbqxRStQUZrU4S1DQa1pwe6eSoZ4DPht/8rSeIii1wnl3DyhdVVg=="
|
||||
},
|
||||
"defaultVendors-node_modules_fingerprintjs_fingerprintjs_dist_fp_esm_js-node_modules_grafana_e-45bb7f.js": {
|
||||
"src": "public/build/defaultVendors-node_modules_fingerprintjs_fingerprintjs_dist_fp_esm_js-node_modules_grafana_e-45bb7f.js",
|
||||
"integrity": "sha256-bVtkMWml/TQfwbkV9ueteGi+GhLh7ajxtVevi3gb4Aw= sha384-8+VsDObIkyeW90JyQELbiOsPKFJaBOmScMhBuWKmhtBmV9/7YvjIvqEPvpz1H5gP sha512-L3PzrsTEqfR+ruNzEaIqt0V0ZyX4V1fqbOe7aXWMIOr8JjJSJT1rMPVqJixy5DOL2f0zLDEc/DJvk4SN4BrDuw=="
|
||||
},
|
||||
"defaultVendors-node_modules_swagger-ui-react_index_mjs.js": {
|
||||
"src": "public/build/defaultVendors-node_modules_swagger-ui-react_index_mjs.js",
|
||||
"integrity": "sha256-7qtYNxawpAwQUd6KR+2IgH95hkr0w5hZLGFeubAUkcc= sha384-29fQncD6F/vaoKmk4Ccht9JbnrPo2BSyUdHSkTkF4RWEFkhgVEUo1TlSTDc3iOcd sha512-UhXtPd5nXyvyVR0vNYoO5wINJgb49oeYoqfnNaVQndg3n9uIvPi4lr3iUk/jkBsnVH1dEDWiZIErDPiTyHe4+w=="
|
||||
},
|
||||
"light.css": {
|
||||
"src": "public/build/grafana.light.2fbd901d840329c18394.css",
|
||||
"integrity": "sha256-OumSnRJ7qttDoFmbB3LMxVvrfpFFjABX5b1iZDcRMmk= sha384-Cq4wA1zPU1cqxA/pc2V+iMwVjzsSdL09vM8xg4fSofGen7YIj6sVUgs2X4AdTzm/ sha512-6J9O/4UFL8undkyqbEGAlNnEjm5N8Us5k9rJdcjhZwYKt1UIKXapw8f320k3tv1N0GB0Wt4xO6EKD9MsrIkCSw=="
|
||||
},
|
||||
"light.js": {
|
||||
"src": "public/build/light.js",
|
||||
"integrity": "sha256-TDwcqlc6Pc8yTRNLOk0jp3Wnp06cnF/OSaFvwOnwCVQ= sha384-xJv6KB8Qm9Skru8PY5CRdU9a59e94tcYWonpy5rqaci6fiecQM3aH+eHe41succB sha512-sPXciUAa7rpRofN6b93v9+tWpLP88ER6TqAGpbHkz69mxuQLJv1p580fEfxLeIs3HfLkDXnVPK7rGF0d5Evrog=="
|
||||
},
|
||||
"moment-node_modules_moment_locale_af_js-node_modules_moment_locale_ar-dz_js-node_modules_mome-ddcc36.js": {
|
||||
"src": "public/build/moment-node_modules_moment_locale_af_js-node_modules_moment_locale_ar-dz_js-node_modules_mome-ddcc36.js",
|
||||
"integrity": "sha256-BvrNPeEZbt43PpUlZ4r5pUougn3OzHIHKZN9pa5fotw= sha384-gMrZ0j/kyHwx2bhyt5ZjZOPlK7P7TRN6rBnk/0c9iF2X83GVTWNjhHcldmlYJXnf sha512-B+39Sk+Rwdo9hURcDoWL/61/sbMsTlqfES+FCsMC1r2xUH/Fyw/U2H0CgIi+c3AJyu1GLEvp//QBN0RZxaizhw=="
|
||||
},
|
||||
"runtime.js": {
|
||||
"src": "public/build/runtime.js",
|
||||
"integrity": "sha256-tM4AGASn3Cb8139+wp3w6rlo3ELFAuUW7K4Pifx226o= sha384-DfxxsYWb0+RxiXOr+wtCSzAAYGecffq/iHyn6CN9tHmaORv1sS+rsrnlnJo2jPQD sha512-qSxdqrx0mJLY1mdkbKrkCyqOoIEgFqzCoY9+uIuFRIVDPFbb2nJy0NtaKMQvDJnAzIrJFwzwW1e250T4WqQNiQ=="
|
||||
},
|
||||
"swagger.css": {
|
||||
"src": "public/build/grafana.swagger.2733d417270d5dd49373.css",
|
||||
"integrity": "sha256-GNcHNgIAT7S+J4X7seFjlvNPC1bRhM15d0cQBm3VFoQ= sha384-ywztCBf8uF0tTFjC1mLth33RI2WuFURN3dRy7Bv2PheGzbWJpwlgo9+mtT2Zm7mO sha512-e4c+VedZGqcwLqwfdqRWonggRPO0gjJ7Z0YbXK5z4bFTsUIc+x8ycIJG+eQaf8cuHlsakG4hkWNkRwLBazcFAg=="
|
||||
},
|
||||
"swagger.js": {
|
||||
"src": "public/build/swagger.js",
|
||||
"integrity": "sha256-wLlip7zRYODW/TPcI5JZPRdmWirc1KD+UcNF+8V9RBk= sha384-6VGD+LgCpjMZN/ORSjWcrWa9diUzQO3OfEhP0D2ZluSwP4IT+0kH7KEeD9NVbojd sha512-vZOCFzBZBhd34yGv8z7P4Gw4WLVR9HjpuK0y6Kcw+pCBk5Dv9qHBg3ZVs6s0tOnUmiMWwgL4Ne8f+zgiuJVPqg=="
|
||||
"1085.ab25b0e84da80ffc7244.js": {
|
||||
"src": "public/build/grafana.app.ab25b0e84da80ffc7244.css",
|
||||
"integrity": "sha384-CCCC"
|
||||
},
|
||||
"entrypoints": {
|
||||
"app": {
|
||||
"assets": {
|
||||
"js": [
|
||||
"public/build/runtime.js",
|
||||
"public/build/default-packages_grafana-ui_src_components_Layout_Stack_Stack_tsx-packages_grafana-ui_src_com-2a3620.js",
|
||||
"public/build/app.js"
|
||||
"public/build/runtime.d0d77f9ceac402028085.js",
|
||||
"public/build/6029.0549a3fcb50e73c4b256.js"
|
||||
],
|
||||
"css": ["public/build/grafana.app.91aaa9d81398c147a57c.css"]
|
||||
}
|
||||
},
|
||||
"swagger": {
|
||||
"assets": {
|
||||
"js": [
|
||||
"public/build/runtime.js",
|
||||
"public/build/swagger.js"
|
||||
],
|
||||
"css": ["public/build/grafana.swagger.2733d417270d5dd49373.css"]
|
||||
"css": [
|
||||
"public/build/grafana.app.ab25b0e84da80ffc7244.css"
|
||||
]
|
||||
}
|
||||
},
|
||||
"dark": {
|
||||
"assets": {
|
||||
"js": ["public/build/runtime.js", "public/build/dark.js"],
|
||||
"css": ["public/build/grafana.dark.722d809dba5a31f57d49.css"]
|
||||
"js": [
|
||||
"public/build/runtime.d0d77f9ceac402028085.js",
|
||||
"public/build/dark.d9196c1e81619cd5ae4f.js"
|
||||
],
|
||||
"css": [
|
||||
"public/build/grafana.dark.23c5425b7a9e1580d499.css"
|
||||
]
|
||||
}
|
||||
},
|
||||
"light": {
|
||||
"assets": {
|
||||
"js": ["public/build/runtime.js", "public/build/light.js"],
|
||||
"css": ["public/build/grafana.light.2fbd901d840329c18394.css"]
|
||||
"js": [
|
||||
"public/build/runtime.d0d77f9ceac402028085.js",
|
||||
"public/build/light.6f4baca9576edc9c2e5b.js"
|
||||
],
|
||||
"css": [
|
||||
"public/build/grafana.light.7fb85ddc153a7c559092.css"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -20,10 +20,9 @@ type ManifestInfo struct {
|
||||
Integrity string `json:"integrity,omitempty"`
|
||||
|
||||
// The known entrypoints
|
||||
App *EntryPointInfo `json:"app,omitempty"`
|
||||
Dark *EntryPointInfo `json:"dark,omitempty"`
|
||||
Light *EntryPointInfo `json:"light,omitempty"`
|
||||
Swagger *EntryPointInfo `json:"swagger,omitempty"`
|
||||
App *EntryPointInfo `json:"app,omitempty"`
|
||||
Dark *EntryPointInfo `json:"dark,omitempty"`
|
||||
Light *EntryPointInfo `json:"light,omitempty"`
|
||||
}
|
||||
|
||||
type EntryPointInfo struct {
|
||||
@ -38,7 +37,7 @@ var (
|
||||
entryPointAssetsCache *dtos.EntryPointAssets // TODO: get rid of global state
|
||||
)
|
||||
|
||||
func GetWebAssets(ctx context.Context, cfg *setting.Cfg, license licensing.Licensing) (*dtos.EntryPointAssets, error) {
|
||||
func GetWebAssets(ctx context.Context, build string, cfg *setting.Cfg, license licensing.Licensing) (*dtos.EntryPointAssets, error) {
|
||||
entryPointAssetsCacheMu.RLock()
|
||||
ret := entryPointAssetsCache
|
||||
entryPointAssetsCacheMu.RUnlock()
|
||||
@ -54,11 +53,11 @@ func GetWebAssets(ctx context.Context, cfg *setting.Cfg, license licensing.Licen
|
||||
|
||||
cdn := "" // "https://grafana-assets.grafana.net/grafana/10.3.0-64123/"
|
||||
if cdn != "" {
|
||||
result, err = readWebAssetsFromCDN(ctx, cdn)
|
||||
result, err = readWebAssetsFromCDN(ctx, build, cdn)
|
||||
}
|
||||
|
||||
if result == nil {
|
||||
result, err = readWebAssetsFromFile(filepath.Join(cfg.StaticRootPath, "build", "assets-manifest.json"))
|
||||
result, err = readWebAssetsFromFile(filepath.Join(cfg.StaticRootPath, build, "assets-manifest.json"))
|
||||
if err == nil {
|
||||
cdn, _ = cfg.GetContentDeliveryURL(license.ContentDeliveryPrefix())
|
||||
if cdn != "" {
|
||||
@ -83,8 +82,8 @@ func readWebAssetsFromFile(manifestpath string) (*dtos.EntryPointAssets, error)
|
||||
return readWebAssets(f)
|
||||
}
|
||||
|
||||
func readWebAssetsFromCDN(ctx context.Context, baseURL string) (*dtos.EntryPointAssets, error) {
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, baseURL+"public/build/assets-manifest.json", nil)
|
||||
func readWebAssetsFromCDN(ctx context.Context, build string, baseURL string) (*dtos.EntryPointAssets, error) {
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodGet, baseURL+"public/"+build+"/assets-manifest.json", nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -123,23 +122,16 @@ func readWebAssets(r io.Reader) (*dtos.EntryPointAssets, error) {
|
||||
if entryPoints.App == nil || len(entryPoints.App.Assets.JS) == 0 {
|
||||
return nil, fmt.Errorf("missing app entry, try running `yarn build`")
|
||||
}
|
||||
if entryPoints.Dark == nil || len(entryPoints.Dark.Assets.CSS) == 0 {
|
||||
return nil, fmt.Errorf("missing dark entry, try running `yarn build`")
|
||||
}
|
||||
if entryPoints.Light == nil || len(entryPoints.Light.Assets.CSS) == 0 {
|
||||
return nil, fmt.Errorf("missing light entry, try running `yarn build`")
|
||||
}
|
||||
if entryPoints.Swagger == nil || len(entryPoints.Swagger.Assets.JS) == 0 {
|
||||
return nil, fmt.Errorf("missing swagger entry, try running `yarn build`")
|
||||
}
|
||||
|
||||
rsp := &dtos.EntryPointAssets{
|
||||
JSFiles: make([]dtos.EntryPointAsset, 0, len(entryPoints.App.Assets.JS)),
|
||||
CSSFiles: make([]dtos.EntryPointAsset, 0, len(entryPoints.App.Assets.CSS)),
|
||||
Dark: entryPoints.Dark.Assets.CSS[0],
|
||||
Light: entryPoints.Light.Assets.CSS[0],
|
||||
Swagger: make([]dtos.EntryPointAsset, 0, len(entryPoints.Swagger.Assets.JS)),
|
||||
SwaggerCSSFiles: make([]dtos.EntryPointAsset, 0, len(entryPoints.Swagger.Assets.CSS)),
|
||||
JSFiles: make([]dtos.EntryPointAsset, 0, len(entryPoints.App.Assets.JS)),
|
||||
CSSFiles: make([]dtos.EntryPointAsset, 0, len(entryPoints.App.Assets.CSS)),
|
||||
}
|
||||
if entryPoints.Dark != nil && len(entryPoints.Dark.Assets.CSS) > 0 {
|
||||
rsp.Dark = entryPoints.Dark.Assets.CSS[0]
|
||||
}
|
||||
if entryPoints.Light != nil && len(entryPoints.Light.Assets.CSS) > 0 {
|
||||
rsp.Light = entryPoints.Light.Assets.CSS[0]
|
||||
}
|
||||
|
||||
for _, entry := range entryPoints.App.Assets.JS {
|
||||
@ -154,17 +146,5 @@ func readWebAssets(r io.Reader) (*dtos.EntryPointAssets, error) {
|
||||
Integrity: integrity[entry],
|
||||
})
|
||||
}
|
||||
for _, entry := range entryPoints.Swagger.Assets.JS {
|
||||
rsp.Swagger = append(rsp.Swagger, dtos.EntryPointAsset{
|
||||
FilePath: entry,
|
||||
Integrity: integrity[entry],
|
||||
})
|
||||
}
|
||||
for _, entry := range entryPoints.Swagger.Assets.CSS {
|
||||
rsp.SwaggerCSSFiles = append(rsp.SwaggerCSSFiles, dtos.EntryPointAsset{
|
||||
FilePath: entry,
|
||||
Integrity: integrity[entry],
|
||||
})
|
||||
}
|
||||
return rsp, nil
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ package webassets
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
@ -16,101 +15,32 @@ func TestReadWebassets(t *testing.T) {
|
||||
dto, err := json.MarshalIndent(assets, "", " ")
|
||||
require.NoError(t, err)
|
||||
// fmt.Printf("%s\n", string(dto))
|
||||
|
||||
require.JSONEq(t, `{
|
||||
"jsFiles": [
|
||||
{
|
||||
"filePath": "public/build/runtime.js",
|
||||
"integrity": "sha256-tM4AGASn3Cb8139+wp3w6rlo3ELFAuUW7K4Pifx226o= sha384-DfxxsYWb0+RxiXOr+wtCSzAAYGecffq/iHyn6CN9tHmaORv1sS+rsrnlnJo2jPQD sha512-qSxdqrx0mJLY1mdkbKrkCyqOoIEgFqzCoY9+uIuFRIVDPFbb2nJy0NtaKMQvDJnAzIrJFwzwW1e250T4WqQNiQ=="
|
||||
},
|
||||
{
|
||||
"filePath": "public/build/default-packages_grafana-ui_src_components_Layout_Stack_Stack_tsx-packages_grafana-ui_src_com-2a3620.js",
|
||||
"integrity": "sha256-+0bPuBGKFGglkXvW4oPiolrNveozRLZVLUrbCYsbVcM= sha384-EIayAgykdDWmyilAuXo4ad96v3tRqdWZp+BHdeDpSSsbAMeg+eoBBbk2Yh219kDg sha512-+jn7kmQ9Id8aTIe66TD+vM+W19cTIVexEfkxbxgqXdJyJ72qalN6ccWyP1ro1w/E1R/laZGNLz1LBc1I4u2Isw=="
|
||||
},
|
||||
{
|
||||
"filePath": "public/build/app.js",
|
||||
"integrity": "sha256-IOZKp3piC3vddDXP5jy5rIw0vb0KKEOg/k9EGrIxskk= sha384-CBNr5W0pJ23LQMnz5BZI1iVBIExOmF/wpqkEnBtYu9R/yYJIzjpv8KT0a3TBulOi sha512-ockzlzgosuZvLittZrSzh8lexEIZF9iKpy6J9Ii4es3e4D34FpWhHJhDZGpxLVraX4ypLofrDp2Yy0sdUbdi7w=="
|
||||
}
|
||||
],
|
||||
"cssFiles": [
|
||||
{
|
||||
"filePath": "public/build/grafana.app.91aaa9d81398c147a57c.css",
|
||||
"integrity": "sha256-77rfikk+dYkH82TOmcmleVoDOHZQdhzVX9gDLcgPbtQ= sha384-IOTlZ1IvTVq5ekKLoaE3/SoZ12K1eExOAnSw9BzkgQ3+RcyQpb1S5hO2w//IIkRB sha512-0Ct3uJBFQIkyxYTvMxseA1cphe2RivXQ2MCbiV0hEm5NzWPiY9sq2P4ay5dXz5v35c++4W47KaknoWlc83bQJQ=="
|
||||
}
|
||||
],
|
||||
"dark": "public/build/grafana.dark.722d809dba5a31f57d49.css",
|
||||
"light": "public/build/grafana.light.2fbd901d840329c18394.css",
|
||||
"swagger": [
|
||||
{
|
||||
"filePath": "public/build/runtime.js",
|
||||
"integrity": "sha256-tM4AGASn3Cb8139+wp3w6rlo3ELFAuUW7K4Pifx226o= sha384-DfxxsYWb0+RxiXOr+wtCSzAAYGecffq/iHyn6CN9tHmaORv1sS+rsrnlnJo2jPQD sha512-qSxdqrx0mJLY1mdkbKrkCyqOoIEgFqzCoY9+uIuFRIVDPFbb2nJy0NtaKMQvDJnAzIrJFwzwW1e250T4WqQNiQ=="
|
||||
},
|
||||
{
|
||||
"filePath": "public/build/swagger.js",
|
||||
"integrity": "sha256-wLlip7zRYODW/TPcI5JZPRdmWirc1KD+UcNF+8V9RBk= sha384-6VGD+LgCpjMZN/ORSjWcrWa9diUzQO3OfEhP0D2ZluSwP4IT+0kH7KEeD9NVbojd sha512-vZOCFzBZBhd34yGv8z7P4Gw4WLVR9HjpuK0y6Kcw+pCBk5Dv9qHBg3ZVs6s0tOnUmiMWwgL4Ne8f+zgiuJVPqg=="
|
||||
}
|
||||
],
|
||||
"swaggerCssFiles": [
|
||||
{
|
||||
"filePath": "public/build/grafana.swagger.2733d417270d5dd49373.css",
|
||||
"integrity": "sha256-GNcHNgIAT7S+J4X7seFjlvNPC1bRhM15d0cQBm3VFoQ= sha384-ywztCBf8uF0tTFjC1mLth33RI2WuFURN3dRy7Bv2PheGzbWJpwlgo9+mtT2Zm7mO sha512-e4c+VedZGqcwLqwfdqRWonggRPO0gjJ7Z0YbXK5z4bFTsUIc+x8ycIJG+eQaf8cuHlsakG4hkWNkRwLBazcFAg=="
|
||||
}
|
||||
]
|
||||
}`, string(dto))
|
||||
|
||||
assets.SetContentDeliveryURL("https://grafana-assets.grafana.net/grafana/10.3.0-64123/")
|
||||
|
||||
dto, err = json.MarshalIndent(assets, "", " ")
|
||||
require.NoError(t, err)
|
||||
fmt.Printf("%s\n", string(dto))
|
||||
|
||||
require.JSONEq(t, `{
|
||||
"cdn": "https://grafana-assets.grafana.net/grafana/10.3.0-64123/",
|
||||
"jsFiles": [
|
||||
{
|
||||
"filePath": "https://grafana-assets.grafana.net/grafana/10.3.0-64123/public/build/runtime.js",
|
||||
"integrity": "sha256-tM4AGASn3Cb8139+wp3w6rlo3ELFAuUW7K4Pifx226o= sha384-DfxxsYWb0+RxiXOr+wtCSzAAYGecffq/iHyn6CN9tHmaORv1sS+rsrnlnJo2jPQD sha512-qSxdqrx0mJLY1mdkbKrkCyqOoIEgFqzCoY9+uIuFRIVDPFbb2nJy0NtaKMQvDJnAzIrJFwzwW1e250T4WqQNiQ=="
|
||||
},
|
||||
{
|
||||
"filePath": "https://grafana-assets.grafana.net/grafana/10.3.0-64123/public/build/default-packages_grafana-ui_src_components_Layout_Stack_Stack_tsx-packages_grafana-ui_src_com-2a3620.js",
|
||||
"integrity": "sha256-+0bPuBGKFGglkXvW4oPiolrNveozRLZVLUrbCYsbVcM= sha384-EIayAgykdDWmyilAuXo4ad96v3tRqdWZp+BHdeDpSSsbAMeg+eoBBbk2Yh219kDg sha512-+jn7kmQ9Id8aTIe66TD+vM+W19cTIVexEfkxbxgqXdJyJ72qalN6ccWyP1ro1w/E1R/laZGNLz1LBc1I4u2Isw=="
|
||||
},
|
||||
{
|
||||
"filePath": "https://grafana-assets.grafana.net/grafana/10.3.0-64123/public/build/app.js",
|
||||
"integrity": "sha256-IOZKp3piC3vddDXP5jy5rIw0vb0KKEOg/k9EGrIxskk= sha384-CBNr5W0pJ23LQMnz5BZI1iVBIExOmF/wpqkEnBtYu9R/yYJIzjpv8KT0a3TBulOi sha512-ockzlzgosuZvLittZrSzh8lexEIZF9iKpy6J9Ii4es3e4D34FpWhHJhDZGpxLVraX4ypLofrDp2Yy0sdUbdi7w=="
|
||||
}
|
||||
],
|
||||
"cssFiles": [
|
||||
{
|
||||
"filePath": "https://grafana-assets.grafana.net/grafana/10.3.0-64123/public/build/grafana.app.91aaa9d81398c147a57c.css",
|
||||
"integrity": "sha256-77rfikk+dYkH82TOmcmleVoDOHZQdhzVX9gDLcgPbtQ= sha384-IOTlZ1IvTVq5ekKLoaE3/SoZ12K1eExOAnSw9BzkgQ3+RcyQpb1S5hO2w//IIkRB sha512-0Ct3uJBFQIkyxYTvMxseA1cphe2RivXQ2MCbiV0hEm5NzWPiY9sq2P4ay5dXz5v35c++4W47KaknoWlc83bQJQ=="
|
||||
}
|
||||
],
|
||||
"dark": "https://grafana-assets.grafana.net/grafana/10.3.0-64123/public/build/grafana.dark.722d809dba5a31f57d49.css",
|
||||
"light": "https://grafana-assets.grafana.net/grafana/10.3.0-64123/public/build/grafana.light.2fbd901d840329c18394.css",
|
||||
"swagger": [
|
||||
{
|
||||
"filePath": "https://grafana-assets.grafana.net/grafana/10.3.0-64123/public/build/runtime.js",
|
||||
"integrity": "sha256-tM4AGASn3Cb8139+wp3w6rlo3ELFAuUW7K4Pifx226o= sha384-DfxxsYWb0+RxiXOr+wtCSzAAYGecffq/iHyn6CN9tHmaORv1sS+rsrnlnJo2jPQD sha512-qSxdqrx0mJLY1mdkbKrkCyqOoIEgFqzCoY9+uIuFRIVDPFbb2nJy0NtaKMQvDJnAzIrJFwzwW1e250T4WqQNiQ=="
|
||||
},
|
||||
{
|
||||
"filePath": "https://grafana-assets.grafana.net/grafana/10.3.0-64123/public/build/swagger.js",
|
||||
"integrity": "sha256-wLlip7zRYODW/TPcI5JZPRdmWirc1KD+UcNF+8V9RBk= sha384-6VGD+LgCpjMZN/ORSjWcrWa9diUzQO3OfEhP0D2ZluSwP4IT+0kH7KEeD9NVbojd sha512-vZOCFzBZBhd34yGv8z7P4Gw4WLVR9HjpuK0y6Kcw+pCBk5Dv9qHBg3ZVs6s0tOnUmiMWwgL4Ne8f+zgiuJVPqg=="
|
||||
}
|
||||
],
|
||||
"swaggerCssFiles": [
|
||||
{
|
||||
"filePath": "https://grafana-assets.grafana.net/grafana/10.3.0-64123/public/build/grafana.swagger.2733d417270d5dd49373.css",
|
||||
"integrity": "sha256-GNcHNgIAT7S+J4X7seFjlvNPC1bRhM15d0cQBm3VFoQ= sha384-ywztCBf8uF0tTFjC1mLth33RI2WuFURN3dRy7Bv2PheGzbWJpwlgo9+mtT2Zm7mO sha512-e4c+VedZGqcwLqwfdqRWonggRPO0gjJ7Z0YbXK5z4bFTsUIc+x8ycIJG+eQaf8cuHlsakG4hkWNkRwLBazcFAg=="
|
||||
}
|
||||
]
|
||||
}`, string(dto))
|
||||
"jsFiles": [
|
||||
{
|
||||
"filePath": "public/build/runtime.d0d77f9ceac402028085.js",
|
||||
"integrity": "sha384-AAAA"
|
||||
},
|
||||
{
|
||||
"filePath": "public/build/6029.0549a3fcb50e73c4b256.js",
|
||||
"integrity": "sha384-BBBB"
|
||||
}
|
||||
],
|
||||
"cssFiles": [
|
||||
{
|
||||
"filePath": "public/build/grafana.app.ab25b0e84da80ffc7244.css",
|
||||
"integrity": "sha384-CCCC"
|
||||
}
|
||||
],
|
||||
"dark": "public/build/grafana.dark.23c5425b7a9e1580d499.css",
|
||||
"light": "public/build/grafana.light.7fb85ddc153a7c559092.css"
|
||||
}`, string(dto))
|
||||
}
|
||||
|
||||
func TestReadWebassetsFromCDN(t *testing.T) {
|
||||
t.Skip()
|
||||
|
||||
assets, err := readWebAssetsFromCDN(context.Background(), "https://grafana-assets.grafana.net/grafana/10.3.0-64123/")
|
||||
assets, err := readWebAssetsFromCDN(context.Background(), "build", "https://grafana-assets.grafana.net/grafana/10.3.0-64123/")
|
||||
require.NoError(t, err)
|
||||
|
||||
dto, err := json.MarshalIndent(assets, "", " ")
|
||||
|
@ -138,7 +138,7 @@ func Recovery(cfg *setting.Cfg, license licensing.Licensing) web.Middleware {
|
||||
return
|
||||
}
|
||||
|
||||
assets, _ := webassets.GetWebAssets(req.Context(), cfg, license)
|
||||
assets, _ := webassets.GetWebAssets(req.Context(), "build", cfg, license)
|
||||
if assets == nil {
|
||||
assets = &dtos.EntryPointAssets{JSFiles: []dtos.EntryPointAsset{}}
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ var (
|
||||
)
|
||||
|
||||
func NewIndexProvider(cfg *setting.Cfg, license licensing.Licensing) (*IndexProvider, error) {
|
||||
assets, err := webassets.GetWebAssets(context.Background(), cfg, license)
|
||||
assets, err := webassets.GetWebAssets(context.Background(), "build", cfg, license)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
11
project.json
11
project.json
@ -5,6 +5,7 @@
|
||||
"targets": {
|
||||
"start": {
|
||||
"dependsOn": [
|
||||
"swaggerui:build",
|
||||
"themes-generate",
|
||||
{
|
||||
"projects": ["tag:scope:plugin"],
|
||||
@ -14,6 +15,7 @@
|
||||
},
|
||||
"build": {
|
||||
"dependsOn": [
|
||||
"swaggerui:build",
|
||||
"themes-generate",
|
||||
{
|
||||
"projects": ["tag:scope:plugin"],
|
||||
@ -35,6 +37,15 @@
|
||||
"{workspaceRoot}/public/sass/_variables.light.generated.scss"
|
||||
],
|
||||
"cache": true
|
||||
},
|
||||
"swaggerui:build": {
|
||||
"inputs": [
|
||||
"{workspaceRoot}/packages/grafana-ui/src/themes/**",
|
||||
"{workspaceRoot}/public/app/core/trustedTypePolicies.ts",
|
||||
"{workspaceRoot}/public/swagger/**"
|
||||
],
|
||||
"outputs": ["{workspaceRoot}/public/build-swagger"],
|
||||
"cache": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -12,10 +12,9 @@
|
||||
|
||||
<title>Grafana API Reference</title>
|
||||
|
||||
[[range $asset := .Assets.SwaggerCSSFiles]]
|
||||
[[range $asset := .Assets.CSSFiles]]
|
||||
<link rel="stylesheet" href="[[$asset.FilePath]]" />
|
||||
[[end]]
|
||||
|
||||
<link rel="stylesheet" href="[[.Assets.Light]]" />
|
||||
|
||||
<link rel="icon" type="image/png" href="[[.FavIcon]]" />
|
||||
@ -27,11 +26,11 @@
|
||||
<noscript> You need to enable JavaScript to run this app. </noscript>
|
||||
<script nonce="[[$.Nonce]]">
|
||||
[[if .Assets.ContentDeliveryURL]]
|
||||
window.public_cdn_path = '[[.Assets.ContentDeliveryURL]]public/build/';
|
||||
window.public_cdn_path = '[[.Assets.ContentDeliveryURL]]public/build-swagger/';
|
||||
[[end]]
|
||||
</script>
|
||||
<div id="root"></div>
|
||||
[[range $asset := .Assets.Swagger]]
|
||||
[[range $asset := .Assets.JSFiles]]
|
||||
<script nonce="[[$.Nonce]]" src="[[$asset.FilePath]]" type="text/javascript"></script>
|
||||
[[end]]
|
||||
<script></script>
|
||||
|
@ -7,7 +7,6 @@ module.exports = {
|
||||
target: 'web',
|
||||
entry: {
|
||||
app: './public/app/index.ts',
|
||||
swagger: './public/swagger/index.tsx',
|
||||
},
|
||||
experiments: {
|
||||
// Required to load WASM modules.
|
||||
|
27
scripts/webpack/webpack.swagger.js
Normal file
27
scripts/webpack/webpack.swagger.js
Normal file
@ -0,0 +1,27 @@
|
||||
// @ts-check
|
||||
const path = require('path');
|
||||
|
||||
const makeBaseConfig = require('./webpack.prod.js');
|
||||
|
||||
module.exports = (env = {}) => {
|
||||
const baseConfig = makeBaseConfig(env);
|
||||
|
||||
return {
|
||||
...baseConfig,
|
||||
|
||||
entry: {
|
||||
app: './public/swagger/index.tsx',
|
||||
light: './public/sass/grafana.light.scss',
|
||||
},
|
||||
|
||||
// Output to a different directory so each build doesn't clobber each other
|
||||
output: {
|
||||
...baseConfig.output,
|
||||
clean: true,
|
||||
path: path.resolve(__dirname, '../../public/build-swagger'),
|
||||
filename: '[name].[contenthash].js',
|
||||
// Keep publicPath relative for host.com/grafana/ deployments
|
||||
publicPath: 'public/build-swagger/',
|
||||
},
|
||||
};
|
||||
};
|
Reference in New Issue
Block a user