name: Helm OCI Chart Releaser
description: Push Helm charts to OCI-based (Docker) registries
author: sergeyshaykhullin
branding:
  color: yellow
  icon: upload-cloud
inputs:
  name:
    required: true
    description: Chart name
  repository:
    required: true
    description: Chart repository name
  tag:
    required: true
    description: Chart version
  app_version:
    required: true
    description: App version
  path:
    required: false
    description: Chart path (Default 'charts/{name}')
  registry:
    required: true
    description: OCI registry
  registry_username:
    required: true
    description: OCI registry username
  registry_password:
    required: true
    description: OCI registry password
  update_dependencies:
    required: false
    default: 'false'
    description: Update chart dependencies before packaging (Default 'false')
outputs:
  image:
    value: ${{ steps.output.outputs.image }}
    description: Chart image (Default '{registry}/{repository}/{image}:{tag}')
runs:
  using: composite
  steps:
    - name: Helm | Login
      shell: bash
      run: echo ${{ inputs.registry_password }} | helm registry login -u ${{ inputs.registry_username }} --password-stdin ${{ inputs.registry }}
      env:
        HELM_EXPERIMENTAL_OCI: '1'
    
    - name: Helm | Dependency
      if: inputs.update_dependencies == 'true'
      shell: bash
      run: helm dependency update ${{ inputs.path == null && format('{0}/{1}', 'charts', inputs.name) || inputs.path }}
      env:
        HELM_EXPERIMENTAL_OCI: '1'

    - name: Helm | Package
      shell: bash
      run: helm package ${{ inputs.path == null && format('{0}/{1}', 'charts', inputs.name) || inputs.path }} --version ${{ inputs.tag }} --app-version ${{ inputs.app_version }}
      env:
        HELM_EXPERIMENTAL_OCI: '1'

    - name: Helm | Push
      shell: bash
      run: helm push ${{ inputs.name }}-${{ inputs.tag }}.tgz oci://${{ inputs.registry }}/${{ inputs.repository }}
      env:
        HELM_EXPERIMENTAL_OCI: '1'

    - name: Helm | Logout
      shell: bash
      run: helm registry logout ${{ inputs.registry }}
      env:
        HELM_EXPERIMENTAL_OCI: '1'

    - name: Helm | Output
      id: output
      shell: bash
      run: echo "image=${{ inputs.registry }}/${{ inputs.repository }}/${{ inputs.name }}:${{ inputs.tag }}" >> $GITHUB_OUTPUT