nix based phpunit

This commit is contained in:
Robin Appelman 2025-10-25 23:29:15 +02:00
commit 7e87dd23e6
3 changed files with 124 additions and 132 deletions

View file

@ -23,16 +23,16 @@ jobs:
- run: nix flake check --keep-going - run: nix flake check --keep-going
php-versions: php-versions:
runs-on: ubuntu-22.04 runs-on: nix
name: Unit tests - PHP ${{ matrix.php-version }} name: Unit tests - PHP ${{ matrix.php-version }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
php-version: php-version:
- "8.2" - "82"
- "8.3" - "83"
- "8.4" - "84"
services: services:
samba: samba:
@ -45,138 +45,129 @@ jobs:
no; browseable = yes" no; browseable = yes"
steps: steps:
- name: Install packages
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get update
sudo apt-get install -y smbclient libsmbclient-dev
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Setup PHP - uses: https://codeberg.org/icewind/attic-action@v1
uses: https://github.com/shivammathur/setup-php@v2
with: with:
php-version: "${{ matrix.php-version }}" name: link
extensions: apcu, smbclient instance: https://cache.icewind.link
run: composer install authToken: "${{ secrets.ATTIC_TOKEN }}"
- name: Composer
run: |
cp -r $(nix build .#vendor --print-out-paths --no-link)/vendor vendor
- name: Config - name: Config
run: | run: |
echo '{"host": "samba","user": "test","password": "test","share": "test","root": ""}' > tests/config.json echo '{"host": "samba","user": "test","password": "test","share": "test","root": ""}' > tests/config.json
- name: Setup phpunit
run: |
nix build .#apps.x86_64-linux.phpunit${{ matrix.php-version }}.program
- name: PHPUnit Tests - smbclient - name: PHPUnit Tests - smbclient
uses: https://github.com/nick-invision/retry@v2 run: nix run .#phpunit${{ matrix.php-version }} -- tests -c tests/phpunit.xml
with:
timeout_minutes: 2
max_attempts: 3
retry_on: timeout
command: php ./vendor/bin/phpunit tests -c tests/phpunit.xml
env: env:
BACKEND: smbclient BACKEND: smbclient
- name: PHPUnit Tests - libsmbclient - name: PHPUnit Tests - libsmbclient
uses: https://github.com/nick-invision/retry@v2 run: |
with: mkdir -p /var/lock
timeout_minutes: 2 nix run .#phpunit${{ matrix.php-version }} -- tests -c tests/phpunit.xml
max_attempts: 3
retry_on: timeout
command: php ./vendor/bin/phpunit tests -c tests/phpunit.xml
env: env:
BACKEND: libsmbclient BACKEND: libsmbclient
smb-versions: # smb-versions:
runs-on: ubuntu-22.04 # runs-on: ubuntu-22.04
name: # name:
Unit tests - Samba ${{ matrix.server-version }} - smbclient ${{ # Unit tests - Samba ${{ matrix.server-version }} - smbclient ${{
matrix.client-version }} # matrix.client-version }}
#
strategy: # strategy:
fail-fast: false # fail-fast: false
matrix: # matrix:
client-version: # client-version:
- "4.21.4" # - "4.21.4"
- "4.20.4" # - "4.20.4"
- "4.19.5" # - "4.19.5"
- "4.18.1" # - "4.18.1"
- "4.17.7" # - "4.17.7"
- "4.16.10" # - "4.16.10"
- "4.15.13" # - "4.15.13"
- "4.14.9" # - "4.14.9"
- "4.11.17" # - "4.11.17"
server-version: # server-version:
- "latest" # - "latest"
- "4.9.4" # - "4.9.4"
- "4.8.5" # - "4.8.5"
#
services: # services:
samba: # samba:
image: "servercontainers/samba:${{ matrix.server-version }}" # image: "servercontainers/samba:${{ matrix.server-version }}"
env: # env:
ACCOUNT_test: test # ACCOUNT_test: test
UID_test: 1000 # UID_test: 1000
SAMBA_VOLUME_CONFIG_test: # SAMBA_VOLUME_CONFIG_test:
"[test]; path=/tmp; valid users = test; guest ok = no; read only = # "[test]; path=/tmp; valid users = test; guest ok = no; read only =
no; browseable = yes" # no; browseable = yes"
#
steps: # steps:
- name: Setup smbclient # - name: Setup smbclient
env: # env:
DEBIAN_FRONTEND: noninteractive # DEBIAN_FRONTEND: noninteractive
run: | # run: |
sudo apt-get update # sudo apt-get update
sudo apt install -y libjansson4 libcap2 libbsd0 libreadline8 libicu70 # sudo apt install -y libjansson4 libcap2 libbsd0 libreadline8 libicu70
sudo mkdir -p /etc/samba /var/lib/samba/private # sudo mkdir -p /etc/samba /var/lib/samba/private
echo "[global]\nclient min protocol = SMB2\nclient max protocol = SMB3" | sudo tee /etc/samba/smb.conf # echo "[global]\nclient min protocol = SMB2\nclient max protocol = SMB3" | sudo tee /etc/samba/smb.conf
sudo wget "https://github.com/icewind1991/smbclient-builder/releases/download/v0.2.0/smbclient-${{ matrix.client-version }}" -O /usr/local/bin/smbclient # sudo wget "https://github.com/icewind1991/smbclient-builder/releases/download/v0.2.0/smbclient-${{ matrix.client-version }}" -O /usr/local/bin/smbclient
sudo chmod +x /usr/local/bin/smbclient # sudo chmod +x /usr/local/bin/smbclient
- uses: actions/checkout@v4 # - uses: actions/checkout@v4
- name: Setup PHP # - name: Setup PHP
uses: https://github.com/shivammathur/setup-php@v2 # uses: https://github.com/shivammathur/setup-php@v2
with: # with:
php-version: 8.2 # php-version: 8.2
extensions: apcu, smbclient # extensions: apcu, smbclient
- name: Composer # - name: Composer
run: composer install # run: composer install
- name: Config # - name: Config
run: | # run: |
echo '{"host": "samba","user": "test","password": "test","share": "test","root": ""}' > tests/config.json # echo '{"host": "samba","user": "test","password": "test","share": "test","root": ""}' > tests/config.json
- name: PHPUnit Tests # - name: PHPUnit Tests
uses: https://github.com/nick-invision/retry@v2 # uses: https://github.com/nick-invision/retry@v2
with: # with:
timeout_minutes: 2 # timeout_minutes: 2
max_attempts: 3 # max_attempts: 3
retry_on: timeout # retry_on: timeout
command: php ./vendor/bin/phpunit tests -c tests/phpunit.xml # command: php ./vendor/bin/phpunit tests -c tests/phpunit.xml
env: # env:
BACKEND: smbclient # BACKEND: smbclient
#
alpine-test: # alpine-test:
runs-on: alpine-latest # runs-on: alpine-latest
name: Unit tests (alpine) # name: Unit tests (alpine)
#
services: # services:
samba: # samba:
image: "servercontainers/samba" # image: "servercontainers/samba"
env: # env:
ACCOUNT_test: test # ACCOUNT_test: test
UID_test: 1000 # UID_test: 1000
SAMBA_VOLUME_CONFIG_test: # SAMBA_VOLUME_CONFIG_test:
"[test]; path=/tmp; valid users = test; guest ok = no; read only = # "[test]; path=/tmp; valid users = test; guest ok = no; read only =
no; browseable = yes" # no; browseable = yes"
#
steps: # steps:
- uses: actions/checkout@v4 # - uses: actions/checkout@v4
- name: Install dependencies # - name: Install dependencies
shell: sh # shell: sh
run: | # run: |
apk add bash sudo git coreutils samba-client php composer php-curl php-iconv php-mbstring php-openssl php-zip php-phar php-tokenizer php-dom php-xml php-xmlwriter # apk add bash sudo git coreutils samba-client php composer php-curl php-iconv php-mbstring php-openssl php-zip php-phar php-tokenizer php-dom php-xml php-xmlwriter
- name: Composer # - name: Composer
run: composer install # run: composer install
- name: Config # - name: Config
run: | # run: |
echo '{"host": "samba","user": "test","password": "test","share": "test","root": ""}' > tests/config.json # echo '{"host": "samba","user": "test","password": "test","share": "test","root": ""}' > tests/config.json
- name: PHPUnit Tests - smbclient # - name: PHPUnit Tests - smbclient
uses: https://github.com/nick-invision/retry@v2 # uses: https://github.com/nick-invision/retry@v2
with: # with:
timeout_minutes: 2 # timeout_minutes: 2
max_attempts: 3 # max_attempts: 3
retry_on: timeout # retry_on: timeout
command: php ./vendor/bin/phpunit tests -c tests/phpunit.xml # command: php ./vendor/bin/phpunit tests -c tests/phpunit.xml
env: # env:
BACKEND: smbclient # BACKEND: smbclient

8
flake.lock generated
View file

@ -46,11 +46,11 @@
"phps": "phps" "phps": "phps"
}, },
"locked": { "locked": {
"lastModified": 1761424893, "lastModified": 1761438617,
"narHash": "sha256-vBYj2I6xdVImVAMU7u1CCZkZELIbbo6dzAo/9pSc6RI=", "narHash": "sha256-9j8gFMuUtd4LTOQkHBltxouXp7lvPxgE0r4uCW96Syk=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "a59a517f661f7381303588ad20c945ddf916ff5c", "rev": "a7d73a95377469d26c3cde813b32f4e8666dbfbc",
"revCount": 7, "revCount": 11,
"type": "git", "type": "git",
"url": "https://codeberg.org/icewind/flakelight-php.git" "url": "https://codeberg.org/icewind/flakelight-php.git"
}, },

View file

@ -8,7 +8,8 @@
}; };
outputs = {flakelight-php, ...}: outputs = {flakelight-php, ...}:
flakelight-php ./. { flakelight-php ./. {
vendorHash = "sha256-biMQm0+JPJxnxlnvZMpVNhd3s/KPno8LQ/kL8D5xrHU="; vendorHash = "sha256-Pj19ClD0+4ONc0i3CJQ3GroaSc/039CixNuTjhXIQy4=";
phpExtensions = all: with all; [smbclient krb5]; phpExtensions = all: with all; [smbclient krb5];
testDependencies = pkgs: with pkgs; [samba];
}; };
} }