Using rake import (calling other rakefiles)
Asked Answered
F

2

6

Here's my primary rake file

subrake = 'subrake'

task :init => [subrake] do
  #call subrake.build
end

import subrake

I see documentation on how the above steps work, but I can't figure out how to call tasks in the other subrake file. BTW, those tasks may have the same name as mine, is this an issue?

Foretell answered 22/12, 2010 at 3:44 Comment(0)
M
7

I guess I'm late with my answer, but I had the same question just few moments ago. So the solution might be useful for someone.

Rakefile.rb

subrake = 'subrake'

task :default => :init

task :init => ["#{subrake}:init"] do
  Rake::Task["#{subrake}:build"].invoke
end

require "#{Dir.pwd}/#{subrake}"

subrake.rb

namespace :subrake do

  desc "Init"
  task :init do
    puts 'Init called'
  end

  desc "Build"
  task :build do
    puts 'Build called'
  end

end

I guess the code describes itself just good, but I want to stop on one moment. When you are calling require, you should provide for a subrake file a full path (like in my sample) or '.\subrake' (if it is in a working directory)

Midships answered 29/4, 2011 at 14:24 Comment(0)
O
5

If you have more than one sub rake files you could do something like

Dir.glob('**/*.rake').each { |r| import r}

task :init => ["subrake:init"] 

and you can have a sub.rake files that looks like so

namespace :subrake do
  desc "Init"
  task :init do
    puts 'Init called'
  end
end

and another foo.rake file

namespace :foorake do
  desc "Init"
  task :init do
    puts 'Init called'
  end
end

and you can call foorake:init from the shell like so

#rake foorake:init

or add it to you main do task like so

task :init => ["subrake:init", "fforake:init"]
Oily answered 2/7, 2011 at 12:52 Comment(1)
I like this answer because it feels closer to how Minitest and RSpec work, and searching for certain types of files.Farflung

© 2022 - 2024 — McMap. All rights reserved.