From c82f20df5bdf6e3d080847ec79ffb263319598bd Mon Sep 17 00:00:00 2001 From: Alexander Artemenko Date: Sat, 6 Feb 2021 20:30:14 +0300 Subject: [PATCH] Added ngrok steps to the action. --- .github/actions/build-docs/action.yml | 125 ++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/.github/actions/build-docs/action.yml b/.github/actions/build-docs/action.yml index a434e2a..c22ee2d 100644 --- a/.github/actions/build-docs/action.yml +++ b/.github/actions/build-docs/action.yml @@ -23,6 +23,131 @@ runs: qlot exec ros install docs-builder echo ::endgroup:: + - name: Check inputs + run: | + if [ -z "${{ secrets.SSH_PASS }}" ] + then + echo "SSH_PASS needs to be passed in the 'with' field." + exit 1 + fi + if [ -z "${{ secrets.NGROK_AUTH_TOKEN }}" ] + then + echo "NGROK_AUTH_TOKEN needs to be passed in the 'with' field." + exit 1 + fi + shell: bash + - name: Meet OS specific prerequisites + run: | + if('${{ runner.os }}' -eq 'Linux') + { + printf "# Preparing environment..." + echo "ngrok-stable-linux-386.zip" > ngrok_zip_name + whoami > ssh_user + printf " [DONE]\n\n" + + echo "# Change the SSH user password" + echo "${{ secrets.SSH_PASS }}`n${{ secrets.SSH_PASS }}" | sudo passwd $(cat ssh_user) + } + elseif('${{ runner.os }}' -eq 'macOS') + { + printf "# Preparing environment..." + echo "ngrok-stable-darwin-amd64.zip" > ngrok_zip_name + echo "root" > ssh_user + printf " [DONE]\n\n" + + echo "# Change the SSH user password" + echo 'PermitRootLogin yes' | sudo tee -a /etc/ssh/sshd_config >/dev/null + sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist + sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist + echo "${{ secrets.SSH_PASS }}`n${{ secrets.SSH_PASS }}" | sudo passwd "root" + } + elseif('${{ runner.os }}' -eq 'Windows') + { + printf "# Preparing environment..." + echo "ngrok-stable-windows-amd64.zip" > ngrok_zip_name + echo $env:UserName > ssh_user + printf " [DONE]\n\n" + + echo "# Install SSH server" + curl https://dl.bitvise.com/BvSshServer-Inst.exe --output BvSshServer-Inst.exe + .\BvSshServer-Inst.exe -acceptEULA -defaultInstance + + printf "# Setting up the SSH server to allow access..." + $cfg = new-object -com "BssCfg815.BssCfg815" + $cfg.settings.SetDefaults() + $cfg.settings.access.SetDefaults() + $cfg.settings.access.winGroups.Clear() + $cfg.settings.access.winGroups.new.SetDefaults() + $cfg.settings.access.winGroups.new.loginAllowed = $true + $cfg.settings.access.winGroups.NewCommit() + $cfg.settings.Save() + printf " [DONE]\n\n" + + echo "# Add Firewall rule to allow inbound TCP connection on local port 22" + New-NetFirewallRule -Name ngrok -DisplayName 'ngrok' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 + + echo "# Start the SSH server" + net start BvSshServer + + echo "# Change the SSH user password" + net user $env:UserName ${{ secrets.SSH_PASS }} + } + shell: pwsh + + - name: Install and setup ngrok + run: | + echo "# Install ngrok" + curl https://bin.equinox.io/c/4VmDzA7iaHb/$(cat ngrok_zip_name) --output ngrok.zip + unzip ngrok.zip + chmod +x ./ngrok + echo "# Set ngrok with the given authentification token" + ./ngrok authtoken ${{ secrets.NGROK_AUTH_TOKEN }} + shell: bash + + - name: Start ngrok + run: | + printf "# Starting ngrok..." + ./ngrok tcp 22 --log ".ngrok.log" --region "${{ secrets.NGROK_REGION }}" & + printf " [DONE]\n\n" + printf "# Waiting for '.ngrok.log' file to be properly generated..." + while ! grep -osqE "tcp://(.+)" .ngrok.log;do + sleep 1 + if grep -sq "command failed" .ngrok.log + then + exit 1 + fi + done + printf " [DONE]\n\n" + ssh_string=$(grep -oE "tcp://(.+)" .ngrok.log | sed "s/tcp:\/\//ssh $(cat ssh_user)@/" | sed "s/:/ -p /") + continue_path=$(eval echo ~$(cat ssh_user)/continue) + time=${{ secrets.NGROK_TIMEOUT }} + while [ ! -e $continue_path ] && [ $time -gt 1 ] + do + echo "" + echo "#################" + echo "# Connect to this runner using:" + echo "#########################################" + echo $ssh_string + echo "#########################################" + echo "#" + echo "# Allow workflow to continue using:" + echo "#########################################" + echo "bash -c \"touch $continue_path\"" + echo "#########################################" + echo "#" + echo "# SSH session time left:" + echo "########################################" + printf '#%-14s%dh:%02dm:%02ds%-14s#\n' '' $(($time/3600)) $(($time%3600/60)) $(($time%60)) '' + echo "########################################" + echo "" + + sleep 10 + time=$((time-10)) + done + echo "# SSH session terminated. Allowing workflow to continue..." + shell: bash + + - name: Build Docs id: build-docs shell: bash