mirror of
https://github.com/sourcegraph/sourcegraph.git
synced 2026-02-06 17:31:43 +00:00
sg/msp: architecture diagrams (#62213)
This commit is contained in:
parent
2519301e81
commit
6d7082d26e
269
deps.bzl
269
deps.bzl
@ -97,8 +97,8 @@ def go_dependencies():
|
||||
name = "com_github_alecthomas_assert_v2",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/alecthomas/assert/v2",
|
||||
sum = "h1:f6L/b7KE2bfA+9O4FL3CM/xJccDEwPVYd5fALBiuwvw=",
|
||||
version = "v2.2.0",
|
||||
sum = "h1:XivOgYcduV98QCahG8T5XTezV5bylXe+lBxLG2K2ink=",
|
||||
version = "v2.2.1",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_alecthomas_chroma",
|
||||
@ -111,8 +111,8 @@ def go_dependencies():
|
||||
name = "com_github_alecthomas_chroma_v2",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/alecthomas/chroma/v2",
|
||||
sum = "h1:Loe2ZjT5x3q1bcWwemqyqEi8p11/IV/ncFCeLYDpWC4=",
|
||||
version = "v2.4.0",
|
||||
sum = "h1:CQCdj1BiBV17sD4Bd32b/Bzuiq/EqoNTrnIhyQAZ+Rk=",
|
||||
version = "v2.5.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_alecthomas_kingpin",
|
||||
@ -125,8 +125,8 @@ def go_dependencies():
|
||||
name = "com_github_alecthomas_repr",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/alecthomas/repr",
|
||||
sum = "h1:ENn2e1+J3k09gyj2shc0dHr/yjaWSHRlrJ4DPMevDqE=",
|
||||
version = "v0.1.0",
|
||||
sum = "h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk=",
|
||||
version = "v0.2.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_alecthomas_template",
|
||||
@ -198,6 +198,13 @@ def go_dependencies():
|
||||
sum = "h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss=",
|
||||
version = "v1.3.2",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_andybalholm_stroke",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/andybalholm/stroke",
|
||||
sum = "h1:uF5Q/hWnDU1XZeT6CsrRSxHLroUSEYYO3kgES+yd+So=",
|
||||
version = "v0.0.0-20221221101821-bd29b49d73f0",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_andygrunwald_go_gerrit",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -863,6 +870,13 @@ def go_dependencies():
|
||||
sum = "h1:6+ZFm0flnudZzdSE0JxlhR2hKnGPcNB35BjQf4RYQDY=",
|
||||
version = "v0.0.0-20220606134207-859f65c6625b",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_campoy_embedmd",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/campoy/embedmd",
|
||||
sum = "h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY=",
|
||||
version = "v1.0.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_cenkalti_backoff",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -927,15 +941,15 @@ def go_dependencies():
|
||||
name = "com_github_chromedp_cdproto",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/chromedp/cdproto",
|
||||
sum = "h1:lg5k1KAxmknil6Z19LaaeiEs5Pje7hPzRfyWSSnWLP0=",
|
||||
version = "v0.0.0-20210706234513-2bc298e8be7f",
|
||||
sum = "h1:aPflPkRFkVwbW6dmcVqfgwp1i+UWGFH6VgR1Jim5Ygc=",
|
||||
version = "v0.0.0-20230802225258-3cf4e6d46a89",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_chromedp_chromedp",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/chromedp/chromedp",
|
||||
sum = "h1:FvgJICfjvXtDX+miuMUY0NHuY8zQvjS/TcEQEG6Ldzs=",
|
||||
version = "v0.7.3",
|
||||
sum = "h1:dKtNz4kApb06KuSXoTQIyUC2TrA0fhGDwNZf3bcgfKw=",
|
||||
version = "v0.9.2",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_chromedp_sysutil",
|
||||
@ -948,8 +962,8 @@ def go_dependencies():
|
||||
name = "com_github_chzyer_logex",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/chzyer/logex",
|
||||
sum = "h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=",
|
||||
version = "v1.1.10",
|
||||
sum = "h1:+eqR0HfOetur4tgnC8ftU5imRnhi4te+BadWS95c5AM=",
|
||||
version = "v1.2.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_chzyer_readline",
|
||||
@ -962,8 +976,8 @@ def go_dependencies():
|
||||
name = "com_github_chzyer_test",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/chzyer/test",
|
||||
sum = "h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8=",
|
||||
version = "v0.0.0-20180213035817-a1ea475d72b1",
|
||||
sum = "h1:dZ0/VyGgQdVGAss6Ju0dt5P0QltE0SFY5Woh6hbIfiQ=",
|
||||
version = "v0.0.0-20210722231415-061457976a23",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_client9_misspell",
|
||||
@ -1285,6 +1299,13 @@ def go_dependencies():
|
||||
sum = "h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs=",
|
||||
version = "v1.2.1",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_danwakefield_fnmatch",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/danwakefield/fnmatch",
|
||||
sum = "h1:y5HC9v93H5EPKqaS1UYVg1uYah5Xf51mBfIoWehClUQ=",
|
||||
version = "v0.0.0-20160403171240-cbb64ac3d964",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_datadog_zstd",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -1573,6 +1594,48 @@ def go_dependencies():
|
||||
sum = "h1:oEt43goQgsL1DzoOyQ/UZHQw7t9TqwyJec9W0vh0wfE=",
|
||||
version = "v0.0.0-20190522011736-bcdb4a3e3c2f",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_dop251_goja",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/dop251/goja",
|
||||
sum = "h1:wi6jN5LVt/ljaBG4ue79Ekzb12QfJ52L9Q98tl8SWhw=",
|
||||
version = "v0.0.0-20231027120936-b396bb4c349d",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_dop251_goja_nodejs",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/dop251/goja_nodejs",
|
||||
sum = "h1:W1n4DvpzZGOISgp7wWNtraLcHtnmnTwBlJidqtMIuwQ=",
|
||||
version = "v0.0.0-20211022123610-8dd9abb0616d",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_dsoprea_go_exif_v3",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/dsoprea/go-exif/v3",
|
||||
sum = "h1:/IE4iW7gvY7BablV1XY0unqhMv26EYpOquVMwoBo/wc=",
|
||||
version = "v3.0.1",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_dsoprea_go_logging",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/dsoprea/go-logging",
|
||||
sum = "h1:l+vLbuxptsC6VQyQsfD7NnEC8BZuFpz45PgY+pH8YTg=",
|
||||
version = "v0.0.0-20200710184922-b02d349568dd",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_dsoprea_go_png_image_structure_v2",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/dsoprea/go-png-image-structure/v2",
|
||||
sum = "h1:2zNIgrJTspLxUKoJGl0Ln24+hufPKSjP3cu4++5MeSE=",
|
||||
version = "v2.0.0-20210512210324-29b889a6093d",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_dsoprea_go_utility_v2",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/dsoprea/go-utility/v2",
|
||||
sum = "h1:DilThiXje0z+3UQ5YjYiSRRzVdtamFpvBQXKwMglWqw=",
|
||||
version = "v2.0.0-20221003172846-a3e1774ef349",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_dustin_go_humanize",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -1650,6 +1713,13 @@ def go_dependencies():
|
||||
sum = "h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=",
|
||||
version = "v1.0.2",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_ericpauley_go_quantize",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/ericpauley/go-quantize",
|
||||
sum = "h1:BBade+JlV/f7JstZ4pitd4tHhpN+w+6I+LyOS7B4fyU=",
|
||||
version = "v0.0.0-20200331213906-ae555eb2afa4",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_evanphx_json_patch",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -1759,8 +1829,8 @@ def go_dependencies():
|
||||
name = "com_github_fsnotify_fsnotify",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/fsnotify/fsnotify",
|
||||
sum = "h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=",
|
||||
version = "v1.7.0",
|
||||
sum = "h1:5ZeiG5gIjLqPKLl+f5zv++9ZO2oxA6hmZ3e7G0mMW1M=",
|
||||
version = "v1.7.1-0.20240403050945-7086bea086b7",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_fullstorydev_grpcui",
|
||||
@ -1872,15 +1942,22 @@ def go_dependencies():
|
||||
name = "com_github_go_errors_errors",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/go-errors/errors",
|
||||
sum = "h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=",
|
||||
version = "v1.4.2",
|
||||
sum = "h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk=",
|
||||
version = "v1.5.1",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_go_fonts_latin_modern",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/go-fonts/latin-modern",
|
||||
sum = "h1:/cT8A7uavYKvglYXvrdDw4oS5ZLkcOU22fa2HJ1/JVM=",
|
||||
version = "v0.3.1",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_go_fonts_liberation",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/go-fonts/liberation",
|
||||
sum = "h1:3BI2iaE7R/s6uUUtzNCjo3QijJu3aS4wmrMgfSpYQ+8=",
|
||||
version = "v0.3.0",
|
||||
sum = "h1:9RPT2NhUpxQ7ukUvz3jeUckmN42T9D9TpjtQcqK/ceM=",
|
||||
version = "v0.3.1",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_go_git_gcfg",
|
||||
@ -2075,8 +2152,8 @@ def go_dependencies():
|
||||
name = "com_github_go_pdf_fpdf",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/go-pdf/fpdf",
|
||||
sum = "h1:MlgtGIfsdMEEQJr2le6b/HNr1ZlQwxyWr77r2aj2U/8=",
|
||||
version = "v0.6.0",
|
||||
sum = "h1:IJKpdaagnWUeSkUFUjTcSzTppFxmv8ucGQyNPQWxYOQ=",
|
||||
version = "v0.8.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_go_playground_locales",
|
||||
@ -2134,6 +2211,13 @@ def go_dependencies():
|
||||
sum = "h1:JVrqSeQfdhYRFk24TvhTZWU0q8lfCojxZQFi3Ou7+uY=",
|
||||
version = "v2.1.1-0.20191201195748-d7b97669fe48",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_go_sourcemap_sourcemap",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/go-sourcemap/sourcemap",
|
||||
sum = "h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU=",
|
||||
version = "v2.1.3+incompatible",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_go_sql_driver_mysql",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -2162,6 +2246,13 @@ def go_dependencies():
|
||||
sum = "h1:u2CU3YKy9I2pmu9pX0eq50wCgjfGIt539SqR7FbHiho=",
|
||||
version = "v1.0.4",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_go_text_typesetting",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/go-text/typesetting",
|
||||
sum = "h1:FQivqchis6bE2/9uF70M2gmmLpe82esEm2QadL0TEJo=",
|
||||
version = "v0.0.0-20230803102845-24e03d8b5372",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_go_toast_toast",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -2285,8 +2376,15 @@ def go_dependencies():
|
||||
name = "com_github_gobwas_ws",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/gobwas/ws",
|
||||
sum = "h1:7RFti/xnNkMJnrK7D1yQ/iCIB5OrrY/54/H930kIbHA=",
|
||||
version = "v1.1.0",
|
||||
sum = "h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk=",
|
||||
version = "v1.2.1",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_goccmack_gocc",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/goccmack/gocc",
|
||||
sum = "h1:FSii2UQeSLngl3jFoR4tUKZLprO7qUlh/TKKticc0BM=",
|
||||
version = "v0.0.0-20230228185258-2292f9e40198",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_goccy_go_json",
|
||||
@ -2358,6 +2456,13 @@ def go_dependencies():
|
||||
sum = "h1:16RtHeWGkJMc80Etb8RPCcKevXGldr57+LOyZt8zOlg=",
|
||||
version = "v0.0.0-20210115222349-20d68f94ee1f",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_golang_geo",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/golang/geo",
|
||||
sum = "h1:HKlyj6in2JV6wVkmQ4XmG/EIm+SCYlPZ+V4GWit7Z+I=",
|
||||
version = "v0.0.0-20230421003525-6adc56603217",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_golang_glog",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -2574,8 +2679,8 @@ def go_dependencies():
|
||||
name = "com_github_google_pprof",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/google/pprof",
|
||||
sum = "h1:n6vlPhxsA+BW/XsS5+uqi7GyzaLa5MH7qlSLBZtRdiA=",
|
||||
version = "v0.0.0-20230705174524-200ffdc848b8",
|
||||
sum = "h1:PxlBVtIFHR/mtWk2i0gTEdCz+jBnqiuHNSki0epDbVs=",
|
||||
version = "v0.0.0-20231205033806-a5a03c77bf08",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_google_renameio",
|
||||
@ -3516,6 +3621,13 @@ def go_dependencies():
|
||||
sum = "h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=",
|
||||
version = "v1.3.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_jung_kurt_gofpdf",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/jung-kurt/gofpdf",
|
||||
sum = "h1:jgbatWHfRlPYiK85qgevsZTHviWXKwB1TTiKdz5PtRc=",
|
||||
version = "v1.16.2",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_k0kubun_go_ansi",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -4041,6 +4153,13 @@ def go_dependencies():
|
||||
sum = "h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=",
|
||||
version = "v2.0.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_mazznoer_csscolorparser",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/mazznoer/csscolorparser",
|
||||
sum = "h1:vug4zh6loQxAUxfU1DZEu70gTPufDPspamZlHAkKcxE=",
|
||||
version = "v0.1.3",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_microcosm_cc_bluemonday",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -4695,6 +4814,13 @@ def go_dependencies():
|
||||
sum = "h1:aOB2gRFzZTCCPi3YsOQXJO771P/5876JAsdebMyazig=",
|
||||
version = "v0.0.1",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_playwright_community_playwright_go",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/playwright-community/playwright-go",
|
||||
sum = "h1:2JViSHpJQ/UL/PO1Gg6gXV5IcXAAsoBJ3KG9L3wKXto=",
|
||||
version = "v0.2000.1",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_pmezard_go_difflib",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -6022,8 +6148,8 @@ def go_dependencies():
|
||||
name = "com_github_yuin_goldmark",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "github.com/yuin/goldmark",
|
||||
sum = "h1:COmQAWTCcGetChm3Ig7G/t8AFAN00t+o8Mt4cf7JpwA=",
|
||||
version = "v1.5.6",
|
||||
sum = "h1:boZcn2GTjpsynOsC0iJHnBWa4Bi0qzfJjthwauItG68=",
|
||||
version = "v1.6.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_github_yuin_goldmark_emoji",
|
||||
@ -6956,6 +7082,20 @@ def go_dependencies():
|
||||
sum = "h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY=",
|
||||
version = "v0.0.0-20190408044501-666a987793e9",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_terrastruct_oss_d2",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "oss.terrastruct.com/d2",
|
||||
sum = "h1:VgZgiwtMhh3uVR2mm7e0bdh25f1px3ZCPM/la5GKfMc=",
|
||||
version = "v0.6.5",
|
||||
)
|
||||
go_repository(
|
||||
name = "com_terrastruct_oss_util_go",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "oss.terrastruct.com/util-go",
|
||||
sum = "h1:n6y6RoZCgZDchN4gLGlzNRO1Jdf9xOGGqohDBph5BG8=",
|
||||
version = "v0.0.0-20231101220827-55b3812542c2",
|
||||
)
|
||||
go_repository(
|
||||
name = "dev_bobheadxi_go_gobenchdata",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -6970,6 +7110,13 @@ def go_dependencies():
|
||||
sum = "h1:EwbDggkws9Qo/fl4Zo801Z8mgf4xZBOX7/bbfTthsy4=",
|
||||
version = "v1.3.2",
|
||||
)
|
||||
go_repository(
|
||||
name = "dev_cdr_slog",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "cdr.dev/slog",
|
||||
sum = "h1:Jf+VOk2lif79HeTlnLaZ70zYTsuVSUEu/47U9VaG2Rw=",
|
||||
version = "v1.4.2-0.20221206192828-e4803b10ae17",
|
||||
)
|
||||
go_repository(
|
||||
name = "dev_chainguard_apko",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -6988,8 +7135,8 @@ def go_dependencies():
|
||||
name = "ht_sr_git_sbinet_gg",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "git.sr.ht/~sbinet/gg",
|
||||
sum = "h1:LNhjNn8DerC8f9DHLz6lS0YYul/b602DUxDgGkd/Aik=",
|
||||
version = "v0.3.1",
|
||||
sum = "h1:6V43j30HM623V329xA9Ntq+WJrMjDxRjuAB1LFWF5m8=",
|
||||
version = "v0.5.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "in_gopkg_alecthomas_kingpin_v2",
|
||||
@ -7320,6 +7467,13 @@ def go_dependencies():
|
||||
sum = "h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=",
|
||||
version = "v0.0.0-20230726121419-3b25d923346b",
|
||||
)
|
||||
go_repository(
|
||||
name = "io_nhooyr_websocket",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "nhooyr.io/websocket",
|
||||
sum = "h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0=",
|
||||
version = "v1.8.11",
|
||||
)
|
||||
go_repository(
|
||||
name = "io_opencensus_go",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -7720,6 +7874,34 @@ def go_dependencies():
|
||||
sum = "h1:W3oBBjDTm7+IZfCKZAmC8uDG0eYfJL4Pp/xbbCMKaVo=",
|
||||
version = "v0.4.3",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_gioui",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "gioui.org",
|
||||
sum = "h1:RbzDn1h/pCVf/q44ImQSa/J3MIFpY3OWphzT/Tyei+w=",
|
||||
version = "v0.2.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_gioui_cpu",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "gioui.org/cpu",
|
||||
sum = "h1:tNJdnP5CgM39PRc+KWmBRRYX/zJ+rd5XaYxY5d5veqA=",
|
||||
version = "v0.0.0-20220412190645-f1e9e8c3b1f7",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_gioui_shader",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "gioui.org/shader",
|
||||
sum = "h1:cvZmU+eODFR2545X+/8XucgZdTtEjR3QWW6W65b0q5Y=",
|
||||
version = "v1.0.6",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_gioui_x",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "gioui.org/x",
|
||||
sum = "h1:/MbdjKH19F16auv19UiQxli2n6BYPw7eyh9XBOTgmEw=",
|
||||
version = "v0.2.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_google_api",
|
||||
build_file_proto_mode = "disable_global",
|
||||
@ -7794,15 +7976,22 @@ def go_dependencies():
|
||||
name = "org_golang_x_exp",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "golang.org/x/exp",
|
||||
sum = "h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=",
|
||||
version = "v0.0.0-20231006140011-7918f672742d",
|
||||
sum = "h1:Gvh4YaCaXNs6dKTlfgismwWZKyjVZXwOPfIyUaqU3No=",
|
||||
version = "v0.0.0-20231127185646-65229373498e",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_x_exp_shiny",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "golang.org/x/exp/shiny",
|
||||
sum = "h1:sgkbz1SFTsoQIvzTIw45hccUcGocu00QM3qucBYV8b0=",
|
||||
version = "v0.0.0-20230801115018-d63ba01acd4b",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_x_image",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "golang.org/x/image",
|
||||
sum = "h1:bR8b5okrPI3g/gyZakLZHeWxAR8Dn5CyxXv1hLH5g/4=",
|
||||
version = "v0.6.0",
|
||||
sum = "h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4=",
|
||||
version = "v0.14.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_golang_x_lint",
|
||||
@ -7899,22 +8088,22 @@ def go_dependencies():
|
||||
name = "org_golang_x_xerrors",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "golang.org/x/xerrors",
|
||||
sum = "h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=",
|
||||
version = "v0.0.0-20220907171357-04be3eba64a2",
|
||||
sum = "h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=",
|
||||
version = "v0.0.0-20231012003039-104605ab7028",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_gonum_v1_gonum",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "gonum.org/v1/gonum",
|
||||
sum = "h1:a0T3bh+7fhRyqeNbiC3qVHYmkiQgit3wnNan/2c0HMM=",
|
||||
version = "v0.13.0",
|
||||
sum = "h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=",
|
||||
version = "v0.14.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_gonum_v1_plot",
|
||||
build_file_proto_mode = "disable_global",
|
||||
importpath = "gonum.org/v1/plot",
|
||||
sum = "h1:dnifSs43YJuNMDzB7v8wV64O4ABBHReuAVAoBxqBqS4=",
|
||||
version = "v0.10.1",
|
||||
sum = "h1:+LBDVFYwFe4LHhdP8coW6296MBEY4nQ+Y4vuUpJopcE=",
|
||||
version = "v0.14.0",
|
||||
)
|
||||
go_repository(
|
||||
name = "org_kernel_pub_linux_libs_security_libcap_cap",
|
||||
|
||||
@ -0,0 +1,31 @@
|
||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
|
||||
|
||||
go_library(
|
||||
name = "diagram",
|
||||
srcs = [
|
||||
"components.go",
|
||||
"diagram.go",
|
||||
"msp.go",
|
||||
"options.go",
|
||||
],
|
||||
importpath = "github.com/sourcegraph/sourcegraph/dev/managedservicesplatform/operationdocs/diagram",
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//dev/managedservicesplatform/operationdocs/diagram/assets",
|
||||
"//dev/managedservicesplatform/spec",
|
||||
"//lib/errors",
|
||||
"//lib/pointers",
|
||||
"@com_terrastruct_oss_d2//d2format",
|
||||
"@com_terrastruct_oss_d2//d2graph",
|
||||
"@com_terrastruct_oss_d2//d2layouts/d2dagrelayout",
|
||||
"@com_terrastruct_oss_d2//d2lib",
|
||||
"@com_terrastruct_oss_d2//d2oracle",
|
||||
"@com_terrastruct_oss_d2//d2renderers/d2svg",
|
||||
"@com_terrastruct_oss_d2//d2target",
|
||||
"@com_terrastruct_oss_d2//d2themes",
|
||||
"@com_terrastruct_oss_d2//lib/log",
|
||||
"@com_terrastruct_oss_d2//lib/textmeasure",
|
||||
"@dev_cdr_slog//:slog",
|
||||
"@dev_cdr_slog//sloggers/sloghuman",
|
||||
],
|
||||
)
|
||||
@ -0,0 +1,24 @@
|
||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
|
||||
|
||||
go_library(
|
||||
name = "assets",
|
||||
srcs = ["assets.go"],
|
||||
embedsrcs = [
|
||||
"bigquery",
|
||||
"cloudarmor",
|
||||
"cloudflare",
|
||||
"cloudmemorystore",
|
||||
"cloudmonitoring",
|
||||
"cloudrun",
|
||||
"cloudsql",
|
||||
"cloudtrace",
|
||||
"externalipaddress",
|
||||
"internet",
|
||||
"loadbalancer",
|
||||
"opsgenie",
|
||||
"sentry",
|
||||
"vpc",
|
||||
],
|
||||
importpath = "github.com/sourcegraph/sourcegraph/dev/managedservicesplatform/operationdocs/diagram/assets",
|
||||
visibility = ["//visibility:public"],
|
||||
)
|
||||
@ -0,0 +1,7 @@
|
||||
# MSP Architecture Diagrams
|
||||
|
||||
Diagrams are primarily sourced from the [D2 Icons](https://icons.terrastruct.com/) library.
|
||||
|
||||
Icons for other services can generally be found from a company's branding/PR page.
|
||||
|
||||
Files must be encoded as a data URI such that they can be embedded into the SVGs. Conversion can be using a [converter tool](https://www.adminbooster.com/tool/data_uri)
|
||||
@ -0,0 +1,42 @@
|
||||
package assets
|
||||
|
||||
import _ "embed"
|
||||
|
||||
// Icon is a data-uri encoded svg.
|
||||
// We need to embed the icons in our output svg
|
||||
// rather than using urls to externally hosted svgs
|
||||
// as _most_ sites block requests to external content for security reasons
|
||||
//
|
||||
// Note: when adding a new icon ensure there is no trailing whitespace/newline
|
||||
type Icon string
|
||||
|
||||
var (
|
||||
//go:embed internet
|
||||
Internet Icon
|
||||
//go:embed cloudflare
|
||||
Cloudflare Icon
|
||||
//go:embed externalipaddress
|
||||
CloudExternalIPAddress Icon
|
||||
//go:embed loadbalancer
|
||||
CloudLoadBalancer Icon
|
||||
//go:embed cloudarmor
|
||||
CloudArmor Icon
|
||||
//go:embed cloudrun
|
||||
CloudRun Icon
|
||||
//go:embed cloudmemorystore
|
||||
CloudMemorystore Icon
|
||||
//go:embed bigquery
|
||||
BigQuery Icon
|
||||
//go:embed cloudsql
|
||||
CloudSQL Icon
|
||||
//go:embed cloudmonitoring
|
||||
CloudMonitoring Icon
|
||||
//go:embed cloudtrace
|
||||
CloudTrace Icon
|
||||
//go:embed sentry
|
||||
Sentry Icon
|
||||
//go:embed opsgenie
|
||||
Opsgenie Icon
|
||||
//go:embed vpc
|
||||
VPC Icon
|
||||
)
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cGF0aCBkPSJtMTI2LjQ3IDU4LjEyLTI2LjMtNDUuNzRhMTEuNTYgMTEuNTYgMCAwIDAtOS44Ni01Ljg4SDM3LjdhMTEuNTUgMTEuNTUgMCAwIDAtOS44NiA1Ljg4TDEuNTMgNThhMTEuNDggMTEuNDggMCAwIDAgMCAxMS40NGwyNi4zIDQ2YTExLjc3IDExLjc3IDAgMCAwIDkuODYgNi4wOUg5MC4zYTExLjczIDExLjczIDAgMCAwIDkuODctNi4wNmwyNi4zLTQ1Ljc0YTExLjczIDExLjczIDAgMCAwIDAtMTEuNjEiIHN0eWxlPSJmaWxsOiM0Mjg1ZjQiLz48cGF0aCBkPSJtMTAwLjE3IDExNS40NCAxNy41My0zMC40OS0zNy4wOC0zNy4wN0w2NCA0My40MyA0OS4wNyA0OSA0My4zIDY0bDQuNjQgMTYuNzMgNDAuNzcgNDAuNzdoMS41OWExMS43MyAxMS43MyAwIDAgMCA5Ljg3LTYuMDYiIHN0eWxlPSJvcGFjaXR5Oi4wNzAwMDAwMDAyOTgwMjM7aXNvbGF0aW9uOmlzb2xhdGUiLz48cGF0aCBkPSJNNjQgNDAuOEEyMy4xOSAyMy4xOSAwIDEgMCA4Ny4xOSA2NCAyMy4xOSAyMy4xOSAwIDAgMCA2NCA0MC44bTAgNDAuOEExNy42IDE3LjYgMCAxIDEgODEuNiA2NCAxNy42IDE3LjYgMCAwIDEgNjQgODEuNiIgc3R5bGU9ImZpbGw6I2ZmZiIvPjxwYXRoIGQ9Ik01MyA2My4xdjcuMjFhMTIuOCAxMi44IDAgMCAwIDQuMzggNC40OFY2My4xWm04LjY3LTYuMXYxOS40NGExMS44IDExLjggMCAwIDAgNC4zOCAwVjU3Wm05LjEgOS4xdjguNTZBMTIuOCAxMi44IDAgMCAwIDc1LjE1IDcwdi0zLjlabTkuOTIgMTIuMTktMi40IDIuNDFhMS4wOSAxLjA5IDAgMCAwIDAgMS41M2w5LjExIDkuMTFhMS4wOSAxLjA5IDAgMCAwIDEuNTQgMGwyLjQtMi40YTEuMDkgMS4wOSAwIDAgMCAwLTEuNTNsLTkuMTItOS4xMmExLjA5IDEuMDkgMCAwIDAtMS41MyAwIiBzdHlsZT0iZmlsbDojZmZmIi8+PC9zdmc+
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+PHBhdGggZD0ibTEyNi40NzQgNTguMTItMjYuMzA1LTQ1Ljc0MkExMS41NiAxMS41NiAwIDAgMCA5MC4zMDYgNi41aC01Mi42MWExMS41NSAxMS41NSAwIDAgMC05Ljg2NCA1Ljg3NkwxLjUyOCA1OC4wMjZhMTEuNDggMTEuNDggMCAwIDAtLjAwMyAxMS40MzdsMjYuMzA1IDQ1Ljk1YTExLjc3IDExLjc3IDAgMCAwIDkuODY0IDYuMDg3aDUyLjYwOGExMS43MyAxMS43MyAwIDAgMCA5Ljg2Ni02LjA2bDI2LjMwMy00NS43NDVhMTEuNzMgMTEuNzMgMCAwIDAgLjAwMy0xMS41NzUiIGZpbGw9IiM0Mjg1ZjQiLz48cGF0aCBkPSJtOTMuMDYgNDEuNTYzLTMwLjMxLTkuNjkyLTI1LjY2NSAxMS43NUwzOC41IDc0LjMyN2w4LjI3NSAxNS4wMTFMNzguOTM3IDEyMS41aDExLjM2NWExMS43MyAxMS43MyAwIDAgMCA5Ljg2Ni02LjA2bDI0LjM3Ni00Mi4zOTJaIiBvcGFjaXR5PSIuMDciLz48cGF0aCBkPSJtNjQuMDAzIDM0LjI5NiAyMy44NjIgMTAuNjM5djE2LjAwN2MwIDE1LjEwNi0xMC4yMDIgMjkuMDUxLTIzLjg2NyAzMi43NzMtMTMuNjY0LTMuNzExLTIzLjg4Mi0xNy42NjUtMjMuODgyLTMyLjc4MVY0NC45MzZ6bS4wMDEtNS42ODdMMzQuOTIxIDQxLjU2M3YxOS4zNzFjMCAxNy42ODggMTIuMjY2IDM0LjAzNiAyOC41NDMgMzguMDA3bC41NC4xMzIuNTMtLjEzMmMxNi4yNjctMy45NzEgMjguNTI2LTIwLjMyIDI4LjUyNi0zOFY0MS41NjN6IiBmaWxsPSIjZmZmIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTU2LjA5OSA5NC4xNDItMy42NzctMy42OTQgMTkuMjI0LTE5LjMwOSAzLjY3MyAzLjY5NHptLTkuNjE4LTguMDQ0LTMuNjc2LTMuNjk0TDY4LjcwOCA1Ni4zOGwzLjY3NyAzLjY5NHptLTUuOTUzLTExLjc3MS0zLjY2OS0zLjY5NCAxNy4xNzktMTcuMjU0IDMuNjY4IDMuNjk0eiIvPjxjaXJjbGUgY3g9IjczLjQ1NiIgY3k9IjczLjA1OCIgcj0iNC45ODciIHRyYW5zZm9ybT0icm90YXRlKC00NSA3My40NTYgNzMuMDU4KSIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjcwLjUxOCIgY3k9IjU4LjM2NiIgcj0iNC45ODciIHRyYW5zZm9ybT0icm90YXRlKC00NSA3MC41MTggNTguMzY2KSIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjU1Ljg0MyIgY3k9IjU1LjM3OSIgcj0iNC45ODciIHRyYW5zZm9ybT0icm90YXRlKC00NSA1NS44NDMgNTUuMzc5KSIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0OC4yIDIxLjY1Ij48cGF0aCBkPSJNMzMuMiAyMC40YTIuODYgMi44NiAwIDAgMC0uMy0yLjYgMy4xIDMuMSAwIDAgMC0yLjEtMS4xbC0xNy40LS4yYy0uMSAwLS4yLS4xLS4zLS4xYS4xODguMTg4IDAgMCAxIDAtLjNjLjEtLjIuMi0uMy40LS4zbDE3LjUtLjJhNi4yOSA2LjI5IDAgMCAwIDUuMS0zLjhsMS0yLjZjMC0uMS4xLS4yIDAtLjNhMTEuMzk3IDExLjM5NyAwIDAgMC0yMS45LTEuMiA1LjQ2IDUuNDYgMCAwIDAtMy42LTFBNS4yMSA1LjIxIDAgMCAwIDcgMTEuM2E1LjUgNS41IDAgMCAwIC4xIDEuOEE3LjMgNy4zIDAgMCAwIDAgMjAuNGE0IDQgMCAwIDAgLjEgMS4xLjMyLjMyIDAgMCAwIC4zLjNoMzIuMWMuMiAwIC40LS4xLjQtLjNaIiBzdHlsZT0iZmlsbDojZjQ4MTIwIi8+PHBhdGggZD0iTTM4LjcgOS4yaC0uNWMtLjEgMC0uMi4xLS4zLjJsLS43IDIuNGEyLjg2IDIuODYgMCAwIDAgLjMgMi42IDMuMSAzLjEgMCAwIDAgMi4xIDEuMWwzLjcuMmMuMSAwIC4yLjEuMy4xYS4xODguMTg4IDAgMCAxIDAgLjNjLS4xLjItLjIuMy0uNC4zbC0zLjguMmE2LjI5IDYuMjkgMCAwIDAtNS4xIDMuOGwtLjIuOWMtLjEuMSAwIC4zLjIuM2gxMy4yYS4yNjUuMjY1IDAgMCAwIC4zLS4zIDExIDExIDAgMCAwIC40LTIuNiA5LjU2IDkuNTYgMCAwIDAtOS41LTkuNSIgc3R5bGU9ImZpbGw6I2ZhYWQzZiIvPjwvc3ZnPg==
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+PHBhdGggZD0ibTEyNi40NzQgNTguMTItMjYuMzA1LTQ1Ljc0MkExMS41NiAxMS41NiAwIDAgMCA5MC4zMDYgNi41aC01Mi42MWExMS41NSAxMS41NSAwIDAgMC05Ljg2NCA1Ljg3NkwxLjUyOCA1OC4wMjZhMTEuNDggMTEuNDggMCAwIDAtLjAwMyAxMS40MzdsMjYuMzA1IDQ1Ljk1YTExLjc3IDExLjc3IDAgMCAwIDkuODY0IDYuMDg3aDUyLjYwOGExMS43MyAxMS43MyAwIDAgMCA5Ljg2Ni02LjA2bDI2LjMwMy00NS43NDVhMTEuNzMgMTEuNzMgMCAwIDAgLjAwMy0xMS41NzUiIGZpbGw9IiM0Mjg1ZjQiLz48cGF0aCBkPSJNMTIxLjgwNyA3Ny44MDcgOTAgNDZoLTJsLTYtNi00NCAxMSA1IDUtNSA1IDUgNS01IDUgNiA2LTYgNCA0MC41IDQwLjVoMTEuODAyYTExLjczIDExLjczIDAgMCAwIDkuODY2LTYuMDZaIiBvcGFjaXR5PSIuMDciIHN0eWxlPSJpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0zOCA0Nmg5djVoLTl6bTAgMTBoOXY1aC05em0wIDEwaDl2NWgtOXptMCAxMGg5djVoLTl6bTQzLTMwaDl2NWgtOXptMCAxMGg5djVoLTl6bTAgMTBoOXY1aC05em0wIDEwaDl2NWgtOXoiLz48cGF0aCBkPSJNNDYgNDB2NDdoMzZWNDBabTE1IDQwVjY2aC04bDE0LTE5djE0aDhaIiBmaWxsPSIjZmZmIi8+PC9zdmc+
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cGF0aCBkPSJtMTI2LjQ3IDU4LjEyLTI2LjMtNDUuNzRhMTEuNTYgMTEuNTYgMCAwIDAtOS44Ni01Ljg4SDM3LjdhMTEuNTUgMTEuNTUgMCAwIDAtOS44NiA1Ljg4TDEuNTMgNThhMTEuNDggMTEuNDggMCAwIDAgMCAxMS40NGwyNi4zIDQ2YTExLjc3IDExLjc3IDAgMCAwIDkuODYgNi4wOUg5MC4zYTExLjczIDExLjczIDAgMCAwIDkuODctNi4wNmwyNi4zLTQ1Ljc0YTExLjczIDExLjczIDAgMCAwIDAtMTEuNjEiIHN0eWxlPSJmaWxsOiM0Mjg1ZjQiLz48cGF0aCBkPSJtOTYuNTkgNDUtNDcuMjggOC44OC0xOC40IDE1LjM4IDYgNi01LjQ2IDUgNDEuMjYgNDEuMjRIOTAuM2ExMS43MyAxMS43MyAwIDAgMCA5Ljg3LTYuMDZMMTI0LjU5IDczWiIgc3R5bGU9Im9wYWNpdHk6LjA3MDAwMDAwMDI5ODAyMztpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik03NC4yIDg5LjNINTRhMSAxIDAgMCAxLTEtMSAxIDEgMCAwIDEgMS0xaDIwLjJhMSAxIDAgMCAxIDEgMSAxIDEgMCAwIDEtMSAxIiBzdHlsZT0iZmlsbDojZmZmIi8+PHBhdGggc3R5bGU9ImZpbGw6I2ZmZiIgZD0iTTYwLjI1IDc5LjUxaDcuNzR2OC43OGgtNy43NHoiLz48cGF0aCBkPSJNODUuNjYgNzNhMS44NSAxLjg1IDAgMCAxLTEuMzMtLjU2TDcwLjc1IDU4LjMzbC05LjEzIDkuNmExLjg0IDEuODQgMCAwIDEtMi41LjE2bC02LjktNS41Ny03LjMxIDkuNzFhMS44NSAxLjg1IDAgMCAxLTEuNDcuNzRIMzAuOXY1LjY5YTIuNDcgMi40NyAwIDAgMCAyLjQ2IDIuNDZoNjEuNTNhMi40NyAyLjQ3IDAgMCAwIDIuNDYtMi40NlY3M1oiIHN0eWxlPSJmaWxsOiNmZmYiLz48cGF0aCBkPSJtNDIuNTEgNjkuMjggNy45MS0xMC41YTEuODUgMS44NSAwIDAgMSAyLjYzLS4zM2w3LjA2IDUuNyA5LjI5LTkuNzdhMS44NSAxLjg1IDAgMCAxIDEuMzMtLjU3IDEuODUgMS44NSAwIDAgMSAxLjMzLjU2bDE0LjM4IDE0LjloMTAuOTFWNDYuNjZhMi40NyAyLjQ3IDAgMCAwLTIuNDYtMi40NkgzMy4zNmEyLjQ3IDIuNDcgMCAwIDAtMi40NiAyLjQ2djIyLjYyWiIgc3R5bGU9ImZpbGw6I2ZmZiIvPjwvc3ZnPg==
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48ZGVmcz48c3R5bGU+LmNscy0ze2ZpbGw6I2ZmZn08L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJtNTA1LjkgMjMyLjQ4LTEwNS4yMi0xODNDMzkyLjI0IDM0LjkxIDM3NyAyNiAzNjEuMjIgMjZIMTUwLjc5Yy0xNi44NiAwLTMxLjU5IDkuODgtMzkuNDYgMjMuNUw2LjExIDIzMi4xYTQ1LjkgNDUuOSAwIDAgMCAwIDQ1Ljc1bDEwNS4yMiAxODMuOEMxMTkuNzUgNDc2LjI2IDEzNSA0ODYgMTUwLjc4IDQ4NmgyMTAuNDNjMTYuODYgMCAzMS41OS0xMC42MyAzOS40Ni0yNC4yNGwxMDUuMjItMTgzYTQ2Ljk0IDQ2Ljk0IDAgMCAwIC4wMS00Ni4yOCIgc3R5bGU9ImZpbGw6IzQyODVmNCIgaWQ9IkJBU0UiLz48cGF0aCBkPSJtMzkwLjM4IDI1Ni0xNDcuNjYtODcgMTEuNjIgNTQuODJMMTk5IDE2OC40OCAyMDkuODQgMjUybC00NyAxMTUuODZMMjgxIDQ4Nmg4MC4yNGMxNi44NiAwIDMxLjU5LTEwLjYzIDM5LjQ2LTI0LjI0TDQ3MiAzMzcuNjVaIiBzdHlsZT0ib3BhY2l0eTouMDciIGlkPSJzaGFkb3ciLz48ZyBpZD0iYXJ0Ij48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Im0yMjYuMTYgMjU2LTI3LjEzLTg3LjUyLTM2LjE4LTI0LjM2TDE5Ny41MiAyNTZsLTM0LjY3IDExMS44OCAzNi4xOC0yNC4zNnoiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0yMjQuMiAxNDQuMTIgMjU4Ljg4IDI1NiAyMjQuMiAzNjcuODggMzkwLjM4IDI1NlpNMjcwLjY3IDI0MGwtMTcuNzUtNTcuMjZMMzM4IDI0MFoiLz48L2c+PC9zdmc+
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cGF0aCBkPSJtMTI2LjQ3IDU4LjEyLTI2LjMtNDUuNzRhMTEuNTYgMTEuNTYgMCAwIDAtOS44Ni01Ljg4SDM3LjdhMTEuNTUgMTEuNTUgMCAwIDAtOS44NiA1Ljg4TDEuNTMgNThhMTEuNDggMTEuNDggMCAwIDAgMCAxMS40NGwyNi4zIDQ2YTExLjc3IDExLjc3IDAgMCAwIDkuODYgNi4wOUg5MC4zYTExLjczIDExLjczIDAgMCAwIDkuODctNi4wNmwyNi4zLTQ1Ljc0YTExLjczIDExLjczIDAgMCAwIDAtMTEuNjEiIHN0eWxlPSJmaWxsOiM0Mjg1ZjQiLz48cGF0aCBkPSJtODQgNDUuODgtMTkuMzMtNi42My0yMC40NiAxNS40Nkw1NyA2Ny41bC0xMi44MyAxLjI1IDEyIDEyTDQ0IDgyLjI1bDM5LjI3IDM5LjI1aDdhMTEuNzMgMTEuNzMgMCAwIDAgOS44Ny02LjA2bDE5LjQ4LTMzLjg4WiIgc3R5bGU9Im9wYWNpdHk6LjA3MDAwMDAwMDI5ODAyMztpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik02NCAzNC4yMyA0NCA0NS43OHY4LjkzbDIwIDExLjU0IDIwLTExLjU0di04LjkzWm0xMS45NSAxNS44OEw2NCA1N2wtMTEuOTQtNi44OUw2NCA0My4yMWwxMS45NCA2Ljg5WiIgc3R5bGU9ImZpbGw6I2ZmZiIvPjxwYXRoIHN0eWxlPSJmaWxsOiNmZmYiIGQ9Ik00NCA1OS43NXY4LjkzbDIwIDExLjU1IDIwLTExLjU1di04LjkzTDY0IDcxLjN6Ii8+PHBhdGggc3R5bGU9ImZpbGw6I2ZmZiIgZD0iTTQ0IDczLjI5djguOTNsMjAgMTEuNTUgMjAtMTEuNTV2LTguOTNMNjQgODQuODR6Ii8+PC9zdmc+
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cGF0aCBkPSJtMTI2LjQ3IDU4LjEyLTI2LjMtNDUuNzRhMTEuNTYgMTEuNTYgMCAwIDAtOS44Ni01Ljg4SDM3LjdhMTEuNTUgMTEuNTUgMCAwIDAtOS44NiA1Ljg4TDEuNTMgNThhMTEuNDggMTEuNDggMCAwIDAgMCAxMS40NGwyNi4zIDQ2YTExLjc3IDExLjc3IDAgMCAwIDkuODYgNi4wOUg5MC4zYTExLjczIDExLjczIDAgMCAwIDkuODctNi4wNmwyNi4zLTQ1Ljc0YTExLjczIDExLjczIDAgMCAwIDAtMTEuNjEiIHN0eWxlPSJmaWxsOiM0Mjg1ZjQiLz48cGF0aCBkPSJtMTAwLjE3IDExNS40NCAxOC43Mi0zMi41NUw5NCA1OGwtMTAuODQgNi4xNkw1MyAzNCAzNCA0NmwxOC42OSAxOC42OUwzNCA3MGwyMi4zOSAyMi4zOUw1MyA5NGwyNy41IDI3LjVoOS44YTExLjczIDExLjczIDAgMCAwIDkuODctNi4wNiIgc3R5bGU9Im9wYWNpdHk6LjA3MDAwMDAwMDI5ODAyMztpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIHN0eWxlPSJmaWxsOiNmZmYiIGQ9Ik0zNCA1OGg2MHYxMkgzNHptMTkgMjRoNDF2MTJINTN6TTM0IDM0aDE5djEySDM0eiIvPjwvc3ZnPg==
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cGF0aCBkPSJtMTI2LjQ3IDU4LjEyLTI2LjMtNDUuNzRhMTEuNTYgMTEuNTYgMCAwIDAtOS44Ni01Ljg4SDM3LjdhMTEuNTUgMTEuNTUgMCAwIDAtOS44NiA1Ljg4TDEuNTMgNThhMTEuNDggMTEuNDggMCAwIDAgMCAxMS40NGwyNi4zIDQ2YTExLjc3IDExLjc3IDAgMCAwIDkuODYgNi4wOUg5MC4zYTExLjczIDExLjczIDAgMCAwIDkuODctNi4wNmwyNi4zLTQ1Ljc0YTExLjczIDExLjczIDAgMCAwIDAtMTEuNjEiIHN0eWxlPSJmaWxsOiM0Mjg1ZjQiLz48cGF0aCBkPSJNODguNzEgMzkuMzUgNzQuOSA0MS45M2wtMy43MSA5Ljg3LTcuNS03LjUtMjAuNDUgMi44My00IDQxLjU3TDcyIDEyMS41aDE4LjNhMTEuNzMgMTEuNzMgMCAwIDAgOS44Ny02LjA2bDIzLjYtNDFaIiBzdHlsZT0ib3BhY2l0eTouMDcwMDAwMDAwMjk4MDIzO2lzb2xhdGlvbjppc29sYXRlIi8+PHBhdGggZD0iTTc3LjczIDY1djE2Ljc0YTEgMSAwIDAgMS0xIDFINDYuMjRhMSAxIDAgMCAxLTEtMVY1MS4yNWExIDEgMCAwIDEgMS0xSDYzYTEgMSAwIDAgMCAxLTFWNDVhMSAxIDAgMCAwLTEtMUg0MGExIDEgMCAwIDAtMSAxdjQzYTEgMSAwIDAgMCAxIDFoNDNhMSAxIDAgMCAwIDEtMVY2NWExIDEgMCAwIDAtMS0xaC00LjI3YTEgMSAwIDAgMC0xIDEiIHN0eWxlPSJmaWxsOiNmZmYiLz48cGF0aCBkPSJNNjkgNDB2MThhMSAxIDAgMCAwIDEgMWgxOGExIDEgMCAwIDAgMS0xVjQwYTEgMSAwIDAgMC0xLTFINzBhMSAxIDAgMCAwLTEgMW0xNCAxMC4yNWgtNC4yN2ExIDEgMCAwIDEtMS0xVjQ1YTEgMSAwIDAgMSAxLTFIODNhMSAxIDAgMCAxIDEgMXY0LjI1YTEgMSAwIDAgMS0xIDEiIHN0eWxlPSJmaWxsOiNmZmYiLz48L3N2Zz4=
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1OCA1OCIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PGNpcmNsZSBzdHlsZT0iZmlsbDojNzM4M2JmO3N0cm9rZTojNTU2MDgwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIiBjeD0iMjkiIGN5PSIyOSIgcj0iMjgiLz48cGF0aCBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojNTU2MDgwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIiBkPSJNMjkgNTdWMW0wIDBjLS4yMTQgMC0uNDI2LjAxMS0uNjM5LjAxNkMyMC4yMTMgNy42MTYgMTUgMTcuNjk3IDE1IDI5czUuMjEzIDIxLjM4NCAxMy4zNjEgMjcuOTg0Yy4yMTMuMDA1LjQyNS4wMTYuNjM5LjAxNiIvPjxwYXRoIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1NTYwODA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiIGQ9Ik04LjY5OCA5LjcyOEMxNC40NzggMTMuNjgzIDIxLjQ2OCAxNiAyOSAxNnMxNC41MjItMi4zMTcgMjAuMzAyLTYuMjcybS41NiAzNy45NDJDNDMuOTc1IDQzLjQ3NSAzNi43NzkgNDEgMjkgNDFzLTE0Ljk3NSAyLjQ3NS0yMC44NjIgNi42NyIvPjxwYXRoIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiM1NTYwODA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiIGQ9Ik0yOSA1N2MuMjE0IDAgLjQyNi0uMDExLjYzOS0uMDE2QzM3Ljc4NyA1MC4zODQgNDMgNDAuMzAzIDQzIDI5UzM3Ljc4NyA3LjYxNiAyOS42MzkgMS4wMTZDMjkuNDI2IDEuMDExIDI5LjIxNCAxIDI5IDFNMSAyOWg1NiIvPjwvc3ZnPg==
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cGF0aCBkPSJtMTI2LjQ3IDU4LjEyLTI2LjMtNDUuNzRhMTEuNTYgMTEuNTYgMCAwIDAtOS44Ni01Ljg4SDM3LjdhMTEuNTUgMTEuNTUgMCAwIDAtOS44NiA1Ljg4TDEuNTMgNThhMTEuNDggMTEuNDggMCAwIDAgMCAxMS40NGwyNi4zIDQ2YTExLjc3IDExLjc3IDAgMCAwIDkuODYgNi4wOUg5MC4zYTExLjczIDExLjczIDAgMCAwIDkuODctNi4wNmwyNi4zLTQ1Ljc0YTExLjczIDExLjczIDAgMCAwIDAtMTEuNjEiIHN0eWxlPSJmaWxsOiM0Mjg1ZjQiLz48cGF0aCBkPSJtNzkuNjQgNDIuNDctMjUuMjIgNy44Ni01LjgzIDMuMzNMNTcgNjIuMDhsLTExLjUuNjcuMjUgMTAuODMtNi4zOCA4LjEgMzkuODIgMzkuODJIOTAuM2ExMS43MyAxMS43MyAwIDAgMCA5Ljg3LTYuMDZsMTkuMTQtMzMuMjlaIiBzdHlsZT0ib3BhY2l0eTouMDcwMDAwMDAwMjk4MDIzO2lzb2xhdGlvbjppc29sYXRlIi8+PHBhdGggc3R5bGU9ImZpbGw6I2ZmZiIgZD0iTTYyIDUzaDR2MjEuNzVoLTR6TTQ0LjkzIDYzSDQ4djEzaC00VjYzLjkzYS45My45MyAwIDAgMSAuOTMtLjkzTTgwIDYzaDMuMDdhLjkzLjkzIDAgMCAxIC45My45M1Y3NmgtNHoiLz48cGF0aCBkPSJNNDUgNjFoMzhhMSAxIDAgMCAxIDEgMXYzSDQ0di0zYTEgMSAwIDAgMSAxLTEiIHN0eWxlPSJmaWxsOiNmZmYiLz48cmVjdCB4PSI0OCIgeT0iNDIiIHdpZHRoPSIzMiIgaGVpZ2h0PSIxMiIgcng9Ii45NyIgcnk9Ii45NyIgc3R5bGU9ImZpbGw6I2ZmZiIvPjxyZWN0IHg9IjM5IiB5PSI3MiIgd2lkdGg9IjEzIiBoZWlnaHQ9IjEwIiByeD0iLjk4IiByeT0iLjk4IiBzdHlsZT0iZmlsbDojZmZmIi8+PHJlY3QgeD0iNzYiIHk9IjcyIiB3aWR0aD0iMTMiIGhlaWdodD0iMTAiIHJ4PSIuOTgiIHJ5PSIuOTgiIHN0eWxlPSJmaWxsOiNmZmYiLz48cmVjdCB4PSI1NyIgeT0iNzIiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxMCIgcng9IjEuMDEiIHJ5PSIxLjAxIiBzdHlsZT0iZmlsbDojZmZmIi8+PC9zdmc+
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjgwMCIgdmlld0JveD0iLTI0LjUgMCAzMDUgMzA1IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIj48ZGVmcz48bGluZWFyR3JhZGllbnQgeDE9IjUwJSIgeTE9IjE2LjYyJSIgeDI9IjUwJSIgeTI9IjExOS4yODMlIiBpZD0iYSI+PHN0b3Agc3RvcC1jb2xvcj0iIzI2ODRGRiIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiMwMDUyQ0MiIG9mZnNldD0iODIlIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgeDE9IjQxLjE4JSIgeTE9IjMxLjE2JSIgeDI9IjY3LjcxNCUiIHkyPSI3OC42NzglIiBpZD0iYiI+PHN0b3Agc3RvcC1jb2xvcj0iIzI2ODRGRiIgb2Zmc2V0PSIwJSIvPjxzdG9wIHN0b3AtY29sb3I9IiMwMDUyQ0MiIG9mZnNldD0iNjIlIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGNpcmNsZSBmaWxsPSJ1cmwoI2EpIiBjeD0iMTI3Ljk5NiIgY3k9Ijc2LjA1OCIgcj0iNzYuMDU4Ii8+PHBhdGggZD0iTTEyMS41MTYgMzAyLjk1M0EzNjYuOSAzNjYuOSAwIDAgMSAxLjA3NiAxNzcuMDU2YTguNTI3IDguNTI3IDAgMCAxIDMuNzEtMTEuODFsNTcuNTk3LTI4LjI2NWE4LjUyNyA4LjUyNyAwIDAgMSAxMS4xMjggMy40MSAyODQuNzUgMjg0Ljc1IDAgMCAwIDEyMy42MzYgMTExLjkxMyAzNjguOCAzNjguOCAwIDAgMS02Mi42NyA1MC42NDkgMTIuMjQgMTIuMjQgMCAwIDEtMTIuOTYxIDAiIGZpbGw9InVybCgjYikiLz48cGF0aCBkPSJNMTM0LjQ3NiAzMDIuOTUzYTM2Ni42NSAzNjYuNjUgMCAwIDAgMTIwLjQ0LTEyNS44OTcgOC41MjcgOC41MjcgMCAwIDAtMy42NjctMTEuODFsLTU3LjY0LTI4LjI2NWE4LjUyNyA4LjUyNyAwIDAgMC0xMS4xMjcgMy40MUEyODQuNiAyODQuNiAwIDAgMSA1OC44NDUgMjUyLjMwNWEzNjYuNyAzNjYuNyAwIDAgMCA2Mi42NyA1MC42NDkgMTIuMjQgMTIuMjQgMCAwIDAgMTIuOTYxIDAiIGZpbGw9IiMyNjg0RkYiLz48L3N2Zz4=
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iY3NzLWxmYm82aiBlMWlnazh4MDQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUwIDQ0IiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjM1MiI+PHBhdGggZD0iTTI5IDIuMjZhNC42NyA0LjY3IDAgMCAwLTggMGwtNi41OCAxMS4yN2EzMi4yMSAzMi4yMSAwIDAgMSAxNy43NSAyNi42NmgtNC42MmEyNy42OCAyNy42OCAwIDAgMC0xNS40Ni0yMi43Mkw2IDI4YTE1LjkyIDE1LjkyIDAgMCAxIDkuMjMgMTIuMTdINC42MkEuNzYuNzYgMCAwIDEgNCAzOS4wNmwyLjk0LTVhMTAuNyAxMC43IDAgMCAwLTMuMzYtMS45bC0yLjkxIDVhNC41NCA0LjU0IDAgMCAwIDEuNjkgNi4yNCA0LjY2IDQuNjYgMCAwIDAgMi4yNi42aDE0LjUzYTE5LjQgMTkuNCAwIDAgMC04LTE3LjMxbDIuMzEtNEEyMy44NyAyMy44NyAwIDAgMSAyMy43NiA0NGgxMi4zMWEzNS44OCAzNS44OCAwIDAgMC0xNi40MS0zMS44bDQuNjctOGEuNzcuNzcgMCAwIDEgMS4wNS0uMjdjLjUzLjI5IDIwLjI5IDM0Ljc3IDIwLjY2IDM1LjE3YS43Ni43NiAwIDAgMS0uNjggMS4xM0g0MC42cS4wOSAxLjkxIDAgMy44MWg0Ljc4QTQuNTkgNC41OSAwIDAgMCA1MCAzOS40M2E0LjUgNC41IDAgMCAwLS42Mi0yLjI4WiIgZmlsbD0iIzM2MmQ1OSIvPjwvc3ZnPg==
|
||||
@ -0,0 +1 @@
|
||||
data:image/svg+xml;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEyOCIgaGVpZ2h0PSIxMjgiIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij48cGF0aCBkPSJtMTI2LjQ3IDU4LjEyLTI2LjMtNDUuNzRhMTEuNTYgMTEuNTYgMCAwIDAtOS44Ni01Ljg4SDM3LjdhMTEuNTUgMTEuNTUgMCAwIDAtOS44NiA1Ljg4TDEuNTMgNThhMTEuNDggMTEuNDggMCAwIDAgMCAxMS40NGwyNi4zIDQ2YTExLjc3IDExLjc3IDAgMCAwIDkuODYgNi4wOUg5MC4zYTExLjczIDExLjczIDAgMCAwIDkuODctNi4wNmwyNi4zLTQ1Ljc0YTExLjczIDExLjczIDAgMCAwIDAtMTEuNjEiIHN0eWxlPSJmaWxsOiM0Mjg1ZjQiLz48cGF0aCBkPSJNODcuNjQgNDAuMyA2Ni43MyA1MC4zNWwtMTAtMTAtMTYuMzQgMTYuNDIgMTAuODggMTAuODgtMTAuOSAyMCAzMy44OCAzMy44NUg5MC4zYTExLjczIDExLjczIDAgMCAwIDkuODctNi4wNkwxMjMgNzUuNjlaIiBzdHlsZT0ib3BhY2l0eTouMDcwMDAwMDAwMjk4MDIzO2lzb2xhdGlvbjppc29sYXRlIi8+PHBhdGggc3R5bGU9ImZpbGw6I2ZmZiIgZD0iTTQ3IDU0LjVoNVY3NGgtNXptMjktMi4zN2g1djIxLjgyaC01ek01NC4zOCA0N2gxOS4yNXY1SDU0LjM4em0wIDI5aDE5LjI1djVINTQuMzh6Ii8+PHJlY3QgeD0iNDAiIHk9IjQwIiB3aWR0aD0iMTciIGhlaWdodD0iMTciIHJ4PSIxIiByeT0iMSIgc3R5bGU9ImZpbGw6I2ZmZiIvPjxyZWN0IHg9IjcxIiB5PSI0MCIgd2lkdGg9IjE3IiBoZWlnaHQ9IjE3IiByeD0iMSIgcnk9IjEiIHN0eWxlPSJmaWxsOiNmZmYiLz48cmVjdCB4PSI0MCIgeT0iNzEiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxNyIgcng9IjEiIHJ5PSIxIiBzdHlsZT0iZmlsbDojZmZmIi8+PHJlY3QgeD0iNzEiIHk9IjcxIiB3aWR0aD0iMTciIGhlaWdodD0iMTciIHJ4PSIxIiByeT0iMSIgc3R5bGU9ImZpbGw6I2ZmZiIvPjwvc3ZnPg==
|
||||
@ -0,0 +1,69 @@
|
||||
package diagram
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/sourcegraph/sourcegraph/dev/managedservicesplatform/operationdocs/diagram/assets"
|
||||
"github.com/sourcegraph/sourcegraph/lib/errors"
|
||||
"github.com/sourcegraph/sourcegraph/lib/pointers"
|
||||
"oss.terrastruct.com/d2/d2graph"
|
||||
"oss.terrastruct.com/d2/d2oracle"
|
||||
)
|
||||
|
||||
// createWithIcon creates a shape with a key, label and icon.
|
||||
// Key cannot contain periods
|
||||
func createWithLabelIcon(graph *d2graph.Graph, key string, label string, icon assets.Icon) (*d2graph.Graph, string, error) {
|
||||
graph, key, err := createContainerWithLabel(graph, key, label, icon)
|
||||
if err != nil {
|
||||
return graph, key, err
|
||||
}
|
||||
graph, err = d2oracle.Set(graph, nil, key+".shape", nil, pointers.Ptr("image"))
|
||||
if err != nil {
|
||||
return graph, key, err
|
||||
}
|
||||
return graph, key, nil
|
||||
}
|
||||
|
||||
// createWithIcon creates a shape with a key and icon.
|
||||
// The label of the shape will be the same as key.
|
||||
// Key cannot contain periods
|
||||
func createWithIcon(graph *d2graph.Graph, key string, icon assets.Icon) (*d2graph.Graph, string, error) {
|
||||
if strings.Contains(key, ".") {
|
||||
return graph, "", errors.Newf("key must not contain a period: %s", key)
|
||||
}
|
||||
return createWithLabelIcon(graph, key, key, icon)
|
||||
}
|
||||
|
||||
// createContainer creates a non-icon shape designed for nested other shapes within.
|
||||
// An icon is still used to identify the container as well as its label which is the same as the key
|
||||
// Key cannot contain periods.
|
||||
func createContainer(graph *d2graph.Graph, key string, icon assets.Icon) (*d2graph.Graph, string, error) {
|
||||
return createContainerWithLabel(graph, key, key, icon)
|
||||
}
|
||||
|
||||
// createContainer creates a non-icon shape designed for nested other shapes within.
|
||||
// An icon is still used to identify the container as well as its label which can be specified
|
||||
// Key cannot contain periods.
|
||||
func createContainerWithLabel(graph *d2graph.Graph, key string, label string, icon assets.Icon) (*d2graph.Graph, string, error) {
|
||||
if strings.Contains(key, ".") {
|
||||
return graph, "", errors.Newf("key must not contain a period: %s", key)
|
||||
}
|
||||
graph, key, err := d2oracle.Create(graph, nil, key)
|
||||
if err != nil {
|
||||
return graph, key, err
|
||||
}
|
||||
|
||||
graph, err = d2oracle.Set(graph, nil, key+".label", nil, pointers.Ptr(label))
|
||||
if err != nil {
|
||||
return graph, key, err
|
||||
}
|
||||
graph, err = d2oracle.Set(graph, nil, key+".icon", nil, pointers.Ptr(string(icon)))
|
||||
if err != nil {
|
||||
return graph, key, err
|
||||
}
|
||||
graph, err = d2oracle.Set(graph, nil, key+".style.text-transform", nil, pointers.Ptr("none"))
|
||||
if err != nil {
|
||||
return graph, key, err
|
||||
}
|
||||
return graph, key, nil
|
||||
}
|
||||
312
dev/managedservicesplatform/operationdocs/diagram/diagram.go
Normal file
312
dev/managedservicesplatform/operationdocs/diagram/diagram.go
Normal file
@ -0,0 +1,312 @@
|
||||
package diagram
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"cdr.dev/slog"
|
||||
"cdr.dev/slog/sloggers/sloghuman"
|
||||
"github.com/sourcegraph/sourcegraph/dev/managedservicesplatform/spec"
|
||||
"github.com/sourcegraph/sourcegraph/lib/errors"
|
||||
"github.com/sourcegraph/sourcegraph/lib/pointers"
|
||||
"oss.terrastruct.com/d2/d2format"
|
||||
"oss.terrastruct.com/d2/d2graph"
|
||||
"oss.terrastruct.com/d2/d2layouts/d2dagrelayout"
|
||||
"oss.terrastruct.com/d2/d2lib"
|
||||
"oss.terrastruct.com/d2/d2oracle"
|
||||
"oss.terrastruct.com/d2/d2renderers/d2svg"
|
||||
"oss.terrastruct.com/d2/lib/log"
|
||||
"oss.terrastruct.com/d2/lib/textmeasure"
|
||||
)
|
||||
|
||||
type diagram struct {
|
||||
graph *d2graph.Graph
|
||||
compileOpts *d2lib.CompileOptions
|
||||
renderOpts *d2svg.RenderOpts
|
||||
}
|
||||
|
||||
// New creates a new diagram from options.
|
||||
// The diagram must still be `Generate`d and `Render`ed
|
||||
func New(options ...func(*diagram)) (*diagram, error) {
|
||||
// ruler is part of compileOpts used for text rendering
|
||||
ruler, err := textmeasure.NewRuler()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to create ruler")
|
||||
}
|
||||
|
||||
d := &diagram{
|
||||
compileOpts: &d2lib.CompileOptions{
|
||||
// D2 supports multiple layout engines
|
||||
// https://d2lang.com/tour/layouts/#layout-engines
|
||||
// afaict only Dagre is available out of the box
|
||||
LayoutResolver: func(engine string) (d2graph.LayoutGraph, error) {
|
||||
return d2dagrelayout.DefaultLayout, nil
|
||||
},
|
||||
Ruler: ruler,
|
||||
},
|
||||
renderOpts: &d2svg.RenderOpts{},
|
||||
}
|
||||
|
||||
for _, opt := range options {
|
||||
opt(d)
|
||||
}
|
||||
|
||||
// Compile an empty input to get an empty graph
|
||||
_, graph, err := d2lib.Compile(context.Background(), "", nil, nil)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to create new diagram")
|
||||
}
|
||||
|
||||
d.graph = graph
|
||||
|
||||
return d, nil
|
||||
}
|
||||
|
||||
// Generate a diagram from the spec for an environment
|
||||
func (d *diagram) Generate(s *spec.Spec, e string) error {
|
||||
// The docs for d2oracle warn that all d2oracle functions are pure: they do not modify the original graph
|
||||
// Therefore when chaining calls you must use the resulting graph from the previous call
|
||||
// https://d2lang.com/tour/api/
|
||||
//
|
||||
// From my testing though something like:
|
||||
// _, _, _ = d2oracle.Create(graph, nil, "a")
|
||||
// _, _, _ = d2oracle.Create(graph, nil, "b")
|
||||
// _, _, _ = d2oracle.Create(graph, nil, "x -> y")
|
||||
//
|
||||
// returns the expected output of `a; b; x -> y`
|
||||
// To be safe I'll use the library as if it is pure
|
||||
graph := d.graph
|
||||
|
||||
env := s.GetEnvironment(e)
|
||||
|
||||
graph, cloudrunNode, err := newCloudRunNode(graph, env)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to generate cloudrun")
|
||||
}
|
||||
|
||||
// we conditionally use this in multiple locations
|
||||
// if vpcNode == "" we can generate it when needed
|
||||
var vpcNode string
|
||||
createVPCNode := func(g *d2graph.Graph) error {
|
||||
graph, vpcNode, err = newVPCNode(g)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to generate vpc")
|
||||
}
|
||||
graph, err = addDirectedConnection(graph, cloudrunNode, vpcNode, "private networking")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to add connection from cloudrun to sentry")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
graph, sentryNode, err := newSentryNode(graph)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to generate sentry")
|
||||
}
|
||||
graph, err = addDirectedConnection(graph, cloudrunNode, sentryNode, "")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to add connection from cloudrun to sentry")
|
||||
}
|
||||
|
||||
graph, monitoringNode, err := newMonitoringNode(graph)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to generate monitoring")
|
||||
}
|
||||
graph, err = addDirectedConnection(graph, cloudrunNode, monitoringNode, "")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to add connection from cloudrun to monitoring")
|
||||
}
|
||||
|
||||
if env.Category != spec.EnvironmentCategoryTest && env.Alerting != nil && pointers.DerefZero(env.Alerting.Opsgenie) {
|
||||
var opsgenieNode string
|
||||
graph, opsgenieNode, err = newOpsgenieNode(graph)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to generate opsgenie")
|
||||
}
|
||||
graph, err = addDirectedConnection(graph, monitoringNode, opsgenieNode, "")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to add connection from monitoring to opsgenie")
|
||||
}
|
||||
}
|
||||
|
||||
if env.EnvironmentServiceSpec != nil {
|
||||
var traceNode string
|
||||
graph, traceNode, err = newTraceNode(graph)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to generate trace")
|
||||
}
|
||||
graph, err = addDirectedConnection(graph, cloudrunNode, traceNode, "")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to add a connection from cloudrun to trace")
|
||||
}
|
||||
}
|
||||
|
||||
if env.Resources != nil && env.Resources.Redis != nil {
|
||||
var redisNode string
|
||||
graph, redisNode, err = newRedisNode(graph)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to generate redis")
|
||||
}
|
||||
|
||||
// conditionally generate vpc node
|
||||
if vpcNode == "" {
|
||||
err = createVPCNode(graph)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
graph, err = addDirectedConnection(graph, vpcNode, redisNode, "private networking")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to add connection from cloudrun to redis")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if env.Resources != nil && env.Resources.BigQueryDataset != nil {
|
||||
var bigqueryNode string
|
||||
graph, bigqueryNode, err = newBigQueryNode(graph, env)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to generate bigquery")
|
||||
}
|
||||
|
||||
graph, err = addDirectedConnection(graph, cloudrunNode, bigqueryNode, "")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to add a connection from cloudrun to bigquery")
|
||||
}
|
||||
}
|
||||
|
||||
if env.Resources != nil && env.Resources.PostgreSQL != nil {
|
||||
var postgresNode string
|
||||
graph, postgresNode, err = newPostgresNode(graph, env)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to generate postgres")
|
||||
}
|
||||
|
||||
// conditionally generate vpc node
|
||||
if vpcNode == "" {
|
||||
err = createVPCNode(graph)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
graph, err = addDirectedConnection(graph, vpcNode, postgresNode, "private networking")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to add a connection from cloudrun to postgres")
|
||||
}
|
||||
}
|
||||
|
||||
if env.EnvironmentServiceSpec != nil {
|
||||
var loadBalancerNode string
|
||||
graph, loadBalancerNode, err = newLoadBalancerNode(graph, env)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to generate loadbalancer")
|
||||
}
|
||||
graph, err = addDirectedConnection(graph, loadBalancerNode, cloudrunNode, "")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to add a connection from loadbalancer to cloudrun")
|
||||
}
|
||||
|
||||
var ipNode string
|
||||
graph, ipNode, err = newExternalIPAddressNode(graph)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to generate external ip")
|
||||
}
|
||||
graph, err = addDirectedConnection(graph, ipNode, loadBalancerNode, "")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to add a connection from ip to loadbalancer")
|
||||
}
|
||||
|
||||
// destinationNode is set to the endpoint users hit
|
||||
// ip: if not proxied through cloudflare
|
||||
// cloudflare: if proxied through cloudflare
|
||||
destination := ipNode
|
||||
if env.Domain.Cloudflare != nil && env.Domain.Cloudflare.ShouldProxy() {
|
||||
var cloudflareNode string
|
||||
graph, cloudflareNode, err = newCloudflareNode(graph)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to generate cloudflare")
|
||||
}
|
||||
graph, err = addDirectedConnection(graph, cloudflareNode, ipNode, "")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to add a connection from cloudflare to ip")
|
||||
}
|
||||
|
||||
destination = cloudflareNode
|
||||
}
|
||||
|
||||
var internetNode string
|
||||
graph, internetNode, err = newInternetNode(graph)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to generate cloudrun")
|
||||
}
|
||||
graph, err = addDirectedConnection(graph, internetNode, destination, "")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to add a connection from internet to destination")
|
||||
}
|
||||
}
|
||||
|
||||
d.graph = graph
|
||||
return nil
|
||||
}
|
||||
|
||||
// Render a diagram to an svg byte slice
|
||||
func (d *diagram) Render() ([]byte, error) {
|
||||
// Due to an issue in the D2 library we need to create a slog.Logger to use.
|
||||
// There are only debug logs along the library code path so we can just discard them.
|
||||
logger := slog.Make(sloghuman.Sink(io.Discard))
|
||||
c := log.With(context.Background(), logger)
|
||||
diagram, _, err := d2lib.Compile(c, d2format.Format(d.graph.AST), d.compileOpts, d.renderOpts)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to compile diagram")
|
||||
}
|
||||
svg, err := d2svg.Render(diagram, d.renderOpts)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to render diagram to svg")
|
||||
}
|
||||
|
||||
return svg, nil
|
||||
}
|
||||
|
||||
// createEdge add an undirected connection between shapes.
|
||||
// Optionally annotate the connection with a label
|
||||
func addConnection(graph *d2graph.Graph, firstKey string, secondKey string, label string) (*d2graph.Graph, error) {
|
||||
graph, key, err := d2oracle.Create(graph, nil, fmt.Sprintf("%s - %s", firstKey, secondKey))
|
||||
if err != nil {
|
||||
return graph, err
|
||||
}
|
||||
graph, err = d2oracle.Set(graph, nil, key+".label", nil, pointers.Ptr(label))
|
||||
return graph, err
|
||||
}
|
||||
|
||||
// addDirectedConnection adds a directed connection between shapes.
|
||||
// Optionally annotate the connection with a label
|
||||
func addDirectedConnection(graph *d2graph.Graph, firstKey string, secondKey string, label string) (*d2graph.Graph, error) {
|
||||
graph, key, err := d2oracle.Create(graph, nil, fmt.Sprintf("%s -> %s", firstKey, secondKey))
|
||||
if err != nil {
|
||||
return graph, err
|
||||
}
|
||||
graph, err = d2oracle.Set(graph, nil, key+".label", nil, pointers.Ptr(label))
|
||||
return graph, err
|
||||
}
|
||||
|
||||
// addBidirectionalConnection adds a bidirectional connection between shapes.
|
||||
// Optionally annotate the connection with a label
|
||||
func addBidirectionalConnection(graph *d2graph.Graph, firstKey string, secondKey string, label string) (*d2graph.Graph, error) {
|
||||
graph, key, err := d2oracle.Create(graph, nil, fmt.Sprintf("%s <-> %s", firstKey, secondKey))
|
||||
if err != nil {
|
||||
return graph, err
|
||||
}
|
||||
graph, err = d2oracle.Set(graph, nil, key+".label", nil, pointers.Ptr(label))
|
||||
return graph, err
|
||||
}
|
||||
|
||||
// move a shape into another shape (container)
|
||||
// returns the new key to the nested shape
|
||||
func move(graph *d2graph.Graph, parent string, child string, includeDescendants bool) (*d2graph.Graph, string, error) {
|
||||
newKey := fmt.Sprintf("%s.%s", parent, child)
|
||||
graph, err := d2oracle.Move(graph, nil, child, newKey, includeDescendants)
|
||||
return graph, newKey, err
|
||||
}
|
||||
157
dev/managedservicesplatform/operationdocs/diagram/msp.go
Normal file
157
dev/managedservicesplatform/operationdocs/diagram/msp.go
Normal file
@ -0,0 +1,157 @@
|
||||
package diagram
|
||||
|
||||
import (
|
||||
"github.com/sourcegraph/sourcegraph/dev/managedservicesplatform/operationdocs/diagram/assets"
|
||||
"github.com/sourcegraph/sourcegraph/dev/managedservicesplatform/spec"
|
||||
"github.com/sourcegraph/sourcegraph/lib/errors"
|
||||
"github.com/sourcegraph/sourcegraph/lib/pointers"
|
||||
"oss.terrastruct.com/d2/d2graph"
|
||||
"oss.terrastruct.com/d2/d2oracle"
|
||||
)
|
||||
|
||||
func newBigQueryNode(graph *d2graph.Graph, env *spec.EnvironmentSpec) (*d2graph.Graph, string, error) {
|
||||
graph, key, err := createContainer(graph, "BigQuery", assets.BigQuery)
|
||||
if err != nil {
|
||||
return graph, key, errors.Wrap(err, "failed to create bigquery container")
|
||||
}
|
||||
// bigquery will be a container so we want to set the position of the label + icon to look better
|
||||
graph, err = d2oracle.Set(graph, nil, key+".label.near", nil, pointers.Ptr("outside-top-center"))
|
||||
if err != nil {
|
||||
return graph, key, errors.Wrap(err, "failed to set bigquery label location")
|
||||
}
|
||||
graph, err = d2oracle.Set(graph, nil, key+".icon.near", nil, pointers.Ptr("top-center"))
|
||||
if err != nil {
|
||||
return graph, key, errors.Wrap(err, "failed to set bigquery icon location")
|
||||
}
|
||||
|
||||
for _, table := range env.Resources.BigQueryDataset.Tables {
|
||||
graph, _, err = d2oracle.Create(graph, nil, key+"."+table)
|
||||
if err != nil {
|
||||
return graph, key, errors.Wrapf(err, "failed to create table %s", table)
|
||||
}
|
||||
}
|
||||
|
||||
return graph, key, nil
|
||||
}
|
||||
|
||||
func newCloudflareNode(graph *d2graph.Graph) (*d2graph.Graph, string, error) {
|
||||
graph, key, err := createWithIcon(graph, "Cloudflare", assets.Cloudflare)
|
||||
if err != nil {
|
||||
return graph, key, errors.Wrap(err, "failed to create cloudflare")
|
||||
}
|
||||
// we set height manually as the cloudflare icon isn't square
|
||||
// 64 is a manually chosen value that seems to work well
|
||||
graph, err = d2oracle.Set(graph, nil, key+".height", nil, pointers.Ptr("64"))
|
||||
if err != nil {
|
||||
return graph, key, errors.Wrap(err, "couldn't set cloudflare height")
|
||||
}
|
||||
return graph, key, err
|
||||
}
|
||||
|
||||
func newCloudRunNode(graph *d2graph.Graph, env *spec.EnvironmentSpec) (*d2graph.Graph, string, error) {
|
||||
key := "Cloud Run Service"
|
||||
if env.EnvironmentJobSpec != nil {
|
||||
key = "Cloud Run Job"
|
||||
}
|
||||
return createWithIcon(graph, key, assets.CloudRun)
|
||||
}
|
||||
|
||||
func newExternalIPAddressNode(graph *d2graph.Graph) (*d2graph.Graph, string, error) {
|
||||
return createWithIcon(graph, "External IP Address", assets.CloudExternalIPAddress)
|
||||
}
|
||||
|
||||
func newInternetNode(graph *d2graph.Graph) (*d2graph.Graph, string, error) {
|
||||
return createWithIcon(graph, "Internet", assets.Internet)
|
||||
}
|
||||
|
||||
func newLoadBalancerNode(graph *d2graph.Graph, env *spec.EnvironmentSpec) (*d2graph.Graph, string, error) {
|
||||
// Create Cloud Armor rules also
|
||||
if env.Category.IsProduction() && env.Domain.Cloudflare.ShouldProxy() {
|
||||
// create a container for the load balancer + cloud armor
|
||||
graph, container, err := d2oracle.Create(graph, nil, "loadbalancer_container")
|
||||
if err != nil {
|
||||
return graph, container, errors.Wrap(err, "failed to create loadbalancer container")
|
||||
}
|
||||
graph, err = d2oracle.Set(graph, nil, container+".label", nil, pointers.Ptr(""))
|
||||
if err != nil {
|
||||
return graph, container, errors.Wrap(err, "failed to set loadbalancer container label to empty")
|
||||
}
|
||||
|
||||
graph, loadbalancer, err := createWithIcon(graph, "Application Load Balancer", assets.CloudLoadBalancer)
|
||||
if err != nil {
|
||||
return graph, container, errors.Wrap(err, "failed to create ALB")
|
||||
}
|
||||
// move loadbalancer into the container
|
||||
graph, loadbalancer, err = move(graph, container, loadbalancer, true)
|
||||
if err != nil {
|
||||
return graph, container, errors.Wrap(err, "failed to move ALB into container")
|
||||
}
|
||||
|
||||
graph, cloudarmor, err := createWithIcon(graph, "Cloud Armor", assets.CloudArmor)
|
||||
if err != nil {
|
||||
return graph, container, errors.Wrap(err, "failed to create cloud armor")
|
||||
}
|
||||
// move cloudarmor into the container
|
||||
graph, cloudarmor, err = move(graph, container, cloudarmor, true)
|
||||
if err != nil {
|
||||
return graph, container, errors.Wrap(err, "failed to move cloud armor into container")
|
||||
}
|
||||
|
||||
graph, err = addBidirectionalConnection(graph, loadbalancer, cloudarmor, "")
|
||||
if err != nil {
|
||||
return graph, container, errors.Wrap(err, "failed to add connection between loadbalancer and cloudarmor")
|
||||
}
|
||||
return graph, container, nil
|
||||
|
||||
}
|
||||
return createWithIcon(graph, "Application Load Balancer", assets.CloudLoadBalancer)
|
||||
}
|
||||
|
||||
func newMonitoringNode(graph *d2graph.Graph) (*d2graph.Graph, string, error) {
|
||||
return createWithIcon(graph, "Monitoring", assets.CloudMonitoring)
|
||||
}
|
||||
|
||||
func newOpsgenieNode(graph *d2graph.Graph) (*d2graph.Graph, string, error) {
|
||||
return createWithIcon(graph, "Opsgenie", assets.Opsgenie)
|
||||
}
|
||||
|
||||
func newPostgresNode(graph *d2graph.Graph, env *spec.EnvironmentSpec) (*d2graph.Graph, string, error) {
|
||||
graph, key, err := createContainer(graph, "Cloud SQL (Postgres)", assets.CloudSQL)
|
||||
if err != nil {
|
||||
return graph, key, errors.Wrap(err, "failed to create postgres container")
|
||||
}
|
||||
// postgres will be a container so we want to set the position of the label + icon to look better
|
||||
graph, err = d2oracle.Set(graph, nil, key+".label.near", nil, pointers.Ptr("outside-top-center"))
|
||||
if err != nil {
|
||||
return graph, key, errors.Wrap(err, "failed to set postgres label location")
|
||||
}
|
||||
graph, err = d2oracle.Set(graph, nil, key+".icon.near", nil, pointers.Ptr("top-center"))
|
||||
if err != nil {
|
||||
return graph, key, errors.Wrap(err, "failed to set postgres icon location")
|
||||
}
|
||||
|
||||
for _, database := range env.Resources.PostgreSQL.Databases {
|
||||
graph, _, err = d2oracle.Create(graph, nil, key+"."+database)
|
||||
if err != nil {
|
||||
return graph, key, errors.Wrapf(err, "failed to create database %s", database)
|
||||
}
|
||||
}
|
||||
|
||||
return graph, key, nil
|
||||
}
|
||||
|
||||
func newRedisNode(graph *d2graph.Graph) (*d2graph.Graph, string, error) {
|
||||
return createWithIcon(graph, "Redis", assets.CloudMemorystore)
|
||||
}
|
||||
|
||||
func newSentryNode(graph *d2graph.Graph) (*d2graph.Graph, string, error) {
|
||||
return createWithIcon(graph, "Sentry", assets.Sentry)
|
||||
}
|
||||
|
||||
func newTraceNode(graph *d2graph.Graph) (*d2graph.Graph, string, error) {
|
||||
return createWithIcon(graph, "Cloud Trace", assets.CloudTrace)
|
||||
}
|
||||
|
||||
func newVPCNode(graph *d2graph.Graph) (*d2graph.Graph, string, error) {
|
||||
return createWithIcon(graph, "VPC Network", assets.VPC)
|
||||
}
|
||||
42
dev/managedservicesplatform/operationdocs/diagram/options.go
Normal file
42
dev/managedservicesplatform/operationdocs/diagram/options.go
Normal file
@ -0,0 +1,42 @@
|
||||
package diagram
|
||||
|
||||
import (
|
||||
"oss.terrastruct.com/d2/d2target"
|
||||
"oss.terrastruct.com/d2/d2themes"
|
||||
)
|
||||
|
||||
// WithSketch sets whether the render should use a hand-drawn aesthetic
|
||||
// https://d2lang.com/tour/sketch/
|
||||
//
|
||||
// If not set defaults to `false`
|
||||
func WithSketch(sketch bool) func(*diagram) {
|
||||
return func(d *diagram) {
|
||||
d.renderOpts.Sketch = &sketch
|
||||
}
|
||||
}
|
||||
|
||||
// WithTheme sets the theme to use for the render
|
||||
// Themes are available from the `d2themescatalog` package
|
||||
//
|
||||
// If not set defaults to `d2themescatalog.NeutralDefault`
|
||||
func WithTheme(theme d2themes.Theme) func(*diagram) {
|
||||
return func(d *diagram) {
|
||||
d.renderOpts.ThemeID = &theme.ID
|
||||
}
|
||||
}
|
||||
|
||||
// WithThemeOverrides allows colors from the theme to be overrided
|
||||
func WithThemeOverrides(themeOverrides d2target.ThemeOverrides) func(*diagram) {
|
||||
return func(d *diagram) {
|
||||
d.renderOpts.ThemeOverrides = &themeOverrides
|
||||
}
|
||||
}
|
||||
|
||||
// WithPadding sets how much padding should be used around the diagram
|
||||
//
|
||||
// If not set defaults to `100`
|
||||
func WithPadding(padding int64) func(*diagram) {
|
||||
return func(d *diagram) {
|
||||
d.renderOpts.Pad = &padding
|
||||
}
|
||||
}
|
||||
@ -23,6 +23,10 @@ func ServiceHandbookPath(service string) string {
|
||||
return filepath.Join(HandbookDirectory, service+".md")
|
||||
}
|
||||
|
||||
func EnvironmentHandbookPathDiagram(service, env string) string {
|
||||
return filepath.Join(HandbookDirectory, service+"-"+env+".svg")
|
||||
}
|
||||
|
||||
// ServiceHandbookPath designates where in sourcegraph/handbook the contents
|
||||
// of operationdocs.RenderIndexPage should go.
|
||||
func IndexPathHandbookPath() string {
|
||||
|
||||
@ -311,6 +311,9 @@ sg msp pg connect -write-access %[1]s %[2]s`, s.Service.ID, env.ID)
|
||||
}
|
||||
}
|
||||
|
||||
md.Headingf(4, "%s Architecture Diagram", env.ID)
|
||||
md.Paragraphf("!" + markdown.Linkf("Architecture Diagram", "./%s-%s.svg", s.Service.ID, env.ID))
|
||||
|
||||
md.Headingf(4, terraformCloudSectionHeading)
|
||||
|
||||
md.Paragraphf(`This service's configuration is defined in %s, and %s generates the required infrastructure configuration for this environment in Terraform.
|
||||
@ -340,7 +343,7 @@ If you make your Entitle request, then log in, you will be removed from any team
|
||||
md.CodeBlockf("bash", `sg msp tfc view %s %s`, s.Service.ID, env.ID)
|
||||
}
|
||||
|
||||
md.Headingf(3, "Alert Policies")
|
||||
md.Headingf(2, "Alert Policies")
|
||||
|
||||
md.Paragraphf("The following alert policies are defined for each of this service's environments.")
|
||||
|
||||
|
||||
@ -72,6 +72,10 @@ You can also use `sg msp` to quickly open a link to your service logs:
|
||||
sg msp logs msp-testbed test
|
||||
```
|
||||
|
||||
#### test Architecture Diagram
|
||||
|
||||

|
||||
|
||||
#### test Terraform Cloud
|
||||
|
||||
This service's configuration is defined in [`sourcegraph/managed-services/services/msp-testbed/service.yaml`](https://github.com/sourcegraph/managed-services/blob/main/services/msp-testbed/service.yaml), and `sg msp generate msp-testbed test` generates the required infrastructure configuration for this environment in Terraform.
|
||||
@ -97,7 +101,7 @@ The Terraform Cloud workspaces for this service environment are [grouped under t
|
||||
sg msp tfc view msp-testbed test
|
||||
```
|
||||
|
||||
### Alert Policies
|
||||
## Alert Policies
|
||||
|
||||
The following alert policies are defined for each of this service's environments.
|
||||
|
||||
|
||||
@ -74,6 +74,10 @@ You can also use `sg msp` to quickly open a link to your service logs:
|
||||
sg msp logs msp-testbed test
|
||||
```
|
||||
|
||||
#### test Architecture Diagram
|
||||
|
||||

|
||||
|
||||
#### test Terraform Cloud
|
||||
|
||||
This service's configuration is defined in [`sourcegraph/managed-services/services/msp-testbed/service.yaml`](https://github.com/sourcegraph/managed-services/blob/main/services/msp-testbed/service.yaml), and `sg msp generate msp-testbed test` generates the required infrastructure configuration for this environment in Terraform.
|
||||
@ -137,6 +141,10 @@ You can also use `sg msp` to quickly open a link to your service logs:
|
||||
sg msp logs msp-testbed robert
|
||||
```
|
||||
|
||||
#### robert Architecture Diagram
|
||||
|
||||

|
||||
|
||||
#### robert Terraform Cloud
|
||||
|
||||
This service's configuration is defined in [`sourcegraph/managed-services/services/msp-testbed/service.yaml`](https://github.com/sourcegraph/managed-services/blob/main/services/msp-testbed/service.yaml), and `sg msp generate msp-testbed robert` generates the required infrastructure configuration for this environment in Terraform.
|
||||
@ -162,7 +170,7 @@ The Terraform Cloud workspaces for this service environment are [grouped under t
|
||||
sg msp tfc view msp-testbed robert
|
||||
```
|
||||
|
||||
### Alert Policies
|
||||
## Alert Policies
|
||||
|
||||
The following alert policies are defined for each of this service's environments.
|
||||
|
||||
|
||||
@ -97,6 +97,10 @@ sg msp pg connect -write-access msp-testbed test
|
||||
| Dataset ID | `msp_testbed` |
|
||||
| Tables | [`bar`](https://github.com/sourcegraph/managed-services/blob/main/services/msp-testbed/bar.bigquerytable.json), [`baz`](https://github.com/sourcegraph/managed-services/blob/main/services/msp-testbed/baz.bigquerytable.json) |
|
||||
|
||||
#### test Architecture Diagram
|
||||
|
||||

|
||||
|
||||
#### test Terraform Cloud
|
||||
|
||||
This service's configuration is defined in [`sourcegraph/managed-services/services/msp-testbed/service.yaml`](https://github.com/sourcegraph/managed-services/blob/main/services/msp-testbed/service.yaml), and `sg msp generate msp-testbed test` generates the required infrastructure configuration for this environment in Terraform.
|
||||
@ -122,7 +126,7 @@ The Terraform Cloud workspaces for this service environment are [grouped under t
|
||||
sg msp tfc view msp-testbed test
|
||||
```
|
||||
|
||||
### Alert Policies
|
||||
## Alert Policies
|
||||
|
||||
The following alert policies are defined for each of this service's environments.
|
||||
|
||||
|
||||
@ -73,6 +73,10 @@ You can also use `sg msp` to quickly open a link to your service logs:
|
||||
sg msp logs msp-testbed test
|
||||
```
|
||||
|
||||
#### test Architecture Diagram
|
||||
|
||||

|
||||
|
||||
#### test Terraform Cloud
|
||||
|
||||
This service's configuration is defined in [`sourcegraph/managed-services/services/msp-testbed/service.yaml`](https://github.com/sourcegraph/managed-services/blob/main/services/msp-testbed/service.yaml), and `sg msp generate msp-testbed test` generates the required infrastructure configuration for this environment in Terraform.
|
||||
@ -98,7 +102,7 @@ The Terraform Cloud workspaces for this service environment are [grouped under t
|
||||
sg msp tfc view msp-testbed test
|
||||
```
|
||||
|
||||
### Alert Policies
|
||||
## Alert Policies
|
||||
|
||||
The following alert policies are defined for each of this service's environments.
|
||||
|
||||
|
||||
@ -14,6 +14,7 @@ go_library(
|
||||
"//dev/managedservicesplatform/clouddeploy",
|
||||
"//dev/managedservicesplatform/googlesecretsmanager",
|
||||
"//dev/managedservicesplatform/operationdocs",
|
||||
"//dev/managedservicesplatform/operationdocs/diagram",
|
||||
"//dev/managedservicesplatform/operationdocs/terraform",
|
||||
"//dev/managedservicesplatform/spec",
|
||||
"//dev/managedservicesplatform/stacks",
|
||||
|
||||
@ -18,6 +18,7 @@ import (
|
||||
"github.com/sourcegraph/sourcegraph/dev/managedservicesplatform"
|
||||
"github.com/sourcegraph/sourcegraph/dev/managedservicesplatform/googlesecretsmanager"
|
||||
"github.com/sourcegraph/sourcegraph/dev/managedservicesplatform/operationdocs"
|
||||
"github.com/sourcegraph/sourcegraph/dev/managedservicesplatform/operationdocs/diagram"
|
||||
"github.com/sourcegraph/sourcegraph/dev/managedservicesplatform/spec"
|
||||
"github.com/sourcegraph/sourcegraph/dev/managedservicesplatform/stacks"
|
||||
"github.com/sourcegraph/sourcegraph/dev/managedservicesplatform/stacks/cloudrun"
|
||||
@ -486,6 +487,29 @@ The '-handbook-path' flag can also be used to specify where sourcegraph/handbook
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "load service %q", s)
|
||||
}
|
||||
|
||||
// Generate architecture diagrams
|
||||
for _, e := range svc.ListEnvironmentIDs() {
|
||||
diagram, err := diagram.New()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, s)
|
||||
}
|
||||
|
||||
err = diagram.Generate(svc, e)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, s)
|
||||
}
|
||||
svg, err := diagram.Render()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, s)
|
||||
}
|
||||
diagramPath := filepath.Join(handbookPath,
|
||||
operationdocs.EnvironmentHandbookPathDiagram(s, e))
|
||||
if err := os.WriteFile(diagramPath, []byte(svg), 0o644); err != nil {
|
||||
return errors.Wrap(err, s)
|
||||
}
|
||||
}
|
||||
|
||||
serviceSpecs = append(serviceSpecs, svc)
|
||||
collectedAlerts, err := collectAlertPolicies(svc)
|
||||
opts.AlertPolicies = collectedAlerts
|
||||
|
||||
@ -576,3 +576,22 @@
|
||||
:why: Internal sourcegraph library
|
||||
:versions: []
|
||||
:when: 2024-04-22 13:42:26.498522000 Z
|
||||
- - :permit
|
||||
- FreeType
|
||||
- &5
|
||||
:who:
|
||||
:why:
|
||||
:versions: []
|
||||
:when: 2024-04-29 15:13:39.206315000 Z
|
||||
- - :license
|
||||
- github.com/golang/freetype
|
||||
- FreeType
|
||||
- *5
|
||||
- - :license
|
||||
- gonum.org/v1/plot
|
||||
- BSD-3-Clause
|
||||
- *5
|
||||
- - :license
|
||||
- oss.terrastruct.com/util-go
|
||||
- ISC
|
||||
- *5
|
||||
|
||||
27
go.mod
27
go.mod
@ -98,7 +98,7 @@ require (
|
||||
github.com/fatih/color v1.16.0
|
||||
github.com/felixge/fgprof v0.9.3
|
||||
github.com/felixge/httpsnoop v1.0.4
|
||||
github.com/fsnotify/fsnotify v1.7.0
|
||||
github.com/fsnotify/fsnotify v1.7.1-0.20240403050945-7086bea086b7
|
||||
github.com/gen2brain/beeep v0.0.0-20210529141713-5586760f0cc1
|
||||
github.com/getsentry/sentry-go v0.27.0
|
||||
github.com/ghodss/yaml v1.0.0
|
||||
@ -227,7 +227,7 @@ require (
|
||||
golang.org/x/sys v0.19.0
|
||||
golang.org/x/time v0.5.0
|
||||
golang.org/x/tools v0.18.0
|
||||
gonum.org/v1/gonum v0.13.0
|
||||
gonum.org/v1/gonum v0.14.0
|
||||
google.golang.org/api v0.156.0
|
||||
google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac // indirect
|
||||
google.golang.org/protobuf v1.33.0
|
||||
@ -244,6 +244,7 @@ require (
|
||||
)
|
||||
|
||||
require (
|
||||
cdr.dev/slog v1.4.2-0.20221206192828-e4803b10ae17
|
||||
chainguard.dev/apko v0.14.0
|
||||
connectrpc.com/connect v1.16.1
|
||||
github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai v0.5.0
|
||||
@ -300,6 +301,7 @@ require (
|
||||
go.opentelemetry.io/collector/config/configtls v0.92.0
|
||||
go.opentelemetry.io/otel/exporters/prometheus v0.46.0
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe
|
||||
oss.terrastruct.com/d2 v0.6.5
|
||||
sigs.k8s.io/controller-runtime v0.17.3
|
||||
)
|
||||
|
||||
@ -314,10 +316,12 @@ require (
|
||||
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.21.0 // indirect
|
||||
github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.45.0 // indirect
|
||||
github.com/Masterminds/semver/v3 v3.2.1 // indirect
|
||||
github.com/PuerkitoBio/goquery v1.8.1 // indirect
|
||||
github.com/agnivade/levenshtein v1.1.1 // indirect
|
||||
github.com/alexflint/go-arg v1.4.2 // indirect
|
||||
github.com/alexflint/go-scalar v1.0.0 // indirect
|
||||
github.com/andybalholm/brotli v1.0.5 // indirect
|
||||
github.com/andybalholm/cascadia v1.3.2 // indirect
|
||||
github.com/apache/arrow/go/v12 v12.0.0 // indirect
|
||||
github.com/apache/thrift v0.16.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.22 // indirect
|
||||
@ -343,14 +347,17 @@ require (
|
||||
github.com/distribution/reference v0.5.0 // indirect
|
||||
github.com/docker/cli v25.0.2+incompatible // indirect
|
||||
github.com/docker/distribution v2.8.3+incompatible // indirect
|
||||
github.com/dop251/goja v0.0.0-20231027120936-b396bb4c349d // indirect
|
||||
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
|
||||
github.com/evanphx/json-patch/v5 v5.8.0 // indirect
|
||||
github.com/fullstorydev/grpcurl v1.8.7 // indirect
|
||||
github.com/go-chi/chi/v5 v5.0.10 // indirect
|
||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||
github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect
|
||||
github.com/goccy/go-json v0.10.2 // indirect
|
||||
github.com/gofrs/uuid/v5 v5.0.0 // indirect
|
||||
github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
|
||||
github.com/golang/protobuf v1.5.4 // indirect
|
||||
github.com/google/flatbuffers v2.0.8+incompatible // indirect
|
||||
github.com/google/gnostic-models v0.6.8 // indirect
|
||||
@ -374,6 +381,7 @@ require (
|
||||
github.com/knadh/koanf/v2 v2.0.1 // indirect
|
||||
github.com/kylelemons/godebug v1.1.0 // indirect
|
||||
github.com/matryer/is v1.2.0 // indirect
|
||||
github.com/mazznoer/csscolorparser v0.1.3 // indirect
|
||||
github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect
|
||||
github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect
|
||||
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||
@ -411,13 +419,16 @@ require (
|
||||
go.opentelemetry.io/collector/extension/auth v0.92.0 // indirect
|
||||
go.opentelemetry.io/collector/featuregate v1.0.1 // indirect
|
||||
go.uber.org/goleak v1.3.0 // indirect
|
||||
golang.org/x/image v0.14.0 // indirect
|
||||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
|
||||
golang.org/x/tools/go/vcs v0.1.0-deprecated // indirect
|
||||
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
|
||||
gonum.org/v1/plot v0.14.0 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240125205218-1f4bbc51befe // indirect
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
|
||||
k8s.io/apiextensions-apiserver v0.29.2 // indirect
|
||||
k8s.io/component-base v0.29.2 // indirect
|
||||
oss.terrastruct.com/util-go v0.0.0-20231101220827-55b3812542c2 // indirect
|
||||
)
|
||||
|
||||
require (
|
||||
@ -434,7 +445,7 @@ require (
|
||||
github.com/PuerkitoBio/purell v1.1.1 // indirect
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
|
||||
github.com/alecthomas/chroma v0.10.0 // indirect
|
||||
github.com/alecthomas/chroma/v2 v2.4.0
|
||||
github.com/alecthomas/chroma/v2 v2.5.0
|
||||
github.com/alecthomas/kingpin v2.2.6+incompatible // indirect
|
||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
|
||||
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137
|
||||
@ -486,7 +497,7 @@ require (
|
||||
github.com/frankban/quicktest v1.14.4
|
||||
github.com/fullstorydev/grpcui v1.3.1
|
||||
github.com/go-enry/go-oniguruma v1.2.1 // indirect
|
||||
github.com/go-errors/errors v1.4.2 // indirect
|
||||
github.com/go-errors/errors v1.5.1 // indirect
|
||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
|
||||
github.com/go-git/go-billy/v5 v5.5.0 // indirect
|
||||
github.com/go-kit/log v0.2.1 // indirect
|
||||
@ -508,7 +519,7 @@ require (
|
||||
github.com/golang/glog v1.1.2 // indirect
|
||||
github.com/golang/snappy v0.0.4 // indirect
|
||||
github.com/google/gofuzz v1.2.0 // indirect
|
||||
github.com/google/pprof v0.0.0-20230705174524-200ffdc848b8 // indirect
|
||||
github.com/google/pprof v0.0.0-20231205033806-a5a03c77bf08 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.12.0
|
||||
github.com/gopherjs/gopherjs v1.17.2 // indirect
|
||||
github.com/gopherjs/gopherwasm v1.1.0 // indirect
|
||||
@ -605,7 +616,7 @@ require (
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
|
||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
|
||||
github.com/xlab/treeprint v1.1.0 // indirect
|
||||
github.com/yuin/goldmark v1.5.6
|
||||
github.com/yuin/goldmark v1.6.0
|
||||
github.com/yuin/goldmark-emoji v1.0.1 // indirect
|
||||
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20220924101305-151362477c87
|
||||
go.bobheadxi.dev/streamline v1.3.2
|
||||
@ -613,11 +624,11 @@ require (
|
||||
go.opencensus.io v0.24.0 // indirect
|
||||
go.opentelemetry.io/collector/pdata v1.0.1 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20231006140011-7918f672742d
|
||||
golang.org/x/exp v0.0.0-20231127185646-65229373498e
|
||||
golang.org/x/mod v0.15.0
|
||||
golang.org/x/term v0.19.0 // indirect
|
||||
golang.org/x/text v0.14.0
|
||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
|
||||
google.golang.org/grpc v1.61.1
|
||||
gopkg.in/alexcesaro/statsd.v2 v2.0.0 // indirect
|
||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||
|
||||
98
go.sum
98
go.sum
@ -1,5 +1,7 @@
|
||||
bitbucket.org/creachadair/shell v0.0.7 h1:Z96pB6DkSb7F3Y3BBnJeOZH2gazyMTWlvecSD4vDqfk=
|
||||
bitbucket.org/creachadair/shell v0.0.7/go.mod h1:oqtXSSvSYr4624lnnabXHaBsYW6RD80caLi2b3hJk0U=
|
||||
cdr.dev/slog v1.4.2-0.20221206192828-e4803b10ae17 h1:Jf+VOk2lif79HeTlnLaZ70zYTsuVSUEu/47U9VaG2Rw=
|
||||
cdr.dev/slog v1.4.2-0.20221206192828-e4803b10ae17/go.mod h1:YPVZsUbRMaLaPgme0RzlPWlC7fI7YmDj/j/kZLuvICs=
|
||||
chainguard.dev/apko v0.14.0 h1:K8lM5Gu/Ny3Q4b4oGDNyz2YX3wHcs72CqfBcsPh25Vc=
|
||||
chainguard.dev/apko v0.14.0/go.mod h1:9B8/GXBeWSX2sHdbSKk+LpFcRwxn62fHtPUE1E+iCAs=
|
||||
cloud.google.com/go v0.16.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
@ -84,6 +86,8 @@ cuelang.org/go v0.4.3/go.mod h1:7805vR9H+VoBNdWFdI7jyDR3QLUPp4+naHfbcgp55HI=
|
||||
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
|
||||
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
git.sr.ht/~sbinet/gg v0.5.0 h1:6V43j30HM623V329xA9Ntq+WJrMjDxRjuAB1LFWF5m8=
|
||||
git.sr.ht/~sbinet/gg v0.5.0/go.mod h1:G2C0eRESqlKhS7ErsNey6HHrqU1PwsnCQlekFi9Q2Oo=
|
||||
github.com/99designs/gqlgen v0.17.2/go.mod h1:K5fzLKwtph+FFgh9j7nFbRUdBKvTcGnsta51fsMTn3o=
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
|
||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
|
||||
@ -147,6 +151,8 @@ github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMo
|
||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||
github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78=
|
||||
github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0=
|
||||
github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM=
|
||||
github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ=
|
||||
github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||
github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
|
||||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||
@ -165,18 +171,20 @@ github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4Rq
|
||||
github.com/agnivade/levenshtein v1.1.0/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=
|
||||
github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8=
|
||||
github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo=
|
||||
github.com/alecthomas/assert/v2 v2.2.0 h1:f6L/b7KE2bfA+9O4FL3CM/xJccDEwPVYd5fALBiuwvw=
|
||||
github.com/alecthomas/assert/v2 v2.2.0/go.mod h1:b/+1DI2Q6NckYi+3mXyH3wFb8qG37K/DuK80n7WefXA=
|
||||
github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw=
|
||||
github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM=
|
||||
github.com/alecthomas/assert/v2 v2.2.1 h1:XivOgYcduV98QCahG8T5XTezV5bylXe+lBxLG2K2ink=
|
||||
github.com/alecthomas/assert/v2 v2.2.1/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
|
||||
github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek=
|
||||
github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s=
|
||||
github.com/alecthomas/chroma/v2 v2.2.0/go.mod h1:vf4zrexSH54oEjJ7EdB65tGNHmH3pGZmVkgTP5RHvAs=
|
||||
github.com/alecthomas/chroma/v2 v2.4.0 h1:Loe2ZjT5x3q1bcWwemqyqEi8p11/IV/ncFCeLYDpWC4=
|
||||
github.com/alecthomas/chroma/v2 v2.4.0/go.mod h1:6kHzqF5O6FUSJzBXW7fXELjb+e+7OXW4UpoPqMO7IBQ=
|
||||
github.com/alecthomas/chroma/v2 v2.5.0 h1:CQCdj1BiBV17sD4Bd32b/Bzuiq/EqoNTrnIhyQAZ+Rk=
|
||||
github.com/alecthomas/chroma/v2 v2.5.0/go.mod h1:yrkMI9807G1ROx13fhe1v6PN2DDeaR73L3d+1nmYQtw=
|
||||
github.com/alecthomas/kingpin v2.2.6+incompatible h1:5svnBTFgJjZvGKyYBtMB0+m5wvrbUHiqye8wRJMlnYI=
|
||||
github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE=
|
||||
github.com/alecthomas/repr v0.0.0-20220113201626-b1b626ac65ae/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8=
|
||||
github.com/alecthomas/repr v0.1.0 h1:ENn2e1+J3k09gyj2shc0dHr/yjaWSHRlrJ4DPMevDqE=
|
||||
github.com/alecthomas/repr v0.1.0/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8=
|
||||
github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk=
|
||||
github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
|
||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
|
||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
@ -197,6 +205,9 @@ github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNg
|
||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
||||
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
|
||||
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
|
||||
github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
|
||||
github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss=
|
||||
github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
|
||||
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
|
||||
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
|
||||
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
||||
@ -350,6 +361,8 @@ github.com/buildkite/go-buildkite/v3 v3.0.1/go.mod h1:6pweknacVv7He5Lvbf54urp2P0
|
||||
github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
|
||||
github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b h1:6+ZFm0flnudZzdSE0JxlhR2hKnGPcNB35BjQf4RYQDY=
|
||||
github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M=
|
||||
github.com/campoy/embedmd v1.0.0 h1:V4kI2qTJJLf4J29RzI/MAt2c3Bl4dQSYPuflzwFH2hY=
|
||||
github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8=
|
||||
github.com/cenkalti/backoff v1.1.1-0.20171020064038-309aa717adbf/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
|
||||
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
|
||||
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
|
||||
@ -365,15 +378,20 @@ github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL
|
||||
github.com/charmbracelet/glamour v0.5.0 h1:wu15ykPdB7X6chxugG/NNfDUbyyrCLV9XBalj5wdu3g=
|
||||
github.com/charmbracelet/glamour v0.5.0/go.mod h1:9ZRtG19AUIzcTm7FGLGbq3D5WKQ5UyZBbQsMQN0XIqc=
|
||||
github.com/chromedp/cdproto v0.0.0-20210526005521-9e51b9051fd0/go.mod h1:At5TxYYdxkbQL0TSefRjhLE3Q0lgvqKKMSFUglJ7i1U=
|
||||
github.com/chromedp/cdproto v0.0.0-20210706234513-2bc298e8be7f h1:lg5k1KAxmknil6Z19LaaeiEs5Pje7hPzRfyWSSnWLP0=
|
||||
github.com/chromedp/cdproto v0.0.0-20210706234513-2bc298e8be7f/go.mod h1:At5TxYYdxkbQL0TSefRjhLE3Q0lgvqKKMSFUglJ7i1U=
|
||||
github.com/chromedp/chromedp v0.7.3 h1:FvgJICfjvXtDX+miuMUY0NHuY8zQvjS/TcEQEG6Ldzs=
|
||||
github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89 h1:aPflPkRFkVwbW6dmcVqfgwp1i+UWGFH6VgR1Jim5Ygc=
|
||||
github.com/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs=
|
||||
github.com/chromedp/chromedp v0.7.3/go.mod h1:9gC521Yzgrk078Ulv6KIgG7hJ2x9aWrxMBBobTFk30A=
|
||||
github.com/chromedp/chromedp v0.9.2 h1:dKtNz4kApb06KuSXoTQIyUC2TrA0fhGDwNZf3bcgfKw=
|
||||
github.com/chromedp/chromedp v0.9.2/go.mod h1:LkSXJKONWTCHAfQasKFUZI+mxqS4tZqhmtGzzhLsnLs=
|
||||
github.com/chromedp/sysutil v1.0.0 h1:+ZxhTpfpZlmchB58ih/LBHX52ky7w2VhQVKQMucy3Ic=
|
||||
github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww=
|
||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||
github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY=
|
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||
github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic=
|
||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||
github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
|
||||
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
|
||||
@ -472,6 +490,7 @@ github.com/djherbis/buffer v1.2.0/go.mod h1:fjnebbZjCUpPinBRD+TDwXSOeNQ7fPQWLfGQ
|
||||
github.com/djherbis/nio/v3 v3.0.1 h1:6wxhnuppteMa6RHA4L81Dq7ThkZH8SwnDzXDYy95vB4=
|
||||
github.com/djherbis/nio/v3 v3.0.1/go.mod h1:Ng4h80pbZFMla1yKzm61cF0tqqilXZYrogmWgZxOcmg=
|
||||
github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
|
||||
github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
|
||||
github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
|
||||
github.com/dlclark/regexp2 v1.10.0 h1:+/GIL799phkJqYW+3YbOd8LCcbHzT0Pbo8zl70MHsq0=
|
||||
github.com/dlclark/regexp2 v1.10.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
|
||||
@ -496,6 +515,11 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4
|
||||
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||
github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
|
||||
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
|
||||
github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk=
|
||||
github.com/dop251/goja v0.0.0-20231027120936-b396bb4c349d h1:wi6jN5LVt/ljaBG4ue79Ekzb12QfJ52L9Q98tl8SWhw=
|
||||
github.com/dop251/goja v0.0.0-20231027120936-b396bb4c349d/go.mod h1:QMWlm50DNe14hD7t24KEqZuUdC9sOTy8W6XbCU1mlw4=
|
||||
github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y=
|
||||
github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM=
|
||||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||
@ -559,8 +583,8 @@ github.com/fsnotify/fsnotify v1.4.3-0.20170329110642-4da3e2cfbabc/go.mod h1:jwhs
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
|
||||
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
|
||||
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
|
||||
github.com/fsnotify/fsnotify v1.7.1-0.20240403050945-7086bea086b7 h1:5ZeiG5gIjLqPKLl+f5zv++9ZO2oxA6hmZ3e7G0mMW1M=
|
||||
github.com/fsnotify/fsnotify v1.7.1-0.20240403050945-7086bea086b7/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
|
||||
github.com/fullstorydev/grpcui v1.3.1 h1:lVXozTNkJJouBL+wpmvxMnltiwYp8mgyd0TRs93i6Rw=
|
||||
github.com/fullstorydev/grpcui v1.3.1/go.mod h1:Jdfm5xPJVpEaqQi2HkqiqJ8lHIa0g3hwtaKNKXUsYwA=
|
||||
github.com/fullstorydev/grpcurl v1.8.6/go.mod h1:WhP7fRQdhxz2TkL97u+TCb505sxfH78W1usyoB3tepw=
|
||||
@ -586,8 +610,10 @@ github.com/go-enry/go-enry/v2 v2.8.4/go.mod h1:9yrj4ES1YrbNb1Wb7/PWYr2bpaCXUGRt0
|
||||
github.com/go-enry/go-oniguruma v1.2.1 h1:k8aAMuJfMrqm/56SG2lV9Cfti6tC4x8673aHCcBk+eo=
|
||||
github.com/go-enry/go-oniguruma v1.2.1/go.mod h1:bWDhYP+S6xZQgiRL7wlTScFYBe023B6ilRZbCAD5Hf4=
|
||||
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
|
||||
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
|
||||
github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
|
||||
github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk=
|
||||
github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
|
||||
github.com/go-fonts/liberation v0.3.1 h1:9RPT2NhUpxQ7ukUvz3jeUckmN42T9D9TpjtQcqK/ceM=
|
||||
github.com/go-fonts/liberation v0.3.1/go.mod h1:jdJ+cqF+F4SUL2V+qxBth8fvBpBDS7yloUL5Fi8GTGY=
|
||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
|
||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
|
||||
github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU=
|
||||
@ -605,6 +631,8 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
|
||||
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
|
||||
github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
|
||||
github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
|
||||
github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9 h1:NxXI5pTAtpEaU49bpLpQoDsu1zrteW/vxzTz8Cd2UAs=
|
||||
github.com/go-latex/latex v0.0.0-20230307184459-12ec69307ad9/go.mod h1:gWuR/CrFDDeVRFQwHPvsv9soJVB/iqymhuZQuJ3a9OM=
|
||||
github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc=
|
||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
@ -739,6 +767,8 @@ github.com/go-openapi/validate v0.20.1/go.mod h1:b60iJT+xNNLfaQJUqLI7946tYiFEOuE
|
||||
github.com/go-openapi/validate v0.20.2/go.mod h1:e7OJoKNgd0twXZwIn0A43tHbvIcr/rZIVCbJBpTUoY0=
|
||||
github.com/go-openapi/validate v0.22.1 h1:G+c2ub6q47kfX1sOBLwIQwzBVt8qmOAARyo/9Fqs9NU=
|
||||
github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg=
|
||||
github.com/go-pdf/fpdf v0.8.0 h1:IJKpdaagnWUeSkUFUjTcSzTppFxmv8ucGQyNPQWxYOQ=
|
||||
github.com/go-pdf/fpdf v0.8.0/go.mod h1:gfqhcNwXrsd3XYKte9a7vM3smvU/jB4ZRDrmWSxpfdc=
|
||||
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
|
||||
github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY=
|
||||
github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
|
||||
@ -752,6 +782,8 @@ github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC
|
||||
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
|
||||
github.com/go-redsync/redsync/v4 v4.8.1 h1:rq2RvdTI0obznMdxKUWGdmmulo7lS9yCzb8fgDKOlbM=
|
||||
github.com/go-redsync/redsync/v4 v4.8.1/go.mod h1:LmUAsQuQxhzZAoGY7JS6+dNhNmZyonMZiiEDY9plotM=
|
||||
github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU=
|
||||
github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg=
|
||||
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
|
||||
@ -799,8 +831,8 @@ github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u1
|
||||
github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=
|
||||
github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
|
||||
github.com/gobwas/ws v1.1.0-rc.5/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL0=
|
||||
github.com/gobwas/ws v1.1.0 h1:7RFti/xnNkMJnrK7D1yQ/iCIB5OrrY/54/H930kIbHA=
|
||||
github.com/gobwas/ws v1.1.0/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL0=
|
||||
github.com/gobwas/ws v1.2.1 h1:F2aeBZrm2NDsc7vbovKrWSogd4wvfAxg0FQ89/iqOTk=
|
||||
github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY=
|
||||
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
|
||||
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
@ -828,6 +860,8 @@ github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0kt
|
||||
github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
||||
github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
|
||||
github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||
github.com/golang/gddo v0.0.0-20210115222349-20d68f94ee1f h1:16RtHeWGkJMc80Etb8RPCcKevXGldr57+LOyZt8zOlg=
|
||||
github.com/golang/gddo v0.0.0-20210115222349-20d68f94ee1f/go.mod h1:ijRvpgDJDI262hYq/IQVYgf8hd8IHUs93Ol0kvMBAx4=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
@ -935,8 +969,9 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe
|
||||
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
|
||||
github.com/google/pprof v0.0.0-20230705174524-200ffdc848b8 h1:n6vlPhxsA+BW/XsS5+uqi7GyzaLa5MH7qlSLBZtRdiA=
|
||||
github.com/google/pprof v0.0.0-20230705174524-200ffdc848b8/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA=
|
||||
github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg=
|
||||
github.com/google/pprof v0.0.0-20231205033806-a5a03c77bf08 h1:PxlBVtIFHR/mtWk2i0gTEdCz+jBnqiuHNSki0epDbVs=
|
||||
github.com/google/pprof v0.0.0-20231205033806-a5a03c77bf08/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
|
||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
|
||||
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
|
||||
@ -1100,6 +1135,7 @@ github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
|
||||
github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
|
||||
github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
|
||||
github.com/inconshreveable/log15 v0.0.0-20170622235902-74a0988b5f80/go.mod h1:cOaXtrgN4ScfRrD9Bre7U1thNq5RtJ8ZoP4iXVGRj6o=
|
||||
@ -1334,6 +1370,8 @@ github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
||||
github.com/mazznoer/csscolorparser v0.1.3 h1:vug4zh6loQxAUxfU1DZEu70gTPufDPspamZlHAkKcxE=
|
||||
github.com/mazznoer/csscolorparser v0.1.3/go.mod h1:Aj22+L/rYN/Y6bj3bYqO3N6g1dtdHtGfQ32xZ5PJQic=
|
||||
github.com/microcosm-cc/bluemonday v1.0.17/go.mod h1:Z0r70sCuXHig8YpBzCc5eGHAap2K7e/u082ZUpDRRqM=
|
||||
github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3rQ0k/Khz58=
|
||||
github.com/microcosm-cc/bluemonday v1.0.26/go.mod h1:JyzOCs9gkyQyjs+6h10UEVSe02CGwkhd72Xdqh78TWs=
|
||||
@ -1848,8 +1886,8 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
|
||||
github.com/yuin/goldmark v1.4.4/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yuin/goldmark v1.4.15/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yuin/goldmark v1.5.6 h1:COmQAWTCcGetChm3Ig7G/t8AFAN00t+o8Mt4cf7JpwA=
|
||||
github.com/yuin/goldmark v1.5.6/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yuin/goldmark v1.6.0 h1:boZcn2GTjpsynOsC0iJHnBWa4Bi0qzfJjthwauItG68=
|
||||
github.com/yuin/goldmark v1.6.0/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yuin/goldmark-emoji v1.0.1 h1:ctuWEyzGBwiucEqxzwe0SOYDXPAucOrE9NQC18Wa1os=
|
||||
github.com/yuin/goldmark-emoji v1.0.1/go.mod h1:2w1E6FEWLcDQkoTE+7HU6QF1F6SLlNGjRIBbIZQFqkQ=
|
||||
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20220924101305-151362477c87 h1:Py16JEzkSdKAtEFJjiaYLYBOWGXc1r/xHj/Q/5lA37k=
|
||||
@ -2053,10 +2091,12 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
|
||||
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
||||
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
|
||||
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
|
||||
golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
|
||||
golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
|
||||
golang.org/x/exp v0.0.0-20231127185646-65229373498e h1:Gvh4YaCaXNs6dKTlfgismwWZKyjVZXwOPfIyUaqU3No=
|
||||
golang.org/x/exp v0.0.0-20231127185646-65229373498e/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
|
||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4=
|
||||
golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
@ -2147,6 +2187,7 @@ golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qx
|
||||
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
@ -2155,6 +2196,7 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
|
||||
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
|
||||
golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
@ -2281,6 +2323,7 @@ golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
@ -2427,12 +2470,15 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
|
||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
|
||||
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
|
||||
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
|
||||
gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw=
|
||||
gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY=
|
||||
gonum.org/v1/gonum v0.13.0 h1:a0T3bh+7fhRyqeNbiC3qVHYmkiQgit3wnNan/2c0HMM=
|
||||
gonum.org/v1/gonum v0.13.0/go.mod h1:/WPYRckkfWrhWefxyYTfrTtQR0KH4iyHNuzxqXAKyAU=
|
||||
gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
|
||||
gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
|
||||
gonum.org/v1/plot v0.14.0 h1:+LBDVFYwFe4LHhdP8coW6296MBEY4nQ+Y4vuUpJopcE=
|
||||
gonum.org/v1/plot v0.14.0/go.mod h1:MLdR9424SJed+5VqC6MsouEpig9pZX2VZ57H9ko2bXU=
|
||||
google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
|
||||
google.golang.org/api v0.0.0-20170921000349-586095a6e407/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
|
||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
||||
@ -2643,7 +2689,13 @@ layeh.com/gopher-luar v1.0.10/go.mod h1:TPnIVCZ2RJBndm7ohXyaqfhzjlZ+OA2SZR/YwL8t
|
||||
mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ=
|
||||
mvdan.cc/gofumpt v0.5.0 h1:0EQ+Z56k8tXjj/6TQD25BFNKQXpCvT0rnansIc7Ug5E=
|
||||
mvdan.cc/gofumpt v0.5.0/go.mod h1:HBeVDtMKRZpXyxFciAirzdKklDlGu8aAy1wEbH5Y9js=
|
||||
oss.terrastruct.com/d2 v0.6.5 h1:VgZgiwtMhh3uVR2mm7e0bdh25f1px3ZCPM/la5GKfMc=
|
||||
oss.terrastruct.com/d2 v0.6.5/go.mod h1:WUTwQN18MM0MWbDgFo7pmm2ousV6N6jUwg8MgVdT6I0=
|
||||
oss.terrastruct.com/util-go v0.0.0-20231101220827-55b3812542c2 h1:n6y6RoZCgZDchN4gLGlzNRO1Jdf9xOGGqohDBph5BG8=
|
||||
oss.terrastruct.com/util-go v0.0.0-20231101220827-55b3812542c2/go.mod h1:eMWv0sOtD9T2RUl90DLWfuShZCYp4NrsqNpI8eqO6U4=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4=
|
||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
sigs.k8s.io/controller-runtime v0.17.3 h1:65QmN7r3FWgTxDMz9fvGnO1kbf2nu+acg9p2R9oYYYk=
|
||||
|
||||
Loading…
Reference in New Issue
Block a user