build.rb
author Jan Vrany <jan.vrany@labware.com>
Tue, 23 Jun 2020 12:16:02 +0100
changeset 294 0f3980335d2b
parent 246 687c4889e2e6
permissions -rwxr-xr-x
CI: do not archive (and publish) i686 versions any more 32bit Intel is phasing out already - Microsoft is dropping i686 Windows 10, many Linux distros are dropping i686 architecture too. We still build and test 32bit versions, but no longer archive it nor publish it to save space and bandwidth. We might make it available again upon request.
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