Skip to content

Commit

Permalink
feat: Add support for multiple OS, and add version input
Browse files Browse the repository at this point in the history
  • Loading branch information
AnimMouse committed Aug 30, 2023
1 parent ce3f0c1 commit acdf556
Show file tree
Hide file tree
Showing 10 changed files with 107 additions and 26 deletions.
64 changes: 53 additions & 11 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ branding:
color: orange
inputs:
cloudflare_tunnel_credential:
description: Cloudflare Tunnel Credential encoded in base64 (deadbeef-1234-4321-abcd-123456789abc.json)
description: Cloudflare Tunnel Credential encoded in Base64 (deadbeef-1234-4321-abcd-123456789abc.json)
required: true
cloudflare_tunnel_configuration:
description: Cloudflare Tunnel Configuration encoded in base64 (config.yaml)
description: Cloudflare Tunnel Configuration encoded in Base64 (config.yaml)
required: true
cloudflare_tunnel_id:
description: Cloudflare Tunnel ID (deadbeef-1234-4321-abcd-123456789abc)
Expand All @@ -17,29 +17,71 @@ inputs:
description: Autostart Cloudflare Tunnel in the background
required: false
default: true
token:
description: GitHub token to avoid API rate limiting
default: ${{ github.token }}

runs:
using: composite
steps:
- name: Download cloudflared for Linux
- name: Get cloudflared version for Unix-like
id: version-unix-like
if: runner.os == 'Linux' || runner.os == 'macOS'
shell: bash
run: $GITHUB_ACTION_PATH/scripts/version/Unix-like.sh
env:
version: ${{ inputs.version }}
GITHUB_TOKEN: ${{ inputs.token }}

- name: Get cloudflared version for Windows
id: version-windows
if: runner.os == 'Windows'
shell: pwsh
run: '& $env:GITHUB_ACTION_PATH\scripts\version\Windows.ps1'
env:
version: ${{ inputs.version }}
GITHUB_TOKEN: ${{ inputs.token }}

- name: Download cloudflared for Unix-like
if: runner.os == 'Linux' || runner.os == 'macOS'
shell: bash
working-directory: ${{ runner.temp }}
run: $GITHUB_ACTION_PATH/scripts/download/Linux.sh

run: $GITHUB_ACTION_PATH/scripts/download/Unix-like.sh
env:
version: ${{ steps.version-unix-like.outputs.version }}

- name: Download cloudflared for Windows
if: runner.os == 'Windows'
shell: pwsh
working-directory: ${{ runner.temp }}
run: '& $env:GITHUB_ACTION_PATH\scripts\download\Windows.ps1'
env:
version: ${{ steps.version-windows.outputs.version }}

- name: Install cloudflared on tool cache
uses: AnimMouse/tool-cache@v1
with:
folder_name: cloudflared

- name: Sign in to Cloudflare Tunnel client
- name: Sign in to Cloudflare Tunnel client on Unix-like
if: runner.os == 'Linux' || runner.os == 'macOS'
shell: bash
run: $GITHUB_ACTION_PATH/scripts/sign-in/Unix-like.sh
env:
cloudflare_tunnel_credential: ${{ inputs.cloudflare_tunnel_credential }}
cloudflare_tunnel_configuration: ${{ inputs.cloudflare_tunnel_configuration }}
cloudflare_tunnel_id: ${{ inputs.cloudflare_tunnel_id }}
run: $GITHUB_ACTION_PATH/scripts/sign-in/Unix-like.sh

- name: Start Cloudflare Tunnel in the background
if: inputs.autostart != 'false'

- name: Sign in to Cloudflare Tunnel client on Windows
if: runner.os == 'Windows'
shell: pwsh
run: '& $env:GITHUB_ACTION_PATH\scripts\sign-in\Windows.ps1'
env:
cloudflare_tunnel_credential: ${{ inputs.cloudflare_tunnel_credential }}
cloudflare_tunnel_configuration: ${{ inputs.cloudflare_tunnel_configuration }}
cloudflare_tunnel_id: ${{ inputs.cloudflare_tunnel_id }}

- name: Start Cloudflare Tunnel in the background on Unix-like
if: (runner.os == 'Linux' || runner.os == 'macOS') && inputs.autostart != 'false'
shell: bash
run: $GITHUB_ACTION_PATH/scripts/autostart/Linux.sh
run: $GITHUB_ACTION_PATH/scripts/autostart/Unix-like.sh
5 changes: 0 additions & 5 deletions scripts/autostart/Linux.sh

This file was deleted.

5 changes: 5 additions & 0 deletions scripts/autostart/Unix-like.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/sh
set -eu
echo ::group::Autostarting cloudflared for $RUNNER_OS
nohup cloudflared --pidfile $RUNNER_TEMP/cloudflared.pid --logfile $RUNNER_TEMP/cloudflared.log tunnel run &
echo ::endgroup::
7 changes: 0 additions & 7 deletions scripts/download/Linux.sh

This file was deleted.

12 changes: 12 additions & 0 deletions scripts/download/Unix-like.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#!/bin/sh
set -eu
echo ::group::Downloading cloudflared $version for $RUNNER_OS
mkdir -p cloudflared
if [ $RUNNER_OS = macOS ]
then
wget -qO- $GITHUB_SERVER_URL/cloudflare/cloudflared/releases/download/$version/cloudflared-darwin-amd64.tgz | tar -xz -C cloudflared cloudflared
else
wget -q -O cloudflared/cloudflared $GITHUB_SERVER_URL/cloudflare/cloudflared/releases/download/$version/cloudflared-linux-amd64
chmod +x cloudflared
fi
echo ::endgroup::
6 changes: 6 additions & 0 deletions scripts/download/Windows.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
$ErrorActionPreference = 'Stop'
$ProgressPreference = 'SilentlyContinue'
Set-StrictMode -Version Latest
Write-Host ::group::Downloading cloudflared $env:version for Windows
Invoke-WebRequest $env:GITHUB_SERVER_URL/cloudflare/cloudflared/releases/download/$env:version/cloudflared-windows-amd64.exe -OutFile cloudflared\cloudflared.exe
Write-Host ::endgroup::
7 changes: 4 additions & 3 deletions scripts/sign-in/Unix-like.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/bin/sh
set -eu
echo ::group::Signing in to Cloudflare Tunnel client
mkdir ~/.cloudflared/
echo $cloudflare_tunnel_credential | base64 -d > ~/.cloudflared/${cloudflare_tunnel_id}.json
echo $cloudflare_tunnel_configuration | base64 -d > ~/.cloudflared/config.yaml
mkdir ~/.cloudflared
echo "$cloudflare_tunnel_credential" | base64 -d > ~/.cloudflared/$cloudflare_tunnel_id.json
echo "$cloudflare_tunnel_configuration" | base64 -d > ~/.cloudflared/config.yaml
echo ::endgroup::
9 changes: 9 additions & 0 deletions scripts/sign-in/Windows.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
$ErrorActionPreference = 'Stop'
Set-StrictMode -Version Latest
Write-Host ::group::Signing in to Cloudflare Tunnel client
New-Item $env:USERPROFILE\.cloudflared -ItemType Directory -Force
$cloudflare_tunnel_credential = [Convert]::FromBase64String($env:cloudflare_tunnel_credential)
$cloudflare_tunnel_configuration = [Convert]::FromBase64String($env:cloudflare_tunnel_configuration)
[IO.File]::WriteAllBytes("$env:USERPROFILE\.cloudflared\$env:cloudflare_tunnel_id.json", $cloudflare_tunnel_credential)
[IO.File]::WriteAllBytes("$env:USERPROFILE\.cloudflared\config.yaml", $cloudflare_tunnel_configuration)
Write-Host ::endgroup::
9 changes: 9 additions & 0 deletions scripts/version/Unix-like.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/sh
set -eu
if [ "$version" = latest ]
then
latest_version=$(gh api repos/cloudflare/cloudflared/releases/latest -q .tag_name)
echo "version=$latest_version" >> $GITHUB_OUTPUT
else
echo "version=$version" >> $GITHUB_OUTPUT
fi
9 changes: 9 additions & 0 deletions scripts/version/Windows.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
$ErrorActionPreference = 'Stop'
Set-StrictMode -Version Latest
if ($env:version -eq 'latest') {
$latest_version = (gh api repos/cloudflare/cloudflared/releases/latest -q .tag_name)
Add-Content $env:GITHUB_OUTPUT version=$latest_version
}
else {
Add-Content $env:GITHUB_OUTPUT version=$env:version
}

0 comments on commit acdf556

Please sign in to comment.