A PHP project/micro-package generator for PDS compliant projects or micro-packages.
Construct should be installed globally through composer.
composer global require jonathantorres/construct
Make sure that ~/.composer/vendor/bin
is on your $PATH
. This way the construct
executable can be located.
As Construct utilizes Composer's CLI, it's assumed that Composer is installed. When using the option to initialize an empty Git repo (i.e. --git
or -g
) it's also assumed that Git is installed.
Just run construct generate
with your vendor/package
declaration and it will construct a basic PHP project into the package
directory. For example, if you run construct generate jonathantorres/logger
it will generate a basic project structure inside the logger
folder.
construct generate jonathantorres/logger
The generated project structure will look like the following tree
excerpt. Files and directories in parentheses are optional.
├── logger
│ ├── CHANGELOG.md
│ ├── (CONDUCT.md)
│ ├── composer.json
│ ├── composer.lock
│ ├── CONTRIBUTING.md
│ ├── (.appveyor.yml)
│ ├── (.editorconfig)
│ ├── (.env)
│ ├── (.env.example)
│ ├── (.git)
│ │  └── ...
│ ├── .gitattributes
│ ├── (.github)
│ │  ├── CONTRIBUTING.md
│ │  ├── ISSUE_TEMPLATE.md
│ │  └── PULL_REQUEST_TEMPLATE.md
│ ├── .gitignore
│ ├── .gitmessage
│ ├── (.lgtm)
│ ├── (bin)
│ │  └── cli-script
│ ├── LICENSE.md
│ ├── (MAINTAINERS)
│ ├── (.php_cs)
│ ├── (phpunit.xml.dist)
│ ├── README.md
│ ├── (docs)
│ │  └── index.md
│ ├── src
│ │  └── Logger.php
│ ├── tests
│ │  └── LoggerTest.php
│ ├── .travis.yml
│ ├── (Vagrantfile)
│ └── vendor
│ └── ...
This is a good starting point. You can continue your work from there.
The --test-framework
or --test
option will allow you to select a testing framework. One of the following is available at the moment: phpunit
, phpspec
, codeception
or behat
. phpunit
is currently the default.
construct generate jonathantorres/logger --test-framework=codeception
You can also use the short option -t
.
construct generate jonathantorres/logger -t codeception
The --license
option will allow you to select a license for the project to construct. One of the following is
available at the moment: MIT
, Apache-2.0
, GPL-2.0
or GPL-3.0
. MIT
is currently the default.
construct generate jonathantorres/logger --license=Apache-2.0
You can also use the short option -l
.
construct generate jonathantorres/logger -l Apache-2.0
The --namespace
option will allow you to specify a namespace for the project to construct. This is totally optional. By default construct will use the package name as the namespace.
construct generate jonathantorres/logger --namespace=JonathanTorres\\Projects\\Logger
You can also use the short option -s
.
construct generate jonathantorres/logger -s JonathanTorres\\Projects\\Logger
The optional --cli-framework
option will allow you to specify a CLI framework for the project to construct, while also creating a bin directory with an initial CLI script in it, adding a bin key in the project's composer.json, and an initial AppVeyor configuration. When the option has been set without a CLI composer package the symfony/console
package will be used per default. There's no short option available.
construct generate jonathantorres/logger --cli-framework=zendframework/zend-console
The --php
option will allow you to specify the minimum required PHP version that your project will support. Construct will use the currently installed version if not specified.
construct generate jonathantorres/logger --php=5.6.31
The optional --keywords
option will allow you to specify a comma separated list of Composer keywords.
construct generate jonathantorres/logger --keywords=log,logging
You can also use the short option -k
.
construct generate jonathantorres/logger -k=log,logging
The --git
option will allow you to initialize an empty Git repository inside the constructed project.
construct generate jonathantorres/logger --git
You can also use the short option -g
.
construct generate jonathantorres/logger -g
The --phpcs
option will generate a PHP Coding Standards Fixer configuration within the constructed project and add a Travis CI script for validation during builds. The generated .php_cs
configuration defaults to the PSR-2
coding style guide.
construct generate jonathantorres/logger --phpcs
You can also use the short option -p
.
construct generate jonathantorres/logger -p
The --vagrant
option will generate a basic Vagrantfile within the constructed project, defaulting to the output of a vagrant init
call plus a minimal vagrant-cachier plugin configuration. There's no short option available.
construct generate jonathantorres/logger --vagrant
The --editor-config
option will generate an EditorConfig configuration
within the constructed project.
construct generate jonathantorres/logger --editor-config
You can also use the short option -e
.
construct generate jonathantorres/logger -e
The --env
option will generate .env environment files within the constructed project for keeping sensitive
information out of it. There's no short option available.
construct generate jonathantorres/logger --env
The --lgtm
option will generate LGTM configuration files within the constructed project. There's no short option available.
construct generate jonathantorres/logger --lgtm
The --github
option will generate common GitHub (i.e. templates
and docs
) files. There's no short option available.
construct generate jonathantorres/logger --github
The --github-templates
option will generate GitHub template files within the constructed project into a folder conventionally named .github
. It also will move CONTRIBUTING.md
into it. There's no short option available, but the option is implicated with the github
option.
construct generate jonathantorres/logger --github-templates
The --github-docs
option will generate GitHub documentation files within the constructed project into a folder conventionally named docs
. There's no short option available, but the option is implicated with the github
option.
construct generate jonathantorres/logger --github-docs
The --code-of-conduct
option will generate a Code of Conduct file named CONDUCT.md
within the constructed project and also add a reference to it in the generated README.md
. The used Code of Conduct is adapted from the Contributor Covenant, version 1.4. There's no short option available.
construct generate jonathantorres/logger --code-of-conduct
The --config
option allows the usage of a configuration file in the YAML
format. There are two ways to provide such a configuration file: One is to provide a specific file as an option argument, the other is to put a .construct
configuration file in the home directory of your system. For the structure of a configuration file have a look at the .construct example file. When no configuration keys are provided for settings having a default value (i.e. test-framework
, license
, php
) their default value is used.
construct generate jonathantorres/logger --config /path/to/config.yml
You can also use the short option -c
.
construct generate jonathantorres/logger -c /path/to/config.yml
When there's a .construct
configuration file in your home directory it will be used per default. If required it's possible to disable the usage via the --ignore-default-config
option or the equivalent short option -i
.
This mode will ask you all the required (and optional) information to generate your project.
construct generate:interactive
composer construct:test
This library is licensed under the MIT license. Please see LICENSE for more details.
Please see CHANGELOG for more details.
Please see CONTRIBUTING for more details.