name: "ZeroTier" description: "Connect your Github Action workflow to ZeroTier" branding: icon: 'globe' color: 'gray-dark' on: workflow_call: inputs: network_id: description: "The ZeroTier network ID to connect to" required: true auth_token: description: "Your ZeroTier Central API Access Token" required: true api_url: description: "ZeroTier Central API URL" required: false default: "https://my.zerotier.com/api/v1" runs: using: 'composite' steps: - name: zerotier uses: zerotier/github-action/util/post@main with: main: | set -euo pipefail IFS=$'\n\t' echo "⏁ Installing ZeroTier" case $(uname -s) in MINGW64_NT?*) pwsh "${{ github.action_path }}/util/install.ps1" ztcli="/c/Program Files (x86)/ZeroTier/One/zerotier-cli.bat" member_id=$("${ztcli}" info | awk '{ print $3 }') ;; *) . ${{ github.action_path }}/util/install.sh &>/dev/null member_id=$(sudo zerotier-cli info | awk '{ print $3 }') ;; esac echo "⏁ Authorizing Runner to ZeroTier network" curl -s -X POST -H "Authorization: token ${{ inputs.auth_token }}" -d '{"config":{"authorized":true}}' "${{ inputs.api_url }}/network/${{ inputs.network_id }}/member/${member_id}" echo "⏁ Joining ZeroTier Network ID: ${{ inputs.network_id }}" case $(uname -s) in MINGW64_NT?*) "${ztcli}" join ${{ inputs.network_id }} while ! "${ztcli}" listnetworks | grep ${{ inputs.network_id }} | grep OK ; do sleep 0.5 ; done ;; *) sudo zerotier-cli join ${{ inputs.network_id }} while ! sudo zerotier-cli listnetworks | grep ${{ inputs.network_id }} | grep OK ; do sleep 0.5 ; done ;; esac post: | set -euo pipefail IFS=$'\n\t' case $(uname -s) in MINGW64_NT?*) ztcli="/c/Program Files (x86)/ZeroTier/One/zerotier-cli.bat" member_id=$("${ztcli}" info | awk '{ print $3 }') ;; *) member_id=$(sudo zerotier-cli info | awk '{ print $3 }') ;; esac echo "⏁ Removing Runner from ZeroTier network" curl -s -X DELETE -H "Authorization: token ${{ inputs.auth_token }}" "${{ inputs.api_url }}/network/${{ inputs.network_id }}/member/${member_id}"