name: "SSH Remote Commands"
description: "Executing remote ssh commands"
author: "Bo-Yi Wu"
inputs:
  host:
    description: "SSH host address."
  port:
    description: "SSH port number."
    default: "22"
  passphrase:
    description: "Passphrase for the SSH key."
  username:
    description: "SSH username."
  password:
    description: "SSH password."
  protocol:
    description: 'The IP protocol to use. Valid values are "tcp". "tcp4" or "tcp6". Default to tcp.'
    default: "tcp"
  sync:
    description: "Enable synchronous execution if multiple hosts are involved."
  use_insecure_cipher:
    description: "Include more ciphers by using insecure ciphers."
  cipher:
    description: "Allowed cipher algorithms. If unspecified, a sensible default is used."
  timeout:
    description: "Timeout duration for establishing SSH connection to the host."
    default: "30s"
  command_timeout:
    description: "Timeout duration for SSH commands execution."
    default: "10m"
  key:
    description: "Content of the SSH private key. For example, the raw content of ~/.ssh/id_rsa."
  key_path:
    description: "Path to the SSH private key file."
  fingerprint:
    description: "SHA256 fingerprint of the host public key."
  proxy_host:
    description: "SSH proxy host address."
  proxy_port:
    description: "SSH proxy port number."
    default: "22"
  proxy_username:
    description: "SSH proxy username."
  proxy_password:
    description: "SSH proxy password."
  proxy_passphrase:
    description: "SSH proxy key passphrase."
  proxy_timeout:
    description: "Timeout duration for establishing SSH connection to the proxy host."
    default: "30s"
  proxy_key:
    description: "Content of the SSH proxy private key. For example, the raw content of ~/.ssh/id_rsa."
  proxy_key_path:
    description: "Path to the SSH proxy private key file."
  proxy_fingerprint:
    description: "SHA256 fingerprint of the proxy host public key."
  proxy_cipher:
    description: "Allowed cipher algorithms for the proxy. If unspecified, a sensible default is used."
  proxy_use_insecure_cipher:
    description: "Include more ciphers for the proxy by using insecure ciphers."
  script:
    description: "Commands to be executed."
  script_stop:
    description: "Stop the script after the first failure."
  envs:
    description: "Environment variables to be passed to the shell script."
  envs_format:
    description: "Flexible configuration for environment value transfer."
  debug:
    description: "Enable debug mode."
  allenvs:
    description: "pass all environment variable to shell script."
  request_pty:
    description: "Request a pseudo-terminal from the server."

runs:
  using: "composite"
  steps:
    - name: Set GitHub Path
      run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH
      shell: bash
      env:
        GITHUB_ACTION_PATH: ${{ github.action_path }}
    - name: Run entrypoint.sh
      run: entrypoint.sh
      shell: bash
      env:
        GITHUB_ACTION_PATH: ${{ github.action_path }}
        INPUT_HOST: ${{ inputs.host }}
        INPUT_PORT: ${{ inputs.port }}
        INPUT_PROTOCOL: ${{ inputs.protocol }}
        INPUT_USERNAME: ${{ inputs.username }}
        INPUT_PASSWORD: ${{ inputs.password }}
        INPUT_PASSPHRASE: ${{ inputs.passphrase }}
        INPUT_KEY: ${{ inputs.key }}
        INPUT_KEY_PATH: ${{ inputs.key_path }}
        INPUT_FINGERPRINT: ${{ inputs.fingerprint }}
        INPUT_PROXY_HOST: ${{ inputs.proxy_host }}
        INPUT_PROXY_PORT: ${{ inputs.proxy_port }}
        INPUT_PROXY_USERNAME: ${{ inputs.proxy_username }}
        INPUT_PROXY_PASSWORD: ${{ inputs.proxy_password }}
        INPUT_PROXY_PASSPHRASE: ${{ inputs.proxy_passphrase }}
        INPUT_PROXY_KEY: ${{ inputs.proxy_key }}
        INPUT_PROXY_KEY_PATH: ${{ inputs.proxy_key_path }}
        INPUT_PROXY_FINGERPRINT: ${{ inputs.proxy_fingerprint }}
        INPUT_TIMEOUT: ${{ inputs.timeout }}
        INPUT_PROXY_TIMEOUT: ${{ inputs.proxy_timeout }}
        INPUT_COMMAND_TIMEOUT: ${{ inputs.command_timeout }}
        INPUT_SCRIPT: ${{ inputs.script }}
        INPUT_SCRIPT_STOP: ${{ inputs.script_stop }}
        INPUT_ENVS: ${{ inputs.envs }}
        INPUT_ENVS_FORMAT: ${{ inputs.envs_format }}
        INPUT_DEBUG: ${{ inputs.debug }}
        INPUT_ALL_ENVS: ${{ inputs.allenvs }}
        INPUT_REQUEST_PTY: ${{ inputs.request_pty }}
        INPUT_USE_INSECURE_CIPHER: ${{ inputs.use_insecure_cipher }}
        INPUT_CIPHER: ${{ inputs.cipher }}
        INPUT_PROXY_USE_INSECURE_CIPHER: ${{ inputs.proxy_use_insecure_cipher }}
        INPUT_PROXY_CIPHER: ${{ inputs.proxy_cipher }}
        INPUT_SYNC: ${{ inputs.sync }}

branding:
  icon: "terminal"
  color: "gray-dark"
