apiVersion: argoproj.io/v1alpha1
kind: ConfigManagementPlugin
metadata:
  name: helm-kustomize-cmp
spec:
  # version: v1.2
  # The init command runs in the Application source directory at the beginning of each manifest generation. The init
  # command can output anything. A non-zero status code will fail manifest generation.
  init:
    # Init always happens immediately before generate, but its output is not treated as manifests.
    # This is a good place to, for example, download chart dependencies.
    command: [ /bin/sh ]
    args:
      - /plugin/init.sh
  # The generate command runs in the Application source directory each time manifests are generated. Standard output
  # must be ONLY valid Kubernetes Objects in either YAML or JSON. A non-zero exit code will fail manifest generation.
  # To write log messages from the command, write them to stderr, it will always be displayed.
  # Error output will be sent to the UI, so avoid printing sensitive information (such as secrets).
  generate:
    command: [ /bin/sh ]
    args:
      - /plugin/generate.sh

  # The discovery config is applied to a repository. If every configured discovery tool matches, then the plugin may be
  # used to generate manifests for Applications using the repository. If the discovery config is omitted then the plugin
  # will not match any application but can still be invoked explicitly by specifying the plugin name in the app spec.
  # Only one of fileName, find.glob, or find.command should be specified. If multiple are specified then only the
  # first (in that order) is evaluated.
  # discover:
    # fileName is a glob pattern (https://pkg.go.dev/path/filepath#Glob) that is applied to the Application's source
    # directory. If there is a match, this plugin may be used for the Application.
    # fileName: "./subdir/s*.yaml"
    # find:
      # This does the same thing as fileName, but it supports double-start (nested directory) glob patterns.
      # glob: "**/Chart.yaml"
      # The find command runs in the repository's root directory. To match, it must exit with status code 0 _and_
      # produce non-empty output to standard out.
      # command: [sh, -c, find . -name env.yaml]
  # The parameters config describes what parameters the UI should display for an Application. It is up to the user to
  # actually set parameters in the Application manifest (in spec.source.plugin.parameters). The announcements _only_
  # inform the "Parameters" tab in the App Details page of the UI.
  parameters:
    # Static parameter announcements are sent to the UI for _all_ Applications handled by this plugin.
    # Think of the `string`, `array`, and `map` values set here as "defaults". It is up to the plugin author to make
    # sure that these default values actually reflect the plugin's behavior if the user doesn't explicitly set different
    # values for those parameters.
    static:
      - name: env
        title: Environment
        tooltip: Kustomization env (directory in manifest folder)
        required: true
        itemType: string
        collectionType: string
        string: "staging"
      - name: chart
        title: Chart
        tooltip: Name or path of helm chart
        required: false
        itemType: string
        collectionType: string
        string: "."
      - name: flags
        title: Helm flags
        tooltip: Extra helm flags
        required: false
        itemType: string
        collectionType: string
        string: ""
      # All the fields above besides "string" apply to both the array and map type parameter announcements.
      # - name: array-param
      #   # This field communicates the parameter's default value to the UI. Setting this field is optional.
      #   array: [default, items]
      #   collectionType: array
      # - name: map-param
      #   # This field communicates the parameter's default value to the UI. Setting this field is optional.
      #   map:
      #     some: value
      #   collectionType: map
    # dynamic:
      # The command is run in an Application's source directory. Standard output must be JSON matching the schema of the
      # static parameter announcements list.
      # command: [ /bin/sh, /plugin/get-values.sh ]

    # If set to `true` then the plugin receives repository files with original file mode. Dangerous since the repository
    # might have executable files. Set to true only if you trust the CMP plugin authors.
    preserveFileMode: false

