def prepare(self): if self.get_config_name().space == 'Tinkerforge': name = 'comcu' else: name = 'comcu_' + self.get_config_name().under common.recreate_dir(os.path.join(self.get_root_dir(), name))
def generate(root_dir): tmp_dir = os.path.join(root_dir, 'maven_package') tmp_source_dir = os.path.join(tmp_dir, 'source') # Make directories common.recreate_dir(tmp_dir) # Unzip version = common.get_changelog_version(root_dir) common.execute(['unzip', '-q', os.path.join(root_dir, 'tinkerforge_java_bindings_{0}_{1}_{2}.zip'.format(*version)), '-d', tmp_dir]) # Override pom.xml common.specialize_template(os.path.join(root_dir, 'pom.xml.bundle-template'), os.path.join(tmp_source_dir, 'pom.xml'), {'{{VERSION}}': '.'.join(version)}) # Make package with common.ChangedDirectory(tmp_source_dir): # FIXME: maven-toolchains-plugin doesn't stop the default JDK from # leaking into the build process. it is still necessary to set # JAVA_HOME to Java 8 in order to stop the default JDK from # being recorded as the Build-Jdk-Spec in the manifest file. env = dict(os.environ) env['JAVA_HOME'] = java_common.detect_java_home() common.execute(['mvn', 'clean', 'verify'], env=env)
def generate(root_dir, language): version = common.get_changelog_version(root_dir) debian_dir = os.path.join(root_dir, 'debian') tmp_dir = os.path.join(root_dir, 'debian_package') tmp_source_dir = os.path.join(tmp_dir, 'source') tmp_source_bashcompletion_dir = os.path.join(tmp_source_dir, 'bash-completion') tmp_source_debian_dir = os.path.join(tmp_source_dir, 'debian') tmp_build_dir = os.path.join( tmp_dir, 'tinkerforge-shell-bindings-{0}.{1}.{2}'.format(*version)) # Make directories common.recreate_dir(tmp_dir) # Unzip common.execute([ 'unzip', '-q', os.path.join( root_dir, 'tinkerforge_shell_bindings_{0}_{1}_{2}.zip'.format(*version)), '-d', tmp_dir ]) os.makedirs(tmp_source_dir) os.makedirs(tmp_source_bashcompletion_dir) with open(os.path.join(tmp_dir, 'tinkerforge'), 'r') as f: script = f.read() assert script.startswith('#!/usr/bin/env python\n') script = '#!/usr/bin/python3 -u\n' + script.split('\n', 1)[1] with open(os.path.join(tmp_source_dir, 'tinkerforge'), 'w') as f: f.write(script) shutil.copy(os.path.join(tmp_dir, 'tinkerforge-bash-completion.sh'), os.path.join(tmp_source_bashcompletion_dir, 'tinkerforge')) shutil.copytree(debian_dir, tmp_source_debian_dir) common.specialize_template( os.path.join(tmp_source_debian_dir, 'changelog.template'), os.path.join(tmp_source_debian_dir, 'changelog'), { '<<VERSION>>': '.'.join(version), '<<DATE>>': subprocess.check_output(['date', '-R']).decode('utf-8') }, remove_template=True) # Make package os.rename(tmp_source_dir, tmp_build_dir) with common.ChangedDirectory(tmp_build_dir): common.execute(['dpkg-buildpackage', '--no-sign']) # Check package with common.ChangedDirectory(tmp_dir): common.execute(['lintian', '--pedantic'] + glob.glob('*.deb'))
def prepare(self): if self.get_config_name().space == 'Tinkerforge': name = 'doc' else: name = 'doc_' + self.get_config_name().under common.recreate_dir(os.path.join(self.get_root_dir(), name)) for language in ['en', 'de']: for category in ['Bricks', 'Bricklets']: os.makedirs( os.path.join(self.get_root_dir(), name, language, category))
def generate(root_dir, language): version = common.get_changelog_version(root_dir) debian_dir = os.path.join(root_dir, 'debian') tmp_dir = os.path.join(root_dir, 'debian_package') tmp_octave_dir = os.path.join(tmp_dir, 'octave') tmp_octave_debian_dir = os.path.join(tmp_octave_dir, 'debian') tmp_build_dir = os.path.join( tmp_dir, 'tinkerforge-octave-bindings-{0}.{1}.{2}'.format(*version)) # Make directories common.recreate_dir(tmp_dir) # Unzip common.execute([ 'unzip', '-q', os.path.join( root_dir, 'tinkerforge_matlab_bindings_{0}_{1}_{2}.zip'.format(*version)), os.path.join('octave', '*'), '-x', os.path.join('octave', 'examples', '*'), '-d', tmp_dir ]) shutil.copytree(debian_dir, tmp_octave_debian_dir) common.specialize_template( os.path.join(tmp_octave_debian_dir, 'changelog.template'), os.path.join(tmp_octave_debian_dir, 'changelog'), { '<<VERSION>>': '.'.join(version), '<<DATE>>': subprocess.check_output(['date', '-R']).decode('utf-8') }, remove_template=True) os.replace(os.path.join(tmp_octave_dir, 'Tinkerforge.jar'), os.path.join(tmp_octave_dir, 'tinkerforge.jar')) # Make package os.rename(tmp_octave_dir, tmp_build_dir) with common.ChangedDirectory(tmp_build_dir): # FIXME: maven-toolchains-plugin doesn't stop the default JDK from # leaking into the build process. it is still necessary to set # JAVA_HOME to Java 8 in order to stop the default JDK from # being recorded as the Build-Jdk-Spec in the manifest file. env = dict(os.environ) env['JAVA_HOME'] = java_common.detect_java_home() common.execute(['dpkg-buildpackage', '--no-sign'], env=env) # Check package with common.ChangedDirectory(tmp_dir): common.execute(['lintian', '--pedantic'] + glob.glob('*.deb'))
def generate(root_dir, language): version = common.get_changelog_version(root_dir) debian_dir = os.path.join(root_dir, 'debian') tmp_dir = os.path.join(root_dir, 'debian_package') tmp_tinkerforge_dir = os.path.join(tmp_dir, 'tinkerforge') tmp_tinkerforge_debian_dir = os.path.join(tmp_tinkerforge_dir, 'debian') tmp_build_dir = os.path.join( tmp_dir, 'tinkerforge-ruby-bindings-{0}.{1}.{2}'.format(*version)) # Make directories common.recreate_dir(tmp_dir) # Unzip common.execute([ 'unzip', '-q', os.path.join( root_dir, 'tinkerforge_ruby_bindings_{0}_{1}_{2}.zip'.format(*version)), '-d', tmp_dir ]) common.execute(['gem2tgz', os.path.join(tmp_dir, 'tinkerforge.gem')]) common.execute([ 'tar', '-xf', os.path.join(tmp_dir, 'tinkerforge.tar.gz'.format(*version)), '-C', tmp_dir ]) shutil.copytree(debian_dir, tmp_tinkerforge_debian_dir) common.specialize_template( os.path.join(tmp_tinkerforge_debian_dir, 'changelog.template'), os.path.join(tmp_tinkerforge_debian_dir, 'changelog'), { '<<VERSION>>': '.'.join(version), '<<DATE>>': subprocess.check_output(['date', '-R']).decode('utf-8') }, remove_template=True) # Make package os.rename(tmp_tinkerforge_dir, tmp_build_dir) with common.ChangedDirectory(tmp_build_dir): common.execute(['dpkg-buildpackage', '--no-sign']) # Check package with common.ChangedDirectory(tmp_dir): common.execute(['lintian', '--pedantic'] + glob.glob('*.deb'))
def generate(root_dir): tmp_dir = os.path.join(root_dir, 'cpan_package') tmp_unzipped_dir = os.path.join(tmp_dir, 'unzipped') tmp_unzipped_source_dir = os.path.join(tmp_unzipped_dir, 'source') tmp_unzipped_source_lib_dir = os.path.join(tmp_unzipped_source_dir, 'lib') tmp_cpan_dir = os.path.join(tmp_dir, 'cpan') tmp_cpan_lib_dir = os.path.join(tmp_cpan_dir, 'lib') # Make directories common.recreate_dir(tmp_dir) # Unzip version = common.get_changelog_version(root_dir) common.execute([ 'unzip', '-q', os.path.join( root_dir, 'tinkerforge_perl_bindings_{0}_{1}_{2}.zip'.format(*version)), '-d', tmp_unzipped_dir ]) # Make CPAN package structure modules = ['Tinkerforge'] for filename in os.listdir( os.path.join(tmp_unzipped_source_lib_dir, 'Tinkerforge')): modules.append('Tinkerforge::' + filename.replace('.pm', '')) common.execute([ 'module-starter', '--dir=' + tmp_cpan_dir, '--module=' + ','.join(modules), '--distro=Tinkerforge', '--author="Ishraq Ibne Ashraf"', '[email protected]' ]) # Make README common.specialize_template(os.path.join(root_dir, 'README.template'), os.path.join(tmp_cpan_dir, 'README'), {'<<VERSION>>': '.'.join(version)}) # Make Changes shutil.copy(os.path.join(tmp_unzipped_dir, 'changelog.txt'), os.path.join(tmp_cpan_dir, 'Changes')) # Copy Makefile.PL shutil.copy(os.path.join(tmp_unzipped_source_dir, 'Makefile.PL'), tmp_cpan_dir) # Copy source shutil.rmtree(tmp_cpan_lib_dir) shutil.copytree(os.path.join(tmp_unzipped_source_lib_dir), os.path.join(tmp_cpan_lib_dir)) # Make package with common.ChangedDirectory(tmp_cpan_dir): common.execute(['perl', 'Makefile.PL']) common.execute(['make', 'dist']) shutil.copy( os.path.join(tmp_cpan_dir, 'Tinkerforge-{0}.{1}.{2}.tar.gz'.format(*version)), root_dir)
def generate(root_dir): tmp_dir = os.path.join(root_dir, 'nuget_package') tmp_unzipped_net20_dir = os.path.join(tmp_dir, 'unzipped_net20') tmp_unzipped_net40_dir = os.path.join(tmp_dir, 'unzipped_net40') tmp_unzipped_net40_source_tinkerforge_dir = os.path.join( tmp_unzipped_net40_dir, 'source', 'Tinkerforge') tmp_unzipped_netcoreapp20_dir = os.path.join(tmp_dir, 'unzipped_netcoreapp20') tmp_unzipped_netcoreapp20_source_tinkerforge_dir = os.path.join( tmp_unzipped_netcoreapp20_dir, 'source', 'Tinkerforge') # Make directories common.recreate_dir(tmp_dir) # Unzip version = common.get_changelog_version(root_dir) common.execute([ 'unzip', '-q', os.path.join( root_dir, 'tinkerforge_csharp_bindings_{0}_{1}_{2}.zip'.format(*version)), '-d', tmp_unzipped_net20_dir ]) shutil.copytree(tmp_unzipped_net20_dir, tmp_unzipped_net40_dir) shutil.copytree(tmp_unzipped_net20_dir, tmp_unzipped_netcoreapp20_dir) # Make DLL for NET 4.0 with common.ChangedDirectory(tmp_unzipped_net40_dir): common.execute([ 'mcs', '/debug:full', '/optimize+', '/warn:4', '/sdk:4', '/target:library', '/doc:' + os.path.join(tmp_unzipped_net40_dir, 'Tinkerforge.xml'), '/out:' + os.path.join(tmp_unzipped_net40_dir, 'Tinkerforge.dll'), os.path.join(tmp_unzipped_net40_source_tinkerforge_dir, '*.cs') ]) # Make DLL for NET Core 2.0 with open( os.path.join(tmp_unzipped_netcoreapp20_source_tinkerforge_dir, 'Tinkerforge.csproj'), 'w') as f: f.write(NETCORE_CSPROJ) with common.ChangedDirectory( tmp_unzipped_netcoreapp20_source_tinkerforge_dir): common.execute(['dotnet', 'build', '-c', 'Release']) # Download nuget.exe with common.ChangedDirectory(tmp_dir): common.execute([ 'wget', 'https://dist.nuget.org/win-x86-commandline/v5.0.2/nuget.exe' ]) # Make Tinkerforge.nuspec common.specialize_template( os.path.join(root_dir, 'Tinkerforge.nuspec.template'), os.path.join(tmp_dir, 'Tinkerforge.nuspec'), {'{{VERSION}}': '.'.join(version)}) # Make package with common.ChangedDirectory(tmp_dir): common.execute([ 'mono', os.path.join(tmp_dir, 'nuget.exe'), 'pack', os.path.join(tmp_dir, 'Tinkerforge.nuspec') ]) shutil.move( os.path.join(tmp_dir, 'Tinkerforge.{0}.{1}.{2}.nupkg'.format(*version)), os.path.join(root_dir, 'tinkerforge.{0}.{1}.{2}.nupkg'.format(*version)))
def finish(self): if self.get_config_name().space != 'Tinkerforge': return root_dir = self.get_root_dir() for src, dst in self.file_dests.items(): shutil.copy(src, dst) binding_dir = os.path.join(self.get_bindings_dir(), '..', 'openhab2-addons', 'bundles', 'org.openhab.binding.tinkerforge') if os.path.isdir(binding_dir): print( "Binding directory exists from last run, skipping clone of openhab2-addons repo." ) with common.ChangedDirectory( os.path.join(self.get_bindings_dir(), '..', 'openhab2-addons')): common.execute(['git', 'stash']) with common.ChangedDirectory( os.path.join(self.get_bindings_dir(), '..', 'openhab2-addons')): common.execute(['git', 'pull']) with common.ChangedDirectory( os.path.join(self.get_bindings_dir(), '..', 'openhab2-addons')): common.execute(['git', 'stash', 'pop']) else: with common.ChangedDirectory( os.path.join(self.get_bindings_dir(), '..')): common.execute([ 'git', 'clone', '-b', '2.5.x', 'https://github.com/openhab/openhab2-addons', '--depth=1' ]) to_patch = os.path.join(self.get_bindings_dir(), '..', 'openhab2-addons', 'bom', 'openhab-addons', 'pom.xml') common.specialize_template( to_patch, to_patch, { '</dependencies>': """ <dependency> <groupId>org.openhab.addons.bundles</groupId> <artifactId>org.openhab.binding.tinkerforge</artifactId> <version>${project.version}</version> </dependency> </dependencies>""" }) to_patch = os.path.join(self.get_bindings_dir(), '..', 'openhab2-addons', 'bundles', 'pom.xml') common.specialize_template( to_patch, to_patch, { '</modules>': """ <module>org.openhab.binding.tinkerforge</module> </modules>""" }) common.recreate_dir(binding_dir) for f in [ k for (k, v) in self.relative_file_dests.items() if v == '.' ]: shutil.copy(os.path.join(self.generation_dir, f), os.path.join(binding_dir, f)) shutil.copytree(os.path.join(self.generation_dir, 'src'), os.path.join(binding_dir, 'src')) with common.ChangedDirectory(binding_dir): common.execute([ 'mvn', 'spotless:apply', '-Dorg.slf4j.simpleLogger.defaultLogLevel=WARN' ]) common.execute([ 'mvn', 'clean', 'install', '-Dorg.slf4j.simpleLogger.defaultLogLevel=WARN' ]) # Beta stuff zip_dir = os.path.join(self.tmp_dir, 'zip') os.makedirs(zip_dir) for f in ['changelog.txt', 'readme_de.txt', 'readme_en.txt']: shutil.copy(os.path.join(self.get_bindings_dir(), '..', 'beta', f), zip_dir) shutil.copytree( os.path.join(binding_dir, 'src'), os.path.join(zip_dir, 'org.openhab.binding.tinkerforge', 'src')) shutil.copy( os.path.join(binding_dir, 'target', 'org.openhab.binding.tinkerforge-2.5.9-SNAPSHOT.jar'), zip_dir) java_bindings = os.path.join(self.get_root_dir(), 'tinkerforge-2.1.26.jar') if not os.path.exists(java_bindings): try: from urllib.request import urlretrieve downloaded_file, _ = urlretrieve( 'https://search.maven.org/remotecontent?filepath=com/tinkerforge/tinkerforge/2.1.26/tinkerforge-2.1.26.jar' ) shutil.copy(downloaded_file, java_bindings) except Exception as e: raise common.GeneratorError( "Failed to download java bindings.") from e shutil.copy(java_bindings, zip_dir) self.create_zip_file(zip_dir)