name: Log Collection Deployment
description: Deploy log collection functionality to the cluster.

inputs:
  logstash-port:
    description: "The port of the logstash service."
    default: "5045"
  kubeconfig:
    description: "The kubeconfig of the cluster to deploy to."
    required: true
  opensearchUser:
    description: "The username of the opensearch cluster."
    required: true
  opensearchPwd:
    description: "The password of the opensearch cluster."
    required: true
  test:
    description: "The e2e test payload."
    required: true
  provider:
    description: "The CSP of the cluster."
    required: true
  isDebugImage:
    description: "Whether the cluster is a debug cluster / uses a debug image."
    required: true
  refStream:
    description: "Reference and stream of the image in use"
    required: false
  kubernetesVersion:
    description: "Kubernetes version of the cluster"
    required: false
  clusterCreation:
    description: "How the infrastructure for the e2e test was created. One of [cli, self-managed, terraform]."
    default: "cli"

runs:
  using: "composite"
  steps:
    - name: Template Logcollection Helm Values
      id: template
      shell: bash
      run: |
        bazel run //hack/logcollector template -- \
         --dir $(realpath .) \
         --username ${{ inputs.opensearchUser }} \
         --password ${{ inputs.opensearchPwd }} \
         --port ${{ inputs.logstash-port }} \
         --fields github.actor="${{ github.triggering_actor }}" \
         --fields github.workflow="${{ github.workflow }}" \
         --fields github.run-id="${{ github.run_id }}" \
         --fields github.run-attempt="${{ github.run_attempt }}" \
         --fields github.ref-name="${{ github.ref_name }}" \
         --fields github.sha="${{ github.sha }}" \
         --fields github.runner-os="${{ runner.os }}" \
         --fields github.e2e-test-payload="${{ inputs.test }}" \
         --fields github.is-debug-cluster="${{ inputs.isDebugImage }}" \
         --fields github.e2e-test-provider="${{ inputs.provider }}" \
         --fields github.ref-stream="${{ inputs.refStream }}" \
         --fields github.kubernetes-version="${{ inputs.kubernetesVersion }}" \
         --fields github.cluster-creation="${{ inputs.clusterCreation }}" \
         --fields deployment-type="k8s"

    # Make sure that helm is installed
    # This is not always the case, e.g. on MacOS runners
    - name: Install Helm
      uses: azure/setup-helm@5119fcb9089d432beecbf79bb2c7915207344b78 # v3.5
      with:
        version: latest

    - name: Deploy Logstash
      id: deploy-logstash
      shell: bash
      working-directory: ./logstash
      env:
        KUBECONFIG: ${{ inputs.kubeconfig }}
      run: |
        helm repo add elastic https://helm.elastic.co
        helm repo update
        helm install logstash elastic/logstash \
          --wait --timeout=1200s --values values.yml

    - name: Deploy Filebeat
      id: deploy-filebeat
      shell: bash
      working-directory: ./filebeat
      env:
        KUBECONFIG: ${{ inputs.kubeconfig }}
      run: |
        helm repo add elastic https://helm.elastic.co
        helm repo update
        helm install filebeat elastic/filebeat \
          --wait --timeout=1200s --values values.yml

    - name: Deploy Metricbeat
      id: deploy-metricbeat
      shell: bash
      working-directory: ./metricbeat
      env:
        KUBECONFIG: ${{ inputs.kubeconfig }}
      run: |
        helm repo add elastic https://helm.elastic.co
        helm repo update
        helm install metricbeat-k8s elastic/metricbeat \
          --wait --timeout=1200s --values values-control-plane.yml
        helm install metricbeat-system elastic/metricbeat \
          --wait --timeout=1200s --values values-all-nodes.yml
