From 2c4abe5f34cb602d7d453cfda8dc15cecb243cdd Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Wed, 13 Jul 2022 03:14:34 +0200 Subject: [PATCH] ci: test workflow (#284) Co-authored-by: CrazyMax --- .github/workflows/test.yml | 81 ++++++++++++++++++ test/.env | 7 ++ test/docker-compose.yml | 168 +++++++++++++++++++++++++++++++++++++ test/librenms.env | 14 ++++ 4 files changed, 270 insertions(+) create mode 100644 .github/workflows/test.yml create mode 100644 test/.env create mode 100644 test/docker-compose.yml create mode 100644 test/librenms.env diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..f46e9ef --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,81 @@ +name: test + +concurrency: + group: test-${{ github.ref }} + cancel-in-progress: true + +on: + push: + branches: + - 'master' + paths-ignore: + - '**.md' + pull_request: + paths-ignore: + - '**.md' + +env: + BUILD_TAG: librenms-test + CONTAINER_NAME: librenms + RUNNING_TIMEOUT: 120 + RUNNING_LOG_CHECK: ready to handle connections + +jobs: + test: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v2 + - + name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - + name: Build + uses: docker/bake-action@v2 + with: + targets: image-local + env: + DEFAULT_TAG: ${{ env.BUILD_TAG }} + - + name: Start + run: | + docker compose up -d + working-directory: test + env: + LIBRENMS_IMAGE: ${{ env.BUILD_TAG }} + LIBRENMS_CONTAINER: ${{ env.CONTAINER_NAME }} + - + name: Test run + run: | + TIMEOUT=$((SECONDS + ${{ env.RUNNING_TIMEOUT }})) + while read LOGLINE; do + echo ${LOGLINE} + if [[ ${LOGLINE} == *"${{ env.RUNNING_LOG_CHECK }}"* ]]; then + echo "🎉 Container up!" + break + fi + if [[ $SECONDS -gt ${TIMEOUT} ]]; then + >&2 echo "❌ Failed to run ${{ env.CONTAINER_NAME }} container" + exit 1 + fi + done < <(docker logs -f ${{ env.CONTAINER_NAME }} 2>&1) + + CONTAINER_STATUS=$(docker container inspect --format "{{.State.Status}}" ${{ env.CONTAINER_NAME }}) + if [[ ${CONTAINER_STATUS} != "running" ]]; then + >&2 echo "❌ Container ${{ env.CONTAINER_NAME }} returned status '$CONTAINER_STATUS'" + exit 1 + fi + - + name: Logs + if: always() + run: | + docker compose logs + docker compose down --volumes > /dev/null 2>&1 || true + working-directory: test + env: + LIBRENMS_IMAGE: ${{ env.BUILD_TAG }} + LIBRENMS_CONTAINER: ${{ env.CONTAINER_NAME }} diff --git a/test/.env b/test/.env new file mode 100644 index 0000000..d6c0aed --- /dev/null +++ b/test/.env @@ -0,0 +1,7 @@ +TZ=Europe/Paris +PUID=1000 +PGID=1000 + +MYSQL_DATABASE=librenms +MYSQL_USER=librenms +MYSQL_PASSWORD=asupersecretpassword diff --git a/test/docker-compose.yml b/test/docker-compose.yml new file mode 100644 index 0000000..46a6abb --- /dev/null +++ b/test/docker-compose.yml @@ -0,0 +1,168 @@ +version: "3.5" + +services: + db: + image: mariadb:10.5 + container_name: librenms_db + command: + - "mysqld" + - "--innodb-file-per-table=1" + - "--lower-case-table-names=0" + - "--character-set-server=utf8mb4" + - "--collation-server=utf8mb4_unicode_ci" + volumes: + - "librenms-db:/var/lib/mysql" + environment: + - "TZ=${TZ}" + - "MYSQL_ALLOW_EMPTY_PASSWORD=yes" + - "MYSQL_DATABASE=${MYSQL_DATABASE}" + - "MYSQL_USER=${MYSQL_USER}" + - "MYSQL_PASSWORD=${MYSQL_PASSWORD}" + restart: always + + memcached: + image: memcached:alpine + container_name: librenms_memcached + environment: + - "TZ=${TZ}" + restart: always + + redis: + image: redis:5.0-alpine + container_name: librenms_redis + environment: + - "TZ=${TZ}" + restart: always + + librenms: + image: ${LIBRENMS_IMAGE:-librenms/librenms:latest} + container_name: ${LIBRENMS_CONTAINER:-librenms} + hostname: librenms + cap_add: + - NET_ADMIN + - NET_RAW + ports: + - target: 8000 + published: 8000 + protocol: tcp + depends_on: + - db + - memcached + volumes: + - "librenms-data:/data" + env_file: + - "./librenms.env" + environment: + - "TZ=${TZ}" + - "PUID=${PUID}" + - "PGID=${PGID}" + - "DB_HOST=db" + - "DB_NAME=${MYSQL_DATABASE}" + - "DB_USER=${MYSQL_USER}" + - "DB_PASSWORD=${MYSQL_PASSWORD}" + - "DB_TIMEOUT=60" + - "REDIS_HOST=redis" + - "REDIS_PORT=6379" + - "REDIS_DB=0" + restart: always + + dispatcher: + image: ${LIBRENMS_IMAGE:-librenms/librenms:latest} + container_name: librenms_dispatcher + hostname: librenms-dispatcher + cap_add: + - NET_ADMIN + - NET_RAW + depends_on: + - librenms + - redis + volumes: + - "librenms-data:/data" + env_file: + - "./librenms.env" + environment: + - "TZ=${TZ}" + - "PUID=${PUID}" + - "PGID=${PGID}" + - "DB_HOST=db" + - "DB_NAME=${MYSQL_DATABASE}" + - "DB_USER=${MYSQL_USER}" + - "DB_PASSWORD=${MYSQL_PASSWORD}" + - "DB_TIMEOUT=60" + - "DISPATCHER_NODE_ID=dispatcher1" + - "REDIS_HOST=redis" + - "REDIS_PORT=6379" + - "REDIS_DB=0" + - "SIDECAR_DISPATCHER=1" + restart: always + + syslogng: + image: ${LIBRENMS_IMAGE:-librenms/librenms:latest} + container_name: librenms_syslogng + hostname: librenms-syslogng + cap_add: + - NET_ADMIN + - NET_RAW + depends_on: + - librenms + ports: + - target: 514 + published: 514 + protocol: tcp + - target: 514 + published: 514 + protocol: udp + volumes: + - "librenms-data:/data" + env_file: + - "./librenms.env" + environment: + - "TZ=${TZ}" + - "PUID=${PUID}" + - "PGID=${PGID}" + - "DB_HOST=db" + - "DB_NAME=${MYSQL_DATABASE}" + - "DB_USER=${MYSQL_USER}" + - "DB_PASSWORD=${MYSQL_PASSWORD}" + - "DB_TIMEOUT=60" + - "REDIS_HOST=redis" + - "REDIS_PORT=6379" + - "REDIS_DB=0" + - "SIDECAR_SYSLOGNG=1" + restart: always + + snmptrapd: + image: ${LIBRENMS_IMAGE:-librenms/librenms:latest} + container_name: librenms_snmptrapd + hostname: librenms-snmptrapd + cap_add: + - NET_ADMIN + - NET_RAW + depends_on: + - librenms + ports: + - target: 162 + published: 162 + protocol: tcp + - target: 162 + published: 162 + protocol: udp + volumes: + - "librenms-data:/data" + env_file: + - "./librenms.env" + environment: + - "TZ=${TZ}" + - "PUID=${PUID}" + - "PGID=${PGID}" + - "DB_HOST=db" + - "DB_NAME=${MYSQL_DATABASE}" + - "DB_USER=${MYSQL_USER}" + - "DB_PASSWORD=${MYSQL_PASSWORD}" + - "DB_TIMEOUT=60" + - "SIDECAR_SNMPTRAPD=1" + restart: always + +volumes: + librenms-db: + librenms-data: diff --git a/test/librenms.env b/test/librenms.env new file mode 100644 index 0000000..d63137c --- /dev/null +++ b/test/librenms.env @@ -0,0 +1,14 @@ +MEMORY_LIMIT=256M +MAX_INPUT_VARS=1000 +UPLOAD_MAX_SIZE=16M +OPCACHE_MEM_SIZE=128 +REAL_IP_FROM=0.0.0.0/32 +REAL_IP_HEADER=X-Forwarded-For +LOG_IP_VAR=remote_addr + +LIBRENMS_SNMP_COMMUNITY=librenmsdocker +MEMCACHED_HOST=memcached +MEMCACHED_PORT=11211 + +LIBRENMS_WEATHERMAP=false +LIBRENMS_WEATHERMAP_SCHEDULE=*/5 * * * *