Skip to content

Commit

Permalink
Dynamic blocks, conditional rendering (#251)
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrew-Morozko authored Oct 25, 2024
1 parent 237561f commit 2f591ab
Show file tree
Hide file tree
Showing 37 changed files with 1,835 additions and 490 deletions.
11 changes: 10 additions & 1 deletion .github/workflows/main_common.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,23 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-go@v5
with:
go-version: "1.23"
- id: golangci-rev
name: Get the rev to compare against
run: |
git fetch origin main
echo "SHA=$(git merge-base origin/main @)" >> $GITHUB_OUTPUT
- name: golangci-lint
uses: golangci/golangci-lint-action@v6
with:
version: v1.60.2
only-new-issues: true
only-new-issues: false
args: "--new-from-rev ${{ steps.golangci-rev.outputs.SHA }}"

codegen-check:
runs-on: ubuntu-latest
Expand Down
2 changes: 0 additions & 2 deletions .golangci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@ linters-settings:
linters:
disable-all: true
enable:
- exportloopref
- gci
- gocritic
- gofmt
Expand All @@ -95,7 +94,6 @@ linters:
- gosimple
- govet
- ineffassign
- nolintlint
- staticcheck
- typecheck
- unused
Expand Down
268 changes: 134 additions & 134 deletions .goreleaser-dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,137 +23,137 @@ builds:

# Plugins

- id: elastic
main: ./internal/elastic/cmd
binary: "plugins/blackstork/elastic@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: github
main: ./internal/github/cmd
binary: "plugins/blackstork/github@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: graphql
main: ./internal/graphql/cmd
binary: "plugins/blackstork/graphql@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: openai
main: ./internal/openai/cmd
binary: "plugins/blackstork/openai@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: opencti
main: ./internal/opencti/cmd
binary: "plugins/blackstork/opencti@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: nistnvd
main: ./internal/nistnvd/cmd
binary: "plugins/blackstork/nist_nvd@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: postgresql
main: ./internal/postgresql/cmd
binary: "plugins/blackstork/postgresql@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: sqlite
main: ./internal/sqlite/cmd
binary: "plugins/blackstork/sqlite@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: terraform
main: ./internal/terraform/cmd
binary: "plugins/blackstork/terraform@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: hackerone
main: ./internal/hackerone/cmd
binary: "plugins/blackstork/hackerone@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: virustotal
main: ./internal/virustotal/cmd
binary: "plugins/blackstork/virustotal@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: splunk
main: ./internal/splunk/cmd
binary: "plugins/blackstork/splunk@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: stixview
main: ./internal/stixview/cmd
binary: "plugins/blackstork/stixview@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: snyk
main: ./internal/snyk/cmd
binary: "plugins/blackstork/snyk@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin

- id: microsoft
main: ./internal/microsoft/cmd
binary: "plugins/blackstork/microsoft@{{ .Version }}"
ldflags: "-X main.version={{.Version}}"
gcflags: all=-N -l
no_unique_dist_dir: true
tags:
- fabricplugin
# - id: elastic
# main: ./internal/elastic/cmd
# binary: "plugins/blackstork/elastic@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: github
# main: ./internal/github/cmd
# binary: "plugins/blackstork/github@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: graphql
# main: ./internal/graphql/cmd
# binary: "plugins/blackstork/graphql@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: openai
# main: ./internal/openai/cmd
# binary: "plugins/blackstork/openai@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: opencti
# main: ./internal/opencti/cmd
# binary: "plugins/blackstork/opencti@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: nistnvd
# main: ./internal/nistnvd/cmd
# binary: "plugins/blackstork/nist_nvd@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: postgresql
# main: ./internal/postgresql/cmd
# binary: "plugins/blackstork/postgresql@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: sqlite
# main: ./internal/sqlite/cmd
# binary: "plugins/blackstork/sqlite@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: terraform
# main: ./internal/terraform/cmd
# binary: "plugins/blackstork/terraform@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: hackerone
# main: ./internal/hackerone/cmd
# binary: "plugins/blackstork/hackerone@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: virustotal
# main: ./internal/virustotal/cmd
# binary: "plugins/blackstork/virustotal@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: splunk
# main: ./internal/splunk/cmd
# binary: "plugins/blackstork/splunk@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: stixview
# main: ./internal/stixview/cmd
# binary: "plugins/blackstork/stixview@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: snyk
# main: ./internal/snyk/cmd
# binary: "plugins/blackstork/snyk@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin

# - id: microsoft
# main: ./internal/microsoft/cmd
# binary: "plugins/blackstork/microsoft@{{ .Version }}"
# ldflags: "-X main.version={{.Version}}"
# gcflags: all=-N -l
# no_unique_dist_dir: true
# tags:
# - fabricplugin
25 changes: 16 additions & 9 deletions cmd/render.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"log/slog"
"os"
"slices"
"strings"

"github.com/spf13/cobra"
Expand All @@ -13,7 +14,7 @@ import (
"github.com/blackstork-io/fabric/internal/builtin"
"github.com/blackstork-io/fabric/parser/definitions"
"github.com/blackstork-io/fabric/pkg/diagnostics"
"github.com/blackstork-io/fabric/plugin"
"github.com/blackstork-io/fabric/pkg/utils"
"github.com/blackstork-io/fabric/print"
"github.com/blackstork-io/fabric/print/htmlprint"
"github.com/blackstork-io/fabric/print/mdprint"
Expand All @@ -22,12 +23,15 @@ import (
var (
publish bool
format string
tags string
)

func init() {
rootCmd.AddCommand(renderCmd)
renderCmd.Flags().BoolVar(&publish, "publish", false, "publish the rendered document")
renderCmd.Flags().StringVar(&format, "format", "md", "default output format of the document (md, html or pdf)")
renderCmd.Flags().StringVar(&tags, "with-meta-tags", "", "comma separated list of meta tags. Only content blocks matching these tags will be rendered")

renderCmd.SetUsageTemplate(UsageTemplate(
[2]string{"TARGET", "name of the document to be rendered as 'document.<name>'"},
))
Expand All @@ -47,6 +51,13 @@ var renderCmd = &cobra.Command{
default:
return fmt.Errorf("target should have the format '%s<name_of_the_document>'", docPrefix)
}
requiredTags := slices.DeleteFunc(
utils.FnMap(
strings.Split(tags, ","),
strings.TrimSpace,
),
func(tag string) bool { return tag == "" },
)
ctx := cmd.Context()
logger := slog.Default()

Expand Down Expand Up @@ -77,19 +88,15 @@ var renderCmd = &cobra.Command{
if diags.Extend(diag) {
return diags
}
var content plugin.Content
if publish {
content, diag = eng.RenderAndPublishContent(ctx, target)
} else {
_, content, _, diag = eng.RenderContent(ctx, target)
}

doc, content, dataCtx, diag := eng.RenderContent(ctx, target, requiredTags)
if diags.Extend(diag) {
return diags
}

// If publish requested, no need to print out to stdout
if publish {
return nil
diags.Extend(eng.PublishContent(ctx, target, doc, content, dataCtx))
return diags
}

logger.InfoContext(ctx, "Printing to stdout", "format", format)
Expand Down
Loading

0 comments on commit 2f591ab

Please sign in to comment.