modulesync 2.5.0 → 2.7.0
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 +4 -4
- data/.github/dependabot.yml +17 -0
- data/.github/workflows/ci.yml +19 -9
- data/.github/workflows/release.yml +7 -5
- data/.rubocop.yml +3 -47
- data/.rubocop_todo.yml +121 -24
- data/CHANGELOG.md +36 -0
- data/Gemfile +6 -5
- data/Rakefile +8 -4
- data/features/update/pull_request.feature +3 -6
- data/lib/modulesync/cli.rb +107 -107
- data/lib/modulesync/git_service/base.rb +2 -2
- data/lib/modulesync/git_service/github.rb +7 -8
- data/lib/modulesync/git_service/gitlab.rb +11 -12
- data/lib/modulesync/hook.rb +4 -4
- data/lib/modulesync/renderer.rb +1 -1
- data/lib/modulesync/repository.rb +5 -2
- data/lib/modulesync.rb +21 -21
- data/modulesync.gemspec +6 -10
- data/spec/helpers/faker/puppet_module_remote_repo.rb +4 -4
- data/spec/helpers/faker.rb +1 -0
- data/spec/unit/modulesync/git_service/factory_spec.rb +8 -2
- data/spec/unit/modulesync/git_service/github_spec.rb +23 -25
- data/spec/unit/modulesync/git_service/gitlab_spec.rb +26 -29
- data/spec/unit/modulesync/git_service_spec.rb +48 -47
- data/spec/unit/modulesync/settings_spec.rb +1 -1
- data/spec/unit/modulesync/source_code_spec.rb +5 -7
- metadata +27 -82
    
        data/lib/modulesync/cli.rb
    CHANGED
    
    | @@ -21,12 +21,12 @@ module ModuleSync | |
| 21 21 |  | 
| 22 22 | 
             
                class Hook < Thor
         | 
| 23 23 | 
             
                  option :hook_args,
         | 
| 24 | 
            -
                         : | 
| 25 | 
            -
                         : | 
| 24 | 
            +
                         aliases: '-a',
         | 
| 25 | 
            +
                         desc: 'Arguments to pass to msync in the git hook'
         | 
| 26 26 | 
             
                  option :branch,
         | 
| 27 | 
            -
                         : | 
| 28 | 
            -
                         : | 
| 29 | 
            -
                         : | 
| 27 | 
            +
                         aliases: '-b',
         | 
| 28 | 
            +
                         desc: 'Branch name to pass to msync in the git hook',
         | 
| 29 | 
            +
                         default: CLI.defaults[:branch]
         | 
| 30 30 | 
             
                  desc 'activate', 'Activate the git hook.'
         | 
| 31 31 | 
             
                  def activate
         | 
| 32 32 | 
             
                    ModuleSync.hook CLI.prepare_options(options, hook: 'activate')
         | 
| @@ -40,106 +40,106 @@ module ModuleSync | |
| 40 40 |  | 
| 41 41 | 
             
                class Base < Thor
         | 
| 42 42 | 
             
                  class_option :project_root,
         | 
| 43 | 
            -
                               : | 
| 44 | 
            -
                               : | 
| 45 | 
            -
                               : | 
| 43 | 
            +
                               aliases: '-c',
         | 
| 44 | 
            +
                               desc: 'Path used by git to clone modules into.',
         | 
| 45 | 
            +
                               default: CLI.defaults[:project_root]
         | 
| 46 46 | 
             
                  class_option :git_base,
         | 
| 47 | 
            -
                               : | 
| 48 | 
            -
                               : | 
| 47 | 
            +
                               desc: 'Specify the base part of a git URL to pull from',
         | 
| 48 | 
            +
                               default: CLI.defaults[:git_base] || 'git@github.com:'
         | 
| 49 49 | 
             
                  class_option :namespace,
         | 
| 50 | 
            -
                               : | 
| 51 | 
            -
                               : | 
| 52 | 
            -
                               : | 
| 50 | 
            +
                               aliases: '-n',
         | 
| 51 | 
            +
                               desc: 'Remote github namespace (user or organization) to clone from and push to.',
         | 
| 52 | 
            +
                               default: CLI.defaults[:namespace] || 'puppetlabs'
         | 
| 53 53 | 
             
                  class_option :filter,
         | 
| 54 | 
            -
                               : | 
| 55 | 
            -
                               : | 
| 54 | 
            +
                               aliases: '-f',
         | 
| 55 | 
            +
                               desc: 'A regular expression to select repositories to update.'
         | 
| 56 56 | 
             
                  class_option :negative_filter,
         | 
| 57 | 
            -
                               : | 
| 58 | 
            -
                               : | 
| 57 | 
            +
                               aliases: '-x',
         | 
| 58 | 
            +
                               desc: 'A regular expression to skip repositories.'
         | 
| 59 59 | 
             
                  class_option :verbose,
         | 
| 60 | 
            -
                               : | 
| 61 | 
            -
                               : | 
| 62 | 
            -
                               : | 
| 63 | 
            -
                               : | 
| 60 | 
            +
                               aliases: '-v',
         | 
| 61 | 
            +
                               desc: 'Verbose mode',
         | 
| 62 | 
            +
                               type: :boolean,
         | 
| 63 | 
            +
                               default: false
         | 
| 64 64 |  | 
| 65 65 | 
             
                  desc 'update', 'Update the modules in managed_modules.yml'
         | 
| 66 66 | 
             
                  option :message,
         | 
| 67 | 
            -
                         : | 
| 68 | 
            -
                         : | 
| 69 | 
            -
                         : | 
| 67 | 
            +
                         aliases: '-m',
         | 
| 68 | 
            +
                         desc: 'Commit message to apply to updated modules. Required unless running in noop mode.',
         | 
| 69 | 
            +
                         default: CLI.defaults[:message]
         | 
| 70 70 | 
             
                  option :configs,
         | 
| 71 | 
            -
                         : | 
| 72 | 
            -
                         : | 
| 73 | 
            -
             | 
| 71 | 
            +
                         aliases: '-c',
         | 
| 72 | 
            +
                         desc: 'The local directory or remote repository to define the list of managed modules, ' \
         | 
| 73 | 
            +
                               'the file templates, and the default values for template variables.'
         | 
| 74 74 | 
             
                  option :managed_modules_conf,
         | 
| 75 | 
            -
                         : | 
| 75 | 
            +
                         desc: 'The file name to define the list of managed modules'
         | 
| 76 76 | 
             
                  option :remote_branch,
         | 
| 77 | 
            -
                         : | 
| 78 | 
            -
                         : | 
| 79 | 
            -
                         : | 
| 77 | 
            +
                         aliases: '-r',
         | 
| 78 | 
            +
                         desc: 'Remote branch name to push the changes to. Defaults to the branch name.',
         | 
| 79 | 
            +
                         default: CLI.defaults[:remote_branch]
         | 
| 80 80 | 
             
                  option :skip_broken,
         | 
| 81 | 
            -
                         : | 
| 82 | 
            -
                         : | 
| 83 | 
            -
                         : | 
| 84 | 
            -
                         : | 
| 81 | 
            +
                         type: :boolean,
         | 
| 82 | 
            +
                         aliases: '-s',
         | 
| 83 | 
            +
                         desc: 'Process remaining modules if an error is found',
         | 
| 84 | 
            +
                         default: false
         | 
| 85 85 | 
             
                  option :amend,
         | 
| 86 | 
            -
                         : | 
| 87 | 
            -
                         : | 
| 88 | 
            -
                         : | 
| 86 | 
            +
                         type: :boolean,
         | 
| 87 | 
            +
                         desc: 'Amend previous commit',
         | 
| 88 | 
            +
                         default: false
         | 
| 89 89 | 
             
                  option :force,
         | 
| 90 | 
            -
                         : | 
| 91 | 
            -
                         : | 
| 92 | 
            -
                         : | 
| 90 | 
            +
                         type: :boolean,
         | 
| 91 | 
            +
                         desc: 'Force push amended commit',
         | 
| 92 | 
            +
                         default: false
         | 
| 93 93 | 
             
                  option :noop,
         | 
| 94 | 
            -
                         : | 
| 95 | 
            -
                         : | 
| 96 | 
            -
                         : | 
| 94 | 
            +
                         type: :boolean,
         | 
| 95 | 
            +
                         desc: 'No-op mode',
         | 
| 96 | 
            +
                         default: false
         | 
| 97 97 | 
             
                  option :pr,
         | 
| 98 | 
            -
                         : | 
| 99 | 
            -
                         : | 
| 100 | 
            -
                         : | 
| 98 | 
            +
                         type: :boolean,
         | 
| 99 | 
            +
                         desc: 'Submit pull/merge request',
         | 
| 100 | 
            +
                         default: false
         | 
| 101 101 | 
             
                  option :pr_title,
         | 
| 102 | 
            -
                         : | 
| 103 | 
            -
                         : | 
| 102 | 
            +
                         desc: 'Title of pull/merge request',
         | 
| 103 | 
            +
                         default: CLI.defaults[:pr_title] || 'Update to module template files'
         | 
| 104 104 | 
             
                  option :pr_labels,
         | 
| 105 | 
            -
                         : | 
| 106 | 
            -
                         : | 
| 107 | 
            -
                         : | 
| 105 | 
            +
                         type: :array,
         | 
| 106 | 
            +
                         desc: 'Labels to add to the pull/merge request',
         | 
| 107 | 
            +
                         default: CLI.defaults[:pr_labels] || []
         | 
| 108 108 | 
             
                  option :pr_target_branch,
         | 
| 109 | 
            -
                         : | 
| 110 | 
            -
                         : | 
| 109 | 
            +
                         desc: 'Target branch for the pull/merge request',
         | 
| 110 | 
            +
                         default: CLI.defaults[:pr_target_branch]
         | 
| 111 111 | 
             
                  option :offline,
         | 
| 112 | 
            -
                         : | 
| 113 | 
            -
                         : | 
| 114 | 
            -
                         : | 
| 112 | 
            +
                         type: :boolean,
         | 
| 113 | 
            +
                         desc: 'Do not run any Git commands. Allows the user to manage Git outside of ModuleSync.',
         | 
| 114 | 
            +
                         default: false
         | 
| 115 115 | 
             
                  option :bump,
         | 
| 116 | 
            -
                         : | 
| 117 | 
            -
                         : | 
| 118 | 
            -
                         : | 
| 116 | 
            +
                         type: :boolean,
         | 
| 117 | 
            +
                         desc: 'Bump module version to the next minor',
         | 
| 118 | 
            +
                         default: false
         | 
| 119 119 | 
             
                  option :changelog,
         | 
| 120 | 
            -
                         : | 
| 121 | 
            -
                         : | 
| 122 | 
            -
                         : | 
| 120 | 
            +
                         type: :boolean,
         | 
| 121 | 
            +
                         desc: 'Update CHANGELOG.md if version was bumped',
         | 
| 122 | 
            +
                         default: false
         | 
| 123 123 | 
             
                  option :tag,
         | 
| 124 | 
            -
                         : | 
| 125 | 
            -
                         : | 
| 126 | 
            -
                         : | 
| 124 | 
            +
                         type: :boolean,
         | 
| 125 | 
            +
                         desc: 'Git tag with the current module version',
         | 
| 126 | 
            +
                         default: false
         | 
| 127 127 | 
             
                  option :tag_pattern,
         | 
| 128 | 
            -
                         : | 
| 128 | 
            +
                         desc: 'The pattern to use when tagging releases.'
         | 
| 129 129 | 
             
                  option :pre_commit_script,
         | 
| 130 | 
            -
                         : | 
| 131 | 
            -
                         : | 
| 130 | 
            +
                         desc: 'A script to be run before committing',
         | 
| 131 | 
            +
                         default: CLI.defaults[:pre_commit_script]
         | 
| 132 132 | 
             
                  option :fail_on_warnings,
         | 
| 133 | 
            -
                         : | 
| 134 | 
            -
                         : | 
| 135 | 
            -
                         : | 
| 136 | 
            -
             | 
| 137 | 
            -
                         : | 
| 133 | 
            +
                         type: :boolean,
         | 
| 134 | 
            +
                         aliases: '-F',
         | 
| 135 | 
            +
                         desc: 'Produce a failure exit code when there are warnings ' \
         | 
| 136 | 
            +
                               '(only has effect when --skip_broken is enabled)',
         | 
| 137 | 
            +
                         default: false
         | 
| 138 138 | 
             
                  option :branch,
         | 
| 139 | 
            -
                         : | 
| 140 | 
            -
                         : | 
| 141 | 
            -
             | 
| 142 | 
            -
                         : | 
| 139 | 
            +
                         aliases: '-b',
         | 
| 140 | 
            +
                         desc: 'Branch name to make the changes in. ' \
         | 
| 141 | 
            +
                               'Defaults to the default branch of the upstream repository, but falls back to "master".',
         | 
| 142 | 
            +
                         default: CLI.defaults[:branch]
         | 
| 143 143 | 
             
                  def update
         | 
| 144 144 | 
             
                    config = CLI.prepare_options(options)
         | 
| 145 145 | 
             
                    raise Thor::Error, 'No value provided for required option "--message"' unless config[:noop] \
         | 
| @@ -164,19 +164,19 @@ module ModuleSync | |
| 164 164 | 
             
                  DESC
         | 
| 165 165 |  | 
| 166 166 | 
             
                  option :configs,
         | 
| 167 | 
            -
                         : | 
| 168 | 
            -
                         : | 
| 169 | 
            -
             | 
| 167 | 
            +
                         aliases: '-c',
         | 
| 168 | 
            +
                         desc: 'The local directory or remote repository to define the list of managed modules, ' \
         | 
| 169 | 
            +
                               'the file templates, and the default values for template variables.'
         | 
| 170 170 | 
             
                  option :managed_modules_conf,
         | 
| 171 | 
            -
                         : | 
| 171 | 
            +
                         desc: 'The file name to define the list of managed modules'
         | 
| 172 172 | 
             
                  option :branch,
         | 
| 173 | 
            -
                         : | 
| 174 | 
            -
                         : | 
| 175 | 
            -
                         : | 
| 173 | 
            +
                         aliases: '-b',
         | 
| 174 | 
            +
                         desc: 'Branch name to make the changes in.',
         | 
| 175 | 
            +
                         default: CLI.defaults[:branch]
         | 
| 176 176 | 
             
                  option :fail_fast,
         | 
| 177 | 
            -
                         : | 
| 178 | 
            -
                         : | 
| 179 | 
            -
                         : | 
| 177 | 
            +
                         type: :boolean,
         | 
| 178 | 
            +
                         desc: 'Abort the run after a command execution failure',
         | 
| 179 | 
            +
                         default: CLI.defaults[:fail_fast].nil? ? true : CLI.defaults[:fail_fast]
         | 
| 180 180 | 
             
                  def execute(*command_args)
         | 
| 181 181 | 
             
                    raise Thor::Error, 'COMMAND is a required argument' if command_args.empty?
         | 
| 182 182 |  | 
| @@ -196,38 +196,38 @@ module ModuleSync | |
| 196 196 | 
             
                    \x5  * Switch to specified branch
         | 
| 197 197 | 
             
                  DESC
         | 
| 198 198 | 
             
                  option :configs,
         | 
| 199 | 
            -
                         : | 
| 200 | 
            -
                         : | 
| 201 | 
            -
             | 
| 199 | 
            +
                         aliases: '-c',
         | 
| 200 | 
            +
                         desc: 'The local directory or remote repository to define the list of managed modules, ' \
         | 
| 201 | 
            +
                               'the file templates, and the default values for template variables.'
         | 
| 202 202 | 
             
                  option :managed_modules_conf,
         | 
| 203 | 
            -
                         : | 
| 203 | 
            +
                         desc: 'The file name to define the list of managed modules'
         | 
| 204 204 | 
             
                  option :branch,
         | 
| 205 | 
            -
                         : | 
| 206 | 
            -
                         : | 
| 207 | 
            -
                         : | 
| 205 | 
            +
                         aliases: '-b',
         | 
| 206 | 
            +
                         desc: 'Branch name to make the changes in.',
         | 
| 207 | 
            +
                         default: CLI.defaults[:branch]
         | 
| 208 208 | 
             
                  option :offline,
         | 
| 209 | 
            -
                         : | 
| 210 | 
            -
                         : | 
| 211 | 
            -
                         : | 
| 209 | 
            +
                         type: :boolean,
         | 
| 210 | 
            +
                         desc: 'Only proceed local operations',
         | 
| 211 | 
            +
                         default: false
         | 
| 212 212 | 
             
                  option :source_branch,
         | 
| 213 | 
            -
                         : | 
| 213 | 
            +
                         desc: 'Branch to reset from (e.g. origin/wip)'
         | 
| 214 214 | 
             
                  def reset
         | 
| 215 215 | 
             
                    ModuleSync.reset CLI.prepare_options(options)
         | 
| 216 216 | 
             
                  end
         | 
| 217 217 |  | 
| 218 218 | 
             
                  desc 'push', 'Push all available commits from branch to remote'
         | 
| 219 219 | 
             
                  option :configs,
         | 
| 220 | 
            -
                         : | 
| 221 | 
            -
                         : | 
| 222 | 
            -
             | 
| 220 | 
            +
                         aliases: '-c',
         | 
| 221 | 
            +
                         desc: 'The local directory or remote repository to define the list of managed modules, ' \
         | 
| 222 | 
            +
                               'the file templates, and the default values for template variables.'
         | 
| 223 223 | 
             
                  option :managed_modules_conf,
         | 
| 224 | 
            -
                         : | 
| 224 | 
            +
                         desc: 'The file name to define the list of managed modules'
         | 
| 225 225 | 
             
                  option :branch,
         | 
| 226 | 
            -
                         : | 
| 227 | 
            -
                         : | 
| 228 | 
            -
                         : | 
| 226 | 
            +
                         aliases: '-b',
         | 
| 227 | 
            +
                         desc: 'Branch name to push',
         | 
| 228 | 
            +
                         default: CLI.defaults[:branch]
         | 
| 229 229 | 
             
                  option :remote_branch,
         | 
| 230 | 
            -
                         : | 
| 230 | 
            +
                         desc: 'Remote branch to push to (e.g. maintenance)'
         | 
| 231 231 | 
             
                  def push
         | 
| 232 232 | 
             
                    ModuleSync.push CLI.prepare_options(options)
         | 
| 233 233 | 
             
                  end
         | 
| @@ -2,7 +2,7 @@ module ModuleSync | |
| 2 2 | 
             
              module GitService
         | 
| 3 3 | 
             
                # Generic class for git services
         | 
| 4 4 | 
             
                class Base
         | 
| 5 | 
            -
                  def open_pull_request(repo_path:, namespace:, title:, message:, source_branch:, target_branch:, labels:, noop:) | 
| 5 | 
            +
                  def open_pull_request(repo_path:, namespace:, title:, message:, source_branch:, target_branch:, labels:, noop:)
         | 
| 6 6 | 
             
                    unless source_branch != target_branch
         | 
| 7 7 | 
             
                      raise ModuleSync::Error,
         | 
| 8 8 | 
             
                            "Unable to open a pull request with the same source and target branch: '#{source_branch}'"
         | 
| @@ -55,7 +55,7 @@ module ModuleSync | |
| 55 55 |  | 
| 56 56 | 
             
                  protected
         | 
| 57 57 |  | 
| 58 | 
            -
                  def _open_pull_request(repo_path:, namespace:, title:, message:, source_branch:, target_branch:, labels:, noop:) | 
| 58 | 
            +
                  def _open_pull_request(repo_path:, namespace:, title:, message:, source_branch:, target_branch:, labels:, noop:)
         | 
| 59 59 | 
             
                    raise NotImplementedError
         | 
| 60 60 | 
             
                  end
         | 
| 61 61 | 
             
                end
         | 
| @@ -13,25 +13,24 @@ module ModuleSync | |
| 13 13 | 
             
                    Octokit.configure do |c|
         | 
| 14 14 | 
             
                      c.api_endpoint = endpoint
         | 
| 15 15 | 
             
                    end
         | 
| 16 | 
            -
                    @api = Octokit::Client.new(: | 
| 16 | 
            +
                    @api = Octokit::Client.new(access_token: token)
         | 
| 17 17 | 
             
                  end
         | 
| 18 18 |  | 
| 19 19 | 
             
                  private
         | 
| 20 20 |  | 
| 21 | 
            -
                  def _open_pull_request(repo_path:, namespace:, title:, message:, source_branch:, target_branch:, labels:, noop:) | 
| 21 | 
            +
                  def _open_pull_request(repo_path:, namespace:, title:, message:, source_branch:, target_branch:, labels:, noop:)
         | 
| 22 22 | 
             
                    head = "#{namespace}:#{source_branch}"
         | 
| 23 23 |  | 
| 24 24 | 
             
                    if noop
         | 
| 25 | 
            -
                      $stdout.puts \
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                        "- merges '#{source_branch}' into '#{target_branch}'"
         | 
| 25 | 
            +
                      $stdout.puts "Using no-op. Would submit PR '#{title}' to '#{repo_path}' " \
         | 
| 26 | 
            +
                                   "- merges '#{source_branch}' into '#{target_branch}'"
         | 
| 28 27 | 
             
                      return
         | 
| 29 28 | 
             
                    end
         | 
| 30 29 |  | 
| 31 30 | 
             
                    pull_requests = @api.pull_requests(repo_path,
         | 
| 32 | 
            -
                                                       : | 
| 33 | 
            -
                                                       : | 
| 34 | 
            -
                                                       : | 
| 31 | 
            +
                                                       state: 'open',
         | 
| 32 | 
            +
                                                       base: target_branch,
         | 
| 33 | 
            +
                                                       head: head)
         | 
| 35 34 | 
             
                    unless pull_requests.empty?
         | 
| 36 35 | 
             
                      # Skip creating the PR if it exists already.
         | 
| 37 36 | 
             
                      $stdout.puts "Skipped! #{pull_requests.length} PRs found for branch '#{source_branch}'"
         | 
| @@ -11,8 +11,8 @@ module ModuleSync | |
| 11 11 | 
             
                    super()
         | 
| 12 12 |  | 
| 13 13 | 
             
                    @api = Gitlab::Client.new(
         | 
| 14 | 
            -
                      : | 
| 15 | 
            -
                      : | 
| 14 | 
            +
                      endpoint: endpoint,
         | 
| 15 | 
            +
                      private_token: token,
         | 
| 16 16 | 
             
                    )
         | 
| 17 17 | 
             
                  end
         | 
| 18 18 |  | 
| @@ -26,18 +26,17 @@ module ModuleSync | |
| 26 26 |  | 
| 27 27 | 
             
                  private
         | 
| 28 28 |  | 
| 29 | 
            -
                  def _open_pull_request(repo_path:, namespace:, title:, message:, source_branch:, target_branch:, labels:, noop:) # rubocop:disable  | 
| 29 | 
            +
                  def _open_pull_request(repo_path:, namespace:, title:, message:, source_branch:, target_branch:, labels:, noop:) # rubocop:disable Lint/UnusedMethodArgument
         | 
| 30 30 | 
             
                    if noop
         | 
| 31 | 
            -
                      $stdout.puts \
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                        "- merges #{source_branch} into #{target_branch}"
         | 
| 31 | 
            +
                      $stdout.puts "Using no-op. Would submit MR '#{title}' to '#{repo_path}' " \
         | 
| 32 | 
            +
                                   "- merges #{source_branch} into #{target_branch}"
         | 
| 34 33 | 
             
                      return
         | 
| 35 34 | 
             
                    end
         | 
| 36 35 |  | 
| 37 36 | 
             
                    merge_requests = @api.merge_requests(repo_path,
         | 
| 38 | 
            -
                                                         : | 
| 39 | 
            -
                                                         : | 
| 40 | 
            -
                                                         : | 
| 37 | 
            +
                                                         state: 'opened',
         | 
| 38 | 
            +
                                                         source_branch: source_branch,
         | 
| 39 | 
            +
                                                         target_branch: target_branch)
         | 
| 41 40 | 
             
                    unless merge_requests.empty?
         | 
| 42 41 | 
             
                      # Skip creating the MR if it exists already.
         | 
| 43 42 | 
             
                      $stdout.puts "Skipped! #{merge_requests.length} MRs found for branch '#{source_branch}'"
         | 
| @@ -46,9 +45,9 @@ module ModuleSync | |
| 46 45 |  | 
| 47 46 | 
             
                    mr = @api.create_merge_request(repo_path,
         | 
| 48 47 | 
             
                                                   title,
         | 
| 49 | 
            -
                                                   : | 
| 50 | 
            -
                                                   : | 
| 51 | 
            -
                                                   : | 
| 48 | 
            +
                                                   source_branch: source_branch,
         | 
| 49 | 
            +
                                                   target_branch: target_branch,
         | 
| 50 | 
            +
                                                   labels: labels)
         | 
| 52 51 | 
             
                    $stdout.puts \
         | 
| 53 52 | 
             
                      "Submitted MR '#{title}' to '#{repo_path}' " \
         | 
| 54 53 | 
             
                      "- merges '#{source_branch}' into '#{target_branch}'"
         | 
    
        data/lib/modulesync/hook.rb
    CHANGED
    
    | @@ -15,10 +15,10 @@ module ModuleSync | |
| 15 15 | 
             
                  <<~CONTENT
         | 
| 16 16 | 
             
                    #!/usr/bin/env bash
         | 
| 17 17 |  | 
| 18 | 
            -
                    current_branch | 
| 19 | 
            -
                    git_dir | 
| 20 | 
            -
                    message | 
| 21 | 
            -
                    msync -m " | 
| 18 | 
            +
                    current_branch=`git symbolic-ref HEAD | sed -e 's,.*/(.*),\1,'`
         | 
| 19 | 
            +
                    git_dir=`git rev-parse --show-toplevel`
         | 
| 20 | 
            +
                    message=`git log -1 --format=%B`
         | 
| 21 | 
            +
                    msync -m "$message" #{arguments}
         | 
| 22 22 | 
             
                  CONTENT
         | 
| 23 23 | 
             
                end
         | 
| 24 24 |  | 
    
        data/lib/modulesync/renderer.rb
    CHANGED
    
    | @@ -15,7 +15,7 @@ module ModuleSync | |
| 15 15 | 
             
                  erb_obj = if RUBY_VERSION >= '2.7'
         | 
| 16 16 | 
             
                              ERB.new(template, trim_mode: '-')
         | 
| 17 17 | 
             
                            else
         | 
| 18 | 
            -
                              ERB.new(template,  | 
| 18 | 
            +
                              ERB.new(template, trim_mode: '-')
         | 
| 19 19 | 
             
                            end
         | 
| 20 20 | 
             
                  erb_obj.filename = template_file
         | 
| 21 21 | 
             
                  erb_obj.def_method(ForgeModuleFile, 'render()', template_file)
         | 
| @@ -31,6 +31,9 @@ module ModuleSync | |
| 31 31 | 
             
                end
         | 
| 32 32 |  | 
| 33 33 | 
             
                def default_branch
         | 
| 34 | 
            +
                  # `Git.default_branch` requires ruby-git >= 1.17.0
         | 
| 35 | 
            +
                  return Git.default_branch(repo.dir) if Git.respond_to? :default_branch
         | 
| 36 | 
            +
             | 
| 34 37 | 
             
                  symbolic_ref = repo.branches.find { |b| b.full.include?('remotes/origin/HEAD') }
         | 
| 35 38 | 
             
                  return unless symbolic_ref
         | 
| 36 39 |  | 
| @@ -137,8 +140,8 @@ module ModuleSync | |
| 137 140 | 
             
                  begin
         | 
| 138 141 | 
             
                    opts_commit = {}
         | 
| 139 142 | 
             
                    opts_push = {}
         | 
| 140 | 
            -
                    opts_commit = { : | 
| 141 | 
            -
                    opts_push = { : | 
| 143 | 
            +
                    opts_commit = { amend: true } if options[:amend]
         | 
| 144 | 
            +
                    opts_push = { force: true } if options[:force]
         | 
| 142 145 | 
             
                    if options[:pre_commit_script]
         | 
| 143 146 | 
             
                      script = "#{File.dirname(File.dirname(__FILE__))}/../contrib/#{options[:pre_commit_script]}"
         | 
| 144 147 | 
             
                      `#{script} #{@directory}`
         | 
    
        data/lib/modulesync.rb
    CHANGED
    
    | @@ -12,17 +12,17 @@ require 'modulesync/util' | |
| 12 12 |  | 
| 13 13 | 
             
            require 'monkey_patches'
         | 
| 14 14 |  | 
| 15 | 
            -
            module ModuleSync | 
| 15 | 
            +
            module ModuleSync
         | 
| 16 16 | 
             
              class Error < StandardError; end
         | 
| 17 17 |  | 
| 18 18 | 
             
              include Constants
         | 
| 19 19 |  | 
| 20 20 | 
             
              def self.config_defaults
         | 
| 21 21 | 
             
                {
         | 
| 22 | 
            -
                  : | 
| 23 | 
            -
                  : | 
| 24 | 
            -
                  : | 
| 25 | 
            -
                  : | 
| 22 | 
            +
                  project_root: 'modules/',
         | 
| 23 | 
            +
                  managed_modules_conf: 'managed_modules.yml',
         | 
| 24 | 
            +
                  configs: '.',
         | 
| 25 | 
            +
                  tag_pattern: '%s',
         | 
| 26 26 | 
             
                }
         | 
| 27 27 | 
             
              end
         | 
| 28 28 |  | 
| @@ -33,7 +33,7 @@ module ModuleSync # rubocop:disable Metrics/ModuleLength | |
| 33 33 | 
             
              def self.local_file(config_path, file)
         | 
| 34 34 | 
             
                path = File.join(config_path, MODULE_FILES_DIR, file)
         | 
| 35 35 | 
             
                if !File.exist?("#{path}.erb") && File.exist?(path)
         | 
| 36 | 
            -
                   | 
| 36 | 
            +
                  warn "Warning: using '#{path}' as template without '.erb' suffix"
         | 
| 37 37 | 
             
                  path
         | 
| 38 38 | 
             
                else
         | 
| 39 39 | 
             
                  "#{path}.erb"
         | 
| @@ -50,9 +50,9 @@ module ModuleSync # rubocop:disable Metrics/ModuleLength | |
| 50 50 | 
             
                      .collect { |p| p.chomp('.erb') }
         | 
| 51 51 | 
             
                      .to_a
         | 
| 52 52 | 
             
                else
         | 
| 53 | 
            -
                   | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 53 | 
            +
                  warn "#{local_template_dir} does not exist. " \
         | 
| 54 | 
            +
                       'Check that you are working in your module configs directory or ' \
         | 
| 55 | 
            +
                       'that you have passed in the correct directory with -c.'
         | 
| 56 56 | 
             
                  exit 1
         | 
| 57 57 | 
             
                end
         | 
| 58 58 | 
             
              end
         | 
| @@ -68,8 +68,8 @@ module ModuleSync # rubocop:disable Metrics/ModuleLength | |
| 68 68 |  | 
| 69 69 | 
             
                managed_modules = Util.parse_config(config_file)
         | 
| 70 70 | 
             
                if managed_modules.empty?
         | 
| 71 | 
            -
                   | 
| 72 | 
            -
             | 
| 71 | 
            +
                  warn "No modules found in #{config_file}. " \
         | 
| 72 | 
            +
                       'Check that you specified the right :configs directory and :managed_modules_conf file.'
         | 
| 73 73 | 
             
                  exit 1
         | 
| 74 74 | 
             
                end
         | 
| 75 75 | 
             
                managed_modules.select! { |m| m =~ Regexp.new(filter) } unless filter.nil?
         | 
| @@ -99,16 +99,16 @@ module ModuleSync # rubocop:disable Metrics/ModuleLength | |
| 99 99 | 
             
                    erb = Renderer.build(template_file)
         | 
| 100 100 | 
             
                    # Meta data passed to the template as @metadata[:name]
         | 
| 101 101 | 
             
                    metadata = {
         | 
| 102 | 
            -
                      : | 
| 103 | 
            -
                      : | 
| 104 | 
            -
                      : | 
| 105 | 
            -
                      : | 
| 102 | 
            +
                      module_name: settings.additional_settings[:puppet_module],
         | 
| 103 | 
            +
                      namespace: settings.additional_settings[:namespace],
         | 
| 104 | 
            +
                      workdir: puppet_module.working_directory,
         | 
| 105 | 
            +
                      target_file: target_file,
         | 
| 106 106 | 
             
                    }
         | 
| 107 107 | 
             
                    template = Renderer.render(erb, configs, metadata)
         | 
| 108 108 | 
             
                    mode = File.stat(template_file).mode
         | 
| 109 109 | 
             
                    Renderer.sync(template, target_file, mode)
         | 
| 110 110 | 
             
                  rescue StandardError
         | 
| 111 | 
            -
                     | 
| 111 | 
            +
                    warn "#{puppet_module.given_name}: Error while rendering file: '#{filename}'"
         | 
| 112 112 | 
             
                    raise
         | 
| 113 113 | 
             
                  end
         | 
| 114 114 | 
             
                end
         | 
| @@ -128,9 +128,9 @@ module ModuleSync # rubocop:disable Metrics/ModuleLength | |
| 128 128 | 
             
                                        defaults,
         | 
| 129 129 | 
             
                                        module_configs[GLOBAL_DEFAULTS_KEY] || {},
         | 
| 130 130 | 
             
                                        module_configs,
         | 
| 131 | 
            -
                                        : | 
| 132 | 
            -
                                        : | 
| 133 | 
            -
                                        : | 
| 131 | 
            +
                                        puppet_module: puppet_module.repository_name,
         | 
| 132 | 
            +
                                        git_base: options[:git_base],
         | 
| 133 | 
            +
                                        namespace: puppet_module.repository_namespace)
         | 
| 134 134 |  | 
| 135 135 | 
             
                settings.unmanaged_files(module_files).each do |filename|
         | 
| 136 136 | 
             
                  $stdout.puts "Not managing '#{filename}' in '#{puppet_module.given_name}'"
         | 
| @@ -178,7 +178,7 @@ module ModuleSync # rubocop:disable Metrics/ModuleLength | |
| 178 178 | 
             
                  manage_module(puppet_module, module_files, defaults)
         | 
| 179 179 | 
             
                rescue ModuleSync::Error, Git::GitExecuteError => e
         | 
| 180 180 | 
             
                  message = e.message || 'Error during `update`'
         | 
| 181 | 
            -
                   | 
| 181 | 
            +
                  warn "#{puppet_module.given_name}: #{message}"
         | 
| 182 182 | 
             
                  exit 1 unless options[:skip_broken]
         | 
| 183 183 | 
             
                  errors = true
         | 
| 184 184 | 
             
                  $stdout.puts "Skipping '#{puppet_module.given_name}' as update process failed"
         | 
| @@ -222,7 +222,7 @@ module ModuleSync # rubocop:disable Metrics/ModuleLength | |
| 222 222 | 
             
                    raise Thor::Error, message if @options[:fail_fast]
         | 
| 223 223 |  | 
| 224 224 | 
             
                    errors[puppet_module.given_name] = message
         | 
| 225 | 
            -
                     | 
| 225 | 
            +
                    warn message
         | 
| 226 226 | 
             
                  end
         | 
| 227 227 |  | 
| 228 228 | 
             
                  $stdout.puts ''
         | 
    
        data/modulesync.gemspec
    CHANGED
    
    | @@ -3,33 +3,29 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) | |
| 3 3 |  | 
| 4 4 | 
             
            Gem::Specification.new do |spec|
         | 
| 5 5 | 
             
              spec.name                  = 'modulesync'
         | 
| 6 | 
            -
              spec.version               = '2. | 
| 6 | 
            +
              spec.version               = '2.7.0'
         | 
| 7 7 | 
             
              spec.authors               = ['Vox Pupuli']
         | 
| 8 8 | 
             
              spec.email                 = ['voxpupuli@groups.io']
         | 
| 9 9 | 
             
              spec.summary               = 'Puppet Module Synchronizer'
         | 
| 10 10 | 
             
              spec.description           = 'Utility to synchronize common files across puppet modules in Github.'
         | 
| 11 11 | 
             
              spec.homepage              = 'https://github.com/voxpupuli/modulesync'
         | 
| 12 12 | 
             
              spec.license               = 'Apache-2.0'
         | 
| 13 | 
            -
              spec.required_ruby_version = '>= 2. | 
| 13 | 
            +
              spec.required_ruby_version = '>= 2.7.0'
         | 
| 14 14 |  | 
| 15 15 | 
             
              spec.files         = `git ls-files -z`.split("\x0")
         | 
| 16 16 | 
             
              spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
         | 
| 17 17 | 
             
              spec.require_paths = ['lib']
         | 
| 18 18 |  | 
| 19 | 
            -
              spec.add_development_dependency 'aruba', ' | 
| 20 | 
            -
              spec.add_development_dependency 'bundler'
         | 
| 19 | 
            +
              spec.add_development_dependency 'aruba', '~>2.0'
         | 
| 21 20 | 
             
              spec.add_development_dependency 'cucumber'
         | 
| 22 21 | 
             
              spec.add_development_dependency 'rake'
         | 
| 23 22 | 
             
              spec.add_development_dependency 'rspec'
         | 
| 24 | 
            -
              spec.add_development_dependency 'rubocop', '~> 1.2'
         | 
| 25 | 
            -
              spec.add_development_dependency 'rubocop-performance'
         | 
| 26 | 
            -
              spec.add_development_dependency 'rubocop-rake'
         | 
| 27 | 
            -
              spec.add_development_dependency 'rubocop-rspec'
         | 
| 28 23 | 
             
              spec.add_development_dependency 'simplecov'
         | 
| 24 | 
            +
              spec.add_development_dependency 'voxpupuli-rubocop', '~> 1.3'
         | 
| 29 25 |  | 
| 30 26 | 
             
              spec.add_runtime_dependency 'git', '~>1.7'
         | 
| 31 27 | 
             
              spec.add_runtime_dependency 'gitlab', '~>4.0'
         | 
| 32 | 
            -
              spec.add_runtime_dependency 'octokit', ' | 
| 33 | 
            -
              spec.add_runtime_dependency 'puppet-blacksmith', '>= 3.0', '<  | 
| 28 | 
            +
              spec.add_runtime_dependency 'octokit', '>=4', '<7'
         | 
| 29 | 
            +
              spec.add_runtime_dependency 'puppet-blacksmith', '>= 3.0', '< 8'
         | 
| 34 30 | 
             
              spec.add_runtime_dependency 'thor'
         | 
| 35 31 | 
             
            end
         | 
| @@ -102,21 +102,21 @@ module ModuleSync | |
| 102 102 |  | 
| 103 103 | 
             
                  def tags
         | 
| 104 104 | 
             
                    FileUtils.chdir(bare_repo_dir) do
         | 
| 105 | 
            -
                      return run %w | 
| 105 | 
            +
                      return run %w[git tag --list]
         | 
| 106 106 | 
             
                    end
         | 
| 107 107 | 
             
                  end
         | 
| 108 108 |  | 
| 109 109 | 
             
                  def delete_branch(branch)
         | 
| 110 110 | 
             
                    FileUtils.chdir(bare_repo_dir) do
         | 
| 111 | 
            -
                      run %W | 
| 111 | 
            +
                      run %W[git branch -D #{branch}]
         | 
| 112 112 | 
             
                    end
         | 
| 113 113 | 
             
                  end
         | 
| 114 114 |  | 
| 115 115 | 
             
                  def create_branch(branch, from = nil)
         | 
| 116 116 | 
             
                    from ||= default_branch
         | 
| 117 117 | 
             
                    FileUtils.chdir(tmp_repo_dir) do
         | 
| 118 | 
            -
                      run %W | 
| 119 | 
            -
                      run %W | 
| 118 | 
            +
                      run %W[git branch -c #{from} #{branch}]
         | 
| 119 | 
            +
                      run %W[git push --set-upstream origin #{branch}]
         | 
| 120 120 | 
             
                    end
         | 
| 121 121 | 
             
                  end
         | 
| 122 122 |  |