Skip to content

Commit

Permalink
Merge pull request #14 from GreenmaskIO/release_0_1_5
Browse files Browse the repository at this point in the history
Greenmask Release v0.1.5
  • Loading branch information
wwoytenko committed Feb 16, 2024
2 parents 9e4afa1 + de55cf4 commit c0977a1
Show file tree
Hide file tree
Showing 110 changed files with 5,192 additions and 208 deletions.
33 changes: 20 additions & 13 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
uses: actions/checkout@v4

- name: Setup Go
uses: actions/setup-go@v4
uses: actions/setup-go@v5
with:
go-version: ${{ env.go-version }}

Expand Down Expand Up @@ -81,35 +81,42 @@ jobs:
uses: actions/checkout@v4

- name: Setup Go
uses: actions/setup-go@v4
uses: actions/setup-go@v5
with:
go-version: ${{ env.go-version }}

- name: Echo Go version
run: go version

- name: Build with different arch
run: |
export GOOS=$(echo ${{ matrix.platforms }} | cut -d '/' -f 1)
export GOARCH=$(echo ${{ matrix.platforms }} | cut -d '/' -f 2)
export GOARM=$(echo ${{ matrix.platforms }} | cut -d '/' -f 3 | cut -d 'v' -f 2)
if [[ "x$GOOS" == "xwindows" ]]; then
make build CMD_NAME="builds/${{ env.cmd-name }}_${GOOS}_${GOARCH}.exe"
elif [[ "x$GOARM" != "x" ]]; then
make build CMD_NAME="builds/${{ env.cmd-name }}_${GOOS}_${GOARCH}v${GOARM}"
if [[ "$GOOS" == "windows" ]]; then
make build CMD_NAME="builds/${{ env.cmd-name }}.exe"
else
make build CMD_NAME="builds/${{ env.cmd-name }}_${GOOS}_${GOARCH}"
make build CMD_NAME="builds/${{ env.cmd-name }}"
fi
- name: Create checksums
- name: Create checksum
if: startsWith(github.ref, 'refs/tags/v')
working-directory: builds
run: |
find . -type f -exec shasum -a 256 -b {} + | sed 's# \*\./# *#' | while read sum file; do echo "$sum $file" > "${file#\*}".sha256; done
- name: List artifacts
- name: Create archive
if: startsWith(github.ref, 'refs/tags/v')
run: tree -nh builds
run: |
export GOOS=$(echo ${{ matrix.platforms }} | cut -d '/' -f 1)
export GOARCH=$(echo ${{ matrix.platforms }} | cut -d '/' -f 2)
export GOARM=$(echo ${{ matrix.platforms }} | cut -d '/' -f 3 | cut -d 'v' -f 2)
export ARCHIVE_NAME=$(echo "${{ env.cmd-name }}-${GOOS}-${GOARCH}$(if [ -n "${GOARM}" ]; then echo v${GOARM}; fi).$(if [ "${GOOS}" = "windows" ]; then echo "zip"; else echo "tar.gz"; fi)")
cp LICENSE builds/
cd builds
if [[ "$GOOS" == "windows" ]]; then
zip "${ARCHIVE_NAME}" *
else
tar -czvf "${ARCHIVE_NAME}" *
fi
find . -maxdepth 1 -type f ! -name ${ARCHIVE_NAME} -exec rm -f {} +
- name: GitHub Release
if: startsWith(github.ref, 'refs/tags/v')
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ vendor/
.idea
.vscode
scratch

config.yml
!playground/config.yml

# Project exclusion
site
venv
.cache
# Binaries
Expand Down
2 changes: 1 addition & 1 deletion cmd/greenmask/cmd/dump/dump.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ var (
)

// TODO: Check how does work mixed options - use-list + tables, etc.
// TODO: Option that currently does not implemented:
// TODO: Options currently are not implemented:
// - encoding
// - disable-triggers
// - lock-wait-timeout
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package list_dump
package list_dumps

import (
"context"
Expand Down Expand Up @@ -43,7 +43,7 @@ var (
}

if err := listDumps(); err != nil {
log.Err(err).Msg("")
log.Fatal().Err(err).Msg("")
}
},
}
Expand Down
121 changes: 59 additions & 62 deletions cmd/greenmask/cmd/list_transformers/list_transformers.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ import (
"fmt"
"os"
"slices"
"strconv"
"strings"

"github.com/greenmaskio/greenmask/pkg/toolkit"
"github.com/olekukonko/tablewriter"
"github.com/rs/zerolog/log"
"github.com/spf13/cobra"
Expand All @@ -42,8 +42,8 @@ var (
log.Err(err).Msg("")
}

if err := run(args); err != nil {
log.Err(err).Msg("")
if err := run(); err != nil {
log.Fatal().Err(err).Msg("")
}
},
}
Expand All @@ -56,19 +56,35 @@ const (
TextFormatName = "text"
)

func run(transformerNames []string) error {
const anyTypesValue = "any"

type parameter struct {
Name string `json:"name,omitempty"`
SupportedTypes []string `json:"supported_types,omitempty"`
}

type jsonResponse struct {
Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"`
Parameters []*parameter `json:"parameters,omitempty"`
}

func run() error {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
err := custom.BootstrapCustomTransformers(ctx, utils.DefaultTransformerRegistry, Config.CustomTransformers)
if err != nil {
return fmt.Errorf("error registering custom transformer: %w", err)
}

// TODO: Consider about listing format. The transformer can have one and more columns as an input
// and

switch format {
case JsonFormatName:
err = listTransformersJson(utils.DefaultTransformerRegistry, transformerNames)
err = listTransformersJson(utils.DefaultTransformerRegistry)
case TextFormatName:
err = listTransformersText(utils.DefaultTransformerRegistry, transformerNames)
err = listTransformersText(utils.DefaultTransformerRegistry)
default:
return fmt.Errorf(`unknown format %s`, format)
}
Expand All @@ -79,92 +95,73 @@ func run(transformerNames []string) error {
return nil
}

func listTransformersJson(registry *utils.TransformerRegistry, transformerNames []string) error {
var transformers []*utils.Definition

if len(transformerNames) > 0 {
func listTransformersJson(registry *utils.TransformerRegistry) error {
var transformers []*jsonResponse

for _, name := range transformerNames {
def, ok := registry.M[name]
if ok {
transformers = append(transformers, def)
} else {
return fmt.Errorf("unknown transformer name \"%s\"", name)
for _, def := range registry.M {
var params []*parameter
for _, p := range def.Parameters {
if !p.IsColumn && !p.IsColumnContainer {
continue
}
supportedTypes := getColumnTypes(p)
params = append(params, &parameter{Name: p.Name, SupportedTypes: supportedTypes})
}

} else {
for _, def := range registry.M {
transformers = append(transformers, def)
}
transformers = append(transformers, &jsonResponse{
Name: def.Properties.Name,
Description: def.Properties.Description,
Parameters: params,
})
}

slices.SortFunc(transformers, func(a, b *jsonResponse) int {
return strings.Compare(a.Name, b.Name)
})

if err := json.NewEncoder(os.Stdout).Encode(transformers); err != nil {
return err
}
return nil
}

func listTransformersText(registry *utils.TransformerRegistry, transformerNames []string) error {
func listTransformersText(registry *utils.TransformerRegistry) error {

var data [][]string
table := tablewriter.NewWriter(os.Stdout)
var names []string
if len(transformerNames) > 0 {
for _, name := range transformerNames {
_, ok := registry.M[name]
if ok {
names = append(names, name)
} else {
return fmt.Errorf("unknown transformer name \"%s\"", name)
}
}

} else {
for name := range registry.M {
names = append(names, name)
}
slices.Sort(names)
for name := range registry.M {
names = append(names, name)
}

slices.Sort(names)
table.SetHeader([]string{"name", "description", "column parameter name", "supported types"})
for _, name := range names {
def := registry.M[name]
data = append(data, []string{def.Properties.Name, "description", def.Properties.Description, "", "", ""})
//allowedTypes := getAllowedTypesList(def)
for _, p := range def.Parameters {
data = append(data, []string{def.Properties.Name, "parameters", p.Name, "description", p.Description, ""})
data = append(data, []string{def.Properties.Name, "parameters", p.Name, "required", strconv.FormatBool(p.Required), ""})
if p.DefaultValue != nil {
data = append(data, []string{def.Properties.Name, "parameters", p.Name, "default", string(p.DefaultValue), ""})
}
if p.LinkParameter != "" {
data = append(data, []string{def.Properties.Name, "parameters", p.Name, "linked_parameter", p.LinkParameter, ""})
}
if p.CastDbType != "" {
data = append(data, []string{def.Properties.Name, "parameters", p.Name, "cast_to_db_type", p.CastDbType, ""})
if !p.IsColumn && !p.IsColumnContainer {
continue
}
if p.ColumnProperties != nil {
if len(p.ColumnProperties.AllowedTypes) > 0 {
allowedTypes := strings.Join(p.ColumnProperties.AllowedTypes, ", ")
data = append(data, []string{def.Properties.Name, "parameters", p.Name, "column_properties", "allowed_types", allowedTypes})
}
isAffected := strconv.FormatBool(p.ColumnProperties.Affected)
data = append(data, []string{def.Properties.Name, "parameters", p.Name, "column_properties", "is_affected", isAffected})
skipOriginalData := strconv.FormatBool(p.ColumnProperties.SkipOriginalData)
data = append(data, []string{def.Properties.Name, "parameters", p.Name, "column_properties", "skip_original_data", skipOriginalData})
skipOnNull := strconv.FormatBool(p.ColumnProperties.SkipOnNull)
data = append(data, []string{def.Properties.Name, "parameters", p.Name, "column_properties", "skip_on_null", skipOnNull})
}

supportedTypes := getColumnTypes(p)
data = append(data, []string{def.Properties.Name, def.Properties.Description, p.Name, strings.Join(supportedTypes, ", ")})
}
}

table.AppendBulk(data)
table.SetRowLine(true)
table.SetAutoMergeCellsByColumnIndex([]int{0, 1, 2, 3})
table.SetAutoMergeCellsByColumnIndex([]int{0, 1})
table.Render()

return nil
}

func getColumnTypes(p *toolkit.Parameter) []string {
if p.ColumnProperties != nil && len(p.ColumnProperties.AllowedTypes) > 0 {
return p.ColumnProperties.AllowedTypes
}
return []string{anyTypesValue}
}

func init() {
Cmd.Flags().StringVarP(&format, "format", "f", TextFormatName, "output format [text|json]")
}
Loading

0 comments on commit c0977a1

Please sign in to comment.