Skip to content

Instantly share code, notes, and snippets.

@judofyr
Created February 3, 2012 11:39
Show Gist options
  • Save judofyr/1729786 to your computer and use it in GitHub Desktop.
Save judofyr/1729786 to your computer and use it in GitHub Desktop.
Perlbrew for Travis
diff --git a/ci_environment/perlbrew/attributes/default.rb b/ci_environment/perlbrew/attributes/default.rb
new file mode 100644
index 0000000..e69de29
diff --git a/ci_environment/perlbrew/attributes/multi.rb b/ci_environment/perlbrew/attributes/multi.rb
new file mode 100644
index 0000000..2c9dad4
--- /dev/null
+++ b/ci_environment/perlbrew/attributes/multi.rb
@@ -0,0 +1,5 @@
+default[:perlbrew][:notests] = true
+default[:perlbrew][:perls] = [
+ { :name => "5.14", :version => "perl-5.14.2" }
+]
+
diff --git a/ci_environment/perlbrew/files/default/perlbrew.sh b/ci_environment/perlbrew/files/default/perlbrew.sh
new file mode 100644
index 0000000..3f6b43d
--- /dev/null
+++ b/ci_environment/perlbrew/files/default/perlbrew.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+[[ -s "$HOME/perl5/perlbrew/etc/bashrc" ]] && . "$HOME/perl5/perlbrew/etc/bashrc"
+
diff --git a/ci_environment/perlbrew/metadata.rb b/ci_environment/perlbrew/metadata.rb
new file mode 100644
index 0000000..d85a58c
--- /dev/null
+++ b/ci_environment/perlbrew/metadata.rb
@@ -0,0 +1,11 @@
+maintainer "Magnus Holm"
+maintainer_email "judofyr@gmail.com"
+license "MIT"
+description "Installs and configures Perlbrew, optionally keeping it updated."
+version "0.0.1"
+
+recipe "perlbrew", "Install system-wide Perlbrew"
+recipe "perlbrew::multi", "Install a Perl implementation based on attributes"
+
+depends "apt"
+depends "build-essential"
diff --git a/ci_environment/perlbrew/recipes/default.rb b/ci_environment/perlbrew/recipes/default.rb
new file mode 100644
index 0000000..c2d1af4
--- /dev/null
+++ b/ci_environment/perlbrew/recipes/default.rb
@@ -0,0 +1,26 @@
+# Make sure that the package list is up to date on Ubuntu/Debian.
+include_recipe "apt" if ['debian', 'ubuntu'].member? node[:platform]
+
+# Make sure we have all we need to compile Perl implementations:
+package "perl"
+include_recipe "networking_basic"
+include_recipe "build-essential"
+
+bash "install Perlbrew" do
+ user node.travis_build_environment.user
+ cwd node.travis_build_environment.home
+ environment Hash['HOME' => node.travis_build_environment.home]
+ code <<-SH
+ curl -s https://raw.github.com/gugod/App-perlbrew/master/perlbrew-install -o /tmp/perlbrew-installer
+ chmod +x /tmp/perlbrew-installer
+ /tmp/perlbrew-installer
+ SH
+ not_if "test -d #{node.travis_build_environment.home}/perl5/perlbrew"
+end
+
+cookbook_file "/etc/profile.d/perlbrew.sh" do
+ owner node.travis_build_environment.user
+ group node.travis_build_environment.group
+ mode 0755
+end
+
diff --git a/ci_environment/perlbrew/recipes/multi.rb b/ci_environment/perlbrew/recipes/multi.rb
new file mode 100644
index 0000000..7da8e78
--- /dev/null
+++ b/ci_environment/perlbrew/recipes/multi.rb
@@ -0,0 +1,29 @@
+include_recipe "perlbrew"
+
+home = node.travis_build_environment.home
+brew = "source #{home}/perl5/perlbrew/etc/bashrc && perlbrew"
+env = { 'HOME' => home }
+user = node.travis_build_environment.user
+
+setup = lambda do |bash|
+ bash.user user
+ bash.environment env
+end
+
+bash "install cpanm" do
+ setup.call(self)
+ code "#{brew} install-cpanm"
+ not_if "ls #{home}/perl5/perlbrew/bin | grep cpanm"
+end
+
+node.perlbrew.perls.each do |pl|
+ args = pl[:arguments].to_s
+ args << " -n" if node.perlbrew.notests
+
+ bash "installing #{pl[:version]} as #{pl[:name]} with Perlbrew arguments: #{args}" do
+ setup.call(self)
+ code "#{brew} install #{pl[:version]} --as #{pl[:name]} #{args}"
+ not_if "ls #{home}/perl5/perlbrew/perls | grep #{pl[:name]}"
+ end
+end
+
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment