build.rb
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 19 Jun 2018 19:06:44 +0100
branchstx-8.0.0
changeset 242 88110510dfc9
parent 221 a0f64acd117d
child 238 8d6be42520be
permissions -rwxr-xr-x
Closing branch stx-8.0.0
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
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
     6
DOCEND
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
     8
require 'optparse'
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    10
def run()
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    11
  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
    12
    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
    13
    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
    14
      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
    15
      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
    16
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
169
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    18
    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
    19
      ENV['BUILD_TARGET'] = value
f9f519bb10b6 Use GNU target triplets to specify build targets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 90
diff changeset
    20
      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
    21
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
59
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    23
    opts.on('-r', '--repository-set REPOSET', "Repository set to use. Overrides repository set specified by the environment variable.") do | value |
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    24
      ENV['REPOSITORYSET'] = value
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    25
      self.class.const_set('REPOSITORYSET', value)  
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    26
    end    
9099e2455d9c Added support for multiple different repository sets.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 25
diff changeset
    27
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    28
    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
    29
      puts DOCUMENTATION
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    30
      puts optparse.help()
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    31
      exit 0
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
    end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
  end
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    34
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    35
  optparse.parse!
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    36
90
9f574fad295d When building under CI throw an error if repositoryset is explicitly defined
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 59
diff changeset
    37
  # Make sure a repository set is defined. make it an error if not. 
9f574fad295d When building under CI throw an error if repositoryset is explicitly defined
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 59
diff changeset
    38
  if not ENV['REPOSITORYSET'] then
9f574fad295d When building under CI throw an error if repositoryset is explicitly defined
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 59
diff changeset
    39
    puts "ERROR: Repository set not specified. "
9f574fad295d When building under CI throw an error if repositoryset is explicitly defined
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 59
diff changeset
    40
    puts "       Use --repository-set option or set REPOSITORYSET environment"
9f574fad295d When building under CI throw an error if repositoryset is explicitly defined
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 59
diff changeset
    41
    exit 126
9f574fad295d When building under CI throw an error if repositoryset is explicitly defined
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 59
diff changeset
    42
  end
9f574fad295d When building under CI throw an error if repositoryset is explicitly defined
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 59
diff changeset
    43
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    44
  # If run outside a Jenkins build environment (such as from a command line), 
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    45
  # 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
    46
  # environment. 
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    47
  ENV['WORKSPACE'] ||= '.'
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    48
  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
    49
  ENV['JOB_NAME'] ||= 'interactive'
24
ae6fc15070e4 Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    50
ae6fc15070e4 Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    51
  # 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
    52
  if ARGV.size == 0 then
ae6fc15070e4 Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    53
    ARGV << 'jenkins:job'
ae6fc15070e4 Jenkinsfile.rb: added new target `jenkins:job`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 20
diff changeset
    54
  end
25
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    55
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    56
  # 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
    57
  #
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    58
  # 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
    59
  #    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
    60
  #    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
    61
  #    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
    62
  # 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
    63
  #    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
    64
  #    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
    65
  #    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
    66
  # 
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    67
  # 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
    68
  # 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
    69
  # 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
    70
  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
    71
  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
    72
    require 'fileutils'    
7ef6e0216e9c Jenkinsfile.rb: Wipe out `reports` directory before starting a build
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 24
diff changeset
    73
    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
    74
  end
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    75
  
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    76
  # 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
    77
  # fails. 
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    78
  ARGV << '--trace'
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    79
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    80
  require 'rake'
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    81
  Rake.application.run
0
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
end
f46260ba26b1 Initial shot of "new" rake-based builder
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
5
0e2993dac13e Jenkinsfile.rb: Jenkins build script refactored and simplified.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
    84
run if __FILE__ == $0