prep_release.rb 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. # -*- coding: utf-8 -*-
  2. # -*- frozen_string_literal: true -*-
  3. require "lorca/manifest"
  4. require "lorca/version"
  5. require "sdbm"
  6. require "csv"
  7. require "digest/sha2"
  8. module LorcaPrepRelease
  9. def self.package
  10. # Unless many tasks require cleaning stuff don't require "rake/clean"
  11. # More tasks make `rake -T` less readable.
  12. # system calls not unit-tested
  13. old_gem = Dir["#{gem_name}-*.gem"].first.to_s
  14. File.delete(old_gem) if File.exist? old_gem
  15. system "gem", "build", "#{gem_name}"
  16. end
  17. def self.import_wordlist txtfile, to:
  18. db_file = File.basename txtfile, ".txt"
  19. db_file = to + "/" + db_file
  20. SDBM.open(db_file) do |db|
  21. CSV.foreach(txtfile, col_sep: "\t") { |k, v| db[k] = v }
  22. end
  23. end
  24. def self.checksum gem, archive:
  25. filename = File.basename(gem) + ".sha512"
  26. checksum = Digest::SHA512.new.hexdigest(File.read(gem))
  27. File.open(File.join(archive, filename), "w") { |f| f.write checksum }
  28. checksum
  29. end
  30. def self.commit_checksum archive:
  31. fail "Must create checksum file before trying to do commit" unless checksum_in?(archive)
  32. # system calls not unit-tested
  33. nothing_staged = system "git", "diff", "--staged", "--exit-code", out: "/dev/null"
  34. fail "Can't commit checksum when there are staged elements" unless nothing_staged
  35. system "git", "add", checksum_file_under(archive)
  36. system "git", "commit", %Q[--message="Add checksum for version #{version}"]
  37. end
  38. def self.tag_release_commit archive:
  39. fail "Must add checksum before tagging a release" unless checksum_in?(archive)
  40. # system calls not unit-tested
  41. system "git", "tag", "--annotate", "v#{version}",
  42. %Q[--message="Release #{version}"]
  43. end
  44. def self.publish_gem
  45. # system calls not unit-tested
  46. system "git", "push", "--follow-tags"
  47. system "gem", "push", "#{built_gem}"
  48. end
  49. private
  50. def self.checksum_in? archive
  51. File.exist? checksum_file_under(archive)
  52. end
  53. def self.checksum_file_under archive
  54. "#{archive}/#{built_gem}.sha512"
  55. end
  56. def self.built_gem
  57. "#{gem_name}-#{version}.gem"
  58. end
  59. def self.gem_name
  60. Lorca::LorcaManifest.gem_name
  61. end
  62. def self.version
  63. Lorca::LorcaVersion
  64. end
  65. end