• Stars
    star
    8
  • Rank 2,099,232 (Top 42 %)
  • Language
    Crystal
  • License
    MIT License
  • Created about 9 years ago
  • Updated about 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Recursive tasks managed easily

Lake Build Status

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 Lakefile or .lake directory.
  • Use it with cron and 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

Installtion details

Manual Installation

  1. Install Crystal.
  2. Download the latest lake executable.
  3. Move the executable to one of your PATH directory, e.g. /usr/local/bin.
  4. Run lake -v and crystal -v to see if the installation is successful.

Usage

Create your first task

Create a Lakefile in any project directory:

Task.hello           # This is task name
  puts "hello world" # This is task content

This creates a task named hello. 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
  • Allow processing & executing tasks in .lake directory
  • Allow processing & executing Lakefile
  • Allow Lakefile and .lake directory generation
  • Brew installation
  • Usage & Instructions
0.2.0
  • Remove failed build task in tasks directory
  • Allow executing multiple tasks in one command
  • Remove reduntant -t when executing command
  • Setting up ci service
  • Automatically install Crystal before installing Lake
  • Allow shards support in .lake
  • Allow dependency requirement
  • Manual installation
0.3.0
  • Argument support for tasks
  • Allow symbols except "-" in task name, all separated by a single blank space
  • 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 -g option
1.0.0
  • apt-get installation
  • 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 pwd is in a git repo, crystal project, and has a Lakefile.

Contributing

Read the Contributing guide