Vor Rund einem Jahr war ich zum ersten Mal bei einem DevOps Camp in Nürnberg. In einem Jahr finden zwei solcher Veranstaltungen statt, einmal das "große" Camp mit über zwei Session-Tage im Frühjahr und das DevOps Camp compact mit einem Session-Tag im Herbst. Typisch für ein Barcamp ist die Planung der Themen und der Session-Ablauf, diese werden erst vor Ort von den Teilnehmern genau definiert.
Yesterday I was finally able to release a new version of Disco which comes with 4 major changes that I want to highlight briefly in this blog post.
Deptrac is a tool recently announced by Sensionlabs. It helps you keep dependencies between the different layers in your architecture under better control by providing insight into the current state of the dependencies and warns you when unwanted dependencies get introduced. To use Deptrac in your application either download the .phar file or add the following dependencies to your Composer configuration:
When it comes to reading and returning the contents of a file in a PSR-7 middleware most developers seem use code that does the following: Read the file first, then write it to the response body.
We recently started experimenting with the GitLab CI Runners as we are looking to replace our "old" Jenkins v1.x set up with something new. And since over the last few weeks we had some issues with the Jenkins GitLab plugin we thought it might a good idea to take a deeper look into the GitLab CI Runners. One the plus side the GitLab CI Runners are configured via a YAML file in a similar fashion as you would configure Travis CI which we use to build our open-source components. Since on Travis we rely a lot on the so-called matrix builds to run the unit tests for different PHP versions I was wondering how we could solve the problem with GitLab CI. At first glance GitLab CI does not have a matrix build command but it comes with a feature called Anchors which kind of act as a template that can be merged in a job configuration.
When I came up with the idea to build a PSR-7 based flat-file CMS I thought that it must be fairly trivial to build a static page exporter by simply "faking" requests and storing the resulting responses. Turns out I was right and this an quick recap of what I did ;)
I was looking for a way to show how our libraries like Adrenaline, Pathfinder and Disco work in a "real world" application. I came up with the idea to build just another simple flat-file CMS. AddItEasy might be the first flat-file CMS based on a PSR-7 implementation which adds a nice touch: We can easily create a static file export from the content. That means that you do not need to upload addItEasy to your server, you can simply export the files and e.g. let GitHub host the static HTML pages.
In the course of polishing the Adroit v.0.4.0 release we realized that it would totally make sense to turn Adroit into an own separate (micro) web framework to be able to set up projects quickly. Whilst the focus of Adroit was to provide a PSR-7 compatible middleware for ADR we came up with the idea to create a separate package which we named Adrenaline.
Over the course of the last few months we worked hard to improve our Adroit middleware. The result is the recently released version v0.4.0 which turned Adroit into a "real" ADR / PSR-7 middleware. We extracted the routing component into a separate package called Pathfinder and splitted "monolithic" middleware into smaller components. In addition to that we introduced the concept of several hooks to be able to add "custom logic" in between the execution of the different steps in the ADR workflow.
In our attempt to convert parts of our own internal company framework into a set of open-source components we did not find a routing package that was fully PSR-7 compatible and was able to also generate uris based on the routing definitions. Initially the routing component was part of our Adroit middleware, a middleware focused on PSR-7 as well as the ADR pattern. During our attempt to turn Adroit into a (micro) web framework called Adrenaline we also extracted the routing component into a separate package.