Giter Site home page Giter Site logo

laminas / laminas-continuous-integration-action Goto Github PK

View Code? Open in Web Editor NEW
17.0 17.0 19.0 486 KB

GitHub Action for running a QA check

License: BSD 3-Clause "New" or "Revised" License

Dockerfile 36.64% Shell 62.82% PHP 0.54%
github-actions ci continuous-integration

laminas-continuous-integration-action's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

laminas-continuous-integration-action's Issues

Allow configuration flag passed to the container to disable composer dependency installation

Feature Request

Q A
New Feature yes

Summary

The CI matrix generates jobs which do not depend on PHP and therefore do not need installed composer dependencies.
I'd love to implement a JOB flag which tells the container to not install composer dependencies.

i.e. requiresComposerDependencies or something else.

Refs:

Remove `phpdbg`, migrate to `pcov`

See sebastianbergmann/php-code-coverage#945

According to upstream maintainers, phpdbg coverage support is not really maintained, and we should therefore migrate away from it.

We will likely need to ship pcov with our container, and use that for running tests.

We may also need to remove phpdbg, since running phpdbg with pcov installed leads to segfaults.

Missing PHP 8.2 related information in `README.md`

Bug Report

Q A
Version(s) 1.26

Summary

The list of supported PHP versions does not include PHP 8.2.
Also not 100% sure if all extensions listed in the README.md are installed for PHP 8.2, might need a double check.

Environment sometimes gets lost when executing unit tests

Bug Report

Q A
Version(s) 1.7.1

Summary

Sometimes, environment variables seem to get lost.
COMPOSER_ROOT_VERSION is set during pre-install.sh by one of the shell scripts using "the github way".
https://github.com/laminas/laminas-cache-storage-adapter-blackhole/runs/2470602165?check_suite_focus=true#step:3:19

"The github way" means: https://github.com/laminas/laminas-cache-storage-adapter-blackhole/blob/fe7bb4045fae6a71f8179744829aab6ddf47521e/.laminas-ci/composer-root-version.sh#L28

Current behavior

Sometimes, builds are failing and sometimes, builds work as expected.
I am not 100% sure but I wonder if there is something in this action which causes problems with the environment variables.

How to reproduce

TBH, I don't know. I've used this way in almost all storage adapters. Sometime it worked as it should and sometimes I had issues.

Expected behavior

Composer is always able to resolve the dependency tree due to the fact that COMPOSER_ROOT_VERSION ENV variable is available by the file stored in $GITHUB_ENV.

Use php.ini-development by default instead of production one

(From shivammathur/setup-php#450, which applies here too.)

Hi, currently this GA leverages OndΕ™ej SurΓ½ repositories (https://deb.sury.org/), which select and use the php.ini-production config from php-src, which sets for example error_reporting to E_ALL & ~E_DEPRECATED & ~E_STRICT instead of E_ALL:

$ docker run --rm -it --entrypoint /bin/bash ghcr.io/laminas/laminas-continuous-integration:1.7.1
root@372e50e97cc6:/# grep -rn ^error_reporting /etc/php/
/etc/php/5.6/cli/php.ini:449:error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
/etc/php/7.4/cli/php.ini:465:error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
/etc/php/7.1/cli/php.ini:460:error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
/etc/php/7.0/cli/php.ini:445:error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
/etc/php/8.0/cli/php.ini:486:error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
/etc/php/7.2/cli/php.ini:457:error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
/etc/php/7.3/cli/php.ini:457:error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

But as a Continuous Integration services, it would be preferable to have the php.ini-development one.

Here's the full diff for PHP 8.0 between the two. You can see that all the differences are worthy for a CI environment:

--- php.ini-production  2021-04-30 09:12:53.773278488 +0200
+++ php.ini-development 2021-04-30 09:12:57.181308089 +0200
@@ -83,7 +83,7 @@
 ; development version only in development environments, as errors shown to
 ; application users can inadvertently leak otherwise secure information.

-; This is the php.ini-production INI file.
+; This is the php.ini-development INI file.

 ;;;;;;;;;;;;;;;;;;;
 ; Quick Reference ;
@@ -376,7 +376,7 @@
 ; Default Value: Off
 ; Development Value: Off
 ; Production Value: On
-zend.exception_ignore_args = On
+zend.exception_ignore_args = Off

 ; Allows setting the maximum string length in an argument of a stringified stack trace
 ; to a value between 0 and 1000000.
@@ -384,9 +384,7 @@
 ; Default Value: 15
 ; Development Value: 15
 ; Production Value: 0
-; In production, it is recommended to set this to 0 to reduce the output
-; of sensitive information in stack traces.
-zend.exception_string_param_max_len = 0
+zend.exception_string_param_max_len = 15

 ;;;;;;;;;;;;;;;;;
 ; Miscellaneous ;
@@ -483,7 +481,7 @@
 ; Development Value: E_ALL
 ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
 ; http://php.net/error-reporting
-error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
+error_reporting = E_ALL

 ; This directive controls whether or not and where PHP will output errors,
 ; notices and warnings too. Error output is very useful during development, but
@@ -500,7 +498,7 @@
 ; Development Value: On
 ; Production Value: Off
 ; http://php.net/display-errors
-display_errors = Off
+display_errors = On

 ; The display of errors which occur during PHP's startup sequence are handled
 ; separately from display_errors. We strongly recommend you set this to 'off'
@@ -509,7 +507,7 @@
 ; Development Value: On
 ; Production Value: Off
 ; http://php.net/display-startup-errors
-display_startup_errors = Off
+display_startup_errors = On

 ; Besides displaying errors, PHP can also log errors to locations such as a
 ; server-specific log, STDERR, or a location specified by the error_log
@@ -1199,7 +1197,7 @@

 ; Enable / Disable collection of memory usage statistics by mysqlnd which can be
 ; used to tune and monitor MySQL operations.
-mysqlnd.collect_memory_statistics = Off
+mysqlnd.collect_memory_statistics = On

 ; Records communication from all extensions using mysqlnd to the specified log
 ; file.
@@ -1572,7 +1570,7 @@
 ; Development Value: 1
 ; Production Value: -1
 ; http://php.net/zend.assertions
-zend.assertions = -1
+zend.assertions = 1

 ; Assert(expr); active by default.
 ; http://php.net/assert.active
@@ -1882,7 +1880,7 @@

 ; Enables or disables copying of PHP code (text segment) into HUGE PAGES.
 ; This should improve performance, but requires appropriate OS configuration.
-;opcache.huge_code_pages=1
+;opcache.huge_code_pages=0

 ; Validate cached file permissions.
 ;opcache.validate_permission=0

Unable to locate package msodbcsql17

Bug Report

Q A
Version(s) 1.33.x

Summary

When trying to build the container, I get the error mentioned in the title.

Current behavior

33.00 Reading package lists...
33.38 Building dependency tree...
33.46 Reading state information...
33.47 E: Unable to locate package msodbcsql17

The current builds seem to pass due to build caching. Not 100% sure about it as I am still very newbish when it comes to these kind of details.

Package seems to be available:

https://packages.microsoft.com/ubuntu/22.04/prod/pool/main/m/msodbcsql17/

How to reproduce

docker build . -t laminas/laminas-continuous-integration-action:latest

Ensure you have caches flushed.

Expected behavior

Build is passing.

Consider running tests **without** `src/` changes, to validate that they must **fail**

RFC

Q A
Proposed Version(s) ?
BC Break? No

Goal

We want to verify that the tests accompanying a source change do validate the source change.

Background

This was discussed with @ondrejmirtes in private chat.

When receiving a source change, the accompanying tests must be verified for their quality.

In order to do that, we could:

  1. checkout the changes
  2. reset source(s) (based on composer.json paths) to their pre-patch state
  3. run the tests, expect them to fail

Considerations

  • what to do when only tests are changed?
  • what to do when only sources are changed?
  • what to do when composer.lock changed together with the tests?

Proposal(s)

  1. we will need a CLI utility that verifies this behavior inside the continuous-integration container
  2. we will need to adjust the CI matrix action to generate the appropriate verification job
  3. we only operate on locked dependencies

`unzip` is missing inside the container

Feature Request

Q A
New Feature yes
BC Break no

Summary

Composer shows the warning that there is no 7z or unzip command available. Therefore, composer uses the PHP zip extension to unzip downloaded artifacts.
To speed up the installation of composer dependencies, we could simply add zip to the packages to install while building the container.


Package operations: 86 installs, 0 updates, 0 removals
As there is no 'unzip' nor '7z' command installed zip files are being unpacked using the PHP zip extension.
This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost.
Installing 'unzip' or '7z' (21.01+) may remediate them.

feat: Linting for bash scripts

Feature Request

Q A
New Feature yes
RFC yes
BC Break no

Summary

With #24, I somehow added invalid syntax which wasn't detected during review.
To avoid having such problem again, I'd like to add something ShellCheck to the CI of this repository (which does not have any till yet) as well as for all other projects which are using the laminas CI tooling.

Not sure if there are better tools to verify the syntax of bash scripts, so feedback is welcome.

PHP 8.3 extensions are not installable via `pecl`

Bug Report

Q A
Version(s) 1.35.0

Summary

When trying to install packages via pecl, the phpize step is already failing due to missing files.

Current behavior

running: phpize
Configuring for:
PHP Api Version:         20230831
Zend Module Api No:      20230831
Zend Extension Api No:   420230831
cp: cannot stat 'shtool': No such file or directory
cp: cannot stat 'config.guess': No such file or directory
cp: cannot stat 'config.sub': No such file or directory
cp: cannot stat 'ltmain.sh': No such file or directory
chmod: cannot access '/tmp/pear/temp/igbinary/build/shtool': No such file or directory
shtool at '/tmp/pear/temp/igbinary/build/shtool' does not exist or is not executable.
Make sure that the file exists and is executable and then rerun this script.

How to reproduce

Try to install any package (for example igbinary)

Expected behavior

Pecl installation works as expected.


Ref: https://github.com/laminas/laminas-serializer/actions/runs/6370868652/job/17292320144?pr=49
Ref: oerdnj/deb.sury.org#2025

Running into PHP memory limits when running `infection/infection` with this CI action

Bug Report

Q A
Version(s) 1.11.4

Summary

When running infection/infection with this action, relatively low memory limits are hit in this job:

https://github.com/laminas/laminas-ci-matrix-action/blob/71aa5bef47be3a9d3e1a3865f43caf16708ed847/src/create-jobs.js#L175-L191

An example is visible at https://github.com/Roave/BackwardCompatibilityCheck/runs/4634739860?check_suite_focus=true#step:3:479

[PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 8192 bytes) in /github/workspace/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php on line 69]

134217728 is 128Mb, which is something that is prohibitively low for PHP: we should really use -dmemory_limit=-1 here πŸ€”

Container update

Feature Request

Q A
New Feature yes

Summary

This issue is used to generate proper release notes.
With the upcoming release, we are bumping all PHP versions and tools.

Syntax error with ini values in laminas-ci.json

I'm having some issues with adding ini values to .laminas-ci.json - I can't figure out why, but it appears that all the ini values are getting joined to a single line with spaces instead of a new line.

With some test json, running the below on my local machine does exactly what it's supposed to - each element is joined with \n as you'd expect, but still I have "Syntax error, unexpected =" when PHP parses the 99-settings.ini in CI.

INI=$(echo "${JOB}" | jq -r '.ini | join("\n")')

So far, I've tried

  • cat path/to/99-settings.ini to inspect the .ini file to verify the issue
  • tried adding extra empty strings in the list of ini values ["foo=bar", "", "other=baz"]
  • tried just a single ini setting - ["foo=bar"]

I can see that the matrix action is sending sane JSON with a prepended memory_limit=-1 and everything was working fine just a few day ago πŸ€·β€β™‚οΈ

Improvements to reporting of psalm baselined errors

Feature Request

Q A
New Feature yes
RFC yes
BC Break no

Summary

Psalm baseline feature has a significant downside that it could allow reported issues to be silenced without proper review or consideration.
Extra care is required to review baseline diff and while added entries might look innocuous enough they might be pointing at a real problem visible in context.

Proper review currently requires checking component locally, resetting the baseline changes and then running the psalm. Occasionally due to runtime PHP version differences psalm will report differently which further complicates review.

I suggest we introduce two new additional psalm jobs.


Job to report newly baselined psalm errors in the current PR

No failure psalm job that would checkout targeted branch baseline to run against with the exception of explicitly ignoring unused baseline entries.

This job would be an important review tool that would allow to see exactly which problems were baselined by a given PR without having to guess from baseline diff or having to checkout code and run psalm locally.

I think this job should report found errors as check annotations on the PR as well, although with reduced severity - notice instead of error.
Check annotations with the current beta feature are shown in context even for files that were not directly changed by the PR. This allows to view error in context without having to navigate to the code in a separate tab.

GHA check annotation on unchanged files

To distinguish real psalm errors from baselined errors this job should rewrite github formatted psalm output to report as Notice instead of Warning or Error. Custom output formatter would be right way to do it but simple sed will work just as fine, until and unless github changes format.
See GHA docs: Setting a notice message and Psalm GithubActionsReport formatter

In slack discussion @Ocramius expressed skepticism about usefulness of annotations on pull request Files Changed tab over the visual noise they create. I believe annotations should be utilized for a couple reasons:

  • They would make significantly easier to review and approve or reject baselined issues especially because they are shown in context. Reviewers would be immediately alerted of any possible issues without having to dive into green action logs or extra carefully considering baseline diff.
  • Psalm errors reported as annotation events when baselined, although at lesser severity, would send a strong indication for contributors that they can not just sweep any issue under the rug with the baseline.
  • Annotation would make easier to refer in submitted review, to tell which issue must be actually fixed for the PR to succeed. As opposed to having to link to actions log. They would better facilitate dialog and give better chance to challenge and defend decisions to add to baseline.
  • Minor benefit in annotations from last action run remaining in PR long after the action log is gone, which is 90 days currently iirc.

Job to report all psalm baselined errors in action log

No failure --ignore-baseline run with default output formater that would not show in PR as failure or as PR annotations.
This job would allow to see in action log exactly which issues are currently baselined.

Bonus points for reporting total number of errors found as check notice message to be displayed as annotation on PR with something like 152 baselined psalm errors found. The way github shows annotations with "View workflow job for this annotation" button would serve as a way to increase awareness for contributors and link directly at reported baselined errors without getting in the way.

Update container for latest `php-memcached`

Bug Report

Q A
Version(s) 1.19.1

Summary

Some unit tests started failing on PHP 8.1 due to some weird type-issues in the memcached extension.
This was fixed 2 weeks ago with the release of v3.2.0.

Current behavior

Tests are failing due to a type-mismatch:

1) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testBasicUsage
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:89

2) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testGetItem
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:162

3) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testGetItems
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:189

4) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testHasItem
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:247

5) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testClear
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:264

6) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testDeleteItem
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:297

7) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testDeleteItems
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:317

8) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testSave
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:343

9) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testSaveExpired
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:358

10) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testSaveWithoutExpire
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:373

11) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testDeferredSave
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:281
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:403

12) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testDeferredSaveWithoutCommit
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:281
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:70
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:453

13) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testCommit
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:281
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:479

14) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testExpiration
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:[500](https://github.com/laminas/laminas-cache-storage-adapter-memcached/runs/5694632631?check_suite_focus=true#step:4:500)

15) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testExpiresAt
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:[517](https://github.com/laminas/laminas-cache-storage-adapter-memcached/runs/5694632631?check_suite_focus=true#step:4:517)

16) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testExpiresAtWithNull
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:[532](https://github.com/laminas/laminas-cache-storage-adapter-memcached/runs/5694632631?check_suite_focus=true#step:4:532)

17) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testExpiresAfterWithNull
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:547

18) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testKeyLength
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:562

19) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testDataTypeString
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:640

20) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testDataTypeInteger
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:655

21) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testDataTypeNull
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:670

22) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testDataTypeFloat
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:688

23) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testDataTypeBoolean
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:704

24) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testDataTypeArray
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:721

25) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testDataTypeObject
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:739

26) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testBinaryData
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:760

27) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testIsHit
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:774

28) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testIsHitDeferred
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:281
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:794

29) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testSaveDeferredWhenChangingValues
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:281
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:815

30) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testSaveDeferredOverwrite
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:281
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:837

31) LaminasTest\Cache\Storage\Adapter\Psr\CacheItemPool\MemcachedIntegrationTest::testSavingObject
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:421
/github/workspace/vendor/laminas/laminas-cache/src/Psr/CacheItemPool/CacheItemPoolDecorator.php:236
/github/workspace/vendor/cache/integration-tests/src/CachePoolTest.php:850

32) LaminasTest\Cache\Storage\Adapter\Psr\SimpleCache\MemcachedIntegrationTest::testSetMultiple
Laminas\Cache\Psr\SimpleCache\SimpleCacheException: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:323
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:243
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:252

Caused by
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:241
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:252

33) LaminasTest\Cache\Storage\Adapter\Psr\SimpleCache\MemcachedIntegrationTest::testSetMultipleWithIntegerArrayKey
Laminas\Cache\Psr\SimpleCache\SimpleCacheException: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:323
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:243
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:264

Caused by
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:241
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:264

34) LaminasTest\Cache\Storage\Adapter\Psr\SimpleCache\MemcachedIntegrationTest::testSetMultipleTtl
Laminas\Cache\Psr\SimpleCache\SimpleCacheException: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:323
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:243
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:278

Caused by
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:241
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:278

35) LaminasTest\Cache\Storage\Adapter\Psr\SimpleCache\MemcachedIntegrationTest::testSetMultipleWithGenerator
Laminas\Cache\Psr\SimpleCache\SimpleCacheException: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:323
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:243
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:313

Caused by
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:241
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:313

36) LaminasTest\Cache\Storage\Adapter\Psr\SimpleCache\MemcachedIntegrationTest::testSetMultipleValidKeys with data set #0 ('AbC19_.')
Laminas\Cache\Psr\SimpleCache\SimpleCacheException: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:323
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:243
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:721

Caused by
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:241
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:721

37) LaminasTest\Cache\Storage\Adapter\Psr\SimpleCache\MemcachedIntegrationTest::testSetMultipleValidKeys with data set #1 ('12345678901234567890123456789...901234')
Laminas\Cache\Psr\SimpleCache\SimpleCacheException: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:323
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:243
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:721

Caused by
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:241
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:721

38) LaminasTest\Cache\Storage\Adapter\Psr\SimpleCache\MemcachedIntegrationTest::testSetMultipleValidData with data set #0 ('AbC19_.')
Laminas\Cache\Psr\SimpleCache\SimpleCacheException: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:323
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:243
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

Caused by
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:241
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

39) LaminasTest\Cache\Storage\Adapter\Psr\SimpleCache\MemcachedIntegrationTest::testSetMultipleValidData with data set #1 (4711)
Laminas\Cache\Psr\SimpleCache\SimpleCacheException: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:323
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:243
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

Caused by
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:241
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

40) LaminasTest\Cache\Storage\Adapter\Psr\SimpleCache\MemcachedIntegrationTest::testSetMultipleValidData with data set #2 (47.11)
Laminas\Cache\Psr\SimpleCache\SimpleCacheException: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:323
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:243
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

Caused by
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:241
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

41) LaminasTest\Cache\Storage\Adapter\Psr\SimpleCache\MemcachedIntegrationTest::testSetMultipleValidData with data set #3 (true)
Laminas\Cache\Psr\SimpleCache\SimpleCacheException: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:323
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:243
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

Caused by
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:241
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

42) LaminasTest\Cache\Storage\Adapter\Psr\SimpleCache\MemcachedIntegrationTest::testSetMultipleValidData with data set #4 (null)
Laminas\Cache\Psr\SimpleCache\SimpleCacheException: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:323
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:243
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

Caused by
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:241
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

43) LaminasTest\Cache\Storage\Adapter\Psr\SimpleCache\MemcachedIntegrationTest::testSetMultipleValidData with data set #5 (array('value'))
Laminas\Cache\Psr\SimpleCache\SimpleCacheException: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:323
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:243
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

Caused by
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:241
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

44) LaminasTest\Cache\Storage\Adapter\Psr\SimpleCache\MemcachedIntegrationTest::testSetMultipleValidData with data set #6 (stdClass Object ())
Laminas\Cache\Psr\SimpleCache\SimpleCacheException: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:323
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:243
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

Caused by
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache/src/Psr/SimpleCache/SimpleCacheDecorator.php:241
/github/workspace/vendor/cache/integration-tests/src/SimpleCacheTest.php:754

45) LaminasTest\Cache\Storage\Adapter\MemcachedTest::testGetMetadatas
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache-storage-adapter-test/src/AbstractCommonAdapterTest.php:419

46) LaminasTest\Cache\Storage\Adapter\MemcachedTest::testGetMetadatasWithEmptyNamespace
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache-storage-adapter-test/src/AbstractCommonAdapterTest.php:419
/github/workspace/vendor/laminas/laminas-cache-storage-adapter-test/src/AbstractCommonAdapterTest.php:440

47) LaminasTest\Cache\Storage\Adapter\MemcachedTest::testSetGetHasAndRemoveItemsWithoutNamespace
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache-storage-adapter-test/src/AbstractCommonAdapterTest.php:474

48) LaminasTest\Cache\Storage\Adapter\MemcachedTest::testSetGetHasAndRemoveItemsWithNamespace
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache-storage-adapter-test/src/AbstractCommonAdapterTest.php:[544](https://github.com/laminas/laminas-cache-storage-adapter-memcached/runs/5694632631?check_suite_focus=true#step:4:544)

49) LaminasTest\Cache\Storage\Adapter\MemcachedTest::testSetAndGetExpiredItems
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache-storage-adapter-test/src/AbstractCommonAdapterTest.php:[636](https://github.com/laminas/laminas-cache-storage-adapter-memcached/runs/5694632631?check_suite_focus=true#step:4:636)

50) LaminasTest\Cache\Storage\Adapter\MemcachedTest::testCheckAndSetItem
TypeError: Memcached::cas(): Argument #4 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:416
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:989
/github/workspace/vendor/laminas/laminas-cache-storage-adapter-test/src/AbstractCommonAdapterTest.php:848

51) LaminasTest\Cache\Storage\Adapter\MemcachedTest::testSetAndIncrementItems
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:[716](https://github.com/laminas/laminas-cache-storage-adapter-memcached/runs/5694632631?check_suite_focus=true#step:4:716)
/github/workspace/vendor/laminas/laminas-cache-storage-adapter-test/src/AbstractCommonAdapterTest.php:[881](https://github.com/laminas/laminas-cache-storage-adapter-memcached/runs/5694632631?check_suite_focus=true#step:4:881)

52) LaminasTest\Cache\Storage\Adapter\MemcachedTest::testSetAndDecrementItems
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache-storage-adapter-test/src/AbstractCommonAdapterTest.php:[950](https://github.com/laminas/laminas-cache-storage-adapter-memcached/runs/5694632631?check_suite_focus=true#step:4:950)

53) LaminasTest\Cache\Storage\Adapter\MemcachedTest::testFlush
TypeError: Memcached::setMulti(): Argument #2 ($expiration) must be of type int, int given

/github/workspace/src/Memcached.php:348
/github/workspace/vendor/laminas/laminas-cache/src/Storage/Adapter/AbstractAdapter.php:716
/github/workspace/vendor/laminas/laminas-cache-storage-adapter-test/src/AbstractCommonAdapterTest.php:1070

How to reproduce

Run CI pipeline for laminas/laminas-cache-storage-adapter-memcached.

Expected behavior

At least those issues related to the php-memcached-dev/php-memcached#496 issue are solved.

Markdownlint: provide usable local tool

Feature Request

Q A
New Feature yes
RFC yes
BC Break yes

Summary

See laminas/laminas-form#87: I struggled to run markdownlint-cli2 locally as I don't want node to mess up my computer. At the end I used a lightweight version of the Dockerfile for the purpose:

cat <<EOF > Dockerfile
FROM node:current

RUN npm install -g markdownlint-cli2
RUN ln -s /usr/local/bin/markdownlint-cli2 /usr/local/bin/markdownlint

COPY etc-markdownlint.json /.markdownlint.json
EOF
docker build -t mdlint .
docker run -it --rm -v "$PWD/docs":"/docs" mdlint /usr/local/bin/markdownlint-cli2-fix docs/book/**/*.md

And had some joey, but we should also provide something to fix code snippets inside doc according to Laminas coding standards, see laminas/laminas-form#87 (comment)

Infection always fails if you want pcov installed

Bug Report

Q A
Version(s) latest

Summary

If you have pcov setup as an extension and you've also got infection setup, the infection run dies on sig 11.

Removing pcov as a required extension makes infection run normally - I guess pcov and phpdbg don't play nicely together.

If you need pcov for you project, this is a bit of pain because you can't opt-out of the infection run and write your own workflow without phpdbg because the run is triggered by the infection.json file.

In my case, I'm just gonna make do without pcov. Perhaps this is just a documentation issue. If so, it wold also be worth providing some helpful setup pointers for infection configuration WRT running this action successfully.

Missing `make` command which was available in previous container versions

Bug Report

Q A
Version(s) 1.16.0

Summary

With the optimization of this container, the make command started to be missing which was available previously. It was used by at least laminas-cache-storage-adapter-apcu to install the APCu extension from source and is primarily used by pecl to install PHP extensions.

Current behavior

make: command not found

How to reproduce

max@maxbookpro [~] 
β†’ docker run -it --entrypoint /bin/bash ghcr.io/laminas/laminas-continuous-integration:1.15 -c "make --version"
GNU Make 4.2.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
max@maxbookpro [~] 
β†’ docker run -it --entrypoint /bin/bash ghcr.io/laminas/laminas-continuous-integration:1.16 -c "make --version"
/bin/bash: make: command not found

Expected behavior

I'd expect make and stuff be available so that pecl can actually run OOTB without additional packages to be installed. I've thought that adding php-pear would be enough but it seems that it has no hard dependency on make.

max@maxbookpro [~] 
β†’ docker run -it --entrypoint /bin/bash ghcr.io/laminas/laminas-continuous-integration:1.15 -c "make --version"
GNU Make 4.2.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

remove --prefer-dist from composer arguments

Bug Report

Composer runs with unexpected default argument --prefer-dist .

Q A
Version(s) 1.24.0

Summary

composer runs with --prefer-dist, which seems to be overriding configuration given in composer.json (preferred-install)

Current behavior

Composer seems to run with --prefer-dist as argument. This seems save as that is the stated default.

https://github.com/laminas/laminas-continuous-integration-action/blob/1.25.x/entrypoint.sh#L89

However adding this option will result in installing all packages with prefer source even if one configures via composer.json to prefer source for a specific package.

"config": {
        "preferred-install": {
            "my-org/*": "source"
        }
    }

How to reproduce

see https://github.com/basz/standard-projections/runs/8186520753 for an example of this.

Resulting in a missing test files from a different repo from the same org.

https://github.com/basz/standard-projections/runs/8186520753?check_suite_focus=true#step:3:457

A work-around is to add --prefer-source as additional argument which overrides --prefer-dist, but that becomes slow pretty.

Expected behavior

Composer should install with a minimum of assumptions and let end users choose additional arguments. I would expect --prefer-dist not be added as a default.

Extend `COMPOSER_ARGS` with `--no-scripts`

Feature Request

Q A
New Feature yes
BC Break maybe

Summary

In mezzio/mezzio-skeleton#54 we found out, that the project is not tested at all. This is due to the fact that it provides pre-install-cmd script to interact with a potential user when using composer create-project.
After the project finishes up installing the user-requested packages, it cleans-up the project which also removes the unit tests which are related to the component (as it is not needed in created projects).

This is due to the fact, that composer does not pass --no-scripts when composer install (e.g.) is being executed.

I would like to request either to add --no-scripts to the COMPOSER_ARGS or to add a way to provide additional (or exclusive) COMPOSER_ARGS to the JOB which overrule the existing COMPOSER_ARGS.

Feedback is very welcome.

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Pending Branch Automerge

These updates await pending status checks before automerging. Click on a checkbox to abort the branch automerge, and create a PR instead.

  • Lock file maintenance

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

composer
composer.json
  • roave/backward-compatibility-check ^8.3
  • staabm/annotate-pull-request-from-checkstyle ^1.8
dockerfile
Dockerfile
  • ubuntu 22.04
  • composer 2.7.7
github-actions
.github/workflows/build-and-push-containers.yml
  • actions/checkout v4
  • docker/setup-buildx-action v3
  • docker/login-action v3
  • docker/metadata-action v5
  • docker/build-push-action v5
.github/workflows/create-additional-action-tags.yml
  • actions/checkout v4
.github/workflows/release-on-milestone-closed.yml
  • actions/checkout v4
  • laminas/automatic-releases v1
  • laminas/automatic-releases v1
  • laminas/automatic-releases v1
  • laminas/automatic-releases v1
  • laminas/automatic-releases v1
.github/workflows/shellcheck.yml
  • actions/checkout v4
  • reviewdog/action-shellcheck v1
npm
setup/markdownlint/package.json
  • markdownlint-cli2 0.13.0

  • Check this box to trigger a request for Renovate to run again on this repository

Add automated link checker

Feature Request

Beside the Markdown linting it would be great if we can check all the links in the Markdown files.

Q A
New Feature yes
BC Break no

Summary

A potential candidate would be markdown-link-check which can be installed via npm.

Stable PHP version should be changed to PHP 8.0

Feature Request

Q A
New Feature yes

Summary

As of now, stable PHP version in this container is PHP 7.4.
Since 7.4 is moved to EOL on 2022-11-28, we should modify the default PHP version in this container to PHP 8.0 as new stable.

The change will most likely have no impact on this repository at all since every job MUST provide the PHP version anyways. So the change is more a minor change.


I will also create an issue in the matrix container as we have to modify the change there as well.

Set `memory_limit=-1` by default

Feature Request

Q A
New Feature yes
RFC yes
BC Break no

Summary

Our CI runs often run infection/infection, which is memory-intensive (unavoidable).

I think that setting a memory limit is an artificial limitation that is already well enforced by the GitHub Actions infrastructure (should we hit it): we should probably have memory_limit=-1 by default.

A memory limit enforced PHP-side doesn't give us any advantage, since it's mostly detrimental in non-web contexts anyway (and should be managed by a supervisor process anyway).

Ref: laminas/automatic-releases@af78115

Use `--ignore-platform-req=php+` for ignoring PHP deps

Feature Request

Q A
New Feature yes
RFC no
BC Break no

Summary

Composer with v2.2 released support for ignoring upper bounds of platform requirements.
To do so, adding the + suffix to the platform requirement will suffice.

This is quite useful, since --ignore-platform-req=php will mostly ignore any dependency and thus, depending on the constraint ranges, will also allow older PHP versions which weren't supported previously. This must not be related to laminas components but since laminas does sometimes use transitive dependencies, these dependencies could have a more wider range of supported PHP versions which then might install dependencies in case of --prefer-lowest which do definitely not support the latest PHP version we are actually trying to test.


From composer documentation:

--ignore-platform-req: ignore a specific platform requirement(php, hhvm, lib-* and ext-*) and force the installation even if the local machine does not fulfill it. Multiple requirements can be ignored via wildcard. Appending a + makes it only ignore the upper-bound of the requirements. For example, if a package requires php: ^7, then the option --ignore-platform-req=php+ would allow installing on PHP 8, but installation on PHP 5.6 would still fail.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.