name: Core test Linux (REUSABLE) on: workflow_call: inputs: RELEASE: required: true type: string jobs: tests: runs-on: ubuntu-latest steps: # Prepare - name: Checkout source code uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Set up Python 3.11 uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # v4.7.1 with: python-version: "3.11" - name: Install Firefox manually and dependencies run: | sudo apt purge -y firefox sudo apt update sudo add-apt-repository ppa:mozillateam/ppa -y echo ' Package: * Pin: release o=LP-PPA-mozillateam Pin-Priority: 1001 ' | sudo tee /etc/apt/preferences.d/mozilla-firefox sudo apt update sudo apt install --no-install-recommends -y openssl git nodejs tar bzip2 wget curl grep libx11-xcb1 libappindicator3-1 libasound2 libdbus-glib-1-2 libxtst6 libxt6 php-fpm unzip firefox - name: Download geckodriver uses: nick-fields/retry@14672906e672a08bd6eeb15720e9ed3ce869cdd4 # v2.9.0 with: max_attempts: 3 timeout_minutes: 20 command: | GECKODRIVER_VERSION=`curl -i https://github.com/mozilla/geckodriver/releases/latest | grep -Po 'v[0-9]+\.[0-9]+\.[0-9]+'` && \ wget -O geckodriver.tar.gz -w 5 https://github.com/mozilla/geckodriver/releases/download/$GECKODRIVER_VERSION/geckodriver-$GECKODRIVER_VERSION-linux64.tar.gz sudo tar -xzf geckodriver.tar.gz -C /usr/local/bin sudo chmod +x /usr/local/bin/geckodriver rm -f geckodriver.tar.gz - name: Login to ghcr uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Pull BW linux ubuntu test image run: docker pull ghcr.io/bunkerity/ubuntu-tests:${{ inputs.RELEASE }} - name: Copy deb file to host run: | container_id=$(docker create "ghcr.io/bunkerity/ubuntu-tests:${{ inputs.RELEASE }}") docker cp "$container_id:/opt/bunkerweb_${{ inputs.RELEASE }}-1_amd64.deb" "/tmp/bunkerweb.deb" docker rm "$container_id" - name: Install BunkerWeb run: | sudo apt install -y gnupg2 ca-certificates lsb-release ubuntu-keyring curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list sudo apt update sudo apt install -y nginx=1.24.0-1~jammy - name: Fix version without a starting number if: inputs.RELEASE == 'testing' || inputs.RELEASE == 'dev' || inputs.RELEASE == 'ui' run: echo "force-bad-version" | sudo tee -a /etc/dpkg/dpkg.cfg - name: Install BunkerWeb run: sudo apt install -fy /tmp/bunkerweb.deb - name: Edit configuration files run: | # Misc echo "127.0.0.1 www.example.com" | sudo tee -a /etc/hosts echo "127.0.0.1 app1.example.com" | sudo tee -a /etc/hosts # BunkerWeb echo "SERVER_NAME=www.example.com" | sudo tee /etc/bunkerweb/variables.env echo "HTTP_PORT=80" | sudo tee -a /etc/bunkerweb/variables.env echo "HTTPS_PORT=443" | sudo tee -a /etc/bunkerweb/variables.env echo 'DNS_RESOLVERS=9.9.9.9 8.8.8.8 8.8.4.4' | sudo tee -a /etc/bunkerweb/variables.env echo 'API_LISTEN_IP=127.0.0.1' | sudo tee -a /etc/bunkerweb/variables.env echo "MULTISITE=yes" | sudo tee -a /etc/bunkerweb/variables.env echo "LOG_LEVEL=info" | sudo tee -a /etc/bunkerweb/variables.env echo "USE_BUNKERNET=no" | sudo tee -a /etc/bunkerweb/variables.env echo "USE_BLACKLIST=no" | sudo tee -a /etc/bunkerweb/variables.env echo "DISABLE_DEFAULT_SERVER=yes" | sudo tee -a /etc/bunkerweb/variables.env echo "USE_CLIENT_CACHE=yes" | sudo tee -a /etc/bunkerweb/variables.env echo "USE_GZIP=yes" | sudo tee -a /etc/bunkerweb/variables.env echo "DATASTORE_MEMORY_SIZE=384m" | sudo tee -a /etc/bunkerweb/variables.env echo "www.example.com_USE_UI=yes" | sudo tee -a /etc/bunkerweb/variables.env echo "www.example.com_SERVE_FILES=no" | sudo tee -a /etc/bunkerweb/variables.env echo "www.example.com_USE_REVERSE_PROXY=yes" | sudo tee -a /etc/bunkerweb/variables.env echo "www.example.com_REVERSE_PROXY_URL=/admin" | sudo tee -a /etc/bunkerweb/variables.env echo "www.example.com_REVERSE_PROXY_HOST=http://127.0.0.1:7000" | sudo tee -a /etc/bunkerweb/variables.env echo "www.example.com_INTERCEPTED_ERROR_CODES=400 405 413 429 500 501 502 503 504" | sudo tee -a /etc/bunkerweb/variables.env echo "ADMIN_USERNAME=admin" | sudo tee /etc/bunkerweb/ui.env echo "ADMIN_PASSWORD=S\$cr3tP@ssw0rd" | sudo tee -a /etc/bunkerweb/ui.env sudo chown nginx:nginx /etc/bunkerweb/variables.env /etc/bunkerweb/ui.env sudo chmod 777 /etc/bunkerweb/variables.env /etc/bunkerweb/ui.env - name: Run tests run: | cd ./tests/ui MAKEFLAGS="-j $(nproc)" find . -name "requirements.txt" -exec pip install --no-cache-dir --require-hashes --no-deps -r {} \; touch test.txt zip test.zip test.txt rm test.txt echo '{ "id": "discord", "name": "Discord", "description": "Send alerts to a Discord channel (using webhooks).", "version": "0.1", "stream": "no", "settings": {} }' | tee plugin.json zip discord.zip plugin.json rm plugin.json ./tests.sh "linux" env: MODE: ${{ inputs.RELEASE }}