CI: wait for dpkg lock in debian/ubuntu setup step #34
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
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 | |
- ubuntu-24-04-x64 | |
- fedora-39-x64 | |
- centos-7-x64 | |
- centos-stream-8-x64 | |
# - centos-stream-9-x64 # yum oomkill | |
steps: | |
- uses: actions/checkout@v4 | |
- 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/[email protected] | |
with: | |
host: ${{ steps.server_ip.outputs.value }} | |
username: root | |
key: ${{ secrets.SSH_KEY }} | |
script: set -x && apt-get update && apt-get -o DPkg::Lock::Timeout=120 install -y git | |
- name: Setup remote server (Fedora) | |
if: steps.server_os.outputs.value == 'fedora' | |
uses: appleboy/[email protected] | |
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/[email protected] | |
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/[email protected] | |
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/[email protected] | |
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() |