├── .env ├── .env.test ├── .github ├── actions │ └── ansible │ │ ├── Dockerfile │ │ ├── action.yml │ │ └── entrypoint.sh └── workflows │ ├── deploy-to-production.yml │ └── deploy-to-staging.yml ├── .gitignore ├── .idea ├── codeStyleSettings.xml ├── file.template.settings.xml ├── fileTemplates │ ├── code │ │ ├── PHP Constructor.php │ │ ├── PHP Fluent Setter Method.php │ │ ├── PHP Getter Method.php │ │ └── PHP Setter Method.php │ ├── includes │ │ └── PHP Field Doc Comment.php │ └── internal │ │ ├── PHP Class.php │ │ ├── PHP File.php │ │ ├── PHP Interface.php │ │ ├── PHP Trait.php │ │ ├── PHPUnit 6 Test.php │ │ └── PHPUnit Test.php └── inspectionProfiles │ └── Project_Default.xml ├── .phpspec ├── class.tpl └── method.tpl ├── .travis.yml ├── Gruntfile.js ├── LICENSE ├── Makefile ├── README.md ├── VERSION ├── ansible.cfg ├── ansible ├── deploy │ ├── deploy.secret │ ├── group_vars │ │ ├── all │ │ │ ├── main.yml │ │ │ └── secure.yml │ │ ├── production │ │ │ ├── main.yml │ │ │ └── secure.yml │ │ └── staging │ │ │ ├── main.yml │ │ │ └── secure.yml │ ├── hooks │ │ └── perform-build.yml │ ├── playbook.yml │ └── templates │ │ └── .env.j2 ├── galaxy_roles.yml ├── galaxy_roles │ ├── HanXHX.mysql │ │ ├── .gitignore │ │ ├── .travis.yml │ │ ├── LICENSE │ │ ├── README.md │ │ ├── Vagrantfile │ │ ├── defaults │ │ │ └── main.yml │ │ ├── handlers │ │ │ └── main.yml │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ ├── tasks │ │ │ ├── galera │ │ │ │ ├── bootstrap.yml │ │ │ │ ├── main.yml │ │ │ │ └── nodes.yml │ │ │ ├── install │ │ │ │ ├── main.yml │ │ │ │ ├── mariadb │ │ │ │ │ ├── default.yml │ │ │ │ │ └── upstream.yml │ │ │ │ └── percona │ │ │ │ │ └── apt.yml │ │ │ ├── main.yml │ │ │ ├── replication │ │ │ │ ├── main.yml │ │ │ │ ├── master.yml │ │ │ │ ├── slave.yml │ │ │ │ └── slave │ │ │ │ │ ├── debiancnf.yml │ │ │ │ │ ├── gtid.yml │ │ │ │ │ ├── import_data.yml │ │ │ │ │ ├── replication.yml │ │ │ │ │ └── ssh.yml │ │ │ └── secure.yml │ │ ├── templates │ │ │ ├── etc │ │ │ │ ├── apt │ │ │ │ │ └── preferences.d │ │ │ │ │ │ ├── 95-mariadb.j2 │ │ │ │ │ │ └── 95-percona.j2 │ │ │ │ ├── logrotate.d │ │ │ │ │ └── mysql-server.j2 │ │ │ │ └── mysql │ │ │ │ │ ├── conf.d │ │ │ │ │ ├── 09-galera.cnf.j2 │ │ │ │ │ ├── 10-extra.cnf.j2 │ │ │ │ │ ├── 50-master.cnf.j2 │ │ │ │ │ └── 51-slave.cnf.j2 │ │ │ │ │ └── my.cnf.j2 │ │ │ └── root │ │ │ │ └── my.cnf │ │ ├── tests │ │ │ ├── README.md │ │ │ ├── group_vars │ │ │ │ ├── all │ │ │ │ ├── galera │ │ │ │ ├── master │ │ │ │ └── slave │ │ │ ├── import1.sql │ │ │ ├── import2.sql │ │ │ ├── inventory │ │ │ └── test.yml │ │ └── vars │ │ │ ├── Debian-buster.yml │ │ │ └── Debian-stretch.yml │ ├── f500.bash │ │ ├── COPYING │ │ ├── COPYING.LESSER │ │ ├── README.md │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ └── tasks │ │ │ └── main.yml │ ├── f500.bashrc │ │ ├── COPYING │ │ ├── COPYING.LESSER │ │ ├── README.md │ │ ├── defaults │ │ │ └── main.yml │ │ ├── files │ │ │ ├── .bashrc │ │ │ └── bash.bashrc │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ └── tasks │ │ │ └── main.yml │ ├── f500.debian │ │ ├── COPYING │ │ ├── COPYING.LESSER │ │ ├── README.md │ │ ├── defaults │ │ │ └── main.yml │ │ ├── files │ │ │ └── inputrc │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ └── tasks │ │ │ └── main.yml │ ├── f500.locale │ │ ├── COPYING │ │ ├── COPYING.LESSER │ │ ├── README.md │ │ ├── defaults │ │ │ └── main.yml │ │ ├── handlers │ │ │ └── main.yml │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ │ ├── locale.gen.j2 │ │ │ └── locale.j2 │ ├── f500.nginx │ │ ├── COPYING │ │ ├── COPYING.LESSER │ │ ├── README.md │ │ ├── defaults │ │ │ └── main.yml │ │ ├── files │ │ │ └── default.conf │ │ ├── handlers │ │ │ └── main.yml │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ │ ├── fastcgi_params.j2 │ │ │ └── nginx.conf.j2 │ ├── f500.nodejs │ │ ├── COPYING │ │ ├── COPYING.LESSER │ │ ├── README.md │ │ ├── defaults │ │ │ └── main.yml │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ └── tasks │ │ │ └── main.yml │ ├── f500.ntp │ │ ├── COPYING │ │ ├── COPYING.LESSER │ │ ├── README.md │ │ ├── defaults │ │ │ └── main.yml │ │ ├── handlers │ │ │ └── main.yml │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ │ └── ntp.conf.j2 │ ├── f500.php7 │ │ ├── COPYING │ │ ├── COPYING.LESSER │ │ ├── README.md │ │ ├── defaults │ │ │ └── main.yml │ │ ├── filter_plugins │ │ │ └── prefix.py │ │ ├── handlers │ │ │ └── main.yml │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ │ ├── php-fpm-pool.conf.j2 │ │ │ ├── php-fpm.conf.j2 │ │ │ └── php.ini.j2 │ ├── f500.php_composer │ │ ├── COPYING │ │ ├── COPYING.LESSER │ │ ├── README.md │ │ ├── defaults │ │ │ └── main.yml │ │ ├── files │ │ │ └── composer-install.sh │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ │ └── composer.j2 │ ├── f500.project_deploy │ │ ├── COPYING │ │ ├── COPYING.LESSER │ │ ├── README.md │ │ ├── defaults │ │ │ └── main.yml │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ └── tasks │ │ │ └── main.yml │ ├── f500.supervisord │ │ ├── COPYING │ │ ├── COPYING.LESSER │ │ ├── README.md │ │ ├── defaults │ │ │ └── main.yml │ │ ├── files │ │ │ ├── supervisor-fatals-listener.py │ │ │ └── supervisor.event.listeners.conf │ │ ├── handlers │ │ │ └── main.yml │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ ├── tasks │ │ │ └── main.yml │ │ └── templates │ │ │ └── supervisord.conf.j2 │ ├── f500.ufw │ │ ├── COPYING │ │ ├── COPYING.LESSER │ │ ├── README.md │ │ ├── defaults │ │ │ └── main.yml │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ └── tasks │ │ │ └── main.yml │ ├── f500.vim │ │ ├── COPYING │ │ ├── COPYING.LESSER │ │ ├── README.md │ │ ├── files │ │ │ └── vimrc │ │ ├── meta │ │ │ ├── .galaxy_install_info │ │ │ └── main.yml │ │ └── tasks │ │ │ └── main.yml │ └── geerlingguy.certbot │ │ ├── .gitignore │ │ ├── .travis.yml │ │ ├── LICENSE │ │ ├── README.md │ │ ├── defaults │ │ └── main.yml │ │ ├── meta │ │ ├── .galaxy_install_info │ │ └── main.yml │ │ ├── molecule │ │ └── default │ │ │ ├── molecule.yml │ │ │ ├── playbook-source-install.yml │ │ │ ├── playbook-standalone-nginx-aws.yml │ │ │ ├── playbook.yml │ │ │ ├── requirements.yml │ │ │ └── yaml-lint.yml │ │ ├── tasks │ │ ├── create-cert-standalone.yml │ │ ├── include-vars.yml │ │ ├── install-from-source.yml │ │ ├── install-with-package.yml │ │ ├── main.yml │ │ └── renew-cron.yml │ │ └── vars │ │ ├── Ubuntu-16.04.yml │ │ └── default.yml ├── hosts-deploy ├── hosts-provision ├── provision │ ├── group_vars │ │ ├── all │ │ │ └── main.yml │ │ ├── develop │ │ │ └── main.yml │ │ └── production │ │ │ ├── main.yml │ │ │ └── secure.yml │ ├── handlers │ │ └── main.yml │ ├── host_vars │ │ └── prodsim.elewant.loc │ │ │ └── main.yml │ ├── playbook.yml │ └── templates │ │ ├── certbot │ │ └── 01-reload-nginx.j2 │ │ ├── mysql │ │ └── my.cnf.j2 │ │ ├── nginx │ │ ├── dev-server.conf.j2 │ │ └── prod-server.conf.j2 │ │ └── supervisord │ │ ├── elewant.herd_projection.conf.j2 │ │ └── vagrant.herd_projection.conf.j2 └── roles │ ├── deployment_user │ ├── defaults │ │ └── main.yml │ ├── tasks │ │ └── main.yml │ └── templates │ │ └── private_key.j2 │ └── install_apt_packages │ └── tasks │ └── main.yml ├── bin ├── console ├── docker └── docker-test ├── composer.json ├── composer.lock ├── composer.outdated ├── config ├── bundles.php ├── packages │ ├── dev │ │ ├── debug.yaml │ │ ├── easy_log_handler.yaml │ │ ├── monolog.yaml │ │ ├── routing.yaml │ │ ├── swiftmailer.yaml │ │ └── web_profiler.yaml │ ├── doctrine.yaml │ ├── doctrine_migrations.yaml │ ├── framework.yaml │ ├── httplug.yaml │ ├── hwi_oauth.yaml │ ├── prod │ │ ├── doctrine.yaml │ │ └── monolog.yaml │ ├── prooph_event_store.yaml │ ├── prooph_service_bus.yaml │ ├── routing.yaml │ ├── security.yaml │ ├── sensio_framework_extra.yaml │ ├── swiftmailer.yaml │ ├── test │ │ ├── doctrine.yaml │ │ ├── framework.yaml │ │ ├── monolog.yaml │ │ ├── swiftmailer.yaml │ │ └── web_profiler.yaml │ ├── translation.yaml │ ├── twig.yaml │ ├── twig_extensions.yaml │ └── validator.yaml ├── routes.yaml ├── routes │ ├── annotations.yaml │ ├── dev │ │ ├── annotations.yaml │ │ ├── test_api_controller.yaml │ │ ├── twig.yaml │ │ └── web_profiler.yaml │ ├── fos_js_routing.yaml │ ├── hwi_oauth.yaml │ └── test │ │ └── test_api_controller.yaml ├── scripts │ └── mariadb │ │ ├── 01_event_streams_table.sql │ │ └── 02_projections_table.sql └── services.yaml ├── docker-compose-test.yml ├── docker-compose.yml ├── docker ├── mariadb │ └── Dockerfile ├── nginx │ ├── Dockerfile │ └── site.conf ├── php-cli │ ├── Dockerfile │ ├── xdebug-enable.ini │ └── xdebug.ini ├── php-fpm │ ├── Dockerfile │ ├── xdebug-enable.ini │ └── xdebug.ini ├── wait_for_database └── wait_for_test_database ├── docs ├── adding_functionality_to_the_model.md ├── deploying.md ├── lessons_learned.md ├── notes_for_developers.md ├── provisioning.md └── running_the_tests.md ├── package.json ├── phpcs.xml ├── phpspec.yml.dist ├── phpstan.neon ├── phpunit.xml.dist ├── public ├── android-chrome-192x192.png ├── apple-touch-icon.png ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── img │ ├── elewant-v2.png │ ├── header-bg.jpg │ ├── history-1.png │ ├── history-2.png │ ├── map-image.png │ └── newest-herds │ │ ├── 1.jpg │ │ ├── 2.jpg │ │ ├── 3.jpg │ │ └── 4.jpg ├── index.php ├── manifest.json ├── mstile-150x150.png ├── robots.txt ├── safari-pinned-tab.svg └── txt │ ├── privacy-policy.txt │ └── terms-of-service.txt ├── specs └── Elewant │ └── Herding │ ├── Application │ └── Commands │ │ ├── AbandonElePHPantHandlerSpec.php │ │ ├── AbandonElePHPantSpec.php │ │ ├── AbandonHerdHandlerSpec.php │ │ ├── AbandonHerdSpec.php │ │ ├── AdoptElePHPantHandlerSpec.php │ │ ├── AdoptElePHPantSpec.php │ │ ├── DesireBreedHandlerSpec.php │ │ ├── DesireBreedSpec.php │ │ ├── EliminateDesireForBreedHandlerSpec.php │ │ ├── EliminateDesireForBreedSpec.php │ │ ├── FormHerdHandlerSpec.php │ │ ├── FormHerdSpec.php │ │ ├── RenameHerdHandlerSpec.php │ │ └── RenameHerdSpec.php │ └── DomainModel │ ├── Breed │ ├── BreedCollectionSpec.php │ ├── BreedDesireWasEliminatedByHerdSpec.php │ ├── BreedSpec.php │ └── BreedWasDesiredByHerdSpec.php │ ├── ElePHPant │ ├── ElePHPantIdSpec.php │ ├── ElePHPantSpec.php │ ├── ElePHPantWasAbandonedByHerdSpec.php │ └── ElePHPantWasAdoptedByHerdSpec.php │ ├── Herd │ ├── HerdIdSpec.php │ ├── HerdSpec.php │ ├── HerdWasAbandonedSpec.php │ ├── HerdWasFormedSpec.php │ └── HerdWasRenamedSpec.php │ └── ShepherdIdSpec.php ├── src ├── Bundles │ ├── DevelopmentBundle │ │ ├── Controller │ │ │ └── DevelopmentController.php │ │ ├── DevelopmentBundle.php │ │ ├── Resources │ │ │ ├── translations │ │ │ │ └── messages.en.yml │ │ │ └── views │ │ │ │ └── list_users.html.twig │ │ └── Security │ │ │ ├── DevelopmentOauthResourceOwner.php │ │ │ └── DevelopmentUserResponse.php │ └── UserBundle │ │ ├── Entity │ │ ├── Connection.php │ │ └── User.php │ │ ├── Event │ │ └── UserHasRegistered.php │ │ ├── Form │ │ ├── RegistrationFormHandler.php │ │ └── UserType.php │ │ ├── Repository │ │ └── UserRepository.php │ │ ├── Resources │ │ ├── translations │ │ │ └── UserBundle.en.yml │ │ └── views │ │ │ └── hwi-oauth │ │ │ ├── Connect │ │ │ ├── connect_confirm.html.twig │ │ │ ├── connect_success.html.twig │ │ │ ├── login.html.twig │ │ │ ├── registration.html.twig │ │ │ └── registration_success.html.twig │ │ │ └── layout.html.twig │ │ ├── Security │ │ └── UserProvider.php │ │ └── UserBundle.php ├── Elewant │ ├── Herding │ │ ├── Application │ │ │ ├── Commands │ │ │ │ ├── AbandonElePHPant.php │ │ │ │ ├── AbandonElePHPantHandler.php │ │ │ │ ├── AbandonHerd.php │ │ │ │ ├── AbandonHerdHandler.php │ │ │ │ ├── AdoptElePHPant.php │ │ │ │ ├── AdoptElePHPantHandler.php │ │ │ │ ├── DesireBreed.php │ │ │ │ ├── DesireBreedHandler.php │ │ │ │ ├── EliminateDesireForBreed.php │ │ │ │ ├── EliminateDesireForBreedHandler.php │ │ │ │ ├── FormHerd.php │ │ │ │ ├── FormHerdHandler.php │ │ │ │ ├── RenameHerd.php │ │ │ │ └── RenameHerdHandler.php │ │ │ └── ProcessManagers │ │ │ │ └── NewUserSubscriber.php │ │ ├── DomainModel.md │ │ ├── DomainModel │ │ │ ├── Breed │ │ │ │ ├── Breed.php │ │ │ │ ├── BreedCollection.php │ │ │ │ ├── BreedDesireWasEliminatedByHerd.php │ │ │ │ └── BreedWasDesiredByHerd.php │ │ │ ├── ElePHPant │ │ │ │ ├── ElePHPant.php │ │ │ │ ├── ElePHPantId.php │ │ │ │ ├── ElePHPantWasAbandonedByHerd.php │ │ │ │ └── ElePHPantWasAdoptedByHerd.php │ │ │ ├── Herd │ │ │ │ ├── Herd.php │ │ │ │ ├── HerdCollection.php │ │ │ │ ├── HerdId.php │ │ │ │ ├── HerdWasAbandoned.php │ │ │ │ ├── HerdWasFormed.php │ │ │ │ └── HerdWasRenamed.php │ │ │ ├── ShepherdId.php │ │ │ ├── SorryICanNotChangeHerd.php │ │ │ ├── SorryIDoNotHaveThat.php │ │ │ ├── SorryIDoNotKnowThat.php │ │ │ └── SorryThatIsAnInvalid.php │ │ └── Infrastructure │ │ │ └── Prooph │ │ │ └── ProophHerdCollection.php │ ├── Reporting │ │ ├── Application │ │ │ └── EventSubscribers │ │ │ │ └── NotifyTwitter.php │ │ ├── DomainModel │ │ │ ├── CalculatedHerdingStatistics.php │ │ │ ├── HerdingStatisticsCalculator.php │ │ │ ├── HerdingStatisticsGenerated.php │ │ │ └── Statistics │ │ │ │ └── NumberOf.php │ │ └── Infrastructure │ │ │ ├── Doctrine │ │ │ ├── DoctrineHerdingStatisticsCalculator.php │ │ │ └── Statistics │ │ │ │ └── NumberOfRepository.php │ │ │ └── SymfonyConsole │ │ │ └── HerdingStatisticsCommand.php │ ├── Trading │ │ └── DomainModel.md │ └── Webapp │ │ ├── Application │ │ ├── Controllers │ │ │ ├── DefaultController.php │ │ │ ├── HerdController.php │ │ │ ├── ShepherdController.php │ │ │ └── TestApiCommandController.php │ │ └── Resources │ │ │ ├── assets │ │ │ ├── js │ │ │ │ ├── agency-theme.js │ │ │ │ └── elewant.js │ │ │ └── scss │ │ │ │ ├── _agency_theme.scss │ │ │ │ ├── _bootstrap.scss │ │ │ │ ├── _easy_autocomplete.scss │ │ │ │ ├── _font_awesome.scss │ │ │ │ ├── components │ │ │ │ ├── _contact.scss │ │ │ │ ├── _elephpant.scss │ │ │ │ ├── _footer.scss │ │ │ │ ├── _header.scss │ │ │ │ ├── _navbar.scss │ │ │ │ ├── _portfolio.scss │ │ │ │ ├── _section.scss │ │ │ │ ├── _social.scss │ │ │ │ ├── _team.scss │ │ │ │ └── _timeline.scss │ │ │ │ ├── elewant.scss │ │ │ │ └── variables │ │ │ │ ├── _custom.scss │ │ │ │ └── _font_awesome.scss │ │ │ ├── templates │ │ │ ├── Default │ │ │ │ ├── about.html.twig │ │ │ │ ├── contributors.html.twig │ │ │ │ ├── header.html.twig │ │ │ │ ├── history.html.twig │ │ │ │ ├── index.html.twig │ │ │ │ ├── newest_herds.html.twig │ │ │ │ ├── portfolio.html.twig │ │ │ │ └── style_guide.html.twig │ │ │ ├── Form │ │ │ │ └── bootstrap_4_layout.html.twig │ │ │ ├── Herd │ │ │ │ └── tending.html.twig │ │ │ ├── Layout │ │ │ │ ├── base.html.twig │ │ │ │ ├── footer.html.twig │ │ │ │ └── navbar.html.twig │ │ │ ├── Shepherd │ │ │ │ └── admire_herd.html.twig │ │ │ └── base.html.twig │ │ │ └── translations │ │ │ ├── herd.en.yml │ │ │ ├── history.en.yml │ │ │ └── messages.en.yml │ │ ├── DomainModel │ │ ├── Contributor │ │ │ ├── Contributor.php │ │ │ ├── ContributorList.php │ │ │ └── EmptyContributorList.php │ │ └── Herding │ │ │ ├── DesiredBreed.php │ │ │ ├── ElePHPant.php │ │ │ ├── Herd.php │ │ │ └── HerdRepository.php │ │ └── Infrastructure │ │ ├── Doctrine │ │ ├── BreedMappingType.php │ │ ├── DoctrineHerdRepository.php │ │ └── ShepherdIdMappingType.php │ │ ├── Github │ │ ├── GithubContributor.php │ │ └── GithubContributorList.php │ │ ├── ProophProjections │ │ ├── HerdListing.php │ │ ├── HerdProjection.php │ │ └── HerdReadModel.php │ │ └── Twig │ │ ├── BreedExtension.php │ │ ├── ComponentsExtension.php │ │ └── ContributorsExtension.php ├── Kernel.php └── Tooling │ ├── DoctrineMigrations │ ├── Version20170804131152.php │ ├── Version20170805082413.php │ ├── Version20170805082923.php │ ├── Version20170811124421.php │ ├── Version20171103163625.php │ └── Version20180907111518.php │ ├── PhpSpec │ ├── EqualMatcher.php │ ├── Extension.php │ └── PopAggregateEventsTrait.php │ ├── ProophEventStore │ └── MariaDbSingleStreamStrategyWithUnescapedUnicode.php │ ├── SymfonyAsset │ └── FileVersionStrategy.php │ └── SymfonyConsole │ ├── CreateEventStreamCommand.php │ └── DeleteEventStreamCommand.php ├── symfony.lock ├── templates └── bundles │ └── TwigBundle │ └── Exception │ └── error.html.twig ├── tests ├── Elewant │ ├── Reporting │ │ └── Infrastructure │ │ │ └── Doctrine │ │ │ └── Statistics │ │ │ └── NumberOfRepositoryTest.php │ └── Webapp │ │ └── Application │ │ └── Controllers │ │ ├── ApiCommandAbandonElePHPantTest.php │ │ ├── ApiCommandAbandonHerdTest.php │ │ ├── ApiCommandAdoptElePHPantTest.php │ │ ├── ApiCommandBase.php │ │ ├── ApiCommandDesireBreedTest.php │ │ ├── ApiCommandEliminateDesireForBreedTest.php │ │ ├── ApiCommandFormHerdTest.php │ │ └── ApiCommandRenameHerdTest.php ├── config │ └── .env_for_travis └── phpunit_bootstrap.php └── var └── .gitkeep /.env.test: -------------------------------------------------------------------------------- 1 | APP_ENV=test 2 | APP_SECRET=s$cretf0rt3st 3 | DATABASE_URL=mysql://elewant:elewant@database-test/elewant 4 | -------------------------------------------------------------------------------- /.github/actions/ansible/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine 2 | 3 | ENV ANSIBLE_HOST_KEY_CHECKING=False 4 | 5 | RUN apk add ansible gcc python3-dev libc-dev libffi-dev openssl-dev 6 | RUN pip3 install --upgrade paramiko 7 | COPY entrypoint.sh /entrypoint.sh 8 | RUN chmod +x /entrypoint.sh 9 | 10 | ENTRYPOINT ["/entrypoint.sh"] 11 | -------------------------------------------------------------------------------- /.github/actions/ansible/action.yml: -------------------------------------------------------------------------------- 1 | name: 'Ansible' 2 | description: 'Runs an Ansible playbook' 3 | runs: 4 | using: 'docker' 5 | image: 'Dockerfile' 6 | args: 7 | - ${{ inputs.extraVars }} 8 | - ${{ inputs.verbosity }} 9 | -------------------------------------------------------------------------------- /.github/actions/ansible/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | # Write the password file 6 | echo "$VAULT_PASS" > ~/.vault_pass.txt 7 | mkdir ~/.ssh 8 | ansible-vault view --vault-password-file ~/.vault_pass.txt ansible/deploy/deploy.secret > ~/.ssh/id_rsa 9 | chmod 0600 ~/.ssh/id_rsa 10 | 11 | ansible-playbook ansible/deploy/playbook.yml \ 12 | -i ansible/hosts-deploy \ 13 | --vault-password-file ~/.vault_pass.txt \ 14 | --key-file ~/.ssh/id_rsa \ 15 | ${INPUT_EXTRAVARS} \ 16 | ${INPUT_VERBOSITY} 17 | -------------------------------------------------------------------------------- /.github/workflows/deploy-to-production.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to production 2 | 3 | on: 4 | push: 5 | tags: 6 | - v* 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@master 13 | - name: Deploy to elewant.com on tag 14 | uses: ./.github/actions/ansible 15 | env: 16 | VAULT_PASS: ${{ secrets.VAULT_PASS }} 17 | with: 18 | extraVars: "--limit=production --extra project_version=${{ github.sha }}" 19 | verbosity: "" 20 | -------------------------------------------------------------------------------- /.github/workflows/deploy-to-staging.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to staging 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@master 13 | - name: Deploy to staging.elewant.com on push to master 14 | uses: ./.github/actions/ansible 15 | env: 16 | VAULT_PASS: ${{ secrets.VAULT_PASS }} 17 | with: 18 | extraVars: "--limit=staging --extra project_version=${{ github.sha }}" 19 | verbosity: "" 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.env.local 2 | /.web-server-pid 3 | /.phpunit.result.cache 4 | /ansible/provision/group_vars/develop/override_locally.yml 5 | /ansible/**/__pycache__/ 6 | /node_modules/ 7 | /phpspec.yml 8 | /phpunit.xml 9 | /public/build/ 10 | /public/bundles/ 11 | /vendor/ 12 | 13 | /.idea/* 14 | !.idea/codeStyleSettings.xml 15 | !.idea/file.template.settings.xml 16 | !.idea/fileTemplates/ 17 | !.idea/inspectionProfiles/ 18 | 19 | /var/* 20 | !var/.gitkeep 21 | 22 | /frontend 23 | -------------------------------------------------------------------------------- /.idea/file.template.settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |