assaf-buildr 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +887 -0
- data/DISCLAIMER +7 -0
- data/LICENSE +176 -0
- data/NOTICE +26 -0
- data/README.rdoc +146 -0
- data/Rakefile +62 -0
- data/_buildr +38 -0
- data/addon/buildr/antlr.rb +65 -0
- data/addon/buildr/cobertura.rb +236 -0
- data/addon/buildr/emma.rb +238 -0
- data/addon/buildr/hibernate.rb +142 -0
- data/addon/buildr/javacc.rb +85 -0
- data/addon/buildr/jdepend.rb +60 -0
- data/addon/buildr/jetty.rb +248 -0
- data/addon/buildr/jibx.rb +86 -0
- data/addon/buildr/nailgun.rb +817 -0
- data/addon/buildr/openjpa.rb +90 -0
- data/addon/buildr/org/apache/buildr/BuildrNail$Main.class +0 -0
- data/addon/buildr/org/apache/buildr/BuildrNail.class +0 -0
- data/addon/buildr/org/apache/buildr/BuildrNail.java +41 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper.java +144 -0
- data/addon/buildr/xmlbeans.rb +93 -0
- data/bin/buildr +28 -0
- data/buildr.buildfile +53 -0
- data/buildr.gemspec +58 -0
- data/doc/css/default.css +228 -0
- data/doc/css/print.css +100 -0
- data/doc/css/syntax.css +52 -0
- data/doc/images/apache-incubator-logo.png +0 -0
- data/doc/images/buildr-hires.png +0 -0
- data/doc/images/buildr.png +0 -0
- data/doc/images/favicon.png +0 -0
- data/doc/images/growl-icon.tiff +0 -0
- data/doc/images/note.png +0 -0
- data/doc/images/project-structure.png +0 -0
- data/doc/images/tip.png +0 -0
- data/doc/images/zbuildr.tif +0 -0
- data/doc/pages/artifacts.textile +207 -0
- data/doc/pages/building.textile +240 -0
- data/doc/pages/contributing.textile +208 -0
- data/doc/pages/download.textile +62 -0
- data/doc/pages/extending.textile +175 -0
- data/doc/pages/getting_started.textile +273 -0
- data/doc/pages/index.textile +42 -0
- data/doc/pages/languages.textile +407 -0
- data/doc/pages/mailing_lists.textile +17 -0
- data/doc/pages/more_stuff.textile +286 -0
- data/doc/pages/packaging.textile +427 -0
- data/doc/pages/projects.textile +274 -0
- data/doc/pages/recipes.textile +103 -0
- data/doc/pages/settings_profiles.textile +274 -0
- data/doc/pages/testing.textile +212 -0
- data/doc/pages/troubleshooting.textile +103 -0
- data/doc/pages/whats_new.textile +323 -0
- data/doc/print.haml +51 -0
- data/doc/print.toc.yaml +29 -0
- data/doc/scripts/buildr-git.rb +412 -0
- data/doc/scripts/install-jruby.sh +44 -0
- data/doc/scripts/install-linux.sh +64 -0
- data/doc/scripts/install-osx.sh +52 -0
- data/doc/site.haml +56 -0
- data/doc/site.toc.yaml +47 -0
- data/etc/KEYS +151 -0
- data/etc/git-svn-authors +16 -0
- data/lib/buildr.rb +35 -0
- data/lib/buildr/core.rb +27 -0
- data/lib/buildr/core/application.rb +489 -0
- data/lib/buildr/core/application_cli.rb +139 -0
- data/lib/buildr/core/build.rb +311 -0
- data/lib/buildr/core/checks.rb +382 -0
- data/lib/buildr/core/common.rb +154 -0
- data/lib/buildr/core/compile.rb +596 -0
- data/lib/buildr/core/environment.rb +120 -0
- data/lib/buildr/core/filter.rb +362 -0
- data/lib/buildr/core/generate.rb +195 -0
- data/lib/buildr/core/help.rb +118 -0
- data/lib/buildr/core/progressbar.rb +156 -0
- data/lib/buildr/core/project.rb +892 -0
- data/lib/buildr/core/test.rb +715 -0
- data/lib/buildr/core/transports.rb +558 -0
- data/lib/buildr/core/util.rb +289 -0
- data/lib/buildr/groovy.rb +18 -0
- data/lib/buildr/groovy/bdd.rb +105 -0
- data/lib/buildr/groovy/compiler.rb +138 -0
- data/lib/buildr/ide.rb +19 -0
- data/lib/buildr/ide/eclipse.rb +212 -0
- data/lib/buildr/ide/idea.ipr.template +300 -0
- data/lib/buildr/ide/idea.rb +189 -0
- data/lib/buildr/ide/idea7x.ipr.template +290 -0
- data/lib/buildr/ide/idea7x.rb +210 -0
- data/lib/buildr/java.rb +23 -0
- data/lib/buildr/java/ant.rb +92 -0
- data/lib/buildr/java/bdd.rb +449 -0
- data/lib/buildr/java/commands.rb +211 -0
- data/lib/buildr/java/compiler.rb +348 -0
- data/lib/buildr/java/deprecated.rb +141 -0
- data/lib/buildr/java/jruby.rb +117 -0
- data/lib/buildr/java/jtestr_runner.rb.erb +116 -0
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +119 -0
- data/lib/buildr/java/packaging.rb +713 -0
- data/lib/buildr/java/pom.rb +178 -0
- data/lib/buildr/java/rjb.rb +155 -0
- data/lib/buildr/java/test_result.rb +308 -0
- data/lib/buildr/java/tests.rb +324 -0
- data/lib/buildr/java/version_requirement.rb +172 -0
- data/lib/buildr/packaging.rb +21 -0
- data/lib/buildr/packaging/artifact.rb +730 -0
- data/lib/buildr/packaging/artifact_namespace.rb +972 -0
- data/lib/buildr/packaging/artifact_search.rb +140 -0
- data/lib/buildr/packaging/gems.rb +102 -0
- data/lib/buildr/packaging/package.rb +233 -0
- data/lib/buildr/packaging/tar.rb +104 -0
- data/lib/buildr/packaging/zip.rb +722 -0
- data/lib/buildr/resources/buildr.icns +0 -0
- data/lib/buildr/scala.rb +19 -0
- data/lib/buildr/scala/compiler.rb +109 -0
- data/lib/buildr/scala/tests.rb +203 -0
- data/rakelib/apache.rake +191 -0
- data/rakelib/changelog.rake +57 -0
- data/rakelib/doc.rake +103 -0
- data/rakelib/package.rake +73 -0
- data/rakelib/release.rake +65 -0
- data/rakelib/rspec.rake +83 -0
- data/rakelib/rubyforge.rake +53 -0
- data/rakelib/scm.rake +49 -0
- data/rakelib/setup.rake +86 -0
- data/rakelib/stage.rake +48 -0
- data/spec/addon/cobertura_spec.rb +77 -0
- data/spec/addon/emma_spec.rb +120 -0
- data/spec/addon/test_coverage_spec.rb +255 -0
- data/spec/core/application_spec.rb +412 -0
- data/spec/core/artifact_namespace_spec.rb +646 -0
- data/spec/core/build_spec.rb +415 -0
- data/spec/core/checks_spec.rb +537 -0
- data/spec/core/common_spec.rb +664 -0
- data/spec/core/compile_spec.rb +566 -0
- data/spec/core/generate_spec.rb +33 -0
- data/spec/core/project_spec.rb +754 -0
- data/spec/core/test_spec.rb +1091 -0
- data/spec/core/transport_spec.rb +500 -0
- data/spec/groovy/bdd_spec.rb +80 -0
- data/spec/groovy/compiler_spec.rb +239 -0
- data/spec/ide/eclipse_spec.rb +243 -0
- data/spec/java/ant.rb +28 -0
- data/spec/java/bdd_spec.rb +358 -0
- data/spec/java/compiler_spec.rb +446 -0
- data/spec/java/java_spec.rb +88 -0
- data/spec/java/packaging_spec.rb +1103 -0
- data/spec/java/tests_spec.rb +466 -0
- data/spec/packaging/archive_spec.rb +503 -0
- data/spec/packaging/artifact_spec.rb +754 -0
- data/spec/packaging/packaging_helper.rb +63 -0
- data/spec/packaging/packaging_spec.rb +589 -0
- data/spec/sandbox.rb +137 -0
- data/spec/scala/compiler_spec.rb +228 -0
- data/spec/scala/tests_spec.rb +215 -0
- data/spec/spec_helpers.rb +304 -0
- data/spec/version_requirement_spec.rb +123 -0
- metadata +369 -0
|
Binary file
|
data/lib/buildr/scala.rb
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
13
|
+
# License for the specific language governing permissions and limitations under
|
|
14
|
+
# the License.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
require 'buildr/scala/compiler'
|
|
18
|
+
require 'buildr/scala/tests'
|
|
19
|
+
Object::Scala = Buildr::Scala
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
13
|
+
# License for the specific language governing permissions and limitations under
|
|
14
|
+
# the License.
|
|
15
|
+
|
|
16
|
+
require 'buildr/core/project'
|
|
17
|
+
require 'buildr/core/common'
|
|
18
|
+
require 'buildr/core/compile'
|
|
19
|
+
require 'buildr/packaging'
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
module Buildr::Scala
|
|
23
|
+
|
|
24
|
+
# Scalac compiler:
|
|
25
|
+
# compile.using(:scalac)
|
|
26
|
+
# Used by default if .scala files are found in the src/main/scala directory (or src/test/scala)
|
|
27
|
+
# and sets the target directory to target/classes (or target/test/classes).
|
|
28
|
+
#
|
|
29
|
+
# Accepts the following options:
|
|
30
|
+
# * :warnings -- Generate warnings if true (opposite of -nowarn).
|
|
31
|
+
# * :deprecation -- Output source locations where deprecated APIs are used.
|
|
32
|
+
# * :optimise -- Generates faster bytecode by applying optimisations to the program.
|
|
33
|
+
# * :target -- Class file compatibility with specified release.
|
|
34
|
+
# * :debug -- Generate debugging info.
|
|
35
|
+
# * :other -- Array of options to pass to the Scalac compiler as is, e.g. -Xprint-types
|
|
36
|
+
class Scalac < Buildr::Compiler::Base
|
|
37
|
+
class << self
|
|
38
|
+
def scala_home
|
|
39
|
+
@home ||= ENV['SCALA_HOME']
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def dependencies
|
|
43
|
+
[ 'scala-library.jar', 'scala-compiler.jar'].map { |jar| File.expand_path("lib/#{jar}", scala_home) }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def use_fsc
|
|
47
|
+
ENV["USE_FSC"] =~ /^(yes|on|true)$/i
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
OPTIONS = [:warnings, :deprecation, :optimise, :target, :debug, :other]
|
|
52
|
+
Java.classpath << dependencies
|
|
53
|
+
|
|
54
|
+
specify :language=>:scala, :target=>'classes', :target_ext=>'class', :packaging=>:jar
|
|
55
|
+
|
|
56
|
+
def initialize(project, options) #:nodoc:
|
|
57
|
+
super
|
|
58
|
+
options[:debug] = Buildr.options.debug if options[:debug].nil?
|
|
59
|
+
options[:warnings] = verbose if options[:warnings].nil?
|
|
60
|
+
options[:deprecation] ||= false
|
|
61
|
+
options[:optimise] ||= false
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def compile(sources, target, dependencies) #:nodoc:
|
|
65
|
+
check_options options, OPTIONS
|
|
66
|
+
|
|
67
|
+
cmd_args = []
|
|
68
|
+
cmd_args << '-classpath' << (dependencies + Scalac.dependencies).join(File::PATH_SEPARATOR)
|
|
69
|
+
source_paths = sources.select { |source| File.directory?(source) }
|
|
70
|
+
cmd_args << '-sourcepath' << source_paths.join(File::PATH_SEPARATOR) unless source_paths.empty?
|
|
71
|
+
cmd_args << '-d' << File.expand_path(target)
|
|
72
|
+
cmd_args += scalac_args
|
|
73
|
+
cmd_args += files_from_sources(sources)
|
|
74
|
+
|
|
75
|
+
unless Buildr.application.options.dryrun
|
|
76
|
+
Scalac.scala_home or fail 'Are we forgetting something? SCALA_HOME not set.'
|
|
77
|
+
trace((['scalac'] + cmd_args).join(' '))
|
|
78
|
+
if Scalac.use_fsc
|
|
79
|
+
system(([File.expand_path('bin/fsc', Scalac.scala_home)] + cmd_args).join(' ')) or
|
|
80
|
+
fail 'Failed to compile, see errors above'
|
|
81
|
+
else
|
|
82
|
+
Java.load
|
|
83
|
+
Java.scala.tools.nsc.Main.process(cmd_args.to_java(Java.java.lang.String))
|
|
84
|
+
fail 'Failed to compile, see errors above' if Java.scala.tools.nsc.Main.reporter.hasErrors
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
private
|
|
90
|
+
|
|
91
|
+
# Returns Scalac command line arguments from the set of options.
|
|
92
|
+
def scalac_args #:nodoc:
|
|
93
|
+
args = []
|
|
94
|
+
args << "-nowarn" unless options[:warnings]
|
|
95
|
+
args << "-verbose" if Buildr.application.options.trace
|
|
96
|
+
args << "-g" if options[:debug]
|
|
97
|
+
args << "-deprecation" if options[:deprecation]
|
|
98
|
+
args << "-optimise" if options[:optimise]
|
|
99
|
+
args << "-target:jvm-" + options[:target].to_s if options[:target]
|
|
100
|
+
args + Array(options[:other])
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Scala compiler comes first, ahead of Javac, this allows it to pick
|
|
108
|
+
# projects that mix Scala and Java code by spotting Scala code first.
|
|
109
|
+
Buildr::Compiler.compilers.unshift Buildr::Scala::Scalac
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
13
|
+
# License for the specific language governing permissions and limitations under
|
|
14
|
+
# the License.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
require 'buildr/core/build'
|
|
18
|
+
require 'buildr/core/compile'
|
|
19
|
+
require 'buildr/java/ant'
|
|
20
|
+
require 'buildr/java/tests'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
module Buildr::Scala
|
|
24
|
+
|
|
25
|
+
# Scala::Specs is available when using Scala::Test
|
|
26
|
+
module ScalaSpecs
|
|
27
|
+
VERSION = '1.2.9'
|
|
28
|
+
|
|
29
|
+
class << self
|
|
30
|
+
def version
|
|
31
|
+
Buildr.settings.build['scala.specs'] || VERSION
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def dependencies
|
|
35
|
+
["org.specs:specs:jar:#{version}"]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
def const_missing(const)
|
|
40
|
+
return super unless const == :REQUIRES # TODO: remove in 1.5
|
|
41
|
+
Buildr.application.deprecated "Please use Scala::Specs.dependencies/.version instead of ScalaSpecs::REQUIRES/VERSION"
|
|
42
|
+
dependencies
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# Scala::Check is available when using Scala::Test
|
|
49
|
+
module ScalaCheck
|
|
50
|
+
VERSION = '1.3'
|
|
51
|
+
|
|
52
|
+
class << self
|
|
53
|
+
def version
|
|
54
|
+
Buildr.settings.build['scala.check'] || VERSION
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def dependencies
|
|
58
|
+
["org.scalacheck:scalacheck:jar:#{version}"]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
private
|
|
62
|
+
def const_missing(const)
|
|
63
|
+
return super unless const == :REQUIRES # TODO: remove in 1.5
|
|
64
|
+
Buildr.application.deprecated "Please use Scala::Check.dependencies/.version instead of ScalaCheck::REQUIRES/VERSION"
|
|
65
|
+
dependencies
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
# ScalaTest framework, the default test framework for Scala tests.
|
|
72
|
+
#
|
|
73
|
+
# Support the following options:
|
|
74
|
+
# * :properties -- Hash of system properties available to the test case.
|
|
75
|
+
# * :environment -- Hash of environment variables available to the test case.
|
|
76
|
+
# * :java_args -- Arguments passed as is to the JVM.
|
|
77
|
+
class ScalaTest < TestFramework::Java
|
|
78
|
+
|
|
79
|
+
VERSION = '0.9.3'
|
|
80
|
+
|
|
81
|
+
class << self
|
|
82
|
+
def version
|
|
83
|
+
Buildr.settings.build['scala.test'] || VERSION
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def dependencies
|
|
87
|
+
["org.scalatest:scalatest:jar:#{version}"] + ScalaSpecs.dependencies +
|
|
88
|
+
ScalaCheck.dependencies + JMock.dependencies
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def applies_to?(project) #:nodoc:
|
|
92
|
+
project.test.compile.language == :scala
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
private
|
|
96
|
+
def const_missing(const)
|
|
97
|
+
return super unless const == :REQUIRES # TODO: remove in 1.5
|
|
98
|
+
Buildr.application.deprecated "Please use Scala::Test.dependencies/.version instead of ScalaTest::REQUIRES/VERSION"
|
|
99
|
+
dependencies
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# annotation-based group inclusion
|
|
104
|
+
attr_accessor :group_includes
|
|
105
|
+
|
|
106
|
+
# annotation-based group exclusion
|
|
107
|
+
attr_accessor :group_excludes
|
|
108
|
+
|
|
109
|
+
def initialize(test_task, options)
|
|
110
|
+
super
|
|
111
|
+
@group_includes = []
|
|
112
|
+
@group_excludes = []
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def tests(dependencies) #:nodoc:
|
|
116
|
+
suites = filter_classes(dependencies, :interfaces => %w{org.scalatest.Suite})
|
|
117
|
+
# we should really filter using :class => %w{org.specs.Specification} instead of naming convention
|
|
118
|
+
specs = filter_classes(dependencies, :class_names => [/Specs?$/])
|
|
119
|
+
[suites, specs].flatten
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def run(tests, dependencies) #:nodoc:
|
|
123
|
+
mkpath task.report_to.to_s
|
|
124
|
+
success = []
|
|
125
|
+
scalatest = tests.select { |t| t !~ /Specs?$/ }
|
|
126
|
+
specs = tests.select { |t| t =~ /Specs?$/ }
|
|
127
|
+
|
|
128
|
+
# Specs
|
|
129
|
+
nostacktrace = (options[:nostacktrace]) ? "-ns" : ""
|
|
130
|
+
cmd_options = { :properties => options[:properties],
|
|
131
|
+
:java_args => options[:java_args],
|
|
132
|
+
:classpath => dependencies}
|
|
133
|
+
specs.each do |spec|
|
|
134
|
+
Java.load
|
|
135
|
+
begin
|
|
136
|
+
Java::Commands.java(spec, cmd_options)
|
|
137
|
+
rescue => e
|
|
138
|
+
print e.message
|
|
139
|
+
else
|
|
140
|
+
success << spec
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# ScalaTest
|
|
145
|
+
reporter_options = 'TFGBSAR' # testSucceeded, testFailed, testIgnored, suiteAborted, runStopped, runAborted, runCompleted
|
|
146
|
+
scalatest.each do |suite|
|
|
147
|
+
info "ScalaTest #{suite.inspect}"
|
|
148
|
+
# Use Ant to execute the ScalaTest task, gives us performance and reporting.
|
|
149
|
+
reportFile = File.join(task.report_to.to_s, "TEST-#{suite}.txt")
|
|
150
|
+
taskdef = Buildr.artifacts(self.class.dependencies).each(&:invoke).map(&:to_s)
|
|
151
|
+
Buildr.ant('scalatest') do |ant|
|
|
152
|
+
ant.taskdef :name=>'scalatest', :classname=>'org.scalatest.tools.ScalaTestTask',
|
|
153
|
+
:classpath=>taskdef.join(File::PATH_SEPARATOR)
|
|
154
|
+
ant.scalatest :runpath=>dependencies.join(File::PATH_SEPARATOR) do
|
|
155
|
+
ant.suite :classname=>suite
|
|
156
|
+
ant.reporter :type=>'stdout', :config=>reporter_options
|
|
157
|
+
ant.reporter :type=>'file', :filename=> reportFile, :config=>reporter_options
|
|
158
|
+
ant.includes group_includes.join(" ") if group_includes
|
|
159
|
+
ant.excludes group_excludes.join(" ") if group_excludes
|
|
160
|
+
(options[:properties] || []).each { |name, value| ant.property :name=>name, :value=>value }
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# Parse for failures, errors, etc.
|
|
165
|
+
# This is a bit of a pain right now because ScalaTest doesn't flush its
|
|
166
|
+
# output synchronously before the Ant test finishes so we have to loop
|
|
167
|
+
# and wait for an indication that the test run was completed.
|
|
168
|
+
failed = false
|
|
169
|
+
completed = false
|
|
170
|
+
wait = 0
|
|
171
|
+
while (!completed) do
|
|
172
|
+
File.open(reportFile, "r") do |input|
|
|
173
|
+
while (line = input.gets) do
|
|
174
|
+
failed = (line =~ /(TEST FAILED -)|(RUN STOPPED)|(RUN ABORTED)/) unless failed
|
|
175
|
+
completed |= (line =~ /Run completed\./)
|
|
176
|
+
break if (failed || completed)
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
wait += 1
|
|
180
|
+
break if (failed || wait > 10)
|
|
181
|
+
unless completed
|
|
182
|
+
sleep(1)
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
success << suite if (completed && !failed)
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
success
|
|
189
|
+
end # run
|
|
190
|
+
|
|
191
|
+
end # ScalaTest
|
|
192
|
+
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
# Backwards compatibility stuff. Remove in 1.5.
|
|
197
|
+
module Buildr
|
|
198
|
+
ScalaSpecs = Scala::ScalaSpecs
|
|
199
|
+
ScalaCheck = Scala::ScalaCheck
|
|
200
|
+
ScalaTest = Scala::ScalaTest
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
Buildr::TestFramework << Buildr::Scala::ScalaTest
|
data/rakelib/apache.rake
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
13
|
+
# License for the specific language governing permissions and limitations under
|
|
14
|
+
# the License.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
require 'digest/md5'
|
|
18
|
+
require 'digest/sha1'
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# Tasks specific to Apache projects (license, release, etc).
|
|
22
|
+
namespace 'apache' do
|
|
23
|
+
|
|
24
|
+
desc 'Upload snapshot packages over to people.apache.org'
|
|
25
|
+
task 'snapshot'=>['spec', 'package'] do
|
|
26
|
+
rm_rf 'snapshot' # Always start with empty directory
|
|
27
|
+
puts "Copying existing gems from Apache"
|
|
28
|
+
sh 'rsync', '--progress', '--recursive', 'people.apache.org:public_html/buildr/snapshot', './'
|
|
29
|
+
puts "Copying new gems over"
|
|
30
|
+
cp FileList['pkg/{*.gem,*.tgz,*.zip}'], 'snapshot/gems'
|
|
31
|
+
puts "Generating gem index ..."
|
|
32
|
+
sh 'gem', 'generate_index', '--directory', 'snapshot'
|
|
33
|
+
puts "Copying gem and index back to Apache"
|
|
34
|
+
sh 'rsync', '--progress', '--recursive', 'snapshot', 'people.apache.org:public_html/buildr/'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
desc 'Check that source files contain the Apache license'
|
|
39
|
+
task 'license' do |task|
|
|
40
|
+
print 'Checking that files contain the Apache license ... '
|
|
41
|
+
required = task.prerequisites.select { |fn| File.file?(fn) }
|
|
42
|
+
missing = required.reject { |fn|
|
|
43
|
+
comments = File.read(fn).scan(/(\/\*(.*?)\*\/)|^#\s+(.*?)$|^-#\s+(.*?)$|<!--(.*?)-->/m).
|
|
44
|
+
map { |match| match.compact }.flatten.join("\n")
|
|
45
|
+
comments =~ /Licensed to the Apache Software Foundation/ && comments =~ /http:\/\/www.apache.org\/licenses\/LICENSE-2.0/
|
|
46
|
+
}
|
|
47
|
+
fail "#{missing.join(', ')} missing Apache License, please add it before making a release!" unless missing.empty?
|
|
48
|
+
puts 'OK'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Staging checks specific for Apache.
|
|
52
|
+
task 'check'=>'license' do |task, args|
|
|
53
|
+
args.gpg_user or fail "Please run with gpg_user=<argument for gpg --local-user>"
|
|
54
|
+
fail "No GPG user #{args.gpg_user}" if `gpg --list-keys #{args.gpg_user}`.empty?
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
file 'staged/distro'=>'package' do
|
|
59
|
+
puts 'Copying and signing release files ...'
|
|
60
|
+
mkpath 'staged/distro'
|
|
61
|
+
FileList['pkg/*.{gem,zip,tgz}'].each do |pkg|
|
|
62
|
+
cp pkg, pkg.pathmap('staged/distro/%n-incubating%x')
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
task 'sign'=>['etc/KEYS', 'staged/distro'] do |task, args|
|
|
67
|
+
gpg_user = args.gpg_user or fail "Please run with gpg_user=<argument for gpg --local-user>"
|
|
68
|
+
puts "Signing packages in staged/distro as user #{gpg_user}"
|
|
69
|
+
FileList['staged/distro/*.{gem,zip,tgz}'].each do |pkg|
|
|
70
|
+
bytes = File.open(pkg, 'rb') { |file| file.read }
|
|
71
|
+
File.open(pkg + '.md5', 'w') { |file| file.write Digest::MD5.hexdigest(bytes) << ' ' << File.basename(pkg) }
|
|
72
|
+
File.open(pkg + '.sha1', 'w') { |file| file.write Digest::SHA1.hexdigest(bytes) << ' ' << File.basename(pkg) }
|
|
73
|
+
sh 'gpg', '--local-user', gpg_user, '--armor', '--output', pkg + '.asc', '--detach-sig', pkg, :verbose=>true
|
|
74
|
+
end
|
|
75
|
+
cp 'etc/KEYS', 'staged/distro'
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Publish prerequisites to distro server.
|
|
79
|
+
task 'publish:distro' do |task, args|
|
|
80
|
+
target = args.incubating ? "people.apache.org:/www/www.apache.org/dist/incubator/#{spec.name}/#{spec.version}-incubating" :
|
|
81
|
+
"people.apache.org:/www/www.apache.org/dist/#{spec.name}/#{spec.version}"
|
|
82
|
+
puts 'Uploading packages to Apache distro ...'
|
|
83
|
+
host, remote_dir = target.split(':')
|
|
84
|
+
sh 'ssh', host, 'rm', '-rf', remote_dir rescue nil
|
|
85
|
+
sh 'ssh', host, 'mkdir', remote_dir
|
|
86
|
+
sh 'rsync', '--progress', '--recursive', 'published/distro/', target
|
|
87
|
+
puts 'Done'
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
task 'distro-links'=>'staged/distro' do |task, args|
|
|
91
|
+
url = args.incubating ? "http://www.apache.org/dist/incubator/#{spec.name}/#{spec.version}-incubating" :
|
|
92
|
+
"http://www.apache.org/dist/#{spec.name}/#{spec.version}"
|
|
93
|
+
rows = FileList['staged/distro/*.{gem,tgz,zip}'].map { |pkg|
|
|
94
|
+
name, md5 = File.basename(pkg), Digest::MD5.file(pkg).to_s
|
|
95
|
+
%{| "#{name}":#{url}/#{name} | "#{md5}":#{url}/#{name}.md5 | "Sig":#{url}/#{name}.asc |}
|
|
96
|
+
}
|
|
97
|
+
textile = <<-TEXTILE
|
|
98
|
+
h3. #{spec.name} #{spec.version}#{args.incubating && "-incubating"} (#{Time.now.strftime('%Y-%m-%d')})
|
|
99
|
+
|
|
100
|
+
|_. Package |_. MD5 Checksum |_. PGP |
|
|
101
|
+
#{rows.join("\n")}
|
|
102
|
+
|
|
103
|
+
p>. ("Release signing keys":#{url}/KEYS)
|
|
104
|
+
TEXTILE
|
|
105
|
+
file_name = 'doc/pages/download.textile'
|
|
106
|
+
print "Adding download links to #{file_name} ... "
|
|
107
|
+
modified = File.read(file_name).sub(/h2.*binaries.*source.*/i) { |header| "#{header}\n\n#{textile}" }
|
|
108
|
+
File.open file_name, 'w' do |file|
|
|
109
|
+
file.write modified
|
|
110
|
+
end
|
|
111
|
+
puts 'Done'
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
file 'staged/site'=>['distro-links', 'staged', 'site'] do
|
|
115
|
+
rm_rf 'staged/site'
|
|
116
|
+
cp_r 'site', 'staged'
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Publish prerequisites to Web site.
|
|
120
|
+
task 'publish:site' do |task, args|
|
|
121
|
+
target = args.incubating ? "people.apache.org:/www/incubator.apache.org/#{spec.name}" :
|
|
122
|
+
"people.apache.org:/www/#{spec.name}.apache.org"
|
|
123
|
+
puts 'Uploading Apache Web site ...'
|
|
124
|
+
sh 'rsync', '--progress', '--recursive', '--delete', 'published/site/', target
|
|
125
|
+
puts 'Done'
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
file 'release-vote-email.txt'=>'CHANGELOG' do |task|
|
|
130
|
+
# Need to know who you are on Apache, local user may be different (see .ssh/config).
|
|
131
|
+
whoami = `ssh people.apache.org whoami`.strip
|
|
132
|
+
base_url = "http://people.apache.org/~#{whoami}/buildr/#{spec.version}"
|
|
133
|
+
# Need changes for this release only.
|
|
134
|
+
changelog = File.read('CHANGELOG').scan(/(^(\d+\.\d+(?:\.\d+)?)\s+\(\d{4}-\d{2}-\d{2}\)\s*((:?^[^\n]+\n)*))/)
|
|
135
|
+
changes = changelog[0][2]
|
|
136
|
+
previous_version = changelog[1][1]
|
|
137
|
+
|
|
138
|
+
email = <<-EMAIL
|
|
139
|
+
To: buildr-dev@incubator.apache.org
|
|
140
|
+
Subject: [VOTE] Buildr #{spec.version} release
|
|
141
|
+
|
|
142
|
+
We're voting on the source distributions available here:
|
|
143
|
+
#{base_url}/distro/
|
|
144
|
+
|
|
145
|
+
Specifically:
|
|
146
|
+
#{base_url}/distro/buildr-#{spec.version}-incubating.tgz
|
|
147
|
+
#{base_url}/distro/buildr-#{spec.version}-incubating.zip
|
|
148
|
+
|
|
149
|
+
The documentation generated for this release is available here:
|
|
150
|
+
#{base_url}/site/
|
|
151
|
+
#{base_url}/site/buildr.pdf
|
|
152
|
+
|
|
153
|
+
The official specification against which this release was tested:
|
|
154
|
+
#{base_url}/site/specs.html
|
|
155
|
+
|
|
156
|
+
Test coverage report:
|
|
157
|
+
#{base_url}/site/coverage/index.html
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
The following changes were made since #{previous_version}:
|
|
161
|
+
|
|
162
|
+
#{changes}
|
|
163
|
+
EMAIL
|
|
164
|
+
File.open task.name, 'w' do |file|
|
|
165
|
+
file.write email
|
|
166
|
+
end
|
|
167
|
+
puts "Created release vote email template in '#{task.name}':"
|
|
168
|
+
puts email
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
task 'clobber' do
|
|
174
|
+
rm_rf 'snapshot'
|
|
175
|
+
rm_f 'release-vote-email.txt'
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
task 'stage:check'=>['apache:check']
|
|
180
|
+
task 'stage:prepare'=>['staged/distro', 'staged/site'] do |task|
|
|
181
|
+
# Since this requires input (passphrase), do it at the very end.
|
|
182
|
+
task.enhance do
|
|
183
|
+
task('apache:sign').invoke
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
task 'stage' do
|
|
187
|
+
task('apache:snapshot').invoke
|
|
188
|
+
end
|
|
189
|
+
task 'stage:wrapup'=>'release-vote-email.txt'
|
|
190
|
+
|
|
191
|
+
task 'release:publish'=>['apache:publish:distro', 'apache:publish:site']
|