diff --git a/scripts/build.py b/scripts/build.py index 02450d083..8c54b68a2 100755 --- a/scripts/build.py +++ b/scripts/build.py @@ -132,13 +132,16 @@ def create_package_fs(build_root): os.makedirs(os.path.join(build_root, d)) os.chmod(os.path.join(build_root, d), 0o755) -def package_scripts(build_root, windows=False): +def package_scripts(build_root, config_only=False, windows=False): """Copy the necessary scripts and configuration files to the package filesystem. """ - if windows: - logging.info("Copying configuration to build directory.") - shutil.copyfile(DEFAULT_WINDOWS_CONFIG, os.path.join(build_root, "telegraf.conf")) + if config_only or windows: + logging.info("Copying configuration to build directory") + if windows: + shutil.copyfile(DEFAULT_WINDOWS_CONFIG, os.path.join(build_root, "telegraf.conf")) + else: + shutil.copyfile(DEFAULT_CONFIG, os.path.join(build_root, "telegraf.conf")) os.chmod(os.path.join(build_root, "telegraf.conf"), 0o644) else: logging.info("Copying scripts and configuration to build directory") @@ -239,21 +242,15 @@ def get_current_version(): """Parse version information from git tag output. """ version_tag = get_current_version_tag() - # Remove leading 'v' and possible '-rc\d+' + # Remove leading 'v' if version_tag[0] == 'v': version_tag = version_tag[1:] - version = re.sub(r'-rc\d+', '', str(version_tag)) - return version - -def get_current_rc(): - """Parse release candidate from git tag output. - """ - rc = None - version_tag = get_current_version_tag() - matches = re.match(r'.*-rc(\d+)', str(version_tag)) - if matches: - rc, = matches.groups(1) - return rc + # Replace any '-'/'_' with '~' + if '-' in version_tag: + version_tag = version_tag.replace("-","~") + if '_' in version_tag: + version_tag = version_tag.replace("_","~") + return version_tag def get_current_commit(short=False): """Retrieve the current git commit. @@ -418,7 +415,6 @@ def build(version=None, platform=None, arch=None, nightly=False, - rc=None, race=False, clean=False, outdir=".", @@ -445,9 +441,6 @@ def build(version=None, shutil.rmtree(outdir) os.makedirs(outdir) - if rc: - # If a release candidate, update the version information accordingly - version = "{}rc{}".format(version, rc) logging.info("Using version '{}' for build.".format(version)) tmp_build_dir = create_temp_dir() @@ -540,7 +533,7 @@ def generate_sig_from_file(path): run('gpg --armor --detach-sign --yes {}'.format(path)) return True -def package(build_output, version, nightly=False, rc=None, iteration=1, static=False, release=False): +def package(build_output, pkg_name, version, nightly=False, iteration=1, static=False, release=False): """Package the output of the build process. """ outfiles = [] @@ -564,10 +557,12 @@ def package(build_output, version, nightly=False, rc=None, iteration=1, static=F os.makedirs(build_root) # Copy packaging scripts to build directory - if platform == "windows" or static or "static_" in arch: + if platform == "windows": # For windows and static builds, just copy # binaries to root of package (no other scripts or # directories) + package_scripts(build_root, config_only=True, windows=True) + elif static or "static_" in arch: package_scripts(build_root, config_only=True) else: create_package_fs(build_root) @@ -592,7 +587,7 @@ def package(build_output, version, nightly=False, rc=None, iteration=1, static=F for package_type in supported_packages[platform]: # Package the directory structure for each package type for the platform logging.debug("Packaging directory '{}' as '{}'.".format(build_root, package_type)) - name = PACKAGE_NAME + name = pkg_name # Reset version, iteration, and current location on each run # since they may be modified below. package_version = version @@ -604,17 +599,12 @@ def package(build_output, version, nightly=False, rc=None, iteration=1, static=F package_arch = arch if not release and not nightly: # For non-release builds, just use the commit hash as the version - package_version = "{}~{}.{}".format(version, - get_current_branch(), - get_current_commit(short=True)) + package_version = "{}~{}".format(version, + get_current_commit(short=True)) package_iteration = "0" package_build_root = build_root current_location = build_output[platform][arch] - if rc is not None and release: - # Set iteration to 0 since it's a release candidate - package_iteration = "0.rc{}".format(rc) - if package_type in ['zip', 'tar']: # For tars and zips, start the packaging one folder above # the build root (to include the package name) @@ -639,18 +629,17 @@ def package(build_output, version, nightly=False, rc=None, iteration=1, static=F package_version, platform, package_arch) - current_location = os.path.join(os.getcwd(), current_location) if package_type == 'tar': - tar_command = "cd {} && tar -cvzf {}.tar.gz ./*".format(build_root, name) + tar_command = "cd {} && tar -cvzf {}.tar.gz ./*".format(package_build_root, name) run(tar_command, shell=True) - run("mv {}.tar.gz {}".format(os.path.join(build_root, name), current_location), shell=True) + run("mv {}.tar.gz {}".format(os.path.join(package_build_root, name), current_location), shell=True) outfile = os.path.join(current_location, name + ".tar.gz") outfiles.append(outfile) elif package_type == 'zip': - zip_command = "cd {} && zip -r {}.zip ./*".format(build_root, name) + zip_command = "cd {} && zip -r {}.zip ./*".format(package_build_root, name) run(zip_command, shell=True) - run("mv {}.zip {}".format(os.path.join(build_root, name), current_location), shell=True) + run("mv {}.zip {}".format(os.path.join(package_build_root, name), current_location), shell=True) outfile = os.path.join(current_location, name + ".zip") outfiles.append(outfile) elif package_type not in ['zip', 'tar'] and static or "static_" in arch: @@ -681,7 +670,6 @@ def package(build_output, version, nightly=False, rc=None, iteration=1, static=F os.rename(outfile, new_outfile) outfile = new_outfile else: - # Strip iteration from package name if package_type == 'rpm': # rpm's convert any dashes to underscores package_version = package_version.replace("-", "_") @@ -698,9 +686,6 @@ def package(build_output, version, nightly=False, rc=None, iteration=1, static=F def main(args): global PACKAGE_NAME - if args.nightly and args.rc: - logging.error("Cannot be both a nightly and a release candidate.") - return 1 if args.release and args.nightly: logging.error("Cannot be both a nightly and a release.") return 1 @@ -710,8 +695,6 @@ def main(args): args.version = "{}~n{}".format(args.version, datetime.utcnow().strftime("%Y%m%d%H%M")) args.iteration = 0 - elif args.rc: - args.iteration = 0 # Pre-build checks check_environ() @@ -778,7 +761,6 @@ def main(args): platform=platform, arch=arch, nightly=args.nightly, - rc=args.rc, race=args.race, clean=args.clean, outdir=od, @@ -793,9 +775,9 @@ def main(args): logging.error("FPM ruby gem required for packaging. Stopping.") return 1 packages = package(build_output, + args.name, args.version, nightly=args.nightly, - rc=args.rc, iteration=args.iteration, static=args.static, release=args.release) @@ -844,6 +826,7 @@ if __name__ == '__main__': help='Output directory') parser.add_argument('--name', '-n', metavar='', + default=PACKAGE_NAME, type=str, help='Name to use for package name (when package is specified)') parser.add_argument('--arch', @@ -871,14 +854,10 @@ if __name__ == '__main__': type=str, default=get_current_version(), help='Version information to apply to build output (ex: 0.12.0)') - parser.add_argument('--rc', - metavar='', - type=int, - help='Release Candidate (RC) version to apply to build output') parser.add_argument('--iteration', metavar='', - type=int, - default=1, + type=str, + default="1", help='Package iteration to apply to build output (defaults to 1)') parser.add_argument('--stats', action='store_true',