Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[3.x] L10 compatibility #1065

Merged
merged 18 commits into from
Feb 16, 2023
Merged

[3.x] L10 compatibility #1065

merged 18 commits into from
Feb 16, 2023

Conversation

saade
Copy link
Contributor

@saade saade commented Feb 15, 2023

Hi!

This PR adds L10 compatibility!

NOTE: needs stancl/virtualcolumn AND stancl/jobpipeline to support 10.x first. PRs opened.

archtechx/virtualcolumn#12 archtechx/virtualcolumn#11

archtechx/jobpipeline#12

@StefanoMantero
Copy link

36j16g

@jetwes
Copy link

jetwes commented Feb 16, 2023

Please add this

@stancl
Copy link
Member

stancl commented Feb 16, 2023

The code should be fully updated now. L9 tests are passing, but L10 tests are failing with this message:

Package laravel/framework at version ^10.0 has a PHP requirement incompatible with your PHP version, PHP extensions and Composer version

The job seems to use PHP 8.1 correctly, as well as composer v2. So maybe some PHP extensions were added that we don't install in our Dockerfile? But looking at the 9.x & 10.x composer.json, the required PHP extensions are identical.

The tests seem to work for me locally though, so the issue only exists on GH. I might try just updating the Dockerfile to what we have in v4.

@stancl stancl linked an issue Feb 16, 2023 that may be closed by this pull request
@StefanoMantero
Copy link

The tests seem to work for me locally though, so the issue only exists on GH. I might try just updating the Dockerfile to what we have in v4.

Sounds like a plan!

@stancl
Copy link
Member

stancl commented Feb 16, 2023

Actually the issue might be the composer version. For some reason the docker image installs this:

Composer (version 2.0.3) successfully installed to: /usr/local/bin/composer

While Laravel 10 requires composer 2.2. No idea why the installer would go for an older composer version but a new Docker image should fix it anyway.

@jetwes
Copy link

jetwes commented Feb 16, 2023

I think you have to push PHP version in composer.json to 8.1 instead of 8.0

Copy link

@jetwes jetwes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in composer.json "php": "^8.0|^8.1",

@stancl
Copy link
Member

stancl commented Feb 16, 2023

^8.0 supports 8.0, 8.1,, 8.2, ...

@jetwes
Copy link

jetwes commented Feb 16, 2023

^8.0 supports 8.0, 8.1,, 8.2, ...

sure - you're right

@saade
Copy link
Contributor Author

saade commented Feb 16, 2023

@stancl do you know ACT? With it you can run your GH actions locally and its compatible with all actions. I've used in the past and worked pretty well.

@stancl
Copy link
Member

stancl commented Feb 16, 2023

Since we dockerize our tests, CI and local tests are very similar already. The issue here is (or was, I may have just fixed it) something GH Actions-specific. I haven't used ACT but I'm not sure if it'd be helpful here when locally all docker-related things work properly for me but they don't on GH.

If the tests finally pass (or at least run — there are still some minor things to fix in code for L10 support), then the two issues were:

  1. Microsoft's unixodbc-dev being broken. This was fixed by specifying an older stable version
  2. Specifying PHP 8.0 as 8.0 instead of "8.0" in the CI matrix, which apparently converted it to a float and then an int, resulting in the PHP_VERSION variable in docker being 8 instead of 8.0

@stancl
Copy link
Member

stancl commented Feb 16, 2023

The tests did run, here are the final things to fix in code. I'd appreciate any help with these.

(fixed) TypeError: PDO::prepare(): Argument #1 ($query) must be of type string, Illuminate\Database\Query\Expression given
1) Stancl\Tenancy\Tests\DatabaseUsersTest::users_are_created_when_permission_controlled_mysql_manager_is_used
TypeError: PDO::prepare(): Argument #1 ($query) must be of type string, Illuminate\Database\Query\Expression given

$version = $this->database()->select($this->database()->raw('select version()'))[0]->{'version()'};

Here select() doesn't accept an Expression (returned by raw()). So we need to run the raw select query in a different way.


(fixed) Error: Call to undefined method Stancl\Tenancy\Tests\EventListenerTest::hasFailed()
4) Stancl\Tenancy\Tests\EventListenerTest::database_is_not_migrated_if_creation_is_disabled
Error: Call to undefined method Stancl\Tenancy\Tests\EventListenerTest::hasFailed()

We use $this->assertFalse($this->hasFailed()); and the hasFailed() method has been removed.


(fixed) Error: Call to undefined method Doctrine\DBAL\Connection::createSchemaManager()
7) Stancl\Tenancy\Tests\TenantModelTest::autoincrement_ids_are_supported
Error: Call to undefined method Doctrine\DBAL\Connection::createSchemaManager()

No idea what this comes from. DBAL is installed as a dependency, but the createSchemaManager() is called from Laravel. Stack trace:

/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php:1112
/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php:36
/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/Grammar.php:93
/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php:243
/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php:135
/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php:108
/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php:439
/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php:269
/var/www/html/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:339
/var/www/html/tests/TenantModelTest.php:72

TenantModelTest.php:72 seems to be just a change() call in a Schema::table() block.

@saade
Copy link
Contributor Author

saade commented Feb 16, 2023

Here select() doesn't accept an Expression (returned by raw()). So we need to run the raw select query in a different way.

Its just a matter of adding ->getValue() after ->raw(). Raw now returns a expression instead of a string, so we need to cast to string using ->getValue()

@saade
Copy link
Contributor Author

saade commented Feb 16, 2023

I can take a look at the other issues after lunch.

@stancl
Copy link
Member

stancl commented Feb 16, 2023

I tried that, but getValue() also expects a Grammar argument. I think there should be some more straightforward way to do raw selects in L10.

Edit: We went with getValue($grammr), seems to be good enough.

@saade
Copy link
Contributor Author

saade commented Feb 16, 2023

Good work guys, sorry for not being able to help with this. I'm not having some spare time.

@stancl
Copy link
Member

stancl commented Feb 16, 2023

No worries, thanks a lot for all your work on these PRs!

@stancl stancl merged commit d4a9901 into archtechx:3.x Feb 16, 2023
@saade saade deleted the l10-compatibility branch February 16, 2023 16:21
stancl added a commit that referenced this pull request Feb 20, 2023
* exclude master from CI

* Add space after 'up' in 'docker-compose up-d' (#900)

* Fix ArgumentCountError on the TenantAssetsController (#894)

* Fix ArgumentCount exception on the TenantAssetsController when no `$path` is provided

* CS

* CS

* Handle null case explicitly

* code style

Co-authored-by: Bram Wubs <bram@sibi.nl>
Co-authored-by: Samuel Štancl <samuel@archte.ch>

* Add support for nested tenant config override (#920)

* feat: add support for nested tenant config override

* test: ensure nested tenant values are mapped

* fix: typo mistake (#954)

* [3.x] Add Vite helper for tenancy (#956)

* Add Vite helper for tenancy

* Move Vite bundler to an Optional Feature

* Rename to foundation vite

* Add ViteBundlerTest

* Add missing end of file

* Update tests

* remove unnecessary end() call

Co-authored-by: Samuel Štancl <samuel@archte.ch>

* rewrite ViteBundlerTest to phpunit syntax

* skip vite test in Laravel < 9

* convert ViteBundler to PHP 7 syntax

* remove import of nonexistent class in older Laravel versions

* remove import of Foundation\Vite in tests

* try to exclude Vite.php from coverage report

* remove typehint

* update channel name

* Cache crash fix (#1048)

* Don't prevent accessing missing Tenant attributes. (#1045)

* [3.x] L10 compatibility (#1065)

* Bump dependencies for Laravel 10

* Update GitHub Actions for Laravel 10

* ci: do not test L10 using PHP 7.3

* drop < L9 support

* use `dispatch_sync` instead of `dispatch_now`

* migrate phpunit configuration

* Update ci.yml

* drop laravel < 9 support

* misc L10 fixes, new docker image

* specify odbc version

* wip

* properly list php versions as strings

* minor changes

* Add `getValue($queryGrammar)` to raw query

* Clean up `isVersion8` code

* rewrite hasFailed assertion

* phpunit schema update

* Upgrade `doctrine/dbal`

---------

Co-authored-by: Samuel Štancl <samuel@archte.ch>
Co-authored-by: Samuel Štancl <samuel.stancl@gmail.com>
Co-authored-by: lukinovec <lukinovec@gmail.com>

* Update ci.yml

* Fix code style (php-cs-fixer)

* Update dependencies

* Change invade version

* Delete ViteBundlerTest

* Fix PHPStan error

* Delete PHPStan error ignore

* Fix CONTRIBUTING.md

* Delete ViteBundler remains

* Bring back ViteBundler

* Convert ViteBundlerTest to Pest

* Update ci.yml

---------

Co-authored-by: Samuel Štancl <samuel.stancl@gmail.com>
Co-authored-by: Bram Wubs <megawubs@users.noreply.github.com>
Co-authored-by: Bram Wubs <bram@sibi.nl>
Co-authored-by: Samuel Štancl <samuel@archte.ch>
Co-authored-by: George Bishop <email.georgebishop@gmail.com>
Co-authored-by: Anbuselvan Rocky <15264938+anburocky3@users.noreply.github.com>
Co-authored-by: Wilsen Hernández <13445515+wilsenhc@users.noreply.github.com>
Co-authored-by: Joel Stein <joel@mediatrix.digital>
Co-authored-by: Guilherme Saade <saade@outlook.com.br>
Co-authored-by: PHP CS Fixer <phpcsfixer@example.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[3.x] Laravel 10 support
5 participants