modulesync 2.2.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +18 -3
- data/.github/workflows/release.yml +2 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +14 -8
- data/.rubocop_todo.yml +25 -17
- data/.simplecov +46 -0
- data/CHANGELOG.md +32 -0
- data/Gemfile +1 -1
- data/bin/msync +17 -1
- data/features/cli.feature +12 -6
- data/features/execute.feature +51 -0
- data/features/hook.feature +5 -8
- data/features/push.feature +46 -0
- data/features/reset.feature +57 -0
- data/features/step_definitions/git_steps.rb +29 -1
- data/features/support/env.rb +9 -0
- data/features/update/bump_version.feature +8 -12
- data/features/update/dot_sync.feature +52 -0
- data/features/update/pull_request.feature +180 -0
- data/features/update.feature +74 -103
- data/lib/modulesync/cli/thor.rb +12 -0
- data/lib/modulesync/cli.rb +122 -28
- data/lib/modulesync/git_service/base.rb +63 -0
- data/lib/modulesync/git_service/factory.rb +28 -0
- data/lib/modulesync/{pr → git_service}/github.rb +23 -21
- data/lib/modulesync/git_service/gitlab.rb +62 -0
- data/lib/modulesync/git_service.rb +96 -0
- data/lib/modulesync/hook.rb +11 -13
- data/lib/modulesync/renderer.rb +3 -6
- data/lib/modulesync/repository.rb +71 -25
- data/lib/modulesync/settings.rb +0 -1
- data/lib/modulesync/source_code.rb +28 -2
- data/lib/modulesync/util.rb +4 -4
- data/lib/modulesync.rb +104 -66
- data/modulesync.gemspec +7 -4
- data/spec/helpers/faker/puppet_module_remote_repo.rb +16 -1
- data/spec/spec_helper.rb +1 -23
- data/spec/unit/modulesync/git_service/factory_spec.rb +16 -0
- data/spec/unit/modulesync/git_service/github_spec.rb +81 -0
- data/spec/unit/modulesync/git_service/gitlab_spec.rb +90 -0
- data/spec/unit/modulesync/git_service_spec.rb +201 -0
- data/spec/unit/modulesync/source_code_spec.rb +22 -0
- data/spec/unit/modulesync_spec.rb +0 -12
- metadata +74 -12
- data/lib/modulesync/pr/gitlab.rb +0 -54
- data/spec/unit/modulesync/pr/github_spec.rb +0 -49
- data/spec/unit/modulesync/pr/gitlab_spec.rb +0 -81
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4914cfca898fe7b7183b87a1feaa7b4edbeb2a1d5b97d2d32f53ca7cde6adf1
|
4
|
+
data.tar.gz: 7b02e4e2a1a4b1d7108702f3c9108ef250b13ddace34f4946f11d11338de6f90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93c282023d9f20729b4c8ed253e8a6b7c312433291fede9db35ee4b1250e00933b8bd751225521b6613709d41bef216f6a366115569710576253fb3473f5a408
|
7
|
+
data.tar.gz: 8019fac3cd951a7001986fbca62d50b4404e8c4008357a4724652a177a49d61ff4826d52767c67c074e0236f67723fea1df38fb583a1292d2f1ae5db8be39ccb
|
data/.github/workflows/ci.yml
CHANGED
@@ -8,7 +8,19 @@ env:
|
|
8
8
|
BUNDLE_WITHOUT: release
|
9
9
|
|
10
10
|
jobs:
|
11
|
+
rubocop:
|
12
|
+
runs-on: ubuntu-latest
|
13
|
+
steps:
|
14
|
+
- uses: actions/checkout@v2
|
15
|
+
- name: Setup ruby
|
16
|
+
uses: ruby/setup-ruby@v1
|
17
|
+
with:
|
18
|
+
ruby-version: '3.1'
|
19
|
+
bundler-cache: true
|
20
|
+
- name: Run linter
|
21
|
+
run: bundle exec rubocop --format github
|
11
22
|
test:
|
23
|
+
needs: rubocop
|
12
24
|
runs-on: ubuntu-latest
|
13
25
|
strategy:
|
14
26
|
fail-fast: false
|
@@ -18,9 +30,10 @@ jobs:
|
|
18
30
|
- ruby: "2.6"
|
19
31
|
- ruby: "2.7"
|
20
32
|
- ruby: "3.0"
|
21
|
-
|
33
|
+
- ruby: "3.1"
|
34
|
+
codecov: "yes"
|
22
35
|
env:
|
23
|
-
|
36
|
+
CODECOV: ${{ matrix.codecov }}
|
24
37
|
steps:
|
25
38
|
- uses: actions/checkout@v2
|
26
39
|
- name: Install Ruby ${{ matrix.ruby }}
|
@@ -28,7 +41,9 @@ jobs:
|
|
28
41
|
with:
|
29
42
|
ruby-version: ${{ matrix.ruby }}
|
30
43
|
bundler-cache: true
|
31
|
-
- name: Run tests
|
44
|
+
- name: Run unit tests
|
32
45
|
run: bundle exec rake spec
|
46
|
+
- name: Run behavior tests
|
47
|
+
run: bundle exec cucumber
|
33
48
|
- name: Build gem
|
34
49
|
run: gem build *.gemspec
|
@@ -9,14 +9,12 @@ jobs:
|
|
9
9
|
release:
|
10
10
|
runs-on: ubuntu-latest
|
11
11
|
if: github.repository == 'voxpupuli/modulesync'
|
12
|
-
env:
|
13
|
-
BUNDLE_WITHOUT: release
|
14
12
|
steps:
|
15
13
|
- uses: actions/checkout@v2
|
16
|
-
- name: Install Ruby 3.
|
14
|
+
- name: Install Ruby 3.1
|
17
15
|
uses: ruby/setup-ruby@v1
|
18
16
|
with:
|
19
|
-
ruby-version: '3.
|
17
|
+
ruby-version: '3.1'
|
20
18
|
- name: Build gem
|
21
19
|
run: gem build *.gemspec
|
22
20
|
- name: Publish gem to rubygems.org
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
inherit_from: .rubocop_todo.yml
|
2
2
|
|
3
3
|
AllCops:
|
4
|
-
TargetRubyVersion: 2.
|
4
|
+
TargetRubyVersion: 2.5
|
5
|
+
NewCops: enable
|
5
6
|
Exclude:
|
6
7
|
- 'vendor/**/*'
|
7
8
|
- 'tmp/**/*'
|
@@ -14,19 +15,24 @@ AllCops:
|
|
14
15
|
Style/HashSyntax:
|
15
16
|
Enabled: false
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
Enabled: false
|
18
|
+
Style/TrailingCommaInArguments:
|
19
|
+
EnforcedStyleForMultiline: comma
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
Style/TrailingCommaInArrayLiteral:
|
22
|
+
EnforcedStyleForMultiline: comma
|
23
|
+
|
24
|
+
Style/TrailingCommaInHashLiteral:
|
25
|
+
EnforcedStyleForMultiline: comma
|
24
26
|
|
25
27
|
# sane line length
|
26
|
-
|
28
|
+
Layout/LineLength:
|
27
29
|
Max: 120
|
28
30
|
Exclude:
|
29
31
|
- 'features/**/*'
|
30
32
|
|
31
33
|
Style/FrozenStringLiteralComment:
|
32
34
|
Enabled: false
|
35
|
+
|
36
|
+
# We explicitly prefer $stderr.puts over #warn
|
37
|
+
Style/StderrPuts:
|
38
|
+
Enabled: false
|
data/.rubocop_todo.yml
CHANGED
@@ -1,39 +1,46 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on
|
3
|
+
# on 2022-02-14 21:55:21 UTC using RuboCop version 1.24.1.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
9
|
# Offense count: 1
|
10
|
-
|
10
|
+
# Cop supports --auto-correct.
|
11
|
+
# Configuration parameters: Include.
|
12
|
+
# Include: **/*.gemspec
|
13
|
+
Gemspec/RequireMFA:
|
11
14
|
Exclude:
|
12
|
-
- '
|
15
|
+
- 'modulesync.gemspec'
|
13
16
|
|
14
|
-
# Offense count:
|
17
|
+
# Offense count: 9
|
18
|
+
# Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
|
15
19
|
Metrics/AbcSize:
|
16
|
-
Max:
|
20
|
+
Max: 60
|
17
21
|
|
18
22
|
# Offense count: 2
|
19
|
-
# Configuration parameters: CountComments.
|
23
|
+
# Configuration parameters: CountComments, CountAsOne.
|
20
24
|
Metrics/ClassLength:
|
21
|
-
Max:
|
25
|
+
Max: 186
|
22
26
|
|
23
|
-
# Offense count:
|
27
|
+
# Offense count: 5
|
28
|
+
# Configuration parameters: IgnoredMethods.
|
24
29
|
Metrics/CyclomaticComplexity:
|
25
|
-
Max:
|
30
|
+
Max: 15
|
26
31
|
|
27
|
-
# Offense count:
|
28
|
-
# Configuration parameters: CountComments.
|
32
|
+
# Offense count: 17
|
33
|
+
# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
|
29
34
|
Metrics/MethodLength:
|
30
|
-
Max:
|
35
|
+
Max: 34
|
31
36
|
|
32
|
-
# Offense count:
|
37
|
+
# Offense count: 4
|
38
|
+
# Configuration parameters: IgnoredMethods.
|
33
39
|
Metrics/PerceivedComplexity:
|
34
|
-
Max:
|
40
|
+
Max: 16
|
35
41
|
|
36
42
|
# Offense count: 8
|
43
|
+
# Configuration parameters: AllowedConstants.
|
37
44
|
Style/Documentation:
|
38
45
|
Exclude:
|
39
46
|
- 'spec/**/*'
|
@@ -45,7 +52,8 @@ Style/Documentation:
|
|
45
52
|
- 'lib/modulesync/util.rb'
|
46
53
|
|
47
54
|
# Offense count: 1
|
48
|
-
#
|
49
|
-
|
55
|
+
# Configuration parameters: AllowedMethods.
|
56
|
+
# AllowedMethods: respond_to_missing?
|
57
|
+
Style/OptionalBooleanParameter:
|
50
58
|
Exclude:
|
51
|
-
- 'lib/modulesync/
|
59
|
+
- 'lib/modulesync/puppet_module.rb'
|
data/.simplecov
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
SimpleCov.start do
|
2
|
+
if ENV['SIMPLECOV_ROOT']
|
3
|
+
SimpleCov.root(ENV['SIMPLECOV_ROOT'])
|
4
|
+
|
5
|
+
filters.clear # This will remove the :root_filter and :bundler_filter that come via simplecov's defaults
|
6
|
+
|
7
|
+
# Because simplecov filters everything outside of the SimpleCov.root
|
8
|
+
# This should be added, cf.
|
9
|
+
# https://github.com/colszowka/simplecov#default-root-filter-and-coverage-for-things-outside-of-it
|
10
|
+
add_filter do |src|
|
11
|
+
src.filename !~ /^#{SimpleCov.root}/
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
add_group 'Source code', 'lib'
|
16
|
+
|
17
|
+
add_group 'Unit tests', 'spec'
|
18
|
+
|
19
|
+
add_group 'Behavior tests', 'features'
|
20
|
+
add_filter '/features/support/env.rb'
|
21
|
+
|
22
|
+
enable_coverage :branch
|
23
|
+
|
24
|
+
# do not track vendored files
|
25
|
+
add_filter '/vendor'
|
26
|
+
add_filter '/.vendor'
|
27
|
+
|
28
|
+
# exclude anything that is not in lib, spec or features directories
|
29
|
+
add_filter do |src|
|
30
|
+
src.filename !~ %r{^#{SimpleCov.root}/(lib|spec|features)}
|
31
|
+
end
|
32
|
+
|
33
|
+
track_files '**/*.rb'
|
34
|
+
end
|
35
|
+
|
36
|
+
if ENV['CODECOV'] == 'yes'
|
37
|
+
require 'simplecov-console'
|
38
|
+
require 'codecov'
|
39
|
+
|
40
|
+
SimpleCov.formatters = [
|
41
|
+
SimpleCov::Formatter::Console,
|
42
|
+
SimpleCov::Formatter::Codecov,
|
43
|
+
]
|
44
|
+
end
|
45
|
+
|
46
|
+
# vim: filetype=ruby
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,37 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
|
+
## [2.3.0](https://github.com/voxpupuli/modulesync/tree/2.3.0) (2022-03-07)
|
6
|
+
|
7
|
+
[Full Changelog](https://github.com/voxpupuli/modulesync/compare/2.2.0...2.3.0)
|
8
|
+
|
9
|
+
**Implemented enhancements:**
|
10
|
+
|
11
|
+
- CLI: Show relevant help when using --help option on a subcommand [\#248](https://github.com/voxpupuli/modulesync/pull/248) ([neomilium](https://github.com/neomilium))
|
12
|
+
- New CLI commands [\#244](https://github.com/voxpupuli/modulesync/pull/244) ([neomilium](https://github.com/neomilium))
|
13
|
+
|
14
|
+
**Fixed bugs:**
|
15
|
+
|
16
|
+
- Existing MR makes msync fail \(which leaves changes in target branch\) [\#195](https://github.com/voxpupuli/modulesync/issues/195)
|
17
|
+
- Target branch `.sync.yml` not taken into account on branch update \(--force\) [\#192](https://github.com/voxpupuli/modulesync/issues/192)
|
18
|
+
- Fix error when git upstream branch is deleted [\#240](https://github.com/voxpupuli/modulesync/pull/240) ([neomilium](https://github.com/neomilium))
|
19
|
+
|
20
|
+
**Closed issues:**
|
21
|
+
|
22
|
+
- Linter is missing in CI [\#237](https://github.com/voxpupuli/modulesync/issues/237)
|
23
|
+
- Behavior tests are missing in CI [\#236](https://github.com/voxpupuli/modulesync/issues/236)
|
24
|
+
|
25
|
+
**Merged pull requests:**
|
26
|
+
|
27
|
+
- Properly ensure the parent directory exists [\#247](https://github.com/voxpupuli/modulesync/pull/247) ([ekohl](https://github.com/ekohl))
|
28
|
+
- Add Ruby 3.1 to CI matrix [\#245](https://github.com/voxpupuli/modulesync/pull/245) ([bastelfreak](https://github.com/bastelfreak))
|
29
|
+
- Fix rubocop offences and add linter to CI [\#243](https://github.com/voxpupuli/modulesync/pull/243) ([neomilium](https://github.com/neomilium))
|
30
|
+
- Support `.sync.yml` changes between two runs [\#242](https://github.com/voxpupuli/modulesync/pull/242) ([neomilium](https://github.com/neomilium))
|
31
|
+
- Fix gitlab merge request submission [\#241](https://github.com/voxpupuli/modulesync/pull/241) ([neomilium](https://github.com/neomilium))
|
32
|
+
- Add behavior tests to CI [\#239](https://github.com/voxpupuli/modulesync/pull/239) ([neomilium](https://github.com/neomilium))
|
33
|
+
- Rework PR/MR feature [\#219](https://github.com/voxpupuli/modulesync/pull/219) ([neomilium](https://github.com/neomilium))
|
34
|
+
- Refactor code for maintainabilty [\#206](https://github.com/voxpupuli/modulesync/pull/206) ([neomilium](https://github.com/neomilium))
|
35
|
+
|
5
36
|
## [2.2.0](https://github.com/voxpupuli/modulesync/tree/2.2.0) (2021-07-24)
|
6
37
|
|
7
38
|
[Full Changelog](https://github.com/voxpupuli/modulesync/compare/2.1.1...2.2.0)
|
@@ -52,6 +83,7 @@ The 2.1.0 release didn't make it to github packages. 2.1.1 is a new release with
|
|
52
83
|
|
53
84
|
**Closed issues:**
|
54
85
|
|
86
|
+
- PR/MR feature should honor the repository default branch name as target branch [\#207](https://github.com/voxpupuli/modulesync/issues/207)
|
55
87
|
- Add linting \(rubocop\) to Travis CI configuration [\#153](https://github.com/voxpupuli/modulesync/issues/153)
|
56
88
|
- Language sensitive GIT handling [\#85](https://github.com/voxpupuli/modulesync/issues/85)
|
57
89
|
|
data/Gemfile
CHANGED
@@ -6,7 +6,7 @@ group :release do
|
|
6
6
|
gem 'github_changelog_generator', :require => false
|
7
7
|
end
|
8
8
|
|
9
|
-
group :coverage, optional: ENV['
|
9
|
+
group :coverage, optional: ENV['CODECOV']!='yes' do
|
10
10
|
gem 'simplecov-console', :require => false
|
11
11
|
gem 'codecov', :require => false
|
12
12
|
end
|
data/bin/msync
CHANGED
@@ -1,6 +1,22 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
3
|
+
if ENV['COVERAGE']
|
4
|
+
# This block allow us to grab code coverage when running this script.
|
5
|
+
#
|
6
|
+
# Note: This environment variable (ie. COVERAGE) is set in Cucumber/Aruba configuration to collect reports
|
7
|
+
simplecov_root = File.expand_path File.join(File.dirname(__FILE__), '..')
|
8
|
+
|
9
|
+
# When running with aruba simplecov was using /tmp/aruba as the root folder.
|
10
|
+
# This is to force using the project folder
|
11
|
+
ENV['SIMPLECOV_ROOT'] = simplecov_root
|
12
|
+
require 'simplecov'
|
13
|
+
|
14
|
+
# https://github.com/simplecov-ruby/simplecov/issues/234
|
15
|
+
# As described in the issue, every process must have an unique name:
|
16
|
+
SimpleCov.command_name "#{File.basename $PROGRAM_NAME} (pid: #{Process.pid})"
|
17
|
+
end
|
18
|
+
|
19
|
+
lib = File.expand_path('../lib', __dir__)
|
4
20
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
21
|
|
6
22
|
require 'modulesync/cli'
|
data/features/cli.feature
CHANGED
@@ -17,9 +17,16 @@ Feature: CLI
|
|
17
17
|
Then the exit status should be 1
|
18
18
|
|
19
19
|
Scenario: When running the help command
|
20
|
-
When I run `msync help`
|
21
|
-
|
22
|
-
|
20
|
+
When I successfully run `msync help`
|
21
|
+
Then the output should match /Commands:/
|
22
|
+
|
23
|
+
Scenario: Use --help options on subcommand should show subcommand help
|
24
|
+
When I successfully run `msync clone --help`
|
25
|
+
Then the output should contain:
|
26
|
+
"""
|
27
|
+
Usage:
|
28
|
+
msync clone
|
29
|
+
"""
|
23
30
|
|
24
31
|
Scenario: When overriding a setting from the config file on the command line
|
25
32
|
Given a puppet module "puppet-test" from "fakenamespace"
|
@@ -35,9 +42,8 @@ Feature: CLI
|
|
35
42
|
"""
|
36
43
|
And a git_base option appended to "modulesync.yml" for local tests
|
37
44
|
And a directory named "moduleroot"
|
38
|
-
When I run `msync update --noop --namespace fakenamespace --branch command-line-branch`
|
39
|
-
Then the
|
40
|
-
And the output should contain:
|
45
|
+
When I successfully run `msync update --verbose --noop --namespace fakenamespace --branch command-line-branch`
|
46
|
+
Then the output should contain:
|
41
47
|
"""
|
42
48
|
Creating new branch command-line-branch
|
43
49
|
"""
|
@@ -0,0 +1,51 @@
|
|
1
|
+
Feature: execute
|
2
|
+
Use ModuleSync to execute a custom script on each repositories
|
3
|
+
|
4
|
+
Scenario: Cloning sourcecodes before running command when modules/ dir is empty
|
5
|
+
Given a basic setup with a puppet module "puppet-test" from "awesome"
|
6
|
+
Then the file "modules/awesome/puppet-test/metadata.json" should not exist
|
7
|
+
When I successfully run `msync exec --verbose -- /bin/true`
|
8
|
+
Then the stdout should contain "Cloning from 'file://"
|
9
|
+
And the file "modules/awesome/puppet-test/metadata.json" should exist
|
10
|
+
|
11
|
+
@no-clobber
|
12
|
+
Scenario: No clones before running command when sourcecode have already been cloned
|
13
|
+
Then the file "modules/awesome/puppet-test/metadata.json" should exist
|
14
|
+
When I successfully run `msync exec --verbose /bin/true`
|
15
|
+
Then the stdout should not contain "Cloning from 'file://"
|
16
|
+
|
17
|
+
@no-clobber
|
18
|
+
Scenario: When command run fails, fail fast if option defined
|
19
|
+
When I run `msync exec --verbose --fail-fast -- /bin/false`
|
20
|
+
Then the exit status should be 1
|
21
|
+
And the stderr should contain:
|
22
|
+
"""
|
23
|
+
Command execution failed
|
24
|
+
"""
|
25
|
+
|
26
|
+
@no-clobber
|
27
|
+
Scenario: When command run fails, run all and summarize errors if option fail-fast is not set
|
28
|
+
When I run `msync exec --verbose --no-fail-fast -- /bin/false`
|
29
|
+
Then the exit status should be 1
|
30
|
+
And the stderr should contain:
|
31
|
+
"""
|
32
|
+
Error(s) during `execute` command:
|
33
|
+
*
|
34
|
+
"""
|
35
|
+
|
36
|
+
Scenario: Show fail-fast default value in help
|
37
|
+
When I successfully run `msync help exec`
|
38
|
+
Then the stdout should contain:
|
39
|
+
"""
|
40
|
+
[--fail-fast], [--no-fail-fast] # Abort the run after a command execution failure
|
41
|
+
# Default: true
|
42
|
+
"""
|
43
|
+
|
44
|
+
Scenario: Override fail-fast default value using config file
|
45
|
+
Given the global option "fail_fast" sets to "false"
|
46
|
+
When I successfully run `msync help exec`
|
47
|
+
Then the stdout should contain:
|
48
|
+
"""
|
49
|
+
[--fail-fast], [--no-fail-fast] # Abort the run after a command execution failure
|
50
|
+
"""
|
51
|
+
# NOTE: It seems there is a Thor bug here: default value is missing in help when sets to 'false'
|
data/features/hook.feature
CHANGED
@@ -3,24 +3,21 @@ Feature: hook
|
|
3
3
|
|
4
4
|
Scenario: Activating a hook
|
5
5
|
Given a directory named ".git/hooks"
|
6
|
-
When I run `msync hook activate`
|
7
|
-
Then the
|
8
|
-
And the file named ".git/hooks/pre-push" should contain "bash"
|
6
|
+
When I successfully run `msync hook activate`
|
7
|
+
Then the file named ".git/hooks/pre-push" should contain "bash"
|
9
8
|
|
10
9
|
Scenario: Deactivating a hook
|
11
10
|
Given a file named ".git/hooks/pre-push" with:
|
12
11
|
"""
|
13
12
|
git hook
|
14
13
|
"""
|
15
|
-
When I run `msync hook deactivate`
|
16
|
-
Then the exit status should be 0
|
14
|
+
When I successfully run `msync hook deactivate`
|
17
15
|
Then the file ".git/hooks/pre-push" should not exist
|
18
16
|
|
19
17
|
Scenario: Activating a hook with arguments
|
20
18
|
Given a directory named ".git/hooks"
|
21
|
-
When I run `msync hook activate -a '--foo bar --baz quux' -b master`
|
22
|
-
Then the
|
23
|
-
And the file named ".git/hooks/pre-push" should contain:
|
19
|
+
When I successfully run `msync hook activate -a '--foo bar --baz quux' -b master`
|
20
|
+
Then the file named ".git/hooks/pre-push" should contain:
|
24
21
|
"""
|
25
22
|
"$message" -n puppetlabs -b master --foo bar --baz quux
|
26
23
|
"""
|
@@ -0,0 +1,46 @@
|
|
1
|
+
Feature: push
|
2
|
+
Push commits to remote
|
3
|
+
|
4
|
+
Scenario: Push available commits to remote
|
5
|
+
Given a mocked git configuration
|
6
|
+
And a puppet module "puppet-test" from "awesome"
|
7
|
+
And a file named "managed_modules.yml" with:
|
8
|
+
"""
|
9
|
+
---
|
10
|
+
puppet-test:
|
11
|
+
namespace: awesome
|
12
|
+
"""
|
13
|
+
And a file named "modulesync.yml" with:
|
14
|
+
"""
|
15
|
+
---
|
16
|
+
branch: modulesync
|
17
|
+
"""
|
18
|
+
And a git_base option appended to "modulesync.yml" for local tests
|
19
|
+
And I successfully run `msync reset`
|
20
|
+
And I cd to "modules/awesome/puppet-test"
|
21
|
+
And I run `touch hello`
|
22
|
+
And I run `git add hello`
|
23
|
+
And I run `git commit -m'Hello!'`
|
24
|
+
And I cd to "~"
|
25
|
+
Then the puppet module "puppet-test" from "awesome" should have no commits made by "Aruba"
|
26
|
+
When I successfully run `msync push --verbose`
|
27
|
+
Then the puppet module "puppet-test" from "awesome" should have 1 commit made by "Aruba" in branch "modulesync"
|
28
|
+
|
29
|
+
Scenario: Push command without a branch sets
|
30
|
+
Given a basic setup with a puppet module "puppet-test" from "awesome"
|
31
|
+
When I run `msync push --verbose`
|
32
|
+
Then the exit status should be 1
|
33
|
+
And the stderr should contain:
|
34
|
+
"""
|
35
|
+
Error: 'branch' option is missing, please set it in configuration or in command line.
|
36
|
+
"""
|
37
|
+
|
38
|
+
Scenario: Report the need to clone repositories if sourcecode was not cloned before
|
39
|
+
Given a basic setup with a puppet module "puppet-test" from "awesome"
|
40
|
+
And the global option "branch" sets to "modulesync"
|
41
|
+
When I run `msync push --verbose`
|
42
|
+
Then the exit status should be 1
|
43
|
+
And the stderr should contain:
|
44
|
+
"""
|
45
|
+
puppet-test: Repository must be locally available before trying to push
|
46
|
+
"""
|
@@ -0,0 +1,57 @@
|
|
1
|
+
Feature: reset
|
2
|
+
Reset all repositories
|
3
|
+
|
4
|
+
Scenario: Running first reset to clone repositories
|
5
|
+
Given a basic setup with a puppet module "puppet-test" from "awesome"
|
6
|
+
And the global option "branch" sets to "modulesync"
|
7
|
+
When I successfully run `msync reset --verbose`
|
8
|
+
Then the output should contain "Cloning from 'file://"
|
9
|
+
And the output should not contain "Hard-resetting any local changes to repository in"
|
10
|
+
|
11
|
+
@no-clobber
|
12
|
+
Scenario: Reset when sourcecodes have already been cloned
|
13
|
+
Given the file "modules/awesome/puppet-test/metadata.json" should exist
|
14
|
+
And the global option "branch" sets to "modulesync"
|
15
|
+
When I successfully run `msync reset --verbose`
|
16
|
+
Then the output should not contain "Cloning from 'file://"
|
17
|
+
And the output should contain "Hard-resetting any local changes to repository in 'modules/awesome/puppet-test' from branch 'origin/master'"
|
18
|
+
|
19
|
+
Scenario: Reset after an upstream file addition
|
20
|
+
Given a basic setup with a puppet module "puppet-test" from "awesome"
|
21
|
+
And the global option "branch" sets to "modulesync"
|
22
|
+
And I successfully run `msync reset`
|
23
|
+
Then the file "modules/awesome/puppet-test/hello" should not exist
|
24
|
+
When the puppet module "puppet-test" from "awesome" has a file named "hello" with:
|
25
|
+
"""
|
26
|
+
Hello
|
27
|
+
"""
|
28
|
+
When I successfully run `msync reset --verbose`
|
29
|
+
Then the output should contain "Hard-resetting any local changes to repository in 'modules/awesome/puppet-test' from branch 'origin/master'"
|
30
|
+
And the file "modules/awesome/puppet-test/hello" should exist
|
31
|
+
|
32
|
+
Scenario: Reset after an upstream file addition in offline mode
|
33
|
+
Given a basic setup with a puppet module "puppet-test" from "awesome"
|
34
|
+
And the global option "branch" sets to "modulesync"
|
35
|
+
And I successfully run `msync reset`
|
36
|
+
Then the file "modules/awesome/puppet-test/hello" should not exist
|
37
|
+
When the puppet module "puppet-test" from "awesome" has a branch named "execute"
|
38
|
+
And the puppet module "puppet-test" from "awesome" has, in branch "execute", a file named "hello" with:
|
39
|
+
"""
|
40
|
+
Hello
|
41
|
+
"""
|
42
|
+
When I successfully run `msync reset --offline`
|
43
|
+
Then the file "modules/awesome/puppet-test/hello" should not exist
|
44
|
+
|
45
|
+
Scenario: Reset to a specified branch
|
46
|
+
Given a basic setup with a puppet module "puppet-test" from "awesome"
|
47
|
+
And the global option "branch" sets to "modulesync"
|
48
|
+
When the puppet module "puppet-test" from "awesome" has a branch named "other-branch"
|
49
|
+
And the puppet module "puppet-test" from "awesome" has, in branch "other-branch", a file named "hello" with:
|
50
|
+
"""
|
51
|
+
Hello
|
52
|
+
"""
|
53
|
+
And I successfully run `msync reset`
|
54
|
+
Then the file "modules/awesome/puppet-test/hello" should not exist
|
55
|
+
When I successfully run `msync reset --verbose --source-branch origin/other-branch`
|
56
|
+
And the output should contain "Hard-resetting any local changes to repository in 'modules/awesome/puppet-test' from branch 'origin/other-branch'"
|
57
|
+
Then the file "modules/awesome/puppet-test/hello" should exist
|
@@ -32,7 +32,20 @@ Given 'a puppet module {string} from {string}' do |name, namespace|
|
|
32
32
|
end
|
33
33
|
|
34
34
|
Given 'a git_base option appended to "modulesync.yml" for local tests' do
|
35
|
-
|
35
|
+
step "the global option 'git_base' sets to '#{ModuleSync::Faker::PuppetModuleRemoteRepo.git_base}'"
|
36
|
+
end
|
37
|
+
|
38
|
+
Given 'the file {string} appended with:' do |filename, content|
|
39
|
+
File.write filename, "\n#{content}", mode: 'a'
|
40
|
+
end
|
41
|
+
|
42
|
+
Given 'the global option {string} sets to {string}' do |key, value|
|
43
|
+
steps %(
|
44
|
+
Given the file "#{Aruba.config.working_directory}/modulesync.yml" appended with:
|
45
|
+
"""
|
46
|
+
#{key}: #{value}
|
47
|
+
"""
|
48
|
+
)
|
36
49
|
end
|
37
50
|
|
38
51
|
Given 'the puppet module {string} from {string} is read-only' do |name, namespace|
|
@@ -64,6 +77,16 @@ Given 'the puppet module {string} from {string} has a file named {string} with:'
|
|
64
77
|
pmrr.add_file(filename, content)
|
65
78
|
end
|
66
79
|
|
80
|
+
Given 'the puppet module {string} from {string} has, in branch {string}, a file named {string} with:' do |name, namespace, branch, filename, content|
|
81
|
+
pmrr = ModuleSync::Faker::PuppetModuleRemoteRepo.new(name, namespace)
|
82
|
+
pmrr.add_file(filename, content, branch)
|
83
|
+
end
|
84
|
+
|
85
|
+
Given 'the puppet module {string} from {string} has a branch named {string}' do |name, namespace, branch|
|
86
|
+
pmrr = ModuleSync::Faker::PuppetModuleRemoteRepo.new(name, namespace)
|
87
|
+
pmrr.create_branch(branch)
|
88
|
+
end
|
89
|
+
|
67
90
|
Then 'the puppet module {string} from {string} should have a branch {string} with a file named {string} which contains:' do |name, namespace, branch, filename, content|
|
68
91
|
pmrr = ModuleSync::Faker::PuppetModuleRemoteRepo.new(name, namespace)
|
69
92
|
expect(pmrr.read_file(filename, branch)).to include(content)
|
@@ -83,3 +106,8 @@ Then('the puppet module {string} from {string} should not have a tag named {stri
|
|
83
106
|
pmrr = ModuleSync::Faker::PuppetModuleRemoteRepo.new(name, namespace)
|
84
107
|
expect(pmrr.tags).not_to include(tag)
|
85
108
|
end
|
109
|
+
|
110
|
+
Given 'the branch {string} of the puppet module {string} from {string} is deleted' do |branch, name, namespace|
|
111
|
+
pmrr = ModuleSync::Faker::PuppetModuleRemoteRepo.new(name, namespace)
|
112
|
+
pmrr.delete_branch(branch)
|
113
|
+
end
|
data/features/support/env.rb
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
|
3
|
+
SimpleCov.command_name 'Cucumber'
|
4
|
+
|
1
5
|
require 'aruba/cucumber'
|
2
6
|
|
3
7
|
require_relative '../../spec/helpers/faker'
|
@@ -6,4 +10,9 @@ ModuleSync::Faker.working_directory = File.expand_path('faker', Aruba.config.wor
|
|
6
10
|
|
7
11
|
Before do
|
8
12
|
@aruba_timeout_seconds = 5
|
13
|
+
|
14
|
+
# This enables coverage when aruba runs `msync` executable (cf. `bin/msync`)
|
15
|
+
set_environment_variable('COVERAGE', '1')
|
16
|
+
|
17
|
+
aruba.config.activate_announcer_on_command_failure = %i[stdout stderr]
|
9
18
|
end
|
@@ -16,9 +16,8 @@ Feature: Bump a new version after an update
|
|
16
16
|
"""
|
17
17
|
<%= @configs['content'] %>
|
18
18
|
"""
|
19
|
-
When I run `msync update --message "Add new-file" --bump --changelog --tag`
|
20
|
-
Then the
|
21
|
-
And the file named "modules/fakenamespace/puppet-test/new-file" should contain "aruba"
|
19
|
+
When I successfully run `msync update --verbose --message "Add new-file" --bump --changelog --tag`
|
20
|
+
Then the file named "modules/fakenamespace/puppet-test/new-file" should contain "aruba"
|
22
21
|
And the stdout should contain:
|
23
22
|
"""
|
24
23
|
Bumped to version 0.4.3
|
@@ -44,9 +43,8 @@ Feature: Bump a new version after an update
|
|
44
43
|
"""
|
45
44
|
<%= @configs['content'] %>
|
46
45
|
"""
|
47
|
-
When I run `msync update --message "Add new-file" --bump`
|
48
|
-
Then the
|
49
|
-
And the file named "modules/fakenamespace/puppet-test/new-file" should contain "aruba"
|
46
|
+
When I successfully run `msync update --message "Add new-file" --bump`
|
47
|
+
Then the file named "modules/fakenamespace/puppet-test/new-file" should contain "aruba"
|
50
48
|
And the stdout should contain:
|
51
49
|
"""
|
52
50
|
Bumped to version 0.4.3
|
@@ -67,9 +65,8 @@ Feature: Bump a new version after an update
|
|
67
65
|
"""
|
68
66
|
<%= @configs['content'] %>
|
69
67
|
"""
|
70
|
-
When I run `msync update --message "Add new-file" --bump --changelog`
|
71
|
-
Then the
|
72
|
-
And the file named "modules/fakenamespace/puppet-test/new-file" should contain "aruba"
|
68
|
+
When I successfully run `msync update --message "Add new-file" --bump --changelog`
|
69
|
+
Then the file named "modules/fakenamespace/puppet-test/new-file" should contain "aruba"
|
73
70
|
And the stdout should contain:
|
74
71
|
"""
|
75
72
|
Bumped to version 0.4.3
|
@@ -81,7 +78,6 @@ Feature: Bump a new version after an update
|
|
81
78
|
Scenario: Dont bump the module version after an update that produces no changes
|
82
79
|
Given a basic setup with a puppet module "puppet-test" from "fakenamespace"
|
83
80
|
And a directory named "moduleroot"
|
84
|
-
When I run `msync update --message "Add new-file" --bump --tag`
|
85
|
-
Then the
|
86
|
-
And the puppet module "puppet-test" from "fakenamespace" should have no commits made by "Aruba"
|
81
|
+
When I successfully run `msync update --message "Add new-file" --bump --tag`
|
82
|
+
Then the puppet module "puppet-test" from "fakenamespace" should have no commits made by "Aruba"
|
87
83
|
And the puppet module "puppet-test" from "fakenamespace" should not have a tag named "0.4.3"
|