build.rb
author Patrik Svestka <patrik.svestka@gmail.com>
Fri, 24 Aug 2018 19:19:47 +0200
changeset 253 3747e4b3256b
parent 246 687c4889e2e6
permissions -rwxr-xr-x
Adding a total time for each test package in the OVERALL SUMMARY
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
     1
#!/usr/bin/ruby
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
     2
DOCUMENTATION = <<DOCEND
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
     3
A help script to build a Smalltalk/X jv-branch (mainly) on a Jenkins CI. 
24
ae6fc15070e4 Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
     4
If no TARGET is given, invokes target `jenkins:job`.
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
246
687c4889e2e6 Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 238
diff changeset
     6
Some influential environment variables:
687c4889e2e6 Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 238
diff changeset
     7
687c4889e2e6 Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 238
diff changeset
     8
  BUILD_TARGET    target to build, can be also specified on a command line using 
687c4889e2e6 Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 238
diff changeset
     9
                  --build-target option. 
687c4889e2e6 Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 238
diff changeset
    10
  CC              C compiler command (only UNIX builds for now)
687c4889e2e6 Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 238
diff changeset
    11
  CXX             C++ compiler command (only UNIX builds for now)
687c4889e2e6 Rakefiles: allow to specify C compiler on a command line / in environment
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 238
diff changeset
    12
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    13
DOCEND
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    15
require 'optparse'
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    17
def run()
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    18
  optparse = OptionParser.new do | opts |
24
ae6fc15070e4 Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    19
    opts.banner = "Usage: #{$0} [TARGET1 [TARGET1 [...]]\n"
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    20
    opts.on('-p', '--project PROJECT', "PROJECT to build. Overrides project specified by the environment variable.") do | value |
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    21
      ENV['PROJECT'] = value
20
0b7a237a445b Fixed `Jenkinsfile.rb` to correctly propagate --project and --arch to `rake`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
    22
      self.class.const_set('PROJECT', value)  
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
169
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    25
    opts.on('-t', '--build-target BUILD_TARGET', "Target to build for in form of GNU target triplet (such as 'x86_64-pc-linux-gnu'). Overrides build target specified by the environment variable.") do | value |
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    26
      ENV['BUILD_TARGET'] = value
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    27
      self.class.const_set('BUILD_TARGET', value)  
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    30
    opts.on(nil, '--help', "Prints this message") do
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    31
      puts DOCUMENTATION
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    32
      puts optparse.help()
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    33
      exit 0
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
  end
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    36
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    37
  optparse.parse!
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    38
238
8d6be42520be Rakefiles: cleanup - removed `REPOSITORYSET` variable
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 221
diff changeset
    39
    # If run outside a Jenkins build environment (such as from a command line), 
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    40
  # define some variables to make it look more like a proper  Jenkins build 
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    41
  # environment. 
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    42
  ENV['WORKSPACE'] ||= '.'
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    43
  ENV['BUILD_NUMBER'] ||= Time.now.strftime("%Y%m%d")
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    44
  ENV['JOB_NAME'] ||= 'interactive'
24
ae6fc15070e4 Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    45
ae6fc15070e4 Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    46
  # If no target is given, run target jenkins:job
ae6fc15070e4 Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    47
  if ARGV.size == 0 then
ae6fc15070e4 Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    48
    ARGV << 'jenkins:job'
ae6fc15070e4 Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    49
  end
25
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    50
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    51
  # Wipe out `reports` directory. This is needed for two reasons: 
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    52
  #
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    53
  # 1) There's a bug in Cobertura plugin so it does not expand 
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    54
  #    variables in .xml file pattern so the pattern cannot include
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    55
  #    BUILD_NUMBER to tell reports for particular build. 
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    56
  #    See https://issues.jenkins-ci.org/browse/JENKINS-30647
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    57
  # 2) More importantly, when additional axis is used (such as JDK
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    58
  #    or Mercurial version) then value of this axis is not reflected
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    59
  #    in report filename. So again, all files, even those from previous
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    60
  #    builds would be matches which is not what we want. 
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    61
  # 
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    62
  # A workaround is to wipe-out `reports` directory before each buld,
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    63
  # so once this script finishes, all reports there are for this build.
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    64
  # The downside is that we have to limit number of executors to 1,
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    65
  reports_dir = File.join(ENV['WORKSPACE'], 'reports')
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    66
  if File.exist? reports_dir then
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    67
    require 'fileutils'    
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    68
    FileUtils.rm_rf reports_dir
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    69
  end
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    70
  
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    71
  # When run under Jenkins, we do want to see full backtrace if something
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    72
  # fails. 
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    73
  ARGV << '--trace'
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    74
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    75
  require 'rake'
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    76
  Rake.application.run
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    79
run if __FILE__ == $0