Merge pull request #2479 from melsonic/issue-2377

feat: support for --omit-version flag
This commit is contained in:
Alexander Wang 2025-04-03 13:45:30 -07:00 committed by GitHub
commit b8695b7d20
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 49 additions and 5 deletions

View file

@ -16,6 +16,7 @@
- CLI:
- Support `validate` command. [#2415](https://github.com/terrastruct/d2/pull/2415)
- Watch mode ignores backup files (e.g. files created by certain editors like Helix). [#2131](https://github.com/terrastruct/d2/issues/2131)
- Support for `--omit-version` flag. [#2377](https://github.com/terrastruct/d2/issues/2377)
- Compiler:
- `link`s can be set to root path, e.g. `/xyz`. [#2357](https://github.com/terrastruct/d2/issues/2357)
- Parser:

View file

@ -148,6 +148,9 @@ Set the output format when writing to stdout. Supported formats are: png, svg. O
.It Fl -no-xml-tag Ar false
Omit XML tag (<?xml ...?>) from output SVG files. Useful when generating SVGs for direct HTML embedding
.Ns .
.It Fl -omit-version Ar false
omit D2 version from generated image
.Ns .
.El
.Sh SUBCOMMANDS
.Bl -tag -width Fl
@ -218,6 +221,8 @@ See --browser flag.
See --stdout-format flag.
.It Ev Sy D2_NO_XML_TAG
See --no-xml-tag flag.
.It Ev Sy OMIT_VERSION
See --omit-version
.El
.Sh SEE ALSO
.Xr d2plugin-tala 1

View file

@ -136,6 +136,11 @@ func Run(ctx context.Context, ms *xmain.State) (err error) {
saltFlag := ms.Opts.String("", "salt", "", "", "Add a salt value to ensure the output uses unique IDs. This is useful when generating multiple identical diagrams to be included in the same HTML doc, so that duplicate IDs do not cause invalid HTML. The salt value is a string that will be appended to IDs in the output.")
omitVersionFlag, err := ms.Opts.Bool("OMIT_VERSION", "omit-version", "", false, "omit D2 version from generated image")
if err != nil {
return err
}
plugins, err := d2plugin.ListPlugins(ctx)
if err != nil {
return err
@ -331,6 +336,7 @@ func Run(ctx context.Context, ms *xmain.State) (err error) {
Scale: scale,
NoXMLTag: noXMLTagFlag,
Salt: saltFlag,
OmitVersion: omitVersionFlag,
}
if *watchFlag {
@ -884,6 +890,7 @@ func _render(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, opts
NoXMLTag: opts.NoXMLTag,
Salt: opts.Salt,
Scale: scale,
OmitVersion: opts.OmitVersion,
}
svg, err := d2svg.Render(diagram, renderOpts)
if err != nil {
@ -978,6 +985,7 @@ func renderPDF(ctx context.Context, ms *xmain.State, plugin d2plugin.Plugin, opt
DarkThemeID: opts.DarkThemeID,
ThemeOverrides: opts.ThemeOverrides,
DarkThemeOverrides: opts.DarkThemeOverrides,
OmitVersion: opts.OmitVersion,
}
svg, err = d2svg.Render(diagram, renderOpts)
if err != nil {
@ -1085,6 +1093,7 @@ func renderPPTX(ctx context.Context, ms *xmain.State, presentation *pptx.Present
DarkThemeID: opts.DarkThemeID,
ThemeOverrides: opts.ThemeOverrides,
DarkThemeOverrides: opts.DarkThemeOverrides,
OmitVersion: opts.OmitVersion,
}
svg, err = d2svg.Render(diagram, renderOpts)
if err != nil {
@ -1332,6 +1341,7 @@ func renderPNGsForGIF(ctx context.Context, ms *xmain.State, plugin d2plugin.Plug
DarkThemeID: opts.DarkThemeID,
ThemeOverrides: opts.ThemeOverrides,
DarkThemeOverrides: opts.DarkThemeOverrides,
OmitVersion: opts.OmitVersion,
}
svg, err = d2svg.Render(diagram, renderOpts)
if err != nil {

View file

@ -93,9 +93,10 @@ type RenderOpts struct {
// MasterID is passed when the diagram should use something other than its own hash for unique targeting
// Currently, that's when multi-boards are collapsed
MasterID string
NoXMLTag *bool
Salt *string
MasterID string
NoXMLTag *bool
Salt *string
OmitVersion *bool
}
func dimensions(diagram *d2target.Diagram, pad int) (left, top, width, height int) {
@ -2629,8 +2630,12 @@ func Render(diagram *d2target.Diagram, opts *RenderOpts) ([]byte, error) {
tag := "g"
// Many things change when this is rendering for animation
if opts.MasterID == "" {
fitToScreenWrapperOpening = fmt.Sprintf(`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-d2-version="%s" preserveAspectRatio="%s meet" viewBox="0 0 %d %d"%s>`,
version.Version,
dataD2Version := ""
if opts.OmitVersion == nil || !*opts.OmitVersion {
dataD2Version = fmt.Sprintf(`data-d2-version="%s"`, version.Version)
}
fitToScreenWrapperOpening = fmt.Sprintf(`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" %s preserveAspectRatio="%s meet" viewBox="0 0 %d %d"%s>`,
dataD2Version,
alignment,
w, h,
dimensions,

View file

@ -1362,6 +1362,29 @@ c
assert.Error(t, err)
},
},
{
name: "omit-version",
run: func(t *testing.T, ctx context.Context, dir string, env *xos.Env) {
writeFile(t, dir, "test.d2", `x -> y`)
err := runTestMain(t, ctx, dir, env, "--omit-version", "test.d2", "no-version.svg")
assert.Success(t, err)
noVersionSvg := readFile(t, dir, "no-version.svg")
assert.False(t, strings.Contains(string(noVersionSvg), "data-d2-version="))
writeFile(t, dir, "test.d2", `x -> y`)
err = runTestMain(t, ctx, dir, env, "test.d2", "with-version.svg")
assert.Success(t, err)
withVersionSvg := readFile(t, dir, "with-version.svg")
assert.True(t, strings.Contains(string(withVersionSvg), "data-d2-version="))
env.Setenv("OMIT_VERSION", "1")
writeFile(t, dir, "test.d2", `x -> y`)
err = runTestMain(t, ctx, dir, env, "test.d2", "no-version-env.svg")
assert.Success(t, err)
noVersionEnvSvg := readFile(t, dir, "no-version-env.svg")
assert.False(t, strings.Contains(string(noVersionEnvSvg), "data-d2-version="))
},
},
}
ctx := context.Background()