From 4e8736ed4a9b7c3a92699da3de38c574bf9804d2 Mon Sep 17 00:00:00 2001 From: hejianpeng Date: Thu, 13 Oct 2022 10:51:13 +0800 Subject: [PATCH 1/3] proto-gen-doc: fix markdown render --- go.mod | 3 ++ licenses/github.com/davecgh/go-spew/LICENSE | 15 ++++++ .../github.com/pmezard/go-difflib/LICENSE | 27 ++++++++++ licenses/github.com/stretchr/testify/LICENSE | 21 ++++++++ pkg/markdown/md.go | 18 +++++-- pkg/markdown/md_test.go | 50 +++++++++++++++++++ .../testdata/AnalysisMessageWeakSchema.input | 4 ++ .../testdata/AnalysisMessageWeakSchema.output | 4 ++ pkg/markdown/testdata/links.input | 2 + pkg/markdown/testdata/links.output | 2 + pkg/markdown/testdata/telemetry.input | 4 ++ pkg/markdown/testdata/telemetry.output | 3 ++ 12 files changed, 150 insertions(+), 3 deletions(-) create mode 100644 licenses/github.com/davecgh/go-spew/LICENSE create mode 100644 licenses/github.com/pmezard/go-difflib/LICENSE create mode 100644 licenses/github.com/stretchr/testify/LICENSE create mode 100644 pkg/markdown/md_test.go create mode 100644 pkg/markdown/testdata/AnalysisMessageWeakSchema.input create mode 100644 pkg/markdown/testdata/AnalysisMessageWeakSchema.output create mode 100644 pkg/markdown/testdata/links.input create mode 100644 pkg/markdown/testdata/links.output create mode 100644 pkg/markdown/testdata/telemetry.input create mode 100644 pkg/markdown/testdata/telemetry.output diff --git a/go.mod b/go.mod index 2d74f929aef..e396f3c165d 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( github.com/prometheus/client_golang v1.12.2 github.com/spf13/cobra v1.5.0 github.com/spf13/viper v1.12.0 + github.com/stretchr/testify v1.7.1 github.com/xeipuuv/gojsonschema v1.2.0 github.com/yuin/goldmark v1.5.2 golang.org/x/tools v0.1.11 @@ -46,6 +47,7 @@ require ( github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4 // indirect github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490 // indirect github.com/cockroachdb/apd/v2 v2.0.1 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-metro v0.0.0-20180109044635-280f6062b5bc // indirect github.com/dgryski/go-minhash v0.0.0-20170608043002-7fe510aff544 // indirect github.com/dgryski/go-spooky v0.0.0-20170606183049-ed3d087f40e2 // indirect @@ -90,6 +92,7 @@ require ( github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.0.1 // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect diff --git a/licenses/github.com/davecgh/go-spew/LICENSE b/licenses/github.com/davecgh/go-spew/LICENSE new file mode 100644 index 00000000000..bc52e96f2b0 --- /dev/null +++ b/licenses/github.com/davecgh/go-spew/LICENSE @@ -0,0 +1,15 @@ +ISC License + +Copyright (c) 2012-2016 Dave Collins + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/licenses/github.com/pmezard/go-difflib/LICENSE b/licenses/github.com/pmezard/go-difflib/LICENSE new file mode 100644 index 00000000000..c67dad612a3 --- /dev/null +++ b/licenses/github.com/pmezard/go-difflib/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2013, Patrick Mezard +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + The names of its contributors may not be used to endorse or promote +products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/github.com/stretchr/testify/LICENSE b/licenses/github.com/stretchr/testify/LICENSE new file mode 100644 index 00000000000..4b0421cf9ee --- /dev/null +++ b/licenses/github.com/stretchr/testify/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pkg/markdown/md.go b/pkg/markdown/md.go index 81ce0974724..2fa622efa6f 100644 --- a/pkg/markdown/md.go +++ b/pkg/markdown/md.go @@ -23,14 +23,26 @@ import ( "github.com/yuin/goldmark/renderer/html" ) +type ifm struct { +} + +// IFM is an extension that provides Istio Flavored markdown functionalities. +var IFM = &ifm{} + +func (e *ifm) Extend(m goldmark.Markdown) { + extension.Table.Extend(m) + extension.Strikethrough.Extend(m) + extension.TaskList.Extend(m) +} + var md = goldmark.New( - goldmark.WithExtensions(extension.GFM), + goldmark.WithExtensions(IFM), + goldmark.WithExtensions(extension.NewTypographer()), goldmark.WithParserOptions( parser.WithAutoHeadingID(), ), goldmark.WithRendererOptions( - html.WithHardWraps(), - html.WithXHTML(), + html.WithUnsafe(), ), ) diff --git a/pkg/markdown/md_test.go b/pkg/markdown/md_test.go new file mode 100644 index 00000000000..248a76d833a --- /dev/null +++ b/pkg/markdown/md_test.go @@ -0,0 +1,50 @@ +package markdown + +import ( + "fmt" + "os" + "path" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestRun(t *testing.T) { + cases := []struct { + name string + }{ + { + name: "AnalysisMessageWeakSchema", + }, + { + name: "links", + }, + { + name: "telemetry", + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + in, err := readInput(tc.name) + assert.NoError(t, err) + out, err := readOutput(tc.name) + assert.NoError(t, err) + + got := Run(in) + assert.Equal(t, string(out), string(got)) + }) + } +} + +func readInput(name string) ([]byte, error) { + return readFile(fmt.Sprintf("%s.input", name)) +} + +func readOutput(name string) ([]byte, error) { + return readFile(fmt.Sprintf("%s.output", name)) +} + +func readFile(f string) ([]byte, error) { + return os.ReadFile(path.Join("testdata", f)) +} diff --git a/pkg/markdown/testdata/AnalysisMessageWeakSchema.input b/pkg/markdown/testdata/AnalysisMessageWeakSchema.input new file mode 100644 index 00000000000..e6d5a54d459 --- /dev/null +++ b/pkg/markdown/testdata/AnalysisMessageWeakSchema.input @@ -0,0 +1,4 @@ +AnalysisMessageWeakSchema is the set of information that's needed to define a +weakly-typed schema. The purpose of this proto is to provide a mechanism for +validating istio/istio/galley/pkg/config/analysis/msg/messages.yaml to make +sure that we don't allow committing underspecified types. \ No newline at end of file diff --git a/pkg/markdown/testdata/AnalysisMessageWeakSchema.output b/pkg/markdown/testdata/AnalysisMessageWeakSchema.output new file mode 100644 index 00000000000..7d37c163801 --- /dev/null +++ b/pkg/markdown/testdata/AnalysisMessageWeakSchema.output @@ -0,0 +1,4 @@ +

AnalysisMessageWeakSchema is the set of information that’s needed to define a +weakly-typed schema. The purpose of this proto is to provide a mechanism for +validating istio/istio/galley/pkg/config/analysis/msg/messages.yaml to make +sure that we don’t allow committing underspecified types.

diff --git a/pkg/markdown/testdata/links.input b/pkg/markdown/testdata/links.input new file mode 100644 index 00000000000..78a028e8b57 --- /dev/null +++ b/pkg/markdown/testdata/links.input @@ -0,0 +1,2 @@ +Current service state of pod. +More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions \ No newline at end of file diff --git a/pkg/markdown/testdata/links.output b/pkg/markdown/testdata/links.output new file mode 100644 index 00000000000..814c24d6073 --- /dev/null +++ b/pkg/markdown/testdata/links.output @@ -0,0 +1,2 @@ +

Current service state of pod. +More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions

diff --git a/pkg/markdown/testdata/telemetry.input b/pkg/markdown/testdata/telemetry.input new file mode 100644 index 00000000000..a9a36fb5a37 --- /dev/null +++ b/pkg/markdown/testdata/telemetry.input @@ -0,0 +1,4 @@ +Telemetry defines how the telemetry is generated for workloads within a mesh. + +For mesh level configuration, put the resource in root configuration +namespace for your Istio installation *without* a workload selector. \ No newline at end of file diff --git a/pkg/markdown/testdata/telemetry.output b/pkg/markdown/testdata/telemetry.output new file mode 100644 index 00000000000..b183d4bb1b5 --- /dev/null +++ b/pkg/markdown/testdata/telemetry.output @@ -0,0 +1,3 @@ +

Telemetry defines how the telemetry is generated for workloads within a mesh.

+

For mesh level configuration, put the resource in root configuration +namespace for your Istio installation without a workload selector.

From c4bde530820f97e7996d2197e7b0dd11ab0315ea Mon Sep 17 00:00:00 2001 From: hejianpeng Date: Thu, 13 Oct 2022 11:02:11 +0800 Subject: [PATCH 2/3] fix lint & gen --- pkg/markdown/md.go | 3 +-- pkg/markdown/md_test.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/pkg/markdown/md.go b/pkg/markdown/md.go index 2fa622efa6f..bf25e3edf53 100644 --- a/pkg/markdown/md.go +++ b/pkg/markdown/md.go @@ -23,8 +23,7 @@ import ( "github.com/yuin/goldmark/renderer/html" ) -type ifm struct { -} +type ifm struct{} // IFM is an extension that provides Istio Flavored markdown functionalities. var IFM = &ifm{} diff --git a/pkg/markdown/md_test.go b/pkg/markdown/md_test.go index 248a76d833a..2823c421eef 100644 --- a/pkg/markdown/md_test.go +++ b/pkg/markdown/md_test.go @@ -1,3 +1,17 @@ +// Copyright 2018 Istio Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package markdown import ( From 0725a2d7240d661427aa5dd5a4f3ba87ac932b4f Mon Sep 17 00:00:00 2001 From: hejianpeng Date: Fri, 14 Oct 2022 09:18:52 +0800 Subject: [PATCH 3/3] revert IFM to GFM --- pkg/markdown/md.go | 13 +------------ pkg/markdown/testdata/links.output | 2 +- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/pkg/markdown/md.go b/pkg/markdown/md.go index bf25e3edf53..80165d34377 100644 --- a/pkg/markdown/md.go +++ b/pkg/markdown/md.go @@ -23,19 +23,8 @@ import ( "github.com/yuin/goldmark/renderer/html" ) -type ifm struct{} - -// IFM is an extension that provides Istio Flavored markdown functionalities. -var IFM = &ifm{} - -func (e *ifm) Extend(m goldmark.Markdown) { - extension.Table.Extend(m) - extension.Strikethrough.Extend(m) - extension.TaskList.Extend(m) -} - var md = goldmark.New( - goldmark.WithExtensions(IFM), + goldmark.WithExtensions(extension.GFM), goldmark.WithExtensions(extension.NewTypographer()), goldmark.WithParserOptions( parser.WithAutoHeadingID(), diff --git a/pkg/markdown/testdata/links.output b/pkg/markdown/testdata/links.output index 814c24d6073..8383e01d176 100644 --- a/pkg/markdown/testdata/links.output +++ b/pkg/markdown/testdata/links.output @@ -1,2 +1,2 @@

Current service state of pod. -More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions

+More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions