Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jaz303/phake
A rake/make clone for PHP 5.3
https://github.com/jaz303/phake
Last synced: about 1 month ago
JSON representation
A rake/make clone for PHP 5.3
- Host: GitHub
- URL: https://github.com/jaz303/phake
- Owner: jaz303
- Created: 2010-02-11T00:22:48.000Z (over 14 years ago)
- Default Branch: master
- Last Pushed: 2023-05-11T18:30:25.000Z (about 1 year ago)
- Last Synced: 2024-05-09T00:15:01.927Z (about 1 month ago)
- Language: PHP
- Homepage:
- Size: 123 KB
- Stars: 366
- Watchers: 20
- Forks: 27
- Open Issues: 17
-
Metadata Files:
- Readme: README.markdown
Lists
- awesome-php - Phake - 一个PHP克隆库 (构建工具( Build Tools ))
- awesome-php - Phake - 一个PHP克隆库 (构建工具( Build Tools ))
- awesome-php - Phake - A rake PHP clone library. (Build Tools)
- awesome-php-cn - 官网
- awesome-php - Phake - 一个PHP克隆库 (URL)
- awesome-php-cn - 官网
- awesome-php - Phake - A rake PHP clone library. (Build Tools)
README
phake - Rake/Make for PHP 5.3 [![Build Status](https://travis-ci.org/jaz303/phake.png?branch=master)](https://travis-ci.org/jaz303/phake)
=============================© 2010 Jason Frame [ [[email protected]](mailto:[email protected]) / [@jaz303](http://twitter.com/jaz303) ]
Released under the MIT License.A wee clone of Ruby's `rake` for PHP 5.3. Uses closures for ultimate coolness.
Questions abut `phake`? Come and chat in `#phake` on Freenode!
Usage
-----* Download
* Create a `Phakefile` in the current directory or a parent directory
* Invoke `./phake task:name` to invoke task or `./phake -T` to list defined tasks
Defining Tasks
--------------Define tasks like this:
task('dependency1', function() {
echo "i will run first!\n";
});
task('dependency2', function() {
echo "i will run second!\n";
});task('task_name', 'dependency1', 'dependency2', function() {
echo "i will run last!\n";
});
This task would be invoked from the command line by `./phake task_name`Task bodies are optional if you want to create some sort of "super-task" that just invokes a bunch of others:
task('foo', 'dep1', 'dep2');
And multiple bodies can be added to tasks, all of which will be executed when the task is invoked:
task('foo', function() { echo "task work item 1\n"; });
task('foo', function() { echo "task work item 2\n"; });Grouping Tasks
--------------Like Rake, we can group tasks:
group('db', function() {
task('init', function() {
echo "i'm initialising the database\n";
});
});
This would be invoked by `./phake db:init`Describing Tasks
----------------Call `desc()` immediately before defining a task to set its description:
desc("Initialises the database");
task('db_init', function() { echo "oh hai it's a database\n"; });
Output from `./phake -T`:db_init Initialises the database
After/Before Blocks
-------------------Sometimes you may want to specify that some code should run before or after a task (distinct from dependencies), a bit like Capistrano. Phake supports this:
before('foo', function() { ... });
after('baz:bar', function() { ... });
Task Arguments
--------------Phake allows arguments to specified on the command line:
# Execute task `quux` with the given args
./phake quux name=Jason city=Glasgow
This format must be matched exactly; do not put spaces between `=` and the argument name/value. If you need to put spaces in the argument value, place the entire assignment in quotes.Arguments are made available to tasks by the application object's `ArrayAccess` implementation:
task('task_with_args', function($app) {
$name = $app['name'];
$city = $app['city'];
// do some stuff...
});Aborting Execution
------------------To abort execution of a task sequence, simply throw an exception.
desc('Demonstrate failure');
task('fail', function() {
throw new Exception;
});
Running `phake fail` will yield:- jason@disco phake % ./bin/phake fail
(in /Users/jason/dev/projects/phake)
aborted!
Exception(See full trace by running task with --trace)
A Somewhat More Complete Example
--------------------------------This is what a complete `Phakefile` might look like. It also highlights some of the more complex name resolution issues arising when dealing with groups.
Here's the output from `./phake` (implied task to run is `default`):jason@ratchet phake [master*] $ ./phake
(in /Users/jason/dev/projects/phake)
I am the outer environment. I should run first.
I am the inner environment. I should run second.
I am initialising the database...
Running unit tests...
Running a second batch of unit tests...
All tests complete! ()
And the corresponding output from `phake -T`:jason@ratchet phake [master*] $ ./phake -T
(in /Users/jason/dev/projects/phake)
database Initialises the database connection
environment Load the application environment
test:all:run Run absolutely every test everywhere!
test:units Run the unit testsBash Autocompletion
-------------------Bashkim Isai has created [`phake-autocomplete`](https://github.com/bashaus/phake-autocomplete), a bash-completion script for phake task names.