Connection Tests - Manual (README Example) #41
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Connection Tests - Manual (README Example) | |
on: | |
workflow_dispatch: | |
jobs: | |
connection-tests: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-22.04 | |
- macos-13 | |
- windows-2022 | |
runs-on: ${{ matrix.os }} | |
name: "run:${{ matrix.os }}" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 # Checkout the code to run tests | |
- name: Setup Pritunl Profile | |
id: pritunl-connection | |
uses: ./ | |
# Use `nathanielvarona/pritunl-client-github-action@v1` for your GitHub Action workflow. | |
with: | |
profile-file: ${{ secrets.PRITUNL_PROFILE_FILE }} | |
start-connection: false | |
# Example of Our CI/CD Core Logic | |
# This step demonstrates our core CI/CD logic, which includes: | |
# 1. Installing IP Calculator | |
# 2. Starting a VPN connection manually | |
# 3. Showing the VPN connection status | |
# 4. Pinging the VPN gateway | |
# 5. Stopping the VPN connection manually | |
# This is a simple example of how to test VPN gateway connectivity | |
- name: Starting a VPN Connection Manually | |
shell: bash | |
run: | | |
# Start VPN connection manually | |
# Start the VPN connection using the client ID and password | |
pritunl-client start ${{ steps.pritunl-connection.outputs.client-id }} \ | |
--password ${{ secrets.PRITUNL_PROFILE_PIN || '' }} | |
# Sleep for a while to simulate establish connection test | |
# Wait for 10 seconds to allow the connection to establish | |
sleep 10 | |
- name: Show VPN Connection Status Manually | |
shell: bash | |
run: | | |
# Show VPN connection status | |
# List the VPN connections and show the profile name and client address | |
pritunl-client list -j | jq 'sort_by(.name) | .[0] | { "Profile Name": .name, "Client Address": .client_address }' | |
- name: Install IP Calculator | |
shell: bash | |
run: | | |
# Install IP Calculator | |
# Install IP Calculator based on the runner OS | |
if [ "$RUNNER_OS" == "Linux" ]; then | |
sudo apt-get install -qq -o=Dpkg::Use-Pty=0 -y ipcalc | |
elif [ "$RUNNER_OS" == "macOS" ]; then | |
brew install -q ipcalc | |
elif [ "$RUNNER_OS" == "Windows" ]; then | |
# Retry up to 3 times in case of failure | |
for attempt in $(seq 3); do | |
if curl -sSL "https://raw.githubusercontent.com/kjokjo/ipcalc/0.51/ipcalc" \ | |
-o $HOME/bin/ipcalc && chmod +x $HOME/bin/ipcalc; then | |
break | |
else | |
echo "Attempt $attempt failed. Retrying..." && sleep 1 | |
# If all retries fail, exit with an error | |
if [ $attempt -eq 3 ]; then | |
echo "Failed to install ipcalc after 3 attempts." && exit 1 | |
fi | |
fi | |
done | |
fi | |
# Validate the IP Calculator Installation | |
echo "ipcalc version $(ipcalc --version)" | |
- name: Ping VPN Gateway | |
shell: bash | |
run: | | |
# Set the ping count | |
ping_count_number=5 | |
# Get the Profile ID Details | |
profile_ip=$(pritunl-client list -j | jq -r 'sort_by(.name) | .[0].client_address') | |
vpn_gateway="$(ipcalc $profile_ip | awk 'NR==6{print $2}')" | |
# Construct the Ping Flags | |
ping_flags="$([[ "$RUNNER_OS" == "Windows" ]] && echo "-n $ping_count_number" || echo "-c $ping_count_number")" | |
# Ping the VPN gateway | |
ping $vpn_gateway $ping_flags | |
- name: Stop VPN Connection Manually | |
if: ${{ always() }} | |
shell: bash | |
run: | | |
# Stop VPN connection manually | |
# Stop the VPN connection using the client ID | |
pritunl-client stop ${{ steps.pritunl-connection.outputs.client-id }} |