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

WIP: Use buildDir for the bridge #36

Closed
wants to merge 2 commits into from

Conversation

t-richard
Copy link
Member

🏗️ WIP PR to introduce usage of the buildDir feature.

The only thing done here is generating the builded part of the "cache" in a completly different folder (var/build) than the cache part (staying in the default var/cache).

This allows for a clear separation when on Lambda so that we can copy/symlink only the cache part but keep the build part read-only which avoids unnecessary processing.

TODO :

  • Add/adapt tests
  • Adapt the README
  • Check if the build folder is deployed and fallback on /tmp or error correctly
  • Test it on real-life apps to see how well it works

@t-richard t-richard marked this pull request as draft March 30, 2021 21:21
@mnapoli mnapoli added the enhancement New feature or request label Mar 31, 2021
@mnapoli
Copy link
Member

mnapoli commented Mar 31, 2021

I'm not sure: do we need to require Symfony 5.2 and up only? (would it simplify anything?)

Also if more and more Symfony developers are contributing to this repository, I'm fine switching this repository to the Symfony coding standard if it makes your life easier. It's not really related to this pull request though (it would be worth doing separately), but I thought about this seeing all the warnings pop up.

README.md Show resolved Hide resolved
as this directory is readonly on Lambda.
You can alternatively define the function allowEmptyBuildDir() in your Kernel class
and return "true" if you still want to deploy without a warm build directory.
');
Copy link
Member

Choose a reason for hiding this comment

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

If we return true, the app will break right? (because the build directory is read-only, it cannot be warmed)

Copy link
Member Author

Choose a reason for hiding this comment

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

If we return true, the exception is not thrown so it continues to line 49 return $this->getCacheDir(); which will eventually resolve to /tmp/cache so it will not error but warm the cache and build at runtime on each new lambda.

Copy link
Member Author

Choose a reason for hiding this comment

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

This allows for people that don't care about performance or just want to quickly test without bothering on deploying a properly warmed cache to do it.
But as it's not the recommend approach I prefer it to be false by default and throw an explicit exception.

This would also need to be documented and is just a proposal, not a definitive opinion of mine.

Copy link
Member

Choose a reason for hiding this comment

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

🤦 you're right, no exception/error here.

Personally, I'm a big fan of being able to deploy without any step (i.e. without cache generation). It's important for the DX, especially when testing out.

But because of that preference, I've slowed the effort of other contributors in the past. Now I think it's more important to get it working well for Symfony 5.2 in good condition, and maybe later iterate on that and allow deploying without cache.

Copy link
Member Author

@t-richard t-richard Mar 31, 2021

Choose a reason for hiding this comment

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

No worries, I think thats good discussions to have but I agree that we can iterate and improve DX later on or support more use cases.

@t-richard
Copy link
Member Author

Closing for now as I have yet to find a proper solution for this.

@t-richard t-richard closed this Jun 4, 2021
@mnapoli
Copy link
Member

mnapoli commented Jun 8, 2021

Hey @t-richard, I'm curious what was the blocker on this approach?

@t-richard
Copy link
Member Author

@mnapoli basically Symfony is not meant to be built in a different filesystem than the runtime filesystem. It causes a lot of troubles because paths are "hardcoded" in the dumped Dependency Container.

So building it locally or in CI in the default dir var/cache will hardcode this path so moving it to /tmp/cache in lambda gets Symfony confused.

TBH I think the work needs to be in Symfony, not in the bridge, but I have yet to find a proper way to do it. This is tough because the Symfony HttpKernel is really hard to understand from my POV.

I'll try my best to hopefully get to the bottom of it and manage to come up with a decent solution 🤞

I'll keep you and others updated in #35 🙂

@mnapoli
Copy link
Member

mnapoli commented Jun 8, 2021

Thanks for the update!

@mnapoli
Copy link
Member

mnapoli commented Apr 13, 2022

Is there any way we can revive that and support 2 scenarios at once:

  • if you warmup in Bref docker images, you can deploy with the build dir
  • if you don't warmup in Bref docker images, you can deploy as usual

?

@t-richard
Copy link
Member Author

I'm not sure we can do something in the bridge for that.

Except some documentation maybe?

If you have an idea, I'm all hears!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants