File indexing completed on 2024-05-19 15:38:53
0001 # /usr/bin/env ruby 0002 0003 # This script generates a releasable, signed tarball out of the container repo. 0004 # It also fetches, if its manifest so defines, translations from KDE i18n. 0005 # SPDX-FileCopyrightText: 2020 L. E. Segovia <amy@amyspark.me> 0006 # SPDX-License-Identifier: BSD-3-Clause 0007 0008 # frozen_string_literal: true 0009 0010 require 'fileutils' 0011 require 'json' 0012 require 'optparse' 0013 require 'ostruct' 0014 require 'pathname' 0015 0016 options = OpenStruct.new 0017 0018 opts = OptionParser.new do |o| 0019 o.on_tail('-h', '--help', 'Show this usage statement') do |_h| 0020 options.help = true 0021 end 0022 0023 o.on_tail('-s', '--sign USER', 'Sign generated tarballs using this key') do |h| 0024 options.gpg_key = h 0025 end 0026 0027 o.on_tail('-k', '--skip', 'Skip base tarball generation') do |_k| 0028 options.skip_archive = true 0029 end 0030 end 0031 0032 begin 0033 opts.parse!(ARGV) 0034 rescue StandardError => e 0035 warn e, '', opts 0036 exit 1 0037 end 0038 0039 if options.help 0040 puts opts 0041 exit 0042 end 0043 0044 manifest = JSON.parse File.read('manifest.json') 0045 0046 warn 'This script needs a JSON manifest of the underlying repo!' if manifest.empty? 0047 0048 VERSION = (manifest['version'] || `git describe`.chomp[1..-1]).freeze 0049 0050 PREFIX = "#{manifest['name']}-#{VERSION}" 0051 0052 BRANCH = (manifest['gitTag'] || 'HEAD').freeze 0053 0054 puts "Application: #{manifest['name']} #{VERSION}" 0055 0056 ROOT = `git rev-parse --show-toplevel`.chomp.freeze 0057 0058 puts "Repository root: #{ROOT}" 0059 0060 PACKAGING = Pathname(Dir.pwd) 0061 0062 unless options.skip_archive 0063 if Dir.exist?(PACKAGING / PREFIX) 0064 puts 'Removing old tarball root...' 0065 FileUtils.rm_rf PACKAGING / PREFIX 0066 end 0067 0068 Dir.chdir(ROOT) do 0069 puts "Creating tarball root from #{BRANCH}..." 0070 system "git archive --prefix=#{PREFIX}/ #{BRANCH} | tar xv -C packaging 2> /dev/null", exception: true 0071 end 0072 0073 unless manifest['translations'].empty? 0074 SVN_BASE = 'svn://anonsvn.kde.org/home/kde' 0075 0076 MAINMODULE = (manifest['translations']['mainmodule'] || 'trunk').freeze 0077 0078 MODULE = (manifest['translations']['file'] || manifest['name']).freeze 0079 0080 REVISION = (manifest['translations']['REVISION'] || '').freeze 0081 0082 puts "Fetching translations (#{MODULE}.po)..." 0083 0084 Dir.chdir(PACKAGING / PREFIX) do 0085 languages = `svn cat #{SVN_BASE}/#{MAINMODULE}/l10n-kf5/subdirs`.chomp.lines 0086 0087 Dir.mkdir('po') unless Dir.exist? 'po' 0088 0089 Dir.mkdir('l10n') unless Dir.exist? 'l10n' 0090 0091 languages 0092 .reject { |lang| lang.start_with? 'x-test' } 0093 .each do |lang| 0094 lang.chomp! 0095 0096 print format('-> %<lang>20s: ', lang: lang) 0097 0098 pofilename = "#{SVN_BASE}/#{MAINMODULE}/l10n-kf5/#{lang}/messages/kseexpr/#{MODULE}.po" 0099 0100 system "svn cat #{pofilename} #{REVISION} 2> /dev/null | tee l10n/#{MODULE}.po > /dev/null", exception: true 0101 0102 if FileTest.size("l10n/#{MODULE}.po").zero? 0103 puts 'file does not exist.' 0104 next 0105 end 0106 0107 Dir.mkdir "po/#{lang}" unless Dir.exist? "po/#{lang}" 0108 0109 FileUtils.mv "l10n/#{MODULE}.po", "po/#{lang}/" 0110 puts 'success!' 0111 end 0112 0113 FileUtils.rm_rf 'l10n' 0114 end 0115 end 0116 end 0117 0118 Dir.chdir(PACKAGING) do 0119 puts 'Removing old files...' 0120 0121 FileUtils.rm Dir.glob("#{PREFIX}.*") 0122 0123 puts 'Creating tarballs...' 0124 0125 tar = if system('which gtar > /dev/null 2>&1') 0126 'gtar' 0127 else 0128 'tar' 0129 end 0130 0131 system "#{tar} czf #{PREFIX}.tar.gz --group=root --owner=root --sort=name --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime #{PREFIX} > /dev/null", exception: true 0132 0133 if options.gpg_key 0134 puts 'Requesting GPG signature...' 0135 0136 system "gpg --armor --detach-sign -u #{options.gpg_key} #{PREFIX}.tar.gz", exception: true 0137 end 0138 0139 puts "Success! Your tarball is at #{File.expand_path("#{PREFIX}.tar.gz")}" 0140 puts "md5: #{`md5sum #{PREFIX}.tar.gz`.chomp}" 0141 puts "sha256: #{`sha256sum #{PREFIX}.tar.gz`.chomp}" 0142 end