captive-release 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2072f0317ade9acb540bdc600744ac8fafdb5a5dcab0ad4724b636edf6f58e15
4
- data.tar.gz: ad06b764de6d66ae4c46de5209b52200fc56660765e5d084933bc731e016c81c
3
+ metadata.gz: 29aedc00590a519b9e739e62c78da5bb51369ef22871217b1d51b384584e6375
4
+ data.tar.gz: a52702e1b4cc59ae94b3baac8fe9a87a27e1fd0c76e715e212c67b540708f81a
5
5
  SHA512:
6
- metadata.gz: f9d2674635c60e36badb978ada2917d2d233aab1d346786e17e4dc2c9c89d362dc3dccd21e2edeee46aa23fac787fb07cd6be7afc43a82328484f83444b93c8a
7
- data.tar.gz: 4c528def9c38645ac72221918ecbfe10621e9a8fd7b6dab2d36d19148ccf1f03a65acd163f2eb557995027314b710528f4e0fc8897842ca53b926f74aa8b38f8
6
+ metadata.gz: 1cb2a9558aceaef25bf15340bc0918259b942bbb6c91a4b8a7311740441da5a7b6e7bccf1b5c53b7dc66a6d05c18c68f2627eabe0740ae6a73458fbc4ccc4eec
7
+ data.tar.gz: 7cadc0350772b0d766a27018fdca30b83a71d75e8c6096ee31918768a9e8d15136528689b37ca32d0ec591f34dab8c9356f518475652238943197930420061da
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CaptiveRelease
4
+ # Remet Gemfile.lock d'aplomb après un bump : un .gemspec à la racine porte la version
5
+ # bumpée, donc Gemfile.lock devient périmé et --deployment le refuse en CI si personne ne
6
+ # le relance.
7
+ #
8
+ # Cette unité change quand la façon de détecter ou de relancer le lock change,
9
+ # ReleaseCommand quand la suite des étapes change.
10
+ class GemfileLockRefresh
11
+ LOCKFILE = "Gemfile.lock"
12
+
13
+ def initialize(files: RepoFiles.new("."))
14
+ @files = files
15
+ end
16
+
17
+ # rescue : une arborescence hostile ne doit jamais faire échouer la release, la détection
18
+ # n'est qu'une commodité. Une fois vraie, l'exécution du bundle lock, elle, échoue haut
19
+ # la main si elle rate.
20
+ def needed?
21
+ File.exist?(@files.path(LOCKFILE)) && @files.glob("*.gemspec").any? && !GitCommands.ignored?(LOCKFILE)
22
+ rescue StandardError
23
+ false
24
+ end
25
+
26
+ def call
27
+ Shell.run! "bundle lock"
28
+ end
29
+ end
30
+ end
@@ -10,6 +10,10 @@ module CaptiveRelease
10
10
 
11
11
  def self.remote_url = Shell.capture("git remote get-url origin 2>/dev/null")
12
12
 
13
+ # Une gem gitignore souvent son propre Gemfile.lock (convention de bundle gem) : le
14
+ # commiter quand même part en échec, git refusant d'ajouter un fichier ignoré.
15
+ def self.ignored?(chemin) = !Shell.capture("git check-ignore #{Shell.escape(chemin)} 2>/dev/null").empty?
16
+
13
17
  def self.tag?(nom) = !Shell.capture("git tag -l #{nom} 2>/dev/null").empty?
14
18
 
15
19
  # Les sujets de commit depuis le tag donné jusqu'à HEAD - la matière première de la
@@ -28,13 +28,24 @@ module CaptiveRelease
28
28
  end
29
29
 
30
30
  VersionFilesWriting.new(terminal: @terminal).call(prochaine, @config.version_files)
31
- GitRelease.new(terminal: @terminal).call(prochaine, @config.version_files.map(&:path))
31
+ GitRelease.new(terminal: @terminal).call(prochaine, chemins_a_commiter)
32
32
  publication.call(prochaine)
33
33
  @terminal.say "\n🎉 #{@terminal.bold("Version v#{prochaine} released successfully!")}\n"
34
34
  end
35
35
 
36
36
  private
37
37
 
38
+ def chemins_a_commiter
39
+ chemins = @config.version_files.map(&:path)
40
+ return chemins unless (refresh = GemfileLockRefresh.new).needed?
41
+
42
+ @terminal.say "\n#{@terminal.bold("Refreshing Gemfile.lock...")}"
43
+ refresh.call
44
+ @terminal.done GemfileLockRefresh::LOCKFILE
45
+
46
+ chemins + [ GemfileLockRefresh::LOCKFILE ]
47
+ end
48
+
38
49
  def afficher_changements(courante)
39
50
  lien = ChangesSince.url(courante)
40
51
  return unless lien
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CaptiveRelease
4
- VERSION = "0.6.0"
4
+ VERSION = "0.7.1"
5
5
  end
@@ -36,6 +36,7 @@ require_relative "captive_release/build_dispatch_run"
36
36
  require_relative "captive_release/build_command"
37
37
  require_relative "captive_release/menu"
38
38
  require_relative "captive_release/version_choice"
39
+ require_relative "captive_release/gemfile_lock_refresh"
39
40
  require_relative "captive_release/git_release"
40
41
  require_relative "captive_release/changes_since"
41
42
  require_relative "captive_release/release_publication"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: captive-release
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Captive Studio
@@ -34,6 +34,7 @@ files:
34
34
  - lib/captive_release/config_loader.rb
35
35
  - lib/captive_release/config_writer.rb
36
36
  - lib/captive_release/framework_detector.rb
37
+ - lib/captive_release/gemfile_lock_refresh.rb
37
38
  - lib/captive_release/git_commands.rb
38
39
  - lib/captive_release/git_release.rb
39
40
  - lib/captive_release/github_api.rb