| #!/usr/bin/env python3 |
| |
| # Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| """ |
| Buildbot steps for src tarball generation and debian package generation |
| |
| Package up the src of the dart repo and create a debian package. |
| Archive tarball and debian package to google cloud storage. |
| """ |
| |
| import os |
| import subprocess |
| import sys |
| |
| sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'bots')) |
| import bot_utils |
| |
| utils = bot_utils.GetUtils() |
| |
| HOST_OS = utils.GuessOS() |
| |
| |
| def InstallFromDep(builddir): |
| for entry in os.listdir(builddir): |
| if entry.endswith("_amd64.deb"): |
| path = os.path.join(builddir, entry) |
| Run(['dpkg', '-i', path]) |
| |
| |
| def UninstallDart(): |
| Run(['dpkg', '-r', 'dart']) |
| |
| |
| def CreateDartTestFile(tempdir): |
| filename = os.path.join(tempdir, 'test.dart') |
| with open(filename, 'w') as f: |
| f.write('import "dart:collection";\n\n') |
| f.write('void main() {\n') |
| f.write(' print("Hello world");\n') |
| f.write('}') |
| return filename |
| |
| |
| def Run(command): |
| print("Running: %s" % ' '.join(command)) |
| sys.stdout.flush() |
| no_color_env = dict(os.environ) |
| no_color_env['TERM'] = 'nocolor' |
| subprocess.check_call(command, env=no_color_env) |
| |
| |
| def TestInstallation(assume_installed=True): |
| paths = ['/usr/bin/dart', '/usr/lib/dart/bin/dart'] |
| for path in paths: |
| if os.path.exists(path): |
| if not assume_installed: |
| print('Assumed not installed, found %s' % path) |
| sys.exit(1) |
| else: |
| if assume_installed: |
| print('Assumed installed, but could not find %s' % path) |
| sys.exit(1) |
| |
| |
| def SrcSteps(): |
| version = utils.GetVersion() |
| builddir = os.path.join(bot_utils.DART_DIR, utils.GetBuildDir(HOST_OS), |
| 'src_and_installation') |
| |
| if not os.path.exists(builddir): |
| os.makedirs(builddir) |
| tarfilename = 'dart-%s.tar.gz' % version |
| tarfile = os.path.join(builddir, tarfilename) |
| |
| print('Validating that we are on debian jessie') |
| args = ['cat', '/etc/os-release'] |
| (stdout, stderr, exitcode) = bot_utils.run(args) |
| if exitcode != 0: |
| print("Could not find linux system, exiting") |
| sys.exit(1) |
| if not "jessie" in stdout: |
| print("Trying to build debian bits but not on debian Jessie") |
| print("You can't fix this, please contact dart-engprod@") |
| sys.exit(1) |
| |
| print('Building src tarball') |
| Run([ |
| sys.executable, 'tools/linux_dist_support/create_tarball.py', |
| '--tar_filename', tarfile |
| ]) |
| |
| print('Building Debian packages') |
| Run([ |
| sys.executable, 'tools/linux_dist_support/create_debian_packages.py', |
| '--tar_filename', tarfile, '--out_dir', builddir |
| ]) |
| |
| if os.path.exists('/usr/bin/dart') or os.path.exists( |
| '/usr/lib/dart/bin/dart'): |
| print("Dart already installed, removing") |
| UninstallDart() |
| TestInstallation(assume_installed=False) |
| |
| InstallFromDep(builddir) |
| TestInstallation(assume_installed=True) |
| |
| # We build the runtime target to get everything we need to test the |
| # standalone target. |
| Run([ |
| sys.executable, 'tools/build.py', '--no-goma', '--mode=release', |
| '--arch=x64', 'runtime' |
| ]) |
| # Copy in the installed binary to avoid poluting /usr/bin (and having to |
| # run as root) |
| Run(['cp', '/usr/bin/dart', 'out/ReleaseX64/dart']) |
| |
| # Check dart, dart compile js, and dart analyze against a hello world program |
| with utils.TempDir() as temp_dir: |
| test_file = CreateDartTestFile(temp_dir) |
| Run(['/usr/lib/dart/bin/dart', 'compile', 'js', test_file]) |
| Run(['/usr/lib/dart/bin/dart', 'analyze', test_file]) |
| Run(['/usr/lib/dart/bin/dart', test_file]) |
| |
| UninstallDart() |
| TestInstallation(assume_installed=False) |
| |
| |
| if __name__ == '__main__': |
| SrcSteps() |