# Ansible Role: Composer

[![CI](https://github.com/geerlingguy/ansible-role-composer/workflows/CI/badge.svg?event=push)](https://github.com/geerlingguy/ansible-role-composer/actions?query=workflow%3ACI)

Installs Composer, the PHP Dependency Manager, on any Linux or UNIX system.

## Requirements

  - `php` (version 5.4+) should be installed and working (you can use the `geerlingguy.php` role to install).
  - `git` should be installed and working (you can use the `geerlingguy.git` role to install).

## Role Variables

Available variables are listed below, along with default values (see `defaults/main.yml`):

    composer_path: /usr/local/bin/composer

The path where composer will be installed and available to your system. Should be in your user's `$PATH` so you can run commands simply with `composer` instead of the full path.

    composer_keep_updated: false

Set this to `true` to update Composer to the latest release every time the playbook is run.

    composer_home_path: '~/.composer'
    composer_home_owner: root
    composer_home_group: root

The `COMPOSER_HOME` path and directory ownership; this is the directory where global packages will be installed.

    composer_version: ''

You can install a specific release of Composer, e.g. `composer_version: '1.0.0-alpha11'`. If left empty the latest development version will be installed. Note that `composer_keep_updated` will override this variable, as it will always install the latest development version.

    composer_version_branch: '--2'

You can choose which major branch of composer you wish to use. Default is `--2`. Note that `composer_keep_updated` will update the latest version available for this branch.

    composer_global_packages: []

A list of packages to install globally (using `composer global require`). If you want to install any packages globally, add a list item with a dictionary with the `name` of the package and a `release`, e.g. `- { name: phpunit/phpunit, release: "4.7.*" }`. The 'release' is optional, and defaults to `@stable`.

    composer_add_to_path: true

If `true`, and if there are any configured `composer_global_packages`, the `vendor/bin` directory inside `composer_home_path` will be added to the system's default `$PATH` (for all users).

    composer_project_path: /path/to/project

Path to a composer project.

    composer_add_project_to_path: false

If `true`, and if you have configured a `composer_project_path`, the `vendor/bin` directory inside `composer_project_path` will be added to the system's default `$PATH` (for all users).

    composer_github_oauth_token: ''

GitHub OAuth token, used to avoid GitHub API rate limiting errors when building and rebuilding applications using Composer. Follow GitHub's directions to [Create a personal access token](https://help.github.com/articles/creating-an-access-token-for-command-line-use/) if you run into these rate limit errors.

    php_executable: php

The executable name or full path to the PHP executable. This is defaulted to `php` if you don't override the variable.

### Staying on Composer 1

While projects are upgrading to support Composer 2, it may be helpful to run Composer 1 instead. To do that, set these variables:

    composer_version_branch: ''
    composer_version: '1.10.12'

## Dependencies

None (but make sure you've installed PHP; the `geerlingguy.php` role is recommended).

## Example Playbook

    - hosts: servers
      roles:
        - geerlingguy.composer

After the playbook runs, `composer` will be placed in `/usr/local/bin/composer` (this location is configurable), and will be accessible via normal system accounts.

## License

MIT / BSD

## Author Information

This role was created in 2014 by [Jeff Geerling](https://www.jeffgeerling.com/), author of [Ansible for DevOps](https://www.ansiblefordevops.com/).
