def prepublish(self, new_version, atom_semver): self._repo = self._checkout_apm_repo() logging.info('Publishing %s to apm at version %s', self.get_package_name(), new_version) # Clean repo out, leaving .git metadata in place. logging.info('Cleaning repo for package %s', self.get_package_name()) self.clean_repo() # Copy files from package into repo. package = self._config.package_directory logging.info('Copying package %s', self.get_package_name()) self.copy_into_repo(package) # Load package.json and rewrite version number within it. # TODO (jpearce): reconcile with very similar npm code nil_semver = '0.0.0' new_semver = '0.0.%d' % new_version package_file = os.path.join(self._repo, 'package.json') package = json_load(package_file) if package['version'] != nil_semver: raise AssertionError('Local package %s was not at version 0' % self.get_package_name()) package['version'] = new_semver # Update the versions of our local dependencies accordingly. for dependency_key in DEPENDENCIES_KEYS: if not dependency_key in package: continue for (dependency, version) in package[dependency_key].items(): if not self._config.is_nuclide_npm_package(dependency): continue if version != nil_semver: raise AssertionError( 'Local dependency %s in package %s was not at version 0' % dependency, self.get_package_name()) package[dependency_key][dependency] = new_semver # Update the version of the Atom engine required. package['engines'] = {'atom': '>=%s' % atom_semver} # Rewrite the repository URL. repository = 'https://github.com/facebooknuclideapm/%s' % self.get_package_name( ) package['repository'] = repository # Write the adjusted package file back to the temporary directory and publish it. json_dump(package, package_file) # Add a boilerplate .gitignore file if the package does not already have one. path_to_gitignore = os.path.join(self._repo, '.gitignore') if not os.path.exists(path_to_gitignore): with open(path_to_gitignore, 'w') as f: f.write(DEFAULT_GITIGNORE) # Prefix the README.md with information about the proper repository. path_to_readme = os.path.join(self._repo, 'README.md') if os.path.exists(path_to_readme): with open(path_to_readme, 'r') as f: readme_contents = README_PREFIX + f.read() else: readme_contents = README_PREFIX with open(path_to_readme, 'w') as f: f.write(readme_contents) # Write out the packages to install for the nuclide-installer package. if self.get_package_name() == 'nuclide-installer': from publishers.nuclide_installer_config import generate_config installer_config_json = generate_config( new_semver, self._config.apm_package_names) with open(os.path.join(self._repo, 'lib', 'config.json'), 'w') as f: f.write(installer_config_json) # Now that all of the local changes have been written, commit them. tag_name = 'v' + new_semver self._git.commit_all( self._repo, 'Committing changes in preparation for publishing %s' % tag_name) self._git.add_tag(self._repo, tag_name, 'Atom package %s.' % tag_name) # We commit the tag first because we should fail if the tag has already been pushed. self._git.push_tag(self._repo, tag_name) # Pushing to master is not strictly necessary, but it makes it easier to audit the changes # that have been made between versions over time. self._git.push_to_master(self._repo)
def prepublish(self, new_version, atom_semver): self._repo = self._checkout_apm_repo() logging.info('Publishing %s to apm at version %s', self.get_package_name(), new_version) # Clean repo out, leaving .git metadata in place. logging.info('Cleaning repo for package %s', self.get_package_name()) self.clean_repo() # Copy files from package into repo. package = self._config.package_directory logging.info('Copying package %s', self.get_package_name()) self.copy_into_repo(package) # Make sure that standard boilerplate files are included in the repo. for name, src in self._boilerplate_files.items(): shutil.copyfile( src, os.path.join(self._repo, name)) # Load package.json and rewrite version number within it. package_file = os.path.join(self._repo, 'package.json') package = json_load(package_file) package = update_package_json_versions(self.get_package_name(), package, self._config.nuclide_npm_package_names, new_version) # Specify the license if it is not already specified. if 'license' not in package: package['license'] = 'SEE LICENSE IN LICENSE' # Update the version of the Atom engine required. package['engines'] = {'atom': '>=%s' % atom_semver} # Rewrite the repository URL. repository = 'https://github.com/facebooknuclideapm/%s' % self.get_package_name() package['repository'] = repository # Write the adjusted package file back to the temporary directory and publish it. json_dump(package, package_file) rewrite_shrinkwrap_file(self._repo, package, self._config.nuclide_npm_package_names, new_version) # Add a boilerplate .gitignore file if the package does not already have one. path_to_gitignore = os.path.join(self._repo, '.gitignore') if not os.path.exists(path_to_gitignore): with open(path_to_gitignore, 'w') as f: f.write(DEFAULT_GITIGNORE) # Prefix the README.md with information about the proper repository. path_to_readme = os.path.join(self._repo, 'README.md') if os.path.exists(path_to_readme): with open(path_to_readme, 'r') as f: readme_contents = README_PREFIX + f.read() else: readme_contents = README_PREFIX with open(path_to_readme, 'w') as f: f.write(readme_contents) # Write out the packages to install for the nuclide-installer package. if self.get_package_name() == 'nuclide-installer': from publishers.nuclide_installer_config import generate_config installer_config_json = generate_config(package['version'], self._config.apm_package_names) with open(os.path.join(self._repo, 'lib', 'config.json'), 'w') as f: f.write(installer_config_json) # Pre-transpile Babel files, as appropriate. self._transpiler.transpile_in_place(self.get_package_name(), self._repo)
def prepublish(self, new_version, atom_semver): self._repo = self._checkout_apm_repo() logging.info('Publishing %s to apm at version %s', self.get_package_name(), new_version) # Clean repo out, leaving .git metadata in place. logging.info('Cleaning repo for package %s', self.get_package_name()) self.clean_repo() # Copy files from package into repo. package = self._config.package_directory logging.info('Copying package %s', self.get_package_name()) self.copy_into_repo(package) # Make sure that standard boilerplate files are included in the repo. for name, src in self._boilerplate_files.items(): shutil.copyfile(src, os.path.join(self._repo, name)) # Load package.json and rewrite version number within it. package_file = os.path.join(self._repo, 'package.json') package = json_load(package_file) package = update_package_json_versions( self.get_package_name(), package, self._config.nuclide_npm_package_names, new_version) # Specify the license if it is not already specified. if 'license' not in package: package['license'] = 'SEE LICENSE IN LICENSE' # Update the version of the Atom engine required. package['engines'] = {'atom': '>=%s' % atom_semver} # Rewrite the repository URL. repository = 'https://github.com/facebooknuclideapm/%s' % self.get_package_name( ) package['repository'] = repository # Write the adjusted package file back to the temporary directory and publish it. json_dump(package, package_file) rewrite_shrinkwrap_file(self._repo, package, self._config.nuclide_npm_package_names, new_version) # Add a boilerplate .gitignore file if the package does not already have one. path_to_gitignore = os.path.join(self._repo, '.gitignore') if not os.path.exists(path_to_gitignore): with open(path_to_gitignore, 'w') as f: f.write(DEFAULT_GITIGNORE) # Prefix the README.md with information about the proper repository. path_to_readme = os.path.join(self._repo, 'README.md') if os.path.exists(path_to_readme): with open(path_to_readme, 'r') as f: readme_contents = README_PREFIX + f.read() else: readme_contents = README_PREFIX with open(path_to_readme, 'w') as f: f.write(readme_contents) # Write out the packages to install for the nuclide-installer package. if self.get_package_name() == 'nuclide-installer': from publishers.nuclide_installer_config import generate_config installer_config_json = generate_config( package['version'], self._config.apm_package_names) with open(os.path.join(self._repo, 'lib', 'config.json'), 'w') as f: f.write(installer_config_json) # Pre-transpile Babel files, as appropriate. self._transpiler.transpile_in_place(self.get_package_name(), self._repo)
def prepublish(self, new_version, atom_semver): self._repo = self._checkout_apm_repo() logging.info('Publishing %s to apm at version %s', self.get_package_name(), new_version) # Clean repo out, leaving .git metadata in place. logging.info('Cleaning repo for package %s', self.get_package_name()) self.clean_repo() # Copy files from package into repo. package = self._config.package_directory logging.info('Copying package %s', self.get_package_name()) self.copy_into_repo(package) # Load package.json and rewrite version number within it. # TODO (jpearce): reconcile with very similar npm code nil_semver = '0.0.0' new_semver = '0.0.%d' % new_version package_file = os.path.join(self._repo, 'package.json') package = json_load(package_file) if package['version'] != nil_semver: raise AssertionError('Local package %s was not at version 0' % self.get_package_name()) package['version'] = new_semver # Update the versions of our local dependencies accordingly. for dependency_key in DEPENDENCIES_KEYS: if not dependency_key in package: continue for (dependency, version) in package[dependency_key].items(): if not self._config.is_nuclide_npm_package(dependency): continue if version != nil_semver: raise AssertionError('Local dependency %s in package %s was not at version 0' % dependency, self.get_package_name()) package[dependency_key][dependency] = new_semver # Update the version of the Atom engine required. package['engines'] = {'atom': '>=%s' % atom_semver} # Rewrite the repository URL. repository = 'https://github.com/facebooknuclideapm/%s' % self.get_package_name() package['repository'] = repository # Write the adjusted package file back to the temporary directory and publish it. json_dump(package, package_file) # Add a boilerplate .gitignore file if the package does not already have one. path_to_gitignore = os.path.join(self._repo, '.gitignore') if not os.path.exists(path_to_gitignore): with open(path_to_gitignore, 'w') as f: f.write(DEFAULT_GITIGNORE) # Prefix the README.md with information about the proper repository. path_to_readme = os.path.join(self._repo, 'README.md') if os.path.exists(path_to_readme): with open(path_to_readme, 'r') as f: readme_contents = README_PREFIX + f.read() else: readme_contents = README_PREFIX with open(path_to_readme, 'w') as f: f.write(readme_contents) # Write out the packages to install for the nuclide-installer package. if self.get_package_name() == 'nuclide-installer': from publishers.nuclide_installer_config import generate_config installer_config_json = generate_config(new_semver, self._config.apm_package_names) with open(os.path.join(self._repo, 'lib', 'config.json'), 'w') as f: f.write(installer_config_json) # Now that all of the local changes have been written, commit them. tag_name = 'v' + new_semver self._git.commit_all(self._repo, 'Committing changes in preparation for publishing %s' % tag_name) self._git.add_tag(self._repo, tag_name, 'Atom package %s.' % tag_name) # We commit the tag first because we should fail if the tag has already been pushed. self._git.push_tag(self._repo, tag_name) # Pushing to master is not strictly necessary, but it makes it easier to audit the changes # that have been made between versions over time. self._git.push_to_master(self._repo)