name: Setup kubectl description: "Reads kube config from inputs and sets kube config" inputs: kube_server: description: "Kubernetes server address and port. Example (https://serverip:6443)" required: true kube_ca_base64: description: "Base64-encoded Kubernetes cluster CA certificate" required: true kube_token: description: "Kubernetes ServiceAccount token" required: true runs: using: "composite" steps: - name: Create kubeconfig shell: bash run: | set -euo pipefail # check arguments ERROR=0 if [ -z "${{ inputs.kube_server }}" ]; then echo "❌ ERROR: kube_server input is empty or not set" $ERROR=1 fi if [ -z "${{ inputs.kube_ca_base64 }}" ]; then echo "❌ ERROR: kube_ca_base64 input is empty or not set" $ERROR=1 fi if [ -z "${{ inputs.kube_server }}" ]; then echo "❌ ERROR: kube_token input is empty or not set" $ERROR=1 fi if [ "$ERROR" != 0 ]; then echo "❌ ERROR code $ERROR" exit "$ERROR" fi # end check arguments # creates kube config mkdir -p "${GITHUB_TEMP}/.kube" cat < "${GITHUB_TEMP}/.kube/config" apiVersion: v1 kind: Config clusters: - cluster: certificate-authority-data: ${{ inputs.kube_ca_base64 }} server: ${{ inputs.kube_server }} name: cluster contexts: - context: cluster: cluster namespace: default user: user name: context current-context: context users: - name: user user: token: ${{ inputs.kube_token }} EOF # sets KUBECONFIG environment variable echo "KUBECONFIG=${GITHUB_TEMP}/.kube/config" >> "${GITHUB_ENV}" # tests communication to server (add v argument if debug is required) curl -kv -cacert <(echo "${{ inputs.kube_ca_base64 }}" | base64 -d) -H "Authorization: Bearer ${{ inputs.kube_token }}" ${{ inputs.kube_server }}/version