on: push: branches: - master - ci workflow_dispatch: name: Test jobs: install: runs-on: ubuntu-latest if: github.repository == 'angristan/openvpn-install' && github.actor == 'angristan' strategy: matrix: os-image: - debian-10-x64 - debian-11-x64 - debian-12-x64 - ubuntu-20-04-x64 - ubuntu-22-04-x64 - fedora-37-x64 - fedora-38-x64 - centos-7-x64 - centos-stream-8-x64 # - centos-stream-9-x64 # yum oomkill steps: - uses: actions/checkout@v3.2.0 - 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 | .[] | select(.type == "'public'").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@v0.1.6 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@v0.1.6 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@v0.1.6 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@v0.1.6 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.sha }} - name: Run openvpn-install.sh in headless mode uses: appleboy/ssh-action@v0.1.6 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()