diff --git a/.devilbox/www/config.php b/.devilbox/www/config.php
index 5bdf88d9..0e2fd1af 100644
--- a/.devilbox/www/config.php
+++ b/.devilbox/www/config.php
@@ -13,8 +13,8 @@ error_reporting(-1);
putenv('RES_OPTIONS=retrans:1 retry:1 timeout:1 attempts:1');
-$DEVILBOX_VERSION = 'v1.11.0';
-$DEVILBOX_DATE = '2022-03-22';
+$DEVILBOX_VERSION = 'v2.0.0';
+$DEVILBOX_DATE = '2022-03-28';
$DEVILBOX_API_PAGE = 'devilbox-api/status.json';
//
diff --git a/.github/workflows/ci-smoke-linux.yml b/.github/workflows/ci-smoke-linux.yml
deleted file mode 100644
index fb6411bd..00000000
--- a/.github/workflows/ci-smoke-linux.yml
+++ /dev/null
@@ -1,228 +0,0 @@
----
-
-# -------------------------------------------------------------------------------------------------
-# Job Name
-# -------------------------------------------------------------------------------------------------
-name: Linux
-
-
-# -------------------------------------------------------------------------------------------------
-# When to run
-# -------------------------------------------------------------------------------------------------
-on:
- # Runs on Pull Requests
- pull_request:
-
- # Runs on master Branch and Tags
- push:
- branches:
- - master
- tags:
- - '[0-9]+.[0-9]+*'
-
-
-# -------------------------------------------------------------------------------------------------
-# What to run
-# -------------------------------------------------------------------------------------------------
-jobs:
- smoke_linux:
-
- runs-on: ubuntu-latest
-
- strategy:
- fail-fast: false
- matrix:
- php:
- - "5.3"
- - "5.4"
- - "5.5"
- - "5.6"
- - "7.0"
- - "7.1"
- - "7.2"
- - "7.3"
- - "7.4"
- - "8.0"
- - "8.1"
- - "8.2"
- httpd:
- - "apache-2.2"
- - "apache-2.4"
- - "nginx-stable"
- - "nginx-mainline"
-
- name: "[PHP ${{ matrix.php }}] vs [${{ matrix.httpd }}]"
- steps:
-
- # ------------------------------------------------------------
- # Checkout repository
- # ------------------------------------------------------------
- - name: Checkout repository
- uses: actions/checkout@v1
-
- - name: Show environment
- shell: bash
- run: |
- env
-
- - name: Show network
- shell: bash
- run: |
- netstat -an || true
- ss -tlun || true
-
- - name: Show Docker version
- shell: bash
- run: |
- docker version
-
- # ------------------------------------------------------------
- # Setup
- # ------------------------------------------------------------
- - name: Configure
- shell: bash
- run: |
- cd .tests/
- # Set the two candidates to test against
- make configure KEY=PHP_SERVER VAL=${PHP}
- make configure KEY=HTTPD_SERVER VAL=${HTTPD}
- # 3306 is taken, so chose another one
- make configure KEY=HOST_PORT_MYSQL VAL=3307
- env:
- PHP: ${{ matrix.php }}
- HTTPD: ${{ matrix.httpd }}
-
- - name: Pull images
- shell: bash
- run: |
- cd .tests/
- make pull
-
- - name: Startup
- shell: bash
- run: |
- cd .tests/
- make start
-
- - name: Docker logs
- shell: bash
- run: |
- cd .tests/
- make logs
-
- # ------------------------------------------------------------
- # Run tests
- # ------------------------------------------------------------
- - name: Test Modules
- shell: bash
- run: |
- cd .tests/
- make test-smoke-modules
- if: success() || failure()
-
- - name: Test Config
- shell: bash
- run: |
- cd .tests/
- make test-smoke-config
- if: success() || failure()
-
- - name: Test Intranet
- shell: bash
- run: |
- cd .tests/
- make test-smoke-intranet
- if: success() || failure()
-
- - name: Test Vendors
- shell: bash
- run: |
- cd .tests/
- make test-smoke-vendors
- if: success() || failure()
-
- - name: Test Vhosts
- shell: bash
- run: |
- cd .tests/
- make test-smoke-vhosts
- if: success() || failure()
-
- - name: Test Reverse Proxy
- shell: bash
- run: |
- cd .tests/
- make test-smoke-rproxies
- if: success() || failure()
-
- - name: Test SSL
- shell: bash
- run: |
- cd .tests/
- make test-smoke-ssl
- if: success() || failure()
-
- - name: Test Bind
- shell: bash
- run: |
- cd .tests/
- make test-smoke-bind
- if: success() || failure()
-
- - name: Test Autostart
- shell: bash
- run: |
- cd .tests/
- make test-smoke-autostart
- if: success() || failure()
-
- - name: "Test Framework: CakePHP"
- shell: bash
- run: |
- cd .tests/
- make test-smoke-framework-cakephp
- if: success() || failure()
-
- - name: "Test Framework: Drupal"
- shell: bash
- run: |
- cd .tests/
- make test-smoke-framework-drupal
- if: success() || failure()
-
- - name: "Test Framework: Wordpress"
- shell: bash
- run: |
- cd .tests/
- make test-smoke-framework-wordpress
- if: success() || failure()
-
- - name: "Test Container"
- shell: bash
- run: |
- retry() {
- for n in $(seq 5); do
- echo "[${n}/5] ${*}";
- if eval "${*}"; then
- echo "[SUCC] ${n}/5";
- return 0;
- fi;
- sleep 5;
- echo "[FAIL] ${n}/5";
- done;
- return 1;
- }
- cd .tests/
- retry make test-smoke-container
- if: success() || failure()
-
- # ------------------------------------------------------------
- # Finish
- # ------------------------------------------------------------
-
- - name: "Finish: Docker logs"
- shell: bash
- run: |
- cd .tests/
- make logs
- if: success() || failure()
diff --git a/.github/workflows/ci-smoke-macos.yml.off b/.github/workflows/ci-smoke-macos.yml.off
deleted file mode 100644
index ce84531f..00000000
--- a/.github/workflows/ci-smoke-macos.yml.off
+++ /dev/null
@@ -1,262 +0,0 @@
----
-
-# -------------------------------------------------------------------------------------------------
-# Job Name
-# -------------------------------------------------------------------------------------------------
-name: MacOS
-
-
-# -------------------------------------------------------------------------------------------------
-# When to run
-# -------------------------------------------------------------------------------------------------
-on:
- # Runs on Pull Requests
- pull_request:
-
- # Runs on master Branch and Tags
- push:
- branches:
- - master
- tags:
- - '[0-9]+.[0-9]+*'
-
-
-# -------------------------------------------------------------------------------------------------
-# What to run
-# -------------------------------------------------------------------------------------------------
-jobs:
- smoke_macos:
-
- runs-on: macos-latest
-
- strategy:
- fail-fast: false
- matrix:
- php:
- - "7.2"
- httpd:
- - "nginx-stable"
-
- name: "[PHP ${{ matrix.php }}] vs [${{ matrix.httpd }}]"
- steps:
-
- # ------------------------------------------------------------
- # Checkout repository
- # ------------------------------------------------------------
- - name: Checkout repository
- uses: actions/checkout@v1
-
- - name: "[Pre] Install Requirements"
- shell: bash
- run: |
- brew install coreutils
- brew install bash
- brew install socat
-
- - name: "[Pre] Install Docker"
- shell: bash
- run: |
- brew install docker docker-machine-driver-xhyve
- sudo chown root:wheel $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
- sudo chmod u+s $(brew --prefix)/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
- while ! docker-machine create --driver xhyve default; do
- docker-machine rm -f default
- sleep 1;
- done
- # Export variable (this target)
- eval "$(docker-machine env default)"
- DOCKER_TLS_VERIFY="$( docker-machine env default | grep DOCKER_TLS_VERIFY | sed -e 's/.*="//g' -e 's/"$//g' )"
- DOCKER_HOST="$( docker-machine env default | grep DOCKER_HOST | sed -e 's/.*="//g' -e 's/"$//g' )"
- DOCKER_CERT_PATH="$( docker-machine env default | grep DOCKER_CERT_PATH | sed -e 's/.*="//g' -e 's/"$//g' )"
- DOCKER_MACHINE_NAME="$( docker-machine env default | grep DOCKER_MACHINE_NAME | sed -e 's/.*="//g' -e 's/"$//g' )"
- # Export variable (this other targets)
- # https://help.github.com/en/actions/automating-your-workflow-with-github-actions/development-tools-for-github-actions#set-an-environment-variable-set-env
- echo ::set-env name=DOCKER_TLS_VERIFY::${DOCKER_TLS_VERIFY}
- echo ::set-env name=DOCKER_HOST::${DOCKER_HOST}
- echo ::set-env name=DOCKER_CERT_PATH::${DOCKER_CERT_PATH}
- echo ::set-env name=DOCKER_MACHINE_NAME::${DOCKER_MACHINE_NAME}
- # Show info
- docker-machine ls
- docker-machine env default
- docker version
-
- - name: "[Pre] Install Docker Compose"
- shell: bash
- run: |
- sudo curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
- sudo chmod +x /usr/local/bin/docker-compose
- docker-compose version
-
- - name: "[Pre] Setup Docker machine"
- shell: bash
- run: |
- # Setup DNS records
- echo "127.0.0.1 localhost" | sudo tee -a /etc/hosts
-
- # Portforwarding from DOCKER_HOST to local
- HOST="$( echo "${DOCKER_HOST}" | sed -e 's|^tcp://||g' -e 's|:.*||g' )"
- echo "${HOST}"
- sudo socat -s -d -d tcp-listen:80,reuseaddr,fork tcp:${HOST}:80 &
- sleep 2
- sudo socat -s -d -d tcp-listen:443,reuseaddr,fork tcp:${HOST}:443 &
- sleep 2
- if ! netstat -an | grep -i LISTEN | grep -E '(:80)|(\.80)\s'; then
- netstat -an | grep -i LISTEN;
- false;
- fi
- if ! netstat -an | grep -i LISTEN | grep -E '(:443)|(\.443)\s'; then
- netstat -an | grep -i LISTEN;
- false;
- fi
- host localhost
- curl -sS -I 'http://localhost:80' || true
- curl -sS -I 'https://localhost:443' || true
-
- - name: "[Info] Show environment"
- shell: bash
- run: |
- env
- if: success() || failure()
-
- - name: "[Info] Show network"
- shell: bash
- run: |
- netstat -an || true
- ss -tlun || true
- if: success() || failure()
-
- # ------------------------------------------------------------
- # Setup
- # ------------------------------------------------------------
- - name: Configure
- shell: bash
- run: |
- cd .tests/
- # Set the two candidates to test against
- make configure KEY=PHP_SERVER VAL=${PHP}
- make configure KEY=HTTPD_SERVER VAL=${HTTPD}
- # 3306 is taken, so chose another one
- make configure KEY=HOST_PORT_MYSQL VAL=3307
- env:
- PHP: ${{ matrix.php }}
- HTTPD: ${{ matrix.httpd }}
- if: success() || failure()
-
- - name: Pull images
- shell: bash
- run: |
- cd .tests/
- make pull
- if: success() || failure()
-
- - name: Startup
- shell: bash
- run: |
- cd .tests/
- make start
- if: success() || failure()
-
- - name: Docker logs
- shell: bash
- run: |
- cd .tests/
- make logs
- if: success() || failure()
-
- # ------------------------------------------------------------
- # Run tests
- # ------------------------------------------------------------
- - name: Test Modules
- shell: bash
- run: |
- cd .tests/
- make test-smoke-modules
- if: success() || failure()
-
- - name: Test Config
- shell: bash
- run: |
- cd .tests/
- make test-smoke-config
- if: success() || failure()
-
- - name: Test Intranet
- shell: bash
- run: |
- cd .tests/
- make test-smoke-intranet
- if: success() || failure()
-
- - name: Test Vendors
- shell: bash
- run: |
- cd .tests/
- make test-smoke-vendors
- if: success() || failure()
-
- - name: Test Vhosts
- shell: bash
- run: |
- cd .tests/
- make test-smoke-vhosts
- if: success() || failure()
-
- - name: Test Reverse Proxy
- shell: bash
- run: |
- cd .tests/
- make test-smoke-rproxies
- if: success() || failure()
-
- - name: Test SSL
- shell: bash
- run: |
- cd .tests/
- make test-smoke-ssl
- if: success() || failure()
-
- - name: Test Bind
- shell: bash
- run: |
- cd .tests/
- make test-smoke-bind
- if: success() || failure()
-
- - name: Test Autostart
- shell: bash
- run: |
- cd .tests/
- make test-smoke-autostart
- if: success() || failure()
-
- - name: "Test Framework: CakePHP"
- shell: bash
- run: |
- cd .tests/
- make test-smoke-framework-cakephp
- if: success() || failure()
-
- - name: "Test Framework: Drupal"
- shell: bash
- run: |
- cd .tests/
- make test-smoke-framework-drupal
- if: success() || failure()
-
- - name: "Test Framework: Wordpress"
- shell: bash
- run: |
- cd .tests/
- make test-smoke-framework-wordpress
- if: success() || failure()
-
- # ------------------------------------------------------------
- # Finish
- # ------------------------------------------------------------
-
- - name: "[Post] Docker logs"
- shell: bash
- run: |
- cd .tests/
- make logs
- if: success() || failure()
diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml
index 6d686336..b8183a53 100644
--- a/.github/workflows/documentation.yml
+++ b/.github/workflows/documentation.yml
@@ -17,7 +17,6 @@ on:
push:
branches:
- master
- tags:
# -------------------------------------------------------------------------------------------------
@@ -25,9 +24,7 @@ on:
# -------------------------------------------------------------------------------------------------
jobs:
docs:
-
runs-on: ubuntu-latest
-
strategy:
fail-fast: false
matrix:
@@ -46,24 +43,9 @@ jobs:
uses: actions/checkout@v1
- name: Check documentation
- shell: bash
- run: |
- retry() {
- for n in $(seq ${RETRIES}); do
- echo "[${n}/${RETRIES}] ${*}";
- if eval "${*}"; then
- echo "[SUCC] ${n}/${RETRIES}";
- return 0;
- fi;
- sleep ${PAUSE};
- echo "[FAIL] ${n}/${RETRIES}";
- done;
- return 1;
- }
-
- cd docs
- retry make ${TARGET}
- env:
- TARGET: ${{ matrix.target }}
- RETRIES: 20
- PAUSE: 10
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 5
+ workdir: "${{ github.workspace }}/docs/"
+ command: |
+ make ${{ matrix.target }}
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 4296262e..c33c5b09 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -17,7 +17,6 @@ on:
push:
branches:
- master
- tags:
# -------------------------------------------------------------------------------------------------
diff --git a/.github/workflows/params-httpd.yml b/.github/workflows/params-httpd.yml
new file mode 100644
index 00000000..56c7c3d0
--- /dev/null
+++ b/.github/workflows/params-httpd.yml
@@ -0,0 +1,59 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: params
+
+
+# -------------------------------------------------------------------------------------------------
+# Custom Variables
+# -------------------------------------------------------------------------------------------------
+env:
+ # Note: Older PHP versions use an older version of phpPgMyAdmin, which does not work with later
+ # PgSQL server versions. That's why we need to tell those combinations to use an old PgSQL server
+ MATRIX: >-
+ [
+ {"HTTPD_SERVER": "apache-2.2", "HTTPD_FLAVOUR": "alpine"},
+ {"HTTPD_SERVER": "apache-2.2", "HTTPD_FLAVOUR": "debian"},
+
+ {"HTTPD_SERVER": "apache-2.4", "HTTPD_FLAVOUR": "alpine"},
+ {"HTTPD_SERVER": "apache-2.4", "HTTPD_FLAVOUR": "debian"},
+
+ {"HTTPD_SERVER": "nginx-stable", "HTTPD_FLAVOUR": "alpine"},
+ {"HTTPD_SERVER": "nginx-stable", "HTTPD_FLAVOUR": "debian"},
+
+ {"HTTPD_SERVER": "nginx-mainline", "HTTPD_FLAVOUR": "alpine"},
+ {"HTTPD_SERVER": "nginx-mainline", "HTTPD_FLAVOUR": "debian"}
+ ]
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ workflow_call:
+ outputs:
+ matrix:
+ description: "The determined version matrix"
+ value: ${{ jobs.params.outputs.matrix }}
+
+jobs:
+ params:
+ runs-on: ubuntu-latest
+
+ outputs:
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
+
+ steps:
+ - name: "[Set-Output] Matrix"
+ id: set-matrix
+ run: |
+ echo "::set-output name=matrix::$( echo '${{ env.MATRIX }}' | jq -M -c )"
+
+ - name: "[DEBUG] Show settings'"
+ run: |
+ echo 'Matrix'
+ echo '--------------------'
+ echo '${{ steps.set-matrix.outputs.matrix }}'
+ echo
diff --git a/.github/workflows/params-memcd.yml b/.github/workflows/params-memcd.yml
new file mode 100644
index 00000000..82ffdef1
--- /dev/null
+++ b/.github/workflows/params-memcd.yml
@@ -0,0 +1,54 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: params
+
+
+# -------------------------------------------------------------------------------------------------
+# Custom Variables
+# -------------------------------------------------------------------------------------------------
+env:
+ MATRIX: >-
+ [
+ {"MEMCD_SERVER": "Memcd 1.4"},
+ {"MEMCD_SERVER": "Memcd 1.4-alpine"},
+ {"MEMCD_SERVER": "Memcd 1.5"},
+ {"MEMCD_SERVER": "Memcd 1.5-alpine"},
+ {"MEMCD_SERVER": "Memcd 1.6"},
+ {"MEMCD_SERVER": "Memcd 1.6-alpine"},
+ {"MEMCD_SERVER": "Memcd latest"},
+ {"MEMCD_SERVER": "Memcd alpine"}
+ ]
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ workflow_call:
+ outputs:
+ matrix:
+ description: "The determined version matrix"
+ value: ${{ jobs.params.outputs.matrix }}
+
+jobs:
+ params:
+ runs-on: ubuntu-latest
+
+ outputs:
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
+
+ steps:
+ - name: "[Set-Output] Matrix"
+ id: set-matrix
+ run: |
+ echo "::set-output name=matrix::$( echo '${{ env.MATRIX }}' | jq -M -c )"
+
+ - name: "[DEBUG] Show settings'"
+ run: |
+ echo 'Matrix'
+ echo '--------------------'
+ echo '${{ steps.set-matrix.outputs.matrix }}'
+ echo
diff --git a/.github/workflows/params-mongo.yml b/.github/workflows/params-mongo.yml
new file mode 100644
index 00000000..27265612
--- /dev/null
+++ b/.github/workflows/params-mongo.yml
@@ -0,0 +1,56 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: params
+
+
+# -------------------------------------------------------------------------------------------------
+# Custom Variables
+# -------------------------------------------------------------------------------------------------
+env:
+ # CI for Mongo 2.8 and Mongo 3.0 removed due to local segfault and non-segfault, but error in CI
+ # https://github.com/docker-library/mongo/issues/251
+ #
+ # CI for Mongo 3.2 and 3.4 removed due to non-reproducible error in CI
+ MATRIX: >-
+ [
+ {"MONGO_SERVER": "Mongo 3.6"},
+ {"MONGO_SERVER": "Mongo 4.0"},
+ {"MONGO_SERVER": "Mongo 4.2"},
+ {"MONGO_SERVER": "Mongo 4.4"},
+ {"MONGO_SERVER": "Mongo 5.0"},
+ {"MONGO_SERVER": "Mongo latest"}
+ ]
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ workflow_call:
+ outputs:
+ matrix:
+ description: "The determined version matrix"
+ value: ${{ jobs.params.outputs.matrix }}
+
+jobs:
+ params:
+ runs-on: ubuntu-latest
+
+ outputs:
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
+
+ steps:
+ - name: "[Set-Output] Matrix"
+ id: set-matrix
+ run: |
+ echo "::set-output name=matrix::$( echo '${{ env.MATRIX }}' | jq -M -c )"
+
+ - name: "[DEBUG] Show settings'"
+ run: |
+ echo 'Matrix'
+ echo '--------------------'
+ echo '${{ steps.set-matrix.outputs.matrix }}'
+ echo
diff --git a/.github/workflows/params-mysql.yml b/.github/workflows/params-mysql.yml
new file mode 100644
index 00000000..c255618d
--- /dev/null
+++ b/.github/workflows/params-mysql.yml
@@ -0,0 +1,64 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: params
+
+
+# -------------------------------------------------------------------------------------------------
+# Custom Variables
+# -------------------------------------------------------------------------------------------------
+env:
+ MATRIX: >-
+ [
+ {"MYSQL_SERVER": "mysql-5.5"},
+ {"MYSQL_SERVER": "mysql-5.6"},
+ {"MYSQL_SERVER": "mysql-5.7"},
+ {"MYSQL_SERVER": "mysql-8.0"},
+ {"MYSQL_SERVER": "percona-5.5"},
+ {"MYSQL_SERVER": "percona-5.6"},
+ {"MYSQL_SERVER": "percona-5.7"},
+ {"MYSQL_SERVER": "percona-8.0"},
+ {"MYSQL_SERVER": "mariadb-5.5"},
+ {"MYSQL_SERVER": "mariadb-10.0"},
+ {"MYSQL_SERVER": "mariadb-10.1"},
+ {"MYSQL_SERVER": "mariadb-10.2"},
+ {"MYSQL_SERVER": "mariadb-10.3"},
+ {"MYSQL_SERVER": "mariadb-10.4"},
+ {"MYSQL_SERVER": "mariadb-10.5"},
+ {"MYSQL_SERVER": "mariadb-10.6"},
+ {"MYSQL_SERVER": "mariadb-10.7"},
+ {"MYSQL_SERVER": "mariadb-10.8"}
+ ]
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ workflow_call:
+ outputs:
+ matrix:
+ description: "The determined version matrix"
+ value: ${{ jobs.params.outputs.matrix }}
+
+jobs:
+ params:
+ runs-on: ubuntu-latest
+
+ outputs:
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
+
+ steps:
+ - name: "[Set-Output] Matrix"
+ id: set-matrix
+ run: |
+ echo "::set-output name=matrix::$( echo '${{ env.MATRIX }}' | jq -M -c )"
+
+ - name: "[DEBUG] Show settings'"
+ run: |
+ echo 'Matrix'
+ echo '--------------------'
+ echo '${{ steps.set-matrix.outputs.matrix }}'
+ echo
diff --git a/.github/workflows/params-pgsql.yml b/.github/workflows/params-pgsql.yml
new file mode 100644
index 00000000..1d9a8630
--- /dev/null
+++ b/.github/workflows/params-pgsql.yml
@@ -0,0 +1,70 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: params
+
+
+# -------------------------------------------------------------------------------------------------
+# Custom Variables
+# -------------------------------------------------------------------------------------------------
+env:
+ MATRIX: >-
+ [
+ {"PGSQL_SERVER": "PgSQL 9.0"},
+ {"PGSQL_SERVER": "PgSQL 9.1"},
+ {"PGSQL_SERVER": "PgSQL 9.2"},
+ {"PGSQL_SERVER": "PgSQL 9.2-alpine"},
+ {"PGSQL_SERVER": "PgSQL 9.3"},
+ {"PGSQL_SERVER": "PgSQL 9.3-alpine"},
+ {"PGSQL_SERVER": "PgSQL 9.4"},
+ {"PGSQL_SERVER": "PgSQL 9.4-alpine"},
+ {"PGSQL_SERVER": "PgSQL 9.5"},
+ {"PGSQL_SERVER": "PgSQL 9.5-alpine"},
+ {"PGSQL_SERVER": "PgSQL 9.6"},
+ {"PGSQL_SERVER": "PgSQL 9.6-alpine"},
+ {"PGSQL_SERVER": "PgSQL 10"},
+ {"PGSQL_SERVER": "PgSQL 10-alpine"},
+ {"PGSQL_SERVER": "PgSQL 11"},
+ {"PGSQL_SERVER": "PgSQL 11-alpine"},
+ {"PGSQL_SERVER": "PgSQL 12"},
+ {"PGSQL_SERVER": "PgSQL 12-alpine"},
+ {"PGSQL_SERVER": "PgSQL 13"},
+ {"PGSQL_SERVER": "PgSQL 13-alpine"},
+ {"PGSQL_SERVER": "PgSQL 14"},
+ {"PGSQL_SERVER": "PgSQL 14-alpine"},
+ {"PGSQL_SERVER": "PgSQL latest"},
+ {"PGSQL_SERVER": "PgSQL alpine"}
+ ]
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ workflow_call:
+ outputs:
+ matrix:
+ description: "The determined version matrix"
+ value: ${{ jobs.params.outputs.matrix }}
+
+jobs:
+ params:
+ runs-on: ubuntu-latest
+
+ outputs:
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
+
+ steps:
+ - name: "[Set-Output] Matrix"
+ id: set-matrix
+ run: |
+ echo "::set-output name=matrix::$( echo '${{ env.MATRIX }}' | jq -M -c )"
+
+ - name: "[DEBUG] Show settings'"
+ run: |
+ echo 'Matrix'
+ echo '--------------------'
+ echo '${{ steps.set-matrix.outputs.matrix }}'
+ echo
diff --git a/.github/workflows/params-php.yml b/.github/workflows/params-php.yml
new file mode 100644
index 00000000..76572e12
--- /dev/null
+++ b/.github/workflows/params-php.yml
@@ -0,0 +1,99 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: params
+
+
+# -------------------------------------------------------------------------------------------------
+# Custom Variables
+# -------------------------------------------------------------------------------------------------
+env:
+ # Note: Older PHP versions use an older version of phpPgMyAdmin, which does not work with later
+ # PgSQL server versions. That's why we need to tell those combinations to use an old PgSQL server
+ MATRIX: >-
+ [
+ {"PHP_SERVER": "PHP 5.3", "HTTPD_SERVER": "apache-2.2", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 5.4", "HTTPD_SERVER": "apache-2.2", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 5.5", "HTTPD_SERVER": "apache-2.2", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 5.6", "HTTPD_SERVER": "apache-2.2", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 7.0", "HTTPD_SERVER": "apache-2.2", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 7.1", "HTTPD_SERVER": "apache-2.2", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 7.2", "HTTPD_SERVER": "apache-2.2"},
+ {"PHP_SERVER": "PHP 7.3", "HTTPD_SERVER": "apache-2.2"},
+ {"PHP_SERVER": "PHP 7.4", "HTTPD_SERVER": "apache-2.2"},
+ {"PHP_SERVER": "PHP 8.0", "HTTPD_SERVER": "apache-2.2"},
+ {"PHP_SERVER": "PHP 8.1", "HTTPD_SERVER": "apache-2.2"},
+ {"PHP_SERVER": "PHP 8.2", "HTTPD_SERVER": "apache-2.2"},
+
+ {"PHP_SERVER": "PHP 5.3", "HTTPD_SERVER": "apache-2.4", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 5.4", "HTTPD_SERVER": "apache-2.4", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 5.5", "HTTPD_SERVER": "apache-2.4", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 5.6", "HTTPD_SERVER": "apache-2.4", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 7.0", "HTTPD_SERVER": "apache-2.4", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 7.1", "HTTPD_SERVER": "apache-2.4", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 7.2", "HTTPD_SERVER": "apache-2.4"},
+ {"PHP_SERVER": "PHP 7.3", "HTTPD_SERVER": "apache-2.4"},
+ {"PHP_SERVER": "PHP 7.4", "HTTPD_SERVER": "apache-2.4"},
+ {"PHP_SERVER": "PHP 8.0", "HTTPD_SERVER": "apache-2.4"},
+ {"PHP_SERVER": "PHP 8.1", "HTTPD_SERVER": "apache-2.4"},
+ {"PHP_SERVER": "PHP 8.2", "HTTPD_SERVER": "apache-2.4"},
+
+ {"PHP_SERVER": "PHP 5.3", "HTTPD_SERVER": "nginx-stable", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 5.4", "HTTPD_SERVER": "nginx-stable", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 5.5", "HTTPD_SERVER": "nginx-stable", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 5.6", "HTTPD_SERVER": "nginx-stable", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 7.0", "HTTPD_SERVER": "nginx-stable", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 7.1", "HTTPD_SERVER": "nginx-stable", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 7.2", "HTTPD_SERVER": "nginx-stable"},
+ {"PHP_SERVER": "PHP 7.3", "HTTPD_SERVER": "nginx-stable"},
+ {"PHP_SERVER": "PHP 7.4", "HTTPD_SERVER": "nginx-stable"},
+ {"PHP_SERVER": "PHP 8.0", "HTTPD_SERVER": "nginx-stable"},
+ {"PHP_SERVER": "PHP 8.1", "HTTPD_SERVER": "nginx-stable"},
+ {"PHP_SERVER": "PHP 8.2", "HTTPD_SERVER": "nginx-stable"},
+
+ {"PHP_SERVER": "PHP 5.3", "HTTPD_SERVER": "nginx-mainline", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 5.4", "HTTPD_SERVER": "nginx-mainline", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 5.5", "HTTPD_SERVER": "nginx-mainline", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 5.6", "HTTPD_SERVER": "nginx-mainline", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 7.0", "HTTPD_SERVER": "nginx-mainline", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 7.1", "HTTPD_SERVER": "nginx-mainline", "PGSQL_SERVER": "PgSQL 12"},
+ {"PHP_SERVER": "PHP 7.2", "HTTPD_SERVER": "nginx-mainline"},
+ {"PHP_SERVER": "PHP 7.3", "HTTPD_SERVER": "nginx-mainline"},
+ {"PHP_SERVER": "PHP 7.4", "HTTPD_SERVER": "nginx-mainline"},
+ {"PHP_SERVER": "PHP 8.0", "HTTPD_SERVER": "nginx-mainline"},
+ {"PHP_SERVER": "PHP 8.1", "HTTPD_SERVER": "nginx-mainline"},
+ {"PHP_SERVER": "PHP 8.2", "HTTPD_SERVER": "nginx-mainline"}
+ ]
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ workflow_call:
+ outputs:
+ matrix:
+ description: "The determined version matrix"
+ value: ${{ jobs.params.outputs.matrix }}
+
+jobs:
+ params:
+ runs-on: ubuntu-latest
+
+ outputs:
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
+
+ steps:
+ - name: "[Set-Output] Matrix"
+ id: set-matrix
+ run: |
+ echo "::set-output name=matrix::$( echo '${{ env.MATRIX }}' | jq -M -c )"
+
+ - name: "[DEBUG] Show settings'"
+ run: |
+ echo 'Matrix'
+ echo '--------------------'
+ echo '${{ steps.set-matrix.outputs.matrix }}'
+ echo
diff --git a/.github/workflows/params-redis.yml b/.github/workflows/params-redis.yml
new file mode 100644
index 00000000..212376bb
--- /dev/null
+++ b/.github/workflows/params-redis.yml
@@ -0,0 +1,61 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: params
+
+
+# -------------------------------------------------------------------------------------------------
+# Custom Variables
+# -------------------------------------------------------------------------------------------------
+env:
+ MATRIX: >-
+ [
+ {"REDIS_SERVER": "Redis 2.8"},
+ {"REDIS_SERVER": "Redis 3.0"},
+ {"REDIS_SERVER": "Redis 3.0-alpine"},
+ {"REDIS_SERVER": "Redis 3.2"},
+ {"REDIS_SERVER": "Redis 3.2-alpine"},
+ {"REDIS_SERVER": "Redis 4.0"},
+ {"REDIS_SERVER": "Redis 4.0-alpine"},
+ {"REDIS_SERVER": "Redis 5.0"},
+ {"REDIS_SERVER": "Redis 5.0-alpine"},
+ {"REDIS_SERVER": "Redis 6.0"},
+ {"REDIS_SERVER": "Redis 6.0-alpine"},
+ {"REDIS_SERVER": "Redis 6.2"},
+ {"REDIS_SERVER": "Redis 6.2-alpine"},
+ {"REDIS_SERVER": "Redis latest"},
+ {"REDIS_SERVER": "Redis alpine"}
+ ]
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ workflow_call:
+ outputs:
+ matrix:
+ description: "The determined version matrix"
+ value: ${{ jobs.params.outputs.matrix }}
+
+jobs:
+ params:
+ runs-on: ubuntu-latest
+
+ outputs:
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
+
+ steps:
+ - name: "[Set-Output] Matrix"
+ id: set-matrix
+ run: |
+ echo "::set-output name=matrix::$( echo '${{ env.MATRIX }}' | jq -M -c )"
+
+ - name: "[DEBUG] Show settings'"
+ run: |
+ echo 'Matrix'
+ echo '--------------------'
+ echo '${{ steps.set-matrix.outputs.matrix }}'
+ echo
diff --git a/.github/workflows/test-config.yml b/.github/workflows/test-config.yml
deleted file mode 100644
index d5798bb5..00000000
--- a/.github/workflows/test-config.yml
+++ /dev/null
@@ -1,242 +0,0 @@
----
-
-# -------------------------------------------------------------------------------------------------
-# Job Name
-# -------------------------------------------------------------------------------------------------
-name: Config
-
-
-# -------------------------------------------------------------------------------------------------
-# When to run
-# -------------------------------------------------------------------------------------------------
-on:
- # Runs on Pull Requests
- pull_request:
-
- # Runs on master Branch and Tags
- push:
- branches:
- - master
- tags:
- - '[0-9]+.[0-9]+*'
-
-
-# -------------------------------------------------------------------------------------------------
-# What to run
-# -------------------------------------------------------------------------------------------------
-jobs:
- test_config:
-
- runs-on: ubuntu-latest
-
- strategy:
- fail-fast: false
- matrix:
- php:
- - "5.3"
- - "5.4"
- - "5.5"
- - "5.6"
- - "7.0"
- - "7.1"
- - "7.2"
- - "7.3"
- - "7.4"
- - "8.0"
- - "8.1"
- - "8.2"
- httpd:
- - "apache-2.2"
- - "apache-2.4"
- - "nginx-stable"
- - "nginx-mainline"
-
- name: "[PHP ${{ matrix.php }}] vs [${{ matrix.httpd }}]"
- steps:
-
- # ------------------------------------------------------------
- # Checkout repository
- # ------------------------------------------------------------
- - name: Checkout repository
- uses: actions/checkout@v1
-
- - name: Show environment
- shell: bash
- run: |
- env
-
- - name: Show network
- shell: bash
- run: |
- netstat -an || true
- ss -tlun || true
-
- - name: Show Docker version
- shell: bash
- run: |
- docker version
-
- # ------------------------------------------------------------
- # Setup
- # ------------------------------------------------------------
- - name: Configure
- shell: bash
- run: |
- cd .tests/
- # Set the two candidates to test against
- make configure KEY=PHP_SERVER VAL=${PHP}
- make configure KEY=HTTPD_SERVER VAL=${HTTPD}
- # 3306 is taken, so chose another one
- make configure KEY=HOST_PORT_MYSQL VAL=3307
-
- # Test full customization
- make configure KEY=DEBUG_COMPOSE_ENTRYPOINT VAL="$(( RANDOM % 3 ))"
- make configure KEY=DOCKER_LOGS VAL="$(( RANDOM % 1 ))"
- make configure KEY=TLD_SUFFIX VAL=loc2
- make configure KEY=TIMEZONE VAL='Europe/Berlin'
- make configure KEY=PHP_MODULES_DISABLE VAL=
- make configure KEY=HTTPD_TEMPLATE_DIR VAL=.config
- make configure KEY=HOST_PORT_HTTPD VAL=8080
- make configure KEY=HOST_PORT_HTTPD_SSL VAL=8443
- make configure KEY=MYSQL_ROOT_PASSWORD VAL=mysqlpass
- make configure KEY=PGSQL_ROOT_USER VAL=pgroot
- make configure KEY=PGSQL_ROOT_PASSWORD VAL=pgsqlpass
- make configure KEY=DEVILBOX_VENDOR_PHPMYADMIN_AUTOLOGIN VAL=0
- env:
- PHP: ${{ matrix.php }}
- HTTPD: ${{ matrix.httpd }}
-
- - name: Pull images
- shell: bash
- run: |
- cd .tests/
- make pull
-
- - name: Startup
- shell: bash
- run: |
- cd .tests/
- make start
-
- - name: Docker logs
- shell: bash
- run: |
- cd .tests/
- make logs
-
- # ------------------------------------------------------------
- # Run tests
- # ------------------------------------------------------------
- - name: Test Modules
- shell: bash
- run: |
- cd .tests/
- make test-smoke-modules
- if: success() || failure()
-
- - name: Test Config
- shell: bash
- run: |
- cd .tests/
- make test-smoke-config
- if: success() || failure()
-
- - name: Test Intranet
- shell: bash
- run: |
- cd .tests/
- make test-smoke-intranet
- if: success() || failure()
-
- - name: Test Vendors
- shell: bash
- run: |
- cd .tests/
- make test-smoke-vendors
- if: success() || failure()
-
- - name: Test Vhosts
- shell: bash
- run: |
- cd .tests/
- make test-smoke-vhosts
- if: success() || failure()
-
- - name: Test Reverse Proxy
- shell: bash
- run: |
- cd .tests/
- make test-smoke-rproxies
- if: success() || failure()
-
- - name: Test SSL
- shell: bash
- run: |
- cd .tests/
- make test-smoke-ssl
- if: success() || failure()
-
- - name: Test Bind
- shell: bash
- run: |
- cd .tests/
- make test-smoke-bind
- if: success() || failure()
-
- - name: Test Autostart
- shell: bash
- run: |
- cd .tests/
- make test-smoke-autostart
- if: success() || failure()
-
- - name: "Test Framework: CakePHP"
- shell: bash
- run: |
- cd .tests/
- make test-smoke-framework-cakephp
- if: success() || failure()
-
- - name: "Test Framework: Drupal"
- shell: bash
- run: |
- cd .tests/
- make test-smoke-framework-drupal
- if: success() || failure()
-
- - name: "Test Framework: Wordpress"
- shell: bash
- run: |
- cd .tests/
- make test-smoke-framework-wordpress
- if: success() || failure()
-
- - name: "Test Container"
- shell: bash
- run: |
- retry() {
- for n in $(seq 5); do
- echo "[${n}/5] ${*}";
- if eval "${*}"; then
- echo "[SUCC] ${n}/t";
- return 0;
- fi;
- sleep 5;
- echo "[FAIL] ${n}/5";
- done;
- return 1;
- }
- cd .tests/
- retry make test-smoke-container
- if: success() || failure()
-
- # ------------------------------------------------------------
- # Finish
- # ------------------------------------------------------------
-
- - name: "Finish: Docker logs"
- shell: bash
- run: |
- cd .tests/
- make logs
- if: success() || failure()
diff --git a/.github/workflows/test-httpd.yml b/.github/workflows/test-httpd.yml
new file mode 100644
index 00000000..c0dbfef6
--- /dev/null
+++ b/.github/workflows/test-httpd.yml
@@ -0,0 +1,53 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: Httpd
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ # Runs on Pull Requests
+ pull_request:
+
+ # Runs on master Branch and Tags
+ push:
+ branches:
+ - master
+ tags:
+ - '[0-9]+.[0-9]+*'
+
+
+jobs:
+ # -----------------------------------------------------------------------------------------------
+ # (1/3) Determine parameter settings
+ # -----------------------------------------------------------------------------------------------
+ params:
+ uses: ./.github/workflows/params-httpd.yml
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (2/3) Test with default settings
+ # -----------------------------------------------------------------------------------------------
+ default:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: false
+ operating_system: ubuntu-latest
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (3/3) Test with customizedt settings
+ # -----------------------------------------------------------------------------------------------
+ custom:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: true
+ operating_system: ubuntu-latest
diff --git a/.github/workflows/test-memcd.yml b/.github/workflows/test-memcd.yml
new file mode 100644
index 00000000..5d073957
--- /dev/null
+++ b/.github/workflows/test-memcd.yml
@@ -0,0 +1,53 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: Memcd
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ # Runs on Pull Requests
+ pull_request:
+
+ # Runs on master Branch and Tags
+ push:
+ branches:
+ - master
+ tags:
+ - '[0-9]+.[0-9]+*'
+
+
+jobs:
+ # -----------------------------------------------------------------------------------------------
+ # (1/3) Determine parameter settings
+ # -----------------------------------------------------------------------------------------------
+ params:
+ uses: ./.github/workflows/params-memcd.yml
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (2/3) Test with default settings
+ # -----------------------------------------------------------------------------------------------
+ default:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: false
+ operating_system: ubuntu-latest
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (3/3) Test with customizedt settings
+ # -----------------------------------------------------------------------------------------------
+ custom:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: true
+ operating_system: ubuntu-latest
diff --git a/.github/workflows/test-mongo.yml b/.github/workflows/test-mongo.yml
new file mode 100644
index 00000000..cb44752e
--- /dev/null
+++ b/.github/workflows/test-mongo.yml
@@ -0,0 +1,53 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: Mongo
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ # Runs on Pull Requests
+ pull_request:
+
+ # Runs on master Branch and Tags
+ push:
+ branches:
+ - master
+ tags:
+ - '[0-9]+.[0-9]+*'
+
+
+jobs:
+ # -----------------------------------------------------------------------------------------------
+ # (1/3) Determine parameter settings
+ # -----------------------------------------------------------------------------------------------
+ params:
+ uses: ./.github/workflows/params-mongo.yml
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (2/3) Test with default settings
+ # -----------------------------------------------------------------------------------------------
+ default:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: false
+ operating_system: ubuntu-latest
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (3/3) Test with customizedt settings
+ # -----------------------------------------------------------------------------------------------
+ custom:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: true
+ operating_system: ubuntu-latest
diff --git a/.github/workflows/test-mysql.yml b/.github/workflows/test-mysql.yml
new file mode 100644
index 00000000..4c12e10e
--- /dev/null
+++ b/.github/workflows/test-mysql.yml
@@ -0,0 +1,53 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: MySQL
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ # Runs on Pull Requests
+ pull_request:
+
+ # Runs on master Branch and Tags
+ push:
+ branches:
+ - master
+ tags:
+ - '[0-9]+.[0-9]+*'
+
+
+jobs:
+ # -----------------------------------------------------------------------------------------------
+ # (1/3) Determine parameter settings
+ # -----------------------------------------------------------------------------------------------
+ params:
+ uses: ./.github/workflows/params-mysql.yml
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (2/3) Test with default settings
+ # -----------------------------------------------------------------------------------------------
+ default:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: false
+ operating_system: ubuntu-latest
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (3/3) Test with customizedt settings
+ # -----------------------------------------------------------------------------------------------
+ custom:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: true
+ operating_system: ubuntu-latest
diff --git a/.github/workflows/test-pgsql.yml b/.github/workflows/test-pgsql.yml
new file mode 100644
index 00000000..1f4cc9eb
--- /dev/null
+++ b/.github/workflows/test-pgsql.yml
@@ -0,0 +1,53 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: PgSQL
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ # Runs on Pull Requests
+ pull_request:
+
+ # Runs on master Branch and Tags
+ push:
+ branches:
+ - master
+ tags:
+ - '[0-9]+.[0-9]+*'
+
+
+jobs:
+ # -----------------------------------------------------------------------------------------------
+ # (1/3) Determine parameter settings
+ # -----------------------------------------------------------------------------------------------
+ params:
+ uses: ./.github/workflows/params-pgsql.yml
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (2/3) Test with default settings
+ # -----------------------------------------------------------------------------------------------
+ default:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: false
+ operating_system: ubuntu-latest
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (3/3) Test with customizedt settings
+ # -----------------------------------------------------------------------------------------------
+ custom:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: true
+ operating_system: ubuntu-latest
diff --git a/.github/workflows/test-php.yml b/.github/workflows/test-php.yml
new file mode 100644
index 00000000..59558f37
--- /dev/null
+++ b/.github/workflows/test-php.yml
@@ -0,0 +1,53 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: PHP
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ # Runs on Pull Requests
+ pull_request:
+
+ # Runs on master Branch and Tags
+ push:
+ branches:
+ - master
+ tags:
+ - '[0-9]+.[0-9]+*'
+
+
+jobs:
+ # -----------------------------------------------------------------------------------------------
+ # (1/3) Determine parameter settings
+ # -----------------------------------------------------------------------------------------------
+ params:
+ uses: ./.github/workflows/params-php.yml
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (2/3) Test with default settings
+ # -----------------------------------------------------------------------------------------------
+ default:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: false
+ operating_system: ubuntu-latest
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (3/3) Test with customizedt settings
+ # -----------------------------------------------------------------------------------------------
+ custom:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: true
+ operating_system: ubuntu-latest
diff --git a/.github/workflows/test-redis.yml b/.github/workflows/test-redis.yml
new file mode 100644
index 00000000..d6a63bfb
--- /dev/null
+++ b/.github/workflows/test-redis.yml
@@ -0,0 +1,53 @@
+---
+
+# -------------------------------------------------------------------------------------------------
+# Job Name
+# -------------------------------------------------------------------------------------------------
+name: Redis
+
+
+# -------------------------------------------------------------------------------------------------
+# When to run
+# -------------------------------------------------------------------------------------------------
+on:
+ # Runs on Pull Requests
+ pull_request:
+
+ # Runs on master Branch and Tags
+ push:
+ branches:
+ - master
+ tags:
+ - '[0-9]+.[0-9]+*'
+
+
+jobs:
+ # -----------------------------------------------------------------------------------------------
+ # (1/3) Determine parameter settings
+ # -----------------------------------------------------------------------------------------------
+ params:
+ uses: ./.github/workflows/params-redis.yml
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (2/3) Test with default settings
+ # -----------------------------------------------------------------------------------------------
+ default:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: false
+ operating_system: ubuntu-latest
+
+
+ # -----------------------------------------------------------------------------------------------
+ # (3/3) Test with customizedt settings
+ # -----------------------------------------------------------------------------------------------
+ custom:
+ needs: [params]
+ uses: ./.github/workflows/zzz-reuse-tests.yml
+ with:
+ matrix: ${{ needs.params.outputs.matrix }}
+ custom_config: true
+ operating_system: ubuntu-latest
diff --git a/.github/workflows/test-versions.yml b/.github/workflows/test-versions.yml
deleted file mode 100644
index 9bf7923c..00000000
--- a/.github/workflows/test-versions.yml
+++ /dev/null
@@ -1,318 +0,0 @@
----
-
-# -------------------------------------------------------------------------------------------------
-# Job Name
-# -------------------------------------------------------------------------------------------------
-name: Versions
-
-
-# -------------------------------------------------------------------------------------------------
-# When to run
-# -------------------------------------------------------------------------------------------------
-on:
- # Runs on Pull Requests
- pull_request:
-
- # Runs on master Branch and Tags
- push:
- branches:
- - master
- tags:
- - '[0-9]+.[0-9]+*'
-
-
-# -------------------------------------------------------------------------------------------------
-# What to run
-# -------------------------------------------------------------------------------------------------
-jobs:
- smoke_version:
-
- runs-on: ubuntu-latest
-
- strategy:
- fail-fast: false
- matrix:
- version:
- - "MYSQL_SERVER=mysql-5.5"
- - "MYSQL_SERVER=mysql-5.6"
- - "MYSQL_SERVER=mysql-5.7"
- - "MYSQL_SERVER=mysql-8.0"
- - "MYSQL_SERVER=mariadb-5.5"
- - "MYSQL_SERVER=mariadb-10.0"
- - "MYSQL_SERVER=mariadb-10.1"
- - "MYSQL_SERVER=mariadb-10.2"
- - "MYSQL_SERVER=mariadb-10.3"
- - "MYSQL_SERVER=mariadb-10.4"
- - "MYSQL_SERVER=mariadb-10.5"
- - "MYSQL_SERVER=mariadb-10.6"
- - "MYSQL_SERVER=mariadb-10.7"
- - "MYSQL_SERVER=mariadb-10.8"
- - "MYSQL_SERVER=percona-5.5"
- - "MYSQL_SERVER=percona-5.6"
- - "MYSQL_SERVER=percona-5.7"
- - "MYSQL_SERVER=percona-8.0"
-
- - "PGSQL_SERVER=9.0"
- - "PGSQL_SERVER=9.1"
- - "PGSQL_SERVER=9.2"
- - "PGSQL_SERVER=9.2-alpine"
- - "PGSQL_SERVER=9.3"
- - "PGSQL_SERVER=9.3-alpine"
- - "PGSQL_SERVER=9.4"
- - "PGSQL_SERVER=9.4-alpine"
- - "PGSQL_SERVER=9.5"
- - "PGSQL_SERVER=9.5-alpine"
- - "PGSQL_SERVER=9.6"
- - "PGSQL_SERVER=9.6-alpine"
- - "PGSQL_SERVER=10.0"
- - "PGSQL_SERVER=10.0-alpine"
- - "PGSQL_SERVER=10.1"
- - "PGSQL_SERVER=10.1-alpine"
- - "PGSQL_SERVER=10.2"
- - "PGSQL_SERVER=10.2-alpine"
- - "PGSQL_SERVER=10.3"
- - "PGSQL_SERVER=10.3-alpine"
- - "PGSQL_SERVER=10.4"
- - "PGSQL_SERVER=10.4-alpine"
- - "PGSQL_SERVER=10.5"
- - "PGSQL_SERVER=10.5-alpine"
- - "PGSQL_SERVER=10.6"
- - "PGSQL_SERVER=10.6-alpine"
- - "PGSQL_SERVER=11.0"
- - "PGSQL_SERVER=11.0-alpine"
- - "PGSQL_SERVER=11.1"
- - "PGSQL_SERVER=11.1-alpine"
- - "PGSQL_SERVER=11.2"
- - "PGSQL_SERVER=11.2-alpine"
- - "PGSQL_SERVER=11.3"
- - "PGSQL_SERVER=11.3-alpine"
- - "PGSQL_SERVER=11.4"
- - "PGSQL_SERVER=11.4-alpine"
- - "PGSQL_SERVER=11.5"
- - "PGSQL_SERVER=11.5-alpine"
- - "PGSQL_SERVER=11.6"
- - "PGSQL_SERVER=11.6-alpine"
- - "PGSQL_SERVER=11.7"
- - "PGSQL_SERVER=11.7-alpine"
- - "PGSQL_SERVER=11.8"
- - "PGSQL_SERVER=11.8-alpine"
- - "PGSQL_SERVER=11.9"
- - "PGSQL_SERVER=11.9-alpine"
- - "PGSQL_SERVER=12.0"
- - "PGSQL_SERVER=12.0-alpine"
- - "PGSQL_SERVER=12.1"
- - "PGSQL_SERVER=12.1-alpine"
- - "PGSQL_SERVER=12.2"
- - "PGSQL_SERVER=12.2-alpine"
- - "PGSQL_SERVER=12.3"
- - "PGSQL_SERVER=12.3-alpine"
- - "PGSQL_SERVER=13.0"
- - "PGSQL_SERVER=13.0-alpine"
- - "PGSQL_SERVER=latest"
- - "PGSQL_SERVER=alpine"
-
- - "REDIS_SERVER=2.8"
- - "REDIS_SERVER=3.0"
- - "REDIS_SERVER=3.0-alpine"
- - "REDIS_SERVER=3.2"
- - "REDIS_SERVER=3.2-alpine"
- - "REDIS_SERVER=4.0"
- - "REDIS_SERVER=4.0-alpine"
- - "REDIS_SERVER=5.0"
- - "REDIS_SERVER=5.0-alpine"
- - "REDIS_SERVER=6.0"
- - "REDIS_SERVER=6.0-alpine"
- - "REDIS_SERVER=latest"
- - "REDIS_SERVER=alpine"
-
- - "MEMCD_SERVER=1.4"
- - "MEMCD_SERVER=1.4-alpine"
- - "MEMCD_SERVER=1.5"
- - "MEMCD_SERVER=1.5-alpine"
- - "MEMCD_SERVER=1.6"
- - "MEMCD_SERVER=1.6-alpine"
- - "MEMCD_SERVER=latest"
- - "MEMCD_SERVER=alpine"
-
- - "MONGO_SERVER=2.8"
- - "MONGO_SERVER=3.0"
- - "MONGO_SERVER=3.2"
- - "MONGO_SERVER=3.4"
- - "MONGO_SERVER=3.6"
- - "MONGO_SERVER=4.0"
- - "MONGO_SERVER=4.2"
- - "MONGO_SERVER=4.4"
- - "MONGO_SERVER=latest"
- name: "[${{ matrix.version }}]"
- steps:
-
- # ------------------------------------------------------------
- # Checkout repository
- # ------------------------------------------------------------
- - name: Checkout repository
- uses: actions/checkout@v1
-
- - name: Show environment
- shell: bash
- run: |
- env
-
- - name: Show network
- shell: bash
- run: |
- netstat -an || true
- ss -tlun || true
-
- - name: Show Docker version
- shell: bash
- run: |
- docker version
-
- # ------------------------------------------------------------
- # Setup
- # ------------------------------------------------------------
- - name: Configure
- shell: bash
- run: |
- cd .tests/
- # Set the matrix version
- make configure KEY="${VERSION//=*/}" VAL="${VERSION//*=}"
- # 3306 is taken, so chose another one
- make configure KEY=HOST_PORT_MYSQL VAL=3307
- env:
- VERSION: ${{ matrix.version }}
-
- - name: Pull images
- shell: bash
- run: |
- cd .tests/
- make pull
-
- - name: Startup
- shell: bash
- run: |
- cd .tests/
- make start
-
- - name: Docker logs
- shell: bash
- run: |
- cd .tests/
- make logs
-
- # ------------------------------------------------------------
- # Run tests
- # ------------------------------------------------------------
- - name: Test Modules
- shell: bash
- run: |
- cd .tests/
- make test-smoke-modules
- if: success() || failure()
-
- - name: Test Config
- shell: bash
- run: |
- cd .tests/
- make test-smoke-config
- if: success() || failure()
-
- - name: Test Intranet
- shell: bash
- run: |
- cd .tests/
- make test-smoke-intranet
- if: success() || failure()
-
- - name: Test Vendors
- shell: bash
- run: |
- cd .tests/
- make test-smoke-vendors
- if: success() || failure()
-
- - name: Test Vhosts
- shell: bash
- run: |
- cd .tests/
- make test-smoke-vhosts
- if: success() || failure()
-
- - name: Test Reverse Proxy
- shell: bash
- run: |
- cd .tests/
- make test-smoke-rproxies
- if: success() || failure()
-
- - name: Test SSL
- shell: bash
- run: |
- cd .tests/
- make test-smoke-ssl
- if: success() || failure()
-
- - name: Test Bind
- shell: bash
- run: |
- cd .tests/
- make test-smoke-bind
- if: success() || failure()
-
- - name: Test Autostart
- shell: bash
- run: |
- cd .tests/
- make test-smoke-autostart
- if: success() || failure()
-
- - name: "Test Framework: CakePHP"
- shell: bash
- run: |
- cd .tests/
- make test-smoke-framework-cakephp
- if: success() || failure()
-
- - name: "Test Framework: Drupal"
- shell: bash
- run: |
- cd .tests/
- make test-smoke-framework-drupal
- if: success() || failure()
-
- - name: "Test Framework: Wordpress"
- shell: bash
- run: |
- cd .tests/
- make test-smoke-framework-wordpress
- if: success() || failure()
-
- - name: "Test Container"
- shell: bash
- run: |
- retry() {
- for n in $(seq 5); do
- echo "[${n}/5] ${*}";
- if eval "${*}"; then
- echo "[SUCC] ${n}/t";
- return 0;
- fi;
- sleep 5;
- echo "[FAIL] ${n}/5";
- done;
- return 1;
- }
- cd .tests/
- retry make test-smoke-container
- if: success() || failure()
-
- # ------------------------------------------------------------
- # Finish
- # ------------------------------------------------------------
-
- - name: "Finish: Docker logs"
- shell: bash
- run: |
- cd .tests/
- make logs
- if: success() || failure()
diff --git a/.github/workflows/zzz-reuse-tests.yml b/.github/workflows/zzz-reuse-tests.yml
new file mode 100644
index 00000000..da7441ca
--- /dev/null
+++ b/.github/workflows/zzz-reuse-tests.yml
@@ -0,0 +1,284 @@
+---
+name: Reusable worfklow for tests
+
+on:
+ workflow_call:
+ ###
+ ### Variables
+ ###
+ inputs:
+ matrix:
+ description: 'The test matrix'
+ required: true
+ type: string
+ custom_config:
+ description: 'Apply customized .env configuration?'
+ required: true
+ type: boolean
+ operating_system:
+ description: 'The operating system to run on'
+ required: true
+ type: string
+
+
+jobs:
+ # -----------------------------------------------------------------------------------------------
+ # JOB: BUILD
+ # -----------------------------------------------------------------------------------------------
+ test:
+ runs-on: ${{ inputs.operating_system }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include: ${{ fromJson(inputs.matrix) }}
+ steps:
+
+ # ------------------------------------------------------------
+ # Setup repository
+ # ------------------------------------------------------------
+ - name: "[SETUP] Checkout repository (current)"
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ - name: "[DEBUG] Show Matrix configuration"
+ shell: bash
+ run: |
+ echo '${{ toJson(matrix) }}' | jq -r
+
+ - name: "[DEBUG] Show env variables"
+ shell: bash
+ run: |
+ env
+
+ - name: "[DEBUG] Show open network ports"
+ shell: bash
+ run: |
+ netstat -an || true
+ ss -tlun || true
+
+ - name: "[DEBUG] Show Docker version"
+ shell: bash
+ run: |
+ docker version
+
+ - name: "[DEBUG] Show Docker Compose version"
+ shell: bash
+ run: |
+ docker-compose version
+
+ # ------------------------------------------------------------
+ # Configure
+ # ------------------------------------------------------------
+ - name: "[Configure] Configure customized configuration"
+ shell: bash
+ run: |
+ cd "${GITHUB_WORKSPACE}/.tests/"
+
+ # Test full customization
+ make configure KEY=DEBUG_COMPOSE_ENTRYPOINT VAL="$(( RANDOM % 3 ))"
+ make configure KEY=DOCKER_LOGS VAL="$(( RANDOM % 1 ))"
+ make configure KEY=TLD_SUFFIX VAL=loc2
+ make configure KEY=TIMEZONE VAL='Europe/Berlin'
+ make configure KEY=PHP_MODULES_DISABLE VAL=
+ make configure KEY=HTTPD_TEMPLATE_DIR VAL=.config
+ make configure KEY=HOST_PORT_HTTPD VAL=8080
+ make configure KEY=HOST_PORT_HTTPD_SSL VAL=8443
+ make configure KEY=MYSQL_ROOT_PASSWORD VAL=mysqlpass
+ make configure KEY=PGSQL_ROOT_USER VAL=pgroot
+ make configure KEY=PGSQL_ROOT_PASSWORD VAL=pgsqlpass
+ make configure KEY=DEVILBOX_VENDOR_PHPMYADMIN_AUTOLOGIN VAL=0
+ if: inputs.custom_config
+
+ - name: "[Configure] Configure versions"
+ shell: bash
+ run: |
+ # (1/3) Change to .tests/ directory
+ cd "${GITHUB_WORKSPACE}/.tests/"
+
+ # (2/3) Change MySQL port 3306 to 3307 (3306 is already taken)
+ make configure KEY=HOST_PORT_MYSQL VAL=3307
+
+ # (3/3) Loop over configured values
+ while IFS= read -r line; do
+ KEY="${line}"
+ VAL="$( echo '${{ toJson(matrix) }}' | jq -r ".${KEY}" | awk '{print $NF}' )"
+ echo "KEY: ${KEY}"
+ echo "VAL: ${VAL}"
+
+ # Set the matrix version
+ make configure KEY="${KEY}" VAL="${VAL}"
+ done <<< "$( echo '${{ toJson(matrix) }}' | jq -r 'keys[]' )"
+
+ - name: "[Configure] Show .env file"
+ shell: bash
+ run: |
+ cat .env
+
+
+ # ------------------------------------------------------------
+ # Startup
+ # ------------------------------------------------------------
+ - name: "[Startup] Pull images"
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make pull
+
+ - name: "[Startup] Start Devilbox"
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make start
+
+ - name: "[Startup] Show Docker logs"
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make logs
+
+ # ------------------------------------------------------------
+ # Run tests
+ # ------------------------------------------------------------
+ - name: Test Modules
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make test-smoke-modules
+
+ - name: Test Config
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make test-smoke-config
+ if: success() || failure()
+
+ - name: Test Intranet
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make test-smoke-intranet
+ if: success() || failure()
+
+ - name: Test Vendors
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make test-smoke-vendors
+ if: success() || failure()
+
+ - name: Test Vhosts
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make test-smoke-vhosts
+ if: success() || failure()
+
+ - name: Test Reverse Proxy
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make test-smoke-rproxies
+ if: success() || failure()
+
+ - name: Test SSL
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make test-smoke-ssl
+ if: success() || failure()
+
+ - name: Test Bind
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make test-smoke-bind
+ if: success() || failure()
+
+ - name: Test Autostart
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make test-smoke-autostart
+ if: success() || failure()
+
+ - name: "Test Framework: CakePHP"
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make test-smoke-framework-cakephp
+ if: success() || failure()
+
+ - name: "Test Framework: Drupal"
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make test-smoke-framework-drupal
+ if: success() || failure()
+
+ - name: "Test Framework: Wordpress"
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make test-smoke-framework-wordpress
+ if: success() || failure()
+
+ - name: "Test Container"
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make test-smoke-container
+ if: success() || failure()
+
+ # ------------------------------------------------------------
+ # Finish
+ # ------------------------------------------------------------
+ - name: "Finish: Docker logs"
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make logs
+ if: success() || failure()
+
+ - name: "Finish: Shutdown"
+ uses: cytopia/shell-command-retry-action@v0.1.3
+ with:
+ retries: 3
+ workdir: "${{ github.workspace }}/.tests/"
+ command: |
+ make stop
+ if: success() || failure()
diff --git a/.tests/Makefile b/.tests/Makefile
index b4a5b4ba..c6869e62 100644
--- a/.tests/Makefile
+++ b/.tests/Makefile
@@ -160,6 +160,7 @@ test-smoke-autostart:
###
test-smoke-framework-cakephp:
$(PWD)/tests/framework-cakephp.sh
+ $(PWD)/tests/framework-cakephp-php8.sh
test-smoke-framework-drupal:
$(PWD)/tests/framework-drupal.sh
diff --git a/.tests/scripts/.lib.sh b/.tests/scripts/.lib.sh
index 9a60d4b8..ff53bd81 100644
--- a/.tests/scripts/.lib.sh
+++ b/.tests/scripts/.lib.sh
@@ -47,8 +47,7 @@ get_php_version() {
# Check php -v
>&2 printf "Fetching PHP version from php -v: "
if ! cli_version="$( run "docker-compose exec -T php php -v \
- | head -1 \
- | grep -Eo 'PHP[[:space:]]+[0-9]+\\.[0-9]+' \
+ | grep -Eo '^PHP[[:space:]]+[0-9]+\\.[0-9]+' \
| grep -Eo '[0-9]+\\.[0-9]+'" \
"${retries}" "${root_path}" "0" )"; then
>&2 printf "FAILED\\n"
@@ -118,6 +117,52 @@ replace() {
}
+###
+### Print colorized OK message
+###
+print_succ() {
+ local leading_nl="${1}"
+ local trailing_nl="${2}"
+ local message="${3}"
+
+ local green="\\033[0;32m"
+ local reset="\\033[0m"
+
+ if [ "${leading_nl}" = "1" ] && [ "${trailing_nl}" = "1" ]; then
+ printf "\\r${green}[OK]${reset} %s\\n" "${message}"
+ elif [ "${leading_nl}" = "1" ]; then
+ printf "\\r${green}[OK]${reset} %s" "${message}"
+ elif [ "${trailing_nl}" = "1" ]; then
+ printf "${green}[OK]${reset} %s\\n" "${message}"
+ else
+ printf "${green}[OK]${reset} %s" "${message}"
+ fi
+}
+
+
+###
+### Print colorized FAIL message
+###
+print_fail() {
+ local leading_nl="${1}"
+ local trailing_nl="${2}"
+ local message="${3}"
+
+ local red="\\033[0;31m"
+ local reset="\\033[0m"
+
+ if [ "${leading_nl}" = "1" ] && [ "${trailing_nl}" = "1" ]; then
+ printf "\\r${red}[FAIL]${reset} %s\\n" "${message}"
+ elif [ "${leading_nl}" = "1" ]; then
+ printf "\\r${red}[FAIL]${reset} %s" "${message}"
+ elif [ "${trailing_nl}" = "1" ]; then
+ printf "${red}[FAIL]${reset} %s\\n" "${message}"
+ else
+ printf "${red}[FAIL]${reset} %s" "${message}"
+ fi
+}
+
+
###
### Run command
###
diff --git a/.tests/scripts/compose-start.sh b/.tests/scripts/compose-start.sh
index ec9493cd..4af2a2a4 100755
--- a/.tests/scripts/compose-start.sh
+++ b/.tests/scripts/compose-start.sh
@@ -53,7 +53,7 @@ until curl -sS -I --fail -o /dev/null -w "%{http_code}" "http://localhost:${HOST
printf "."
i=$(( i + 1 ))
- if [ "${i}" -eq "60" ]; then
+ if [ "${i}" -eq "120" ]; then
printf "[FAIL]\\n\\n"
echo "---- curl From host ----"
curl -sS -v "http://localhost:${HOST_PORT_HTTPD}" || true
@@ -84,7 +84,7 @@ until curl -sS --fail "http://localhost:${HOST_PORT_HTTPD}" 2>/dev/null | grep '
printf "."
i=$(( i + 1 ))
- if [ "${i}" -eq "60" ]; then
+ if [ "${i}" -eq "120" ]; then
printf "[FAIL]\\n"
curl -sS -v "http://localhost:${HOST_PORT_HTTPD}"
curl -sS -I "http://localhost:${HOST_PORT_HTTPD}"
@@ -120,7 +120,7 @@ until cd "${DVLBOX_PATH}" && docker-compose exec -T php mongofiles --host=mongo
printf "."
i=$(( i + 1 ))
- if [ "${i}" -eq "60" ]; then
+ if [ "${i}" -eq "120" ]; then
printf "[FAIL]\\n"
run "cd ${DVLBOX_PATH} && docker-compose exec -T php mongofiles --host=mongo list" || true
run "cd ${DVLBOX_PATH} && docker-compose logs" || true
@@ -143,7 +143,7 @@ until cd "${DVLBOX_PATH}" && docker-compose exec -T php mysql --user=root --pass
printf "."
i=$(( i + 1 ))
- if [ "${i}" -eq "60" ]; then
+ if [ "${i}" -eq "120" ]; then
printf "[FAIL]\\n"
run "cd ${DVLBOX_PATH} && docker-compose exec -T php mysql --user=root --password=\"${MYSQL_ROOT_PASSWORD}\" --host=mysql -e 'show databases;'" || true
run "cd ${DVLBOX_PATH} && docker-compose logs" || true
@@ -166,7 +166,7 @@ until cd "${DVLBOX_PATH}" && docker-compose exec -T php pg_isready --host=pgsql
printf "."
i=$(( i + 1 ))
- if [ "${i}" -eq "60" ]; then
+ if [ "${i}" -eq "120" ]; then
printf "[FAIL]\\n"
run "cd ${DVLBOX_PATH} && docker-compose exec -T php pg_isready --host=pgsql" || true
run "cd ${DVLBOX_PATH} && docker-compose logs" || true
diff --git a/.tests/tests/framework-cakephp-php8.sh b/.tests/tests/framework-cakephp-php8.sh
new file mode 100755
index 00000000..c70a4b60
--- /dev/null
+++ b/.tests/tests/framework-cakephp-php8.sh
@@ -0,0 +1,95 @@
+#!/usr/bin/env bash
+
+# NOTE: Parsing curl to tac to circumnvent "failed writing body"
+# https://stackoverflow.com/questions/16703647/why-curl-return-and-error-23-failed-writing-body
+
+set -e
+set -u
+set -o pipefail
+
+SCRIPT_PATH="$( cd "$(dirname "$0")" && pwd -P )"
+DVLBOX_PATH="$( cd "${SCRIPT_PATH}/../.." && pwd -P )"
+# shellcheck disable=SC1090
+. "${SCRIPT_PATH}/../scripts/.lib.sh"
+
+RETRIES=10
+# see framework-cakephp.sh for PHP <8 tests
+DISABLED_VERSIONS=("5.2" "5.3" "5.4" "5.5" "5.6" "7.0" "7.1" "7.2" "7.3" "7.4" "8.2")
+
+PHP_VERSION="$( get_php_version "${DVLBOX_PATH}" )"
+
+###
+### What CakePHP Version?
+###
+CAKE_PHP_VERSION=4.3
+
+
+echo
+echo "# --------------------------------------------------------------------------------------------------"
+echo "# [Framework] CakePHP ${CAKE_PHP_VERSION}"
+echo "# --------------------------------------------------------------------------------------------------"
+echo
+
+
+# -------------------------------------------------------------------------------------------------
+# Pre-check
+# -------------------------------------------------------------------------------------------------
+
+if [[ ${DISABLED_VERSIONS[*]} =~ ${PHP_VERSION} ]]; then
+ printf "[SKIP] Skipping all checks for PHP %s\\n" "${PHP_VERSION}"
+ exit 0
+fi
+
+
+
+# -------------------------------------------------------------------------------------------------
+# ENTRYPOINT
+# -------------------------------------------------------------------------------------------------
+
+###
+### Get required env values
+###
+MYSQL_ROOT_PASSWORD="$( "${SCRIPT_PATH}/../scripts/env-getvar.sh" "MYSQL_ROOT_PASSWORD" )"
+TLD_SUFFIX="$( "${SCRIPT_PATH}/../scripts/env-getvar.sh" "TLD_SUFFIX" )"
+VHOST="my-cakephp"
+
+# Create vhost dir
+create_vhost_dir "${VHOST}"
+
+
+# Setup CakePHP project
+run "docker-compose exec --user devilbox -T php bash -c 'cd /shared/httpd/${VHOST}; composer create-project --no-interaction --prefer-dist cakephp/app:~${CAKE_PHP_VERSION} cakephp'" "${RETRIES}" "${DVLBOX_PATH}"
+run "docker-compose exec --user devilbox -T php bash -c 'cd /shared/httpd/${VHOST}; ln -sf cakephp/webroot htdocs'" "${RETRIES}" "${DVLBOX_PATH}"
+run "docker-compose exec --user devilbox -T php mysql -u root -h mysql --password=\"${MYSQL_ROOT_PASSWORD}\" -e \"DROP DATABASE IF EXISTS my_cake; CREATE DATABASE my_cake;\"" "${RETRIES}" "${DVLBOX_PATH}"
+
+# Configure CakePHP database settings
+run "docker-compose exec --user devilbox -T php sed -i\"\" \"s/'host' =>.*/'host' => 'mysql',/g\" /shared/httpd/${VHOST}/cakephp/config/app_local.php" "${RETRIES}" "${DVLBOX_PATH}"
+run "docker-compose exec --user devilbox -T php sed -i\"\" \"s/'username' =>.*/'username' => 'root',/g\" /shared/httpd/${VHOST}/cakephp/config/app_local.php" "${RETRIES}" "${DVLBOX_PATH}"
+run "docker-compose exec --user devilbox -T php sed -i\"\" \"s/'password' =>.*/'password' => '${MYSQL_ROOT_PASSWORD}',/g\" /shared/httpd/${VHOST}/cakephp/config/app_local.php" "${RETRIES}" "${DVLBOX_PATH}"
+run "docker-compose exec --user devilbox -T php sed -i\"\" \"s/'database' =>.*/'database' => 'my_cake',/g\" /shared/httpd/${VHOST}/cakephp/config/app_local.php" "${RETRIES}" "${DVLBOX_PATH}"
+
+# Test CakePHP
+ERROR=0
+if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://${VHOST}.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'mbstring'" "${RETRIES}" "${DVLBOX_PATH}"; then
+ ERROR=1
+fi
+if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://${VHOST}.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'openssl'" "${RETRIES}" "${DVLBOX_PATH}"; then
+ ERROR=1
+fi
+if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://${VHOST}.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'intl'" "${RETRIES}" "${DVLBOX_PATH}"; then
+ ERROR=1
+fi
+if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://${VHOST}.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'tmp directory'" "${RETRIES}" "${DVLBOX_PATH}"; then
+ ERROR=1
+fi
+if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://${VHOST}.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'logs directory'" "${RETRIES}" "${DVLBOX_PATH}"; then
+ ERROR=1
+fi
+if ! run "docker-compose exec --user devilbox -T php curl -sS --fail 'http://${VHOST}.${TLD_SUFFIX}' | tac | tac | grep '\"bullet success\"' | grep 'connect to the database'" "${RETRIES}" "${DVLBOX_PATH}"; then
+ ERROR=1
+fi
+
+if [ "${ERROR}" = "1" ]; then
+ run "docker-compose exec --user devilbox -T php curl 'http://${VHOST}.${TLD_SUFFIX}' || true" "1" "${DVLBOX_PATH}"
+ exit 1
+fi
diff --git a/.tests/tests/framework-cakephp.sh b/.tests/tests/framework-cakephp.sh
index 3caa7340..28d8e5ec 100755
--- a/.tests/tests/framework-cakephp.sh
+++ b/.tests/tests/framework-cakephp.sh
@@ -13,6 +13,7 @@ DVLBOX_PATH="$( cd "${SCRIPT_PATH}/../.." && pwd -P )"
. "${SCRIPT_PATH}/../scripts/.lib.sh"
RETRIES=10
+# see framework-cakephp-php8.sh for PHP 8+ tests
DISABLED_VERSIONS=("5.2" "5.3" "5.4" "5.5" "8.0" "8.1" "8.2")
PHP_VERSION="$( get_php_version "${DVLBOX_PATH}" )"
diff --git a/.tests/tests/vendor-phppgadmin.sh b/.tests/tests/vendor-phppgadmin.sh
index ae9c528e..ba0ed4eb 100755
--- a/.tests/tests/vendor-phppgadmin.sh
+++ b/.tests/tests/vendor-phppgadmin.sh
@@ -60,11 +60,11 @@ if ! URL="$( run "\
| tac \
| grep -Eo '/vendor/phppgadmin-[.0-9]+/'" \
"${RETRIES}" "" "0" )"; then
- printf "\\r[FAILED] Retrieve phpPgAdmin URL\\n"
+ print_fail "1" "1" "Retrieve phpPgAdmin URL"
run "curl -sS 'http://localhost:${HOST_PORT_HTTPD}/index.php' || true"
exit 1
else
- printf "\\r[OK] Retrieve phpPgAdmin URL: %s\\n" "${URL}"
+ print_succ "1" "1" "Retrieve phpPgAdmin URL: ${URL}"
fi
@@ -80,18 +80,18 @@ if ! curl -sS --fail "http://localhost:${HOST_PORT_HTTPD}${URL}intro.php" | tac
# 3rd Try
sleep 1
if ! curl -sS --fail "http://localhost:${HOST_PORT_HTTPD}${URL}intro.php" | tac | tac | grep -Eiq "welcome to phpPgAdmin"; then
- printf "\\r[FAIL] Fetch %sintro.php\\n" "${URL}"
+ print_fail "1" "1" "Fetch ${URL}intro.php"
curl -sS "http://localhost:${HOST_PORT_HTTPD}${URL}intro.php" || true
curl -sS -I "http://localhost:${HOST_PORT_HTTPD}${URL}intro.php" || true
exit 1
else
- printf "\\r[OK] Fetch %sintro.php (3 rounds)\\n" "${URL}"
+ print_succ "1" "1" "Fetch ${URL}intro.php (3 rounds)"
fi
else
- printf "\\r[OK] Fetch %sintro.php (2 rounds)\\n" "${URL}"
+ print_succ "1" "1" "Fetch ${URL}intro.php (2 rounds)"
fi
else
- printf "\\r[OK] Fetch %sintro.php (1 round)\\n" "${URL}"
+ print_succ "1" "1" "Fetch ${URL}intro.php (1 round)"
fi
@@ -106,46 +106,46 @@ LIBPATH="${DVLBOXPATH}/.devilbox/www/htdocs${URL%index\.php}libraries/lib.inc.ph
printf "[TEST] config.inc.php exists"
if [ ! -f "${CONFIGPATH}" ]; then
- printf "\\r[FAIL] config.inc.php exists: no\\n"
+ print_fail "1" "1" "config.inc.php exists: no"
exit 1
else
- printf "\\r[OK] config.inc.php exists: yes\\n"
+ print_succ "1" "1" "config.inc.php exists: yes"
fi
# $conf['servers'][0]['host'] = 'pgsql';
printf "[TEST] config.inc.php check: \$conf['servers'][0]['host'] = 'pgsql';"
if ! grep -E "^[[:space:]]*\\\$conf\\['servers'\\]\\[0\\]\\['host'\\][[:space:]]*=[[:space:]]*'pgsql';" "${CONFIGPATH}" >/dev/null; then
- printf "\\r[FAIL] config.inc.php check: \$conf['servers'][0]['host'] = 'pgsql';\\n"
+ print_fail "1" "1" "config.inc.php check: \$conf['servers'][0]['host'] = 'pgsql';"
if ! grep 'servers' "${CONFIGPATH}"; then
cat "${CONFIGPATH}"
fi
exit 1
else
- printf "\\r[OK] config.inc.php check: \$conf['servers'][0]['host'] = 'pgsql';\\n"
+ print_succ "1" "1" "config.inc.php check: \$conf['servers'][0]['host'] = 'pgsql';"
fi
# $conf['extra_login_security'] = false;
printf "[TEST] config.inc.php check: \$conf['extra_login_security'] = false;"
if ! grep -E "^[[:space:]]*\\\$conf\\['extra_login_security'\\][[:space:]]*=[[:space:]]*false;" "${CONFIGPATH}" >/dev/null; then
- printf "\\r[FAIL] config.inc.php check: \$conf['extra_login_security'] = false;\\n"
+ print_fail "1" "1" "config.inc.php check: \$conf['extra_login_security'] = false;"
if ! grep 'extra_login_security' "${CONFIGPATH}"; then
cat "${CONFIGPATH}"
fi
exit 1
else
- printf "\\r[OK] config.inc.php check: \$conf['extra_login_security'] = false;\\n"
+ print_succ "1" "1" "config.inc.php check: \$conf['extra_login_security'] = false;"
fi
# error_reporting(E_ERROR | E_WARNING | E_PARSE);
printf "[TEST] lib.inc.php check: error_reporting(E_ERROR | E_WARNING | E_PARSE);"
if ! grep -E "^[[:space:]]*error_reporting\\(E_ERROR[[:space:]]*\\|[[:space:]]*E_WARNING[[:space:]]*\\|[[:space:]]*E_PARSE\\);" "${LIBPATH}" >/dev/null; then
- printf "\\r[FAIL] lib.inc.php check: error_reporting(E_ERROR | E_WARNING | E_PARSE);\\n"
+ print_fail "1" "1" "lib.inc.php check: error_reporting(E_ERROR | E_WARNING | E_PARSE);"
if ! grep 'error_reporting' "${LIBPATH}"; then
cat "${LIBPATH}"
fi
exit 1
else
- printf "\\r[OK] lib.inc.php check: error_reporting(E_ERROR | E_WARNING | E_PARSE);\\n"
+ print_succ "1" "1" "lib.inc.php check: error_reporting(E_ERROR | E_WARNING | E_PARSE);"
fi
@@ -163,7 +163,7 @@ if [ "${DEVILBOX_VENDOR_PHPPGADMIN_AUTOLOGIN}" != "1" ]; then
###
printf "[TEST] Retrieve phpPgAdmin token page"
if ! TOKEN_URL="$( run "curl -sS --fail -c cookie.txt 'http://localhost:${HOST_PORT_HTTPD}${URL}servers.php' | tac | tac | grep -Eo '\"redirect\\.php\\?subject=server.+\"' " "${RETRIES}" "" "0" )"; then
- printf "\\r[FAIL] Retrieve phpPgAdmin login page\\n"
+ print_fail "1" "1" "Retrieve phpPgAdmin login page"
run "curl -sS 'http://localhost:${HOST_PORT_HTTPD}${URL}servers.php' || true"
run "curl -sSI 'http://localhost:${HOST_PORT_HTTPD}${URL}servers.php' || true"
rm -f cookie.txt
@@ -171,7 +171,7 @@ if [ "${DEVILBOX_VENDOR_PHPPGADMIN_AUTOLOGIN}" != "1" ]; then
else
TOKEN_URL="${TOKEN_URL//\"/}"
TOKEN_URL="${TOKEN_URL//&/&}"
- printf "\\r[OK] Retrieve phpPgAdmin token page:%s\\n" "${TOKEN_URL}"
+ print_succ "1" "1" "Retrieve phpPgAdmin token page: ${TOKEN_URL}"
fi
###
@@ -180,14 +180,14 @@ if [ "${DEVILBOX_VENDOR_PHPPGADMIN_AUTOLOGIN}" != "1" ]; then
printf "[TEST] Retrieve phpPgAdmin login token"
# 1st Try
if ! TOKEN="$( run "curl -sS --fail -c cookie.txt -b cookie.txt 'http://localhost:${HOST_PORT_HTTPD}${URL}${TOKEN_URL}' | tac | tac | grep -Eo 'loginPassword_[a-zA-Z0-9]+'" "${RETRIES}" "" "0" )"; then
- printf "\\r[FAIL] Retrieve phpPgAdmin login token\\n"
+ print_fail "1" "1" "Retrieve phpPgAdmin login token"
run "curl -sS 'http://localhost:${TOKEN_URL_URL}' || true"
run "curl -sSI 'http://localhost:${TOKEN_URL_URL}' || true"
rm -f cookie.txt
exit 1
else
TOKEN="$( echo "${TOKEN}" | head -1 )"
- printf "\\r[OK] Retrieve phpPgAdmin login token: %s\\n" "${TOKEN}"
+ print_succ "1" "1" "Retrieve phpPgAdmin login token: ${TOKEN}"
fi
###
@@ -204,7 +204,7 @@ if [ "${DEVILBOX_VENDOR_PHPPGADMIN_AUTOLOGIN}" != "1" ]; then
--data 'loginSubmit=Login' \
'http://localhost:${HOST_PORT_HTTPD}${URL}redirect.php' 2>/dev/null \
| grep -q 'Create database'" "${RETRIES}" "" "0"; then
- printf "\\r[FAIL] Submit phpPgAdmin POST login\\n"
+ print_fail "1" "1" "Submit phpPgAdmin POST login"
run "curl -sS -c cookie.txt -b cookie.txt \
--data 'subject=server' \
--data 'server=pgsql%3A5432%3Aallow' \
@@ -224,7 +224,7 @@ if [ "${DEVILBOX_VENDOR_PHPPGADMIN_AUTOLOGIN}" != "1" ]; then
rm -f cookie.txt || true
exit 1
else
- printf "\\r[OK] Submit phpPgAdmin POST login\\n"
+ print_succ "1" "1" "Submit phpPgAdmin POST login"
fi
fi
@@ -240,12 +240,12 @@ if [ "$( run "curl -sS --fail \
| tac \
| tac \
| grep -Ec 'data\">(Database|Owner|Collation|Tablespace)'" "${RETRIES}" "" "0" )" != "4" ]; then
- printf "\\r[FAIL] Evaluate successful phpPgAdmin login\\n"
+ print_fail "1" "1" "Evaluate successful phpPgAdmin login"
run "curl -sS 'http://localhost:${HOST_PORT_HTTPD}${URL}redirect.php?subject=server&server=pgsql%3A5432%3Aallow&' || true"
run "curl -sS -I 'http://localhost:${HOST_PORT_HTTPD}${URL}redirect.php?subject=server&server=pgsql%3A5432%3Aallow&' || true"
rm -f cookie.txt || true
exit 1
else
- printf "\\r[OK] Evaluate successful phpPgAdmin login\\n"
+ print_succ "1" "1" "Evaluate successful phpPgAdmin login"
fi
rm -f cookie.txt || true
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5d1268d9..0ea6f6ea 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,28 @@ Make sure to have a look at [UPDATING.md](https://github.com/cytopia/devilbox/bl
## Unreleased
+## Release v2.0.0 (2022-03-28)
+
+The goal of this release is to reduce the overall size of Docker images and bring in latest versions.
+
+**Important:** This release introduces backwards incompatible changes due to only keeping major versions of PostreSQL and therefore removing old volumes. Additionally the PostgreSQL volume names have changed. In order to guarantee a smooth transition, backup your PostgreSQL databases in the previous version before switching and then re-importing them in this version.
+
+#### Added
+- Added CakePHP integration tests for PHP 8+
+- Added `.env` variable `HTTPD_FLAVOUR` to decide between `Debian` or `Alpine` for HTTP server
+
+#### Changed
+- Changed default PostgreSQL server from `12.4` to `14-alpine` (breaking change)
+- Changed default Redis server from `6.0` to `6.2-alpine`
+- Changed default Memcached server from `1.6` to `1.6-alpine`
+- Changed default MongoDB server from `4.4` to `5.0`
+- Changed default HTTPD server flavour from `Debian` to `Alpine`
+- Use tiny Alpine version of Bind container
+
+#### Removed
+- Removed CI for MongoDB `2.8` and MongoDB `3.0` due to segfault: https://github.com/docker-library/mongo/issues/251
+
+
## Release v1.11.0 (2022-03-22)
#### Fixed
diff --git a/README.md b/README.md
index 5f4dee74..59589582 100644
--- a/README.md
+++ b/README.md
@@ -25,9 +25,15 @@
[](https://devilbox.readthedocs.io)
[](https://github.com/cytopia/devilbox/actions?workflow=Lint)
[](https://github.com/cytopia/devilbox/actions?workflow=Docs)
-[](https://github.com/cytopia/devilbox/actions?workflow=Linux)
-[](https://github.com/cytopia/devilbox/actions?workflow=Config)
-[](https://github.com/cytopia/devilbox/actions?workflow=Versions)
+
+[](https://github.com/cytopia/devilbox/actions/workflows/test-php.yml)
+[](https://github.com/cytopia/devilbox/actions/workflows/test-httpd.yml)
+[](https://github.com/cytopia/devilbox/actions/workflows/test-mysql.yml)
+[](https://github.com/cytopia/devilbox/actions/workflows/test-memcd.yml)
+[](https://github.com/cytopia/devilbox/actions/workflows/test-mongo.yml)
+[](https://github.com/cytopia/devilbox/actions/workflows/test-pgsql.yml)
+[](https://github.com/cytopia/devilbox/actions/workflows/test-redis.yml)
+
Support for valid https out of the box.
@@ -304,7 +310,7 @@ Every single attachable container comes with many different versions. In order t