github.com/adlerhsieh/lake
0.2.0 / published Oct 26, 2015 / repository
Recursive tasks managed easily
Lake 
Rake is productive, but we want it faster.
Lake is a rake-inspired tool in Crystal-lang for managing you tasks. Tasks are automatically built & run through the command line interface. It take advantages of the performance of Crystal and the utility of rake, helping you run recursive tasks in amazing speed.
Features
- Automatically building & running tasks.
- Managing taks in
Lakefileor.lakedirectory. - Use it with
cronand other automation tools for more efficient workflows.
Requirement
Crystal >= 0.9.0. If you're on Mac OS X installing with Homebrew, Lake will install Crystal for you.
Installtion
| System | Available Methods |
|---|---|
| All | Manual Installation |
| OSX | Homebrew |
| Ubuntu / Debian | Work in progress |
| Windows | Not Supported |
Mac OS X
brew tap adlerhsieh/lake
brew update
brew install lake
Manual Installation
- Install Crystal.
- Download the latest lake executable.
- Move the executable to one of your
PATHdirectory, e.g./usr/local/bin. - Run
lake -vandcrystal -vto see if the installation is successful.
Usage
Create your first task
Create a Lakefile in any project directory:
Task.hello # This is title
puts "hello world" # This is code
In Lake DSL, all tasks should start with a Task. followed by a task name, which is hello in this case. Indentation in the block is not required.
Save the file, and run:
lake hello
It compiles and build a task file for hello task. You should see hello world on screen and that's it. Write any script you want and run it this way.
Writing mulitple tasks in a single file
Task.salute
puts "salute!"
Task.write
File.write("./story.txt", "Mary has a little lamb.")
Each Task forms a block that runs the code inside. It is not a Crystal block so it allows defining a class and method in the code as in normal Crystal context.
Dependencies
If you're using dependencies, require them in the task block like:
Task.query
require "crystal-mysql"
Lake shares dependencies with your project, so run lake command in the project root directory where libs and .shards directory exist.
Second time is faster
The first time you run a task is a bit slower, but the second time is blazingly fast. It is because Crystal is a compiled language, so it is necessary to build a task before running it. Lake automatically checks for change in all tasks and only build tasks that have any change.
Work with multiple files
If you have many tasks in a project, separate them in different files. In addition to Lakefile, you can add any .cr file in .lake directory. All .cr files in the directory will be considered lake tasks.
Options
| Short Flag | Long Flag | Description |
|---|---|---|
-b | --build | Builds all tasks |
-r | --rebuild | Rebuilds all tasks |
-h | --help | Displays help messages |
-v | --version | Displays current version |
Progress
0.1.0
- [x] Allow processing & executing tasks in
.lakedirectory - [x] Allow processing & executing
Lakefile - [x] Allow
Lakefileand.lakedirectory generation - [x] Brew installation
- [x] Usage & Instructions
0.2.0
- [x] Remove failed build task in
tasksdirectory - [x] Allow executing multiple tasks in one command
- [x] Remove reduntant
-twhen executing command - [x] Setting up ci service
- [x] Automatically install Crystal before installing Lake
- [x] Allow
shardssupport in.lake - [x] Allow dependency requirement
- [x] Manual installation
0.3.0
- [ ] Argument support for tasks
- [ ] DSL support that allows putting multiple tasks in a single task
- [ ] Allow looking for other
Lakefiles if not in current directory - [ ] Allow global Lakefile and
-goption - [ ] apt-get installation
1.0.0
- [ ] Unit Test
- [ ] Acceptance Test
- [ ] Official website or something better than README as introduction (gh-pages or .org)
In the future
- [ ] Auto-detect non-character in task name and send warning
- [ ] Allow checking if
pwdis in a git repo, crystal project, and has a Lakefile.
Contributing
Read the Contributing guide