diff --git a/.github/workflows/push.yml b/.github/workflows/lint.yml similarity index 100% rename from .github/workflows/push.yml rename to .github/workflows/lint.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..1f47ec7 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,100 @@ +on: + push: + branches: + - master + pull_request: + branches: + - master + +name: Test +jobs: + install: + runs-on: ubuntu-latest + if: github.repository == 'angristan/openvpn-install' + strategy: + matrix: + os-image: + - debian-9-x64 + - debian-10-x64 + - ubuntu-18-04-x64 + - ubuntu-16-04-x64 + - ubuntu-20-04-x64 + - fedora-30-x64 + - fedora-31-x64 + - centos-7-x64 + - centos-8-x64 + steps: + - uses: actions/checkout@master + + - name: Setup doctl + uses: digitalocean/action-doctl@v2 + with: + token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} + + - name: Create server + run: doctl compute droplet create openvpn-action-$GITHUB_RUN_ID-$GITHUB_RUN_NUMBER-${{ matrix.os-image }} --size s-1vcpu-1gb --image ${{ matrix.os-image }} --region lon1 --enable-ipv6 --ssh-keys be:66:76:61:a8:71:93:aa:e3:19:ba:d8:0d:d2:2d:d4 --wait + + - name: Get server ID + run: echo ::set-output name=value::$(doctl compute droplet list -o json | jq -r '.[] | select(.name == "'openvpn-action-$GITHUB_RUN_ID-$GITHUB_RUN_NUMBER-${{ matrix.os-image }}'").id') + id: server_id + + - name: Move server to dedicated project + run: doctl projects resources assign ${{ secrets.DIGITALOCEAN_PROJECT_ID }} --resource=do:droplet:${{ steps.server_id.outputs.value }} + + - name: Wait for server to boot + run: sleep 90 + + - name: Get server IP + run: echo ::set-output name=value::$(doctl compute droplet list -o json | jq -r '.[] | select(.name == "'openvpn-action-$GITHUB_RUN_ID-$GITHUB_RUN_NUMBER-${{ matrix.os-image }}'").networks.v4 | .[0].ip_address') + id: server_ip + + - name: Get server OS + run: echo ::set-output name=value::$(echo ${{ matrix.os-image }} | cut -d '-' -f1) + id: server_os + + - name: Setup remote server (Debian/Ubuntu) + if: steps.server_os.outputs.value == 'debian' || steps.server_os.outputs.value == 'ubuntu' + uses: appleboy/ssh-action@master + with: + host: ${{ steps.server_ip.outputs.value }} + username: root + key: ${{ secrets.SSH_KEY }} + script: set -x && apt-get update && apt-get install -y git + + - name: Setup remote server (Fedora) + if: steps.server_os.outputs.value == 'fedora' + uses: appleboy/ssh-action@master + with: + host: ${{ steps.server_ip.outputs.value }} + username: root + key: ${{ secrets.SSH_KEY }} + script: set -x && dnf install -y git + + - name: Setup remote server (CentOS) + if: steps.server_os.outputs.value == 'centos' + uses: appleboy/ssh-action@master + with: + host: ${{ steps.server_ip.outputs.value }} + username: root + key: ${{ secrets.SSH_KEY }} + script: set -x && yum install -y git + + - name: Download repo and checkout current commit + uses: appleboy/ssh-action@master + with: + host: ${{ steps.server_ip.outputs.value }} + username: root + key: ${{ secrets.SSH_KEY }} + script: set -x && git clone https://github.com/angristan/openvpn-install.git && cd openvpn-install && git checkout ${{ github.event.pull_request.head.sha }} + + - name: Run openvpn-install.sh in headless mode + uses: appleboy/ssh-action@master + with: + host: ${{ steps.server_ip.outputs.value }} + username: root + key: ${{ secrets.SSH_KEY }} + script: 'set -x && AUTO_INSTALL=y bash -x ~/openvpn-install/openvpn-install.sh && ps aux | grep openvpn | grep -v grep > /dev/null 2>&1 && echo "Success: OpenVPN is running" && exit 0 || echo "Failure: OpenVPN is not running" && exit 1' + + - name: Delete server + run: doctl compute droplet delete -f openvpn-action-$GITHUB_RUN_ID-$GITHUB_RUN_NUMBER-${{ matrix.os-image }} + if: always() diff --git a/README.md b/README.md index f00b73d..4f93e55 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # openvpn-install +![Test](https://github.com/angristan/openvpn-install/workflows/Test/badge.svg) ![Lint](https://github.com/angristan/openvpn-install/workflows/Lint/badge.svg) + OpenVPN installer for Debian, Ubuntu, Fedora, CentOS and Arch Linux. This script will let you setup your own secure VPN server in just a few seconds.