Content
Run the website locally
- Install docker-compose through Docker CE
- Run the Jekyll container by running the terminal command
docker-compose up
- Open the webpage at
http://0.0.0.0:4000
orhttp://127.0.0.1:4000
- Keep track of Jekyll errors by running the terminal command
docker-compose logs -f
Add a project
If you want to add your own project, the easiest way is probably
to copy the _draft.md
page
from the __projects
directory.
Most of the *.md files are named according to their short name or their command, but the choice might be yours.
Any file in that directory consists of two parts:
- the Jekyll Front Matter
- the description
Jekyll Front Matter
This is basically valid YAML in between triple-dashed lines.
Basic project information
Layout
layout: string
'project'
Jekyll's layout field. This is a required field, and should always be 'project'.
Title
title: string
title
The official name of the project. This is a required field, and will mostly be the main title of the GitHub's README.
This field should also be used to start the description of the project (see description
).
Tags
tags: string[]
tags
A list of tags describing this project. This is a required field, as the tags are being used on the overview page. They provide easy filtering in an ever-growing list. Try to be as specific as possible, while also keeping the amount of new tags down.
Authors
authors: array
[object
{name: string
name, url: string
url = nil}]
The author(s) of the project. This is an optional field, but is strongly encouraged for any project that has a publicly available repository.
It should be an array of objects with at least a name
property.
- name: required
- The
name
of the author.
- The
- url: optional
- The
url
1 where the author can be reached.
- The
Companies
companies: array
[object
{name: string
name, url: string
url = nil}]
The compan(y/ies) behind the project. This is an optional field, but is strongly encouraged for any project that has a company backing it.
It should be an array of objects with at least a name
property.
- name: required
- The
name
of the company.
- The
- url: optional
- The
url
1 where the company can be reached.
- The
Online resources
Website
website: array
[object
{url: string
url, label: string
label = nil}]
The website(s) for the project. This is a required field.
It should be an array of objects with at least a url
property.
- url: required
- The
url
1 for this website.
- The
- label: optional, discouraged
- The label for this website.
- This field will be used to overwrite the visible url on the project detail page.
License
license: array
[object
{url: string
url, label: string
label}]
The license(s) for the project. This is a required field for licensed projects.
It should be an array of objects with at least a url
and a label
property.
- url: required
- The
url
1 where this license can be read in full.
- The
- label: required
- The type of this license. Examples are: BSD 2-clause "Simplified" License, BSD 3, BSD 3-Clause License, BSD 3-clause "New" or "Revised" License, BSD-3-Clause, GNU Affero General Public License, GNU Affero General Public License v3.0, GNU General Public License v2.0, GNU Lesser General Public License v3.0 (LGPL), LGPL-2.1, MIT, MIT License, MIT license, Open Software License version 2.1, The PHP License, The Unlicense.
- This field will be used to overwrite the visible url on the project detail page.
Terms
terms: array
[object
{url: string
url, label: string
label}]
The terms for the project. This is a required field for online services.
It should be an array of objects with at least a url
and a label
property.
- url: required
- The
url
1 where the terms can be read in full.
- The
- label: required
- The exact name for these terms. Examples are: Terms, Terms Of Service.
- This field will be used to overwrite the visible url on the project detail page.
Wiki, Docs and/or Demo
wiki: array
[object
{url: string
url, label: string
label = nil}]
docs: array
[object
{url: string
url, label: string
label = nil}]
demo: array
[object
{url: string
url, label: string
label = nil}]
Extra fields for the project. These are all optional fields,
but it is highly encouraged to provide them if possible.
They should all be an array of objects with at least a url
.
- url: required
- The
url
1 where this wiki / documentation / demo can be found.
- The
- label: optional, discouraged
- The label for this wiki / documentation / demo.
- This field will be used to overwrite the visible url on the project detail page.
Discoverability
GitHub
github: array
[object
{name: string
name, url: string
url = nil}]
The GitHub repositor(y/ies) behind this project.
This field is required for projects with a GitHub repository,
and should be an array of objects with at least a name
.
- name: required
- The
name
of the GitHub project. This consists of the GitHub organisation name, a forward slash and the GitHub repository name. The easiest way is probably to check the title on the main page of your GitHub project.
- The
- url: optional, discouraged
- The
url
1 where the GitHub repository can be found. - If this property is not provided, the
url
will be generated as a concatenation of 'https://github.com/' and thename
.
- The
Packagist
packagist: array
[object
{name: string
name, url: string
url = nil}]
The Packagist package(s) behind this project.
This field is required for projects available as a Packagist package,
and should be an array of objects with at least a name
.
- name: required
- The
name
of the Packagist project. This consists of the Packagist organisation name, a forward slash and the Packagist package name. The easiest way is probably to check the title on the main page of your Packagist project.
- The
- url: optional, discouraged
- The
url
1 where the Packagist package can be found. - If this property is not provided, the
url
will be generated as a concatenation of 'https://packagist.org/packages/' and thename
.
- The
DockerHub
dockerhub: array
[object
{name: string
name, url: string
url = nil}]
The Docker image(s) available on DockerHub for this project.
This field is required for projects that have a DockerHub image available.
It should be an array of objects with at least a name
.
- name: required
- The
name
of the DockerHub image. This consists of the DockerHub organisation name, a forward slash and the DockerHub image name. The easiest way is probably to check the title on the main page of your DockerHub page.
- The
- url: optional, discouraged
- The
url
1 where the DockerHub image can be found. - If this property is not provided, the
url
will be generated as a concatenation of 'https://hub.docker.com/r/' and thename
.
- The
Installation
Dependencies
dependencies: string[]
dependencies = []
A list of dependencies the project relies on, other than PHP itself. Some projects require php extensions enabled, or special libraries added before installing the project. This field is optional.
Composer
composer: object
{name: string
name = nil, version: mixed
version = nil, command: mixed
command = nil}
composer-dev: object
{name: string
name = nil, version: mixed
version = nil, command: mixed
command = nil}
composer-global: object
{name: string
name = nil, version: mixed
version = nil, command: mixed
command = nil}
The Composer package behind this project.
These fields are required for any project that can be installed with Composer.
They should all be an object with most of the times at least a command
property.
- name: optional
- The
name
of the Composer package. It will be used as the package name to install. - If this property is not provided, it will default to the Packagist
name
.
- The
- version: optional
- The
version
that is needed to install this package. - This field is a mixed field, it can be
either
string
version,string[]
[string
version] orobject
{string
type:string
version}.- The
string
orstring[]
version is useful for specifying that for exampledev-master
should be required. - The
object
version helps with targeting specific environments:{'PHP 5.6': '0.5.6', 'PHP 7+': '1.0.0'}
.
- The
- The
- further-instructions: optional
- Further instructions can be provided.
- command: optional
- The
command
that will be available after installation. - This field is a mixed field, it can be
either
string
command,string[]
[string
command] orobject
{string
type:string
command}.- The
string
orstring[]
option is useful for specifying which commands are available after the installation. - The
object
option helps with mentioning specific actions:{'initiate': 'command', 'run': 'command'}
.
- The
- The
Gem
gem: object
{name: string
name, command: mixed
command = nil}
The Gem behind this project.
This field is optional, but highly encouraged for any project that can be installed
with RubyGems or Bundler.
It should be an object with at least a name
property.
- name: required
- The
name
of the Gem. It will be used as the name to install.
- The
- further-instructions: optional
- Further instructions can be provided.
- command: optional, encouraged
- The
command
that will be available after installation. - This field is a mixed field, it can be
either
string
command,string[]
[string
command] orobject
{string
type:string
command}.- The
string
orstring[]
option is useful for specifying which commands are available after the installation. - The
object
option helps with mentioning specific actions:{'initiate': 'command', 'run': 'command'}
.
- The
- The
Git
git: object
{url: string
url = nil, update-submodules: boolean
update-submodules = false, install-composer-dependencies: boolean
install-composer-dependencies = false, command: mixed
command = nil}
The Git repository behind this project.
This field is optional, but highly encouraged for any project that can be installed
from a Git repository.
It should be an object with at best at least a command
property.
- url: optional, discouraged
- update-submodules: optional
- If the repository needs to initiate any Git submodules, set this to true.
- install-composer-dependencies: optional
- If the repository needs to install some Composer dependencies, set this to true.
- further-instructions: optional
- Further instructions can be provided.
- command: optional, encouraged
- The
command
that will be available after installation. - This field is a mixed field, it can be
either
string
command,string[]
[string
command] orobject
{string
type:string
command}.- The
string
orstring[]
option is useful for specifying which commands are available after the installation. - The
object
option helps with mentioning specific actions:{'initiate': 'command', 'run': 'command'}
.
- The
- The
PHAR
phar: object
{url: mixed
url}
The PHAR location for this project.
This field is optional, but highly encouraged for any project that can be installed
as a PHP Archive.
It should be an object with a url
property.
- url: required
- The
url
1 of the PHAR location. It will be used as the url to download with either wget or curl. - This field is a mixed field, it can be
either
string
url,string[]
[string
url] orobject
{string
type:string
url}.- The
string
orstring[]
option can provide one or more PHAR locations. - The
object
option helps with targeting specific environments:{'PHP 7': 'https://url.to/project'}
. It can also be used to provide more context:{'No HTTPS': 'http://url.to/project'}
.
- The
- The
- further-instructions: optional
- Further instructions can be provided.
* Further instructions
further-instructions: object
{string
instruction: string
command}
Further instructions to be executed after installation. This field is available as an optional field for
most of the installation options composer
, gem
, git
and phar
.
Simply add the option to the object to provide further instructions.
- further-instructions: optional
- A list with steps to run directly after installation, to prepare before first use.
- description: optional
- The instruction of the step, like "Add the file to your directory".
- The command for this step, like "mv file directory/file". –>
Description
[{{ page.title }}]({{ page.url | absolute_url }}) is a website that lists many useful PHP QA projects.
<!--more-->
It enlists many well-known as well as lesser known PHP Quality Assurance projects for everyday use.
The description is the part below the Jekyll Front Matter.
It consists of two parts, separated by the Jekyll excerpt_separator <!--more-->
.
The first part of the description should try to describe the project in one short sentence.
This will be the sentence that will be visible on the overview page.
Try to use the name of the project somewhere in the beginning,
and do it by using this code [{{ page.title }}]({{ page.url | absolute_url }})
.
Then add the Jekyll excerpt_separator <!--more-->
,
and go wild with the longer description that will be completely visible on the detail page.
Send a Pull Request
Fork the phpqa.github.io repository,
add your file to the __projects
directory, and send us a Pull Request.
Notes
1: YAML requires single quotes around all urls, as the colon in the url will throw it off.