| #!/usr/bin/env python |
| # |
| # Copyright (c) 2012, 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. |
| # |
| # Script to push a package to pub. |
| # |
| # Usage: publish_pkg.py pkg_dir |
| # |
| # "pub" must be in PATH. |
| |
| |
| import os |
| import os.path |
| import re |
| import shutil |
| import sys |
| import subprocess |
| import tempfile |
| |
| def Main(argv): |
| HOME = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) |
| |
| pkgName = os.path.basename(os.path.normpath(argv[1])) |
| |
| pubspec = os.path.join(HOME, argv[1], 'pubspec.yaml') |
| if not os.path.exists(pubspec): |
| print 'Error: did not find pubspec.yaml at ' + pubspec |
| return -1 |
| |
| with open(pubspec) as pubspecFile: |
| lines = pubspecFile.readlines() |
| |
| version = None |
| foundSdkContraint = False |
| inDependencies = False |
| for line in lines: |
| if line.startswith('dependencies:'): |
| inDependencies = True |
| elif line.startswith('environment:'): |
| foundSdkContraint = True |
| elif line[0].isalpha(): |
| inDependencies = False |
| if line.startswith('version:'): |
| version = line[len('version:'):].strip() |
| if inDependencies: |
| if line.endswith(': any'): |
| print 'Error in %s: should not use "any" version constraint: %s' % ( |
| pubspec, line) |
| return -1 |
| |
| if not version: |
| print 'Error in %s: did not find package version.' % pubspec |
| return -1 |
| |
| if not foundSdkContraint: |
| print 'Error in %s: did not find SDK version constraint.' % pubspec |
| return -1 |
| |
| tmpDir = tempfile.mkdtemp() |
| |
| # |
| # If pubspec.yaml exists, check that the SDK's version constraint is valid |
| # |
| shutil.copytree(os.path.join(HOME, argv[1]), |
| os.path.join(tmpDir, pkgName)) |
| |
| if not os.path.exists(os.path.join(tmpDir, pkgName, 'LICENSE')): |
| with open(os.path.join(tmpDir, pkgName, 'LICENSE'), 'w') as licenseFile: |
| licenseFile.write( |
| '''Copyright 2013, the Dart project authors. All rights reserved. |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions are |
| met: |
| |
| * Redistributions of source code must retain the above copyright |
| notice, this list of conditions and the following disclaimer. |
| * Redistributions in binary form must reproduce the above |
| copyright notice, this list of conditions and the following |
| disclaimer in the documentation and/or other materials provided |
| with the distribution. |
| * Neither the name of Google Inc. nor the names of its |
| contributors may be used to endorse or promote products derived |
| from this software without specific prior written permission. |
| |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| '''); |
| |
| print 'publishing version ' + version + ' of ' + argv[1] + ' to pub.\n' |
| |
| # TODO(jmesserly): this code puts things in the pub cache. Useful for testing |
| # without actually uploading. |
| #cacheDir = os.path.join( |
| # os.path.expanduser('~/.pub-cache/hosted/pub.dartlang.org'), |
| # pkgName + '-' + version) |
| #print 'Moving to ' + cacheDir |
| #shutil.move(os.path.join(tmpDir, pkgName), cacheDir) |
| |
| subprocess.call(['pub', 'publish'], cwd=os.path.join(tmpDir, pkgName)) |
| shutil.rmtree(tmpDir) |
| |
| if __name__ == '__main__': |
| sys.exit(Main(sys.argv)) |