-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Raise error if pinned hash from .configure
file is not found
#410
base: trunk
Are you sure you want to change the base?
Conversation
I just run into this edge case while attempting to update a repository. `bundle exec run configure_update` crashed on me because it tried to compare `nil` and a number with `>=`. The `nil` value was the result of looking for the index of the pinned commit in `.configure` in the `.mobile-secrets` repository. I believe that occurred because, when prompted ``` [13:24:11]: The current branch is 2 commit(s) behind. Would you like to update it? (y/n) ``` I selected no, resulting in my local copy of `.mobile-secrets` to be two commits out of date. For the record, I selected `n` because I interpreted the prompt as a suggestion to update the pinned has in `.configure`, not the `.mobile-secrets` repository. The messages to `STDOUT` from the tool's internal made me think it already pulled the repo. Regardless of how I ended up in that inconsistent state, I think this early failure and error message would have helped me. For reference, below is the full stacktrace: ``` bundler: failed to load command: fastlane (/path/to/repo/vendor/bundle/ruby/2.7.0/bin/fastlane) Traceback (most recent call last): 37: from /path/to/repo/gio/.rbenv/versions/2.7.4/bin/bundle:23:in `<main>' 36: from /path/to/repo/gio/.rbenv/versions/2.7.4/bin/bundle:23:in `load' 35: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/exe/bundle:36:in `<top (required)>' 34: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/friendly_errors.rb:120:in `with_friendly_errors' 33: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/exe/bundle:48:in `block in <top (required)>' 32: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli.rb:25:in `start' 31: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start' 30: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli.rb:31:in `dispatch' 29: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch' 28: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command' 27: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run' 26: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli.rb:485:in `exec' 25: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli/exec.rb:23:in `run' 24: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli/exec.rb:58:in `kernel_load' 23: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli/exec.rb:58:in `load' 22: from /path/to/repo/vendor/bundle/ruby/2.7.0/bin/fastlane:23:in `<top (required)>' 21: from /path/to/repo/vendor/bundle/ruby/2.7.0/bin/fastlane:23:in `load' 20: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/bin/fastlane:23:in `<top (required)>' 19: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/cli_tools_distributor.rb:123:in `take_off' 18: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/commands_generator.rb:43:in `start' 17: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/commands_generator.rb:354:in `run' 16: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/commander-4.6.0/lib/commander/delegates.rb:18:in `run!' 15: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:124:in `run!' 14: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/commander-4.6.0/lib/commander/runner.rb:444:in `run_active_command' 13: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/commander-4.6.0/lib/commander/command.rb:157:in `run' 12: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/commander-4.6.0/lib/commander/command.rb:187:in `call' 11: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/commands_generator.rb:226:in `block (2 levels) in run' 10: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/one_off.rb:22:in `execute' 9: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/one_off.rb:42:in `run' 8: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/runner.rb:229:in `execute_action' 7: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/runner.rb:229:in `chdir' 6: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/runner.rb:255:in `block in execute_action' 5: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/actions/actions_helper.rb:69:in `execute_action' 4: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/runner.rb:263:in `block (2 levels) in execute_action' 3: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-plugin-wpmreleasetoolkit-5.4.0/lib/fastlane/plugin/wpmreleasetoolkit/actions/configure/configure_update_action.rb:20:in `run' 2: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-plugin-wpmreleasetoolkit-5.4.0/lib/fastlane/plugin/wpmreleasetoolkit/actions/configure/configure_update_action.rb:94:in `configure_file_is_behind_repo' 1: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-plugin-wpmreleasetoolkit-5.4.0/lib/fastlane/plugin/wpmreleasetoolkit/helper/configure_helper.rb:98:in `configure_file_is_behind_local' /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-plugin-wpmreleasetoolkit-5.4.0/lib/fastlane/plugin/wpmreleasetoolkit/helper/configure_helper.rb:109:in `configure_file_commits_behind_repo': undefined method `>=' for nil:NilClass (NoMethodError) 37: from /path/to/repo/gio/.rbenv/versions/2.7.4/bin/bundle:23:in `<main>' 36: from /path/to/repo/gio/.rbenv/versions/2.7.4/bin/bundle:23:in `load' 35: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/exe/bundle:36:in `<top (required)>' 34: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/friendly_errors.rb:120:in `with_friendly_errors' 33: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/exe/bundle:48:in `block in <top (required)>' 32: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli.rb:25:in `start' 31: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start' 30: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli.rb:31:in `dispatch' 29: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch' 28: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command' 27: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run' 26: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli.rb:485:in `exec' 25: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli/exec.rb:23:in `run' 24: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli/exec.rb:58:in `kernel_load' 23: from /path/to/repo/gio/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/bundler-2.3.20/lib/bundler/cli/exec.rb:58:in `load' 22: from /path/to/repo/vendor/bundle/ruby/2.7.0/bin/fastlane:23:in `<top (required)>' 21: from /path/to/repo/vendor/bundle/ruby/2.7.0/bin/fastlane:23:in `load' 20: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/bin/fastlane:23:in `<top (required)>' 19: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/cli_tools_distributor.rb:123:in `take_off' 18: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/commands_generator.rb:43:in `start' 17: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/commands_generator.rb:354:in `run' 16: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/commander-4.6.0/lib/commander/delegates.rb:18:in `run!' 15: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:124:in `run!' 14: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/commander-4.6.0/lib/commander/runner.rb:444:in `run_active_command' 13: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/commander-4.6.0/lib/commander/command.rb:157:in `run' 12: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/commander-4.6.0/lib/commander/command.rb:187:in `call' 11: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/commands_generator.rb:226:in `block (2 levels) in run' 10: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/one_off.rb:22:in `execute' 9: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/one_off.rb:42:in `run' 8: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/runner.rb:229:in `execute_action' 7: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/runner.rb:229:in `chdir' 6: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/runner.rb:255:in `block in execute_action' 5: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/actions/actions_helper.rb:69:in `execute_action' 4: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-2.210.0/fastlane/lib/fastlane/runner.rb:263:in `block (2 levels) in execute_action' 3: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-plugin-wpmreleasetoolkit-5.4.0/lib/fastlane/plugin/wpmreleasetoolkit/actions/configure/configure_update_action.rb:20:in `run' 2: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-plugin-wpmreleasetoolkit-5.4.0/lib/fastlane/plugin/wpmreleasetoolkit/actions/configure/configure_update_action.rb:94:in `configure_file_is_behind_repo' 1: from /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-plugin-wpmreleasetoolkit-5.4.0/lib/fastlane/plugin/wpmreleasetoolkit/helper/configure_helper.rb:98:in `configure_file_is_behind_local' /path/to/repo/vendor/bundle/ruby/2.7.0/gems/fastlane-plugin-wpmreleasetoolkit-5.4.0/lib/fastlane/plugin/wpmreleasetoolkit/helper/configure_helper.rb:109:in `configure_file_commits_behind_repo': \e[31m[!] undefined method `>=' for nil:NilClass\e[0m (NoMethodError) ```
result = `cd #{repository_path} && git --no-pager log -10000 --pretty=format:"%H" && echo` | ||
hashes = result.each_line.map { |s| s.strip }.reverse | ||
|
||
index_of_configure_hash = hashes.find_index(configure_file_commit_hash) | ||
|
||
UI.user_error!("Could not find Git commit #{configure_file_commit_hash} from `.configure` file in local secrets repository. Please verify your local copy is up to date with the remote.") if index_of_configure_hash.nil? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To be honest, the I'd really love if we could make some improvement in the self-documentation and log messages of this tool at some point, to avoid a lot of confusion around it 😓 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Error message seems clear enough to me.
I think we can improve the tool logic that it uses to find the distance between current and requested commit, but I'll let you decide if it's worth working on this in this PR, or a subsequent one.
@@ -99,11 +99,16 @@ def self.configure_file_is_behind_local | |||
end | |||
|
|||
def self.configure_file_commits_behind_repo | |||
# Get a sily number of revisions to ensure we don't miss any | |||
# Get a large number of revisions to ensure we don't miss any | |||
result = `cd #{repository_path} && git --no-pager log -10000 --pretty=format:"%H" && echo` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure why the tool uses this kind of solution instead of using ad-hoc git commands like git -c "#{repository_path}" rev-list --count #{configure_file_commit_hash}..HEAD
for example…
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's cool. I'll implement in the context of this PR because there's no rush to merge it as it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 In that case you might also want to take the occasion to look at the git Ruby gem (that I think we already use in other parts of the release-toolkit and is already one of our dependencies) to implement that call instead and to avoid the shell out 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not sure why the tool uses this kind of solution
Because the author (me) was a noob 😜
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's cool. I'll implement in the context of this PR because there's no rush to merge it as it.
@mokagio FYI I am about to make a new release of the toolkit today to ship some new features I want to use in WPAndroid/WCAndroid.
Since you mentioned you'd implement the suggested change above in this PR rather than a separate one, I won't include this PR it in the upcoming release… except if you would like me to merge it as is (modulo CHANGELOG conflict resolution) now to include it after all, and plan for addressing the change in a future subsequent one? 🤷
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the ping. Here's another nice to have but not urgent PR that may take a while to get addressed... 🤔
I missed the boat on 6.1.0, #432, so I might as well keep this in the queue in the hope to get to it sooner rather than later.
@mokagio, somehow this is still sitting on my review list? Figured I'd bump it :) |
I just run into this edge case while attempting to update a repository.
bundle exec run configure_update
crashed on me because it tried to comparenil
and a number with>=
.The
nil
value was the result of looking for the index of the pinned commit in.configure
in the.mobile-secrets
repository.I believe that occurred because, when prompted
I selected no, resulting in my local copy of
.mobile-secrets
to be two commits out of date.For the record, I selected
n
because I interpreted the prompt as a suggestion to update the pinned has in.configure
, not the.mobile-secrets
repository. The messages toSTDOUT
from the tool's internal made me think it already pulled the repo.Regardless of how I ended up in that inconsistent state, I think this early failure and error message would have helped me.
For reference, below is the stacktrace: