rimless 1.2.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/documentation.yml +3 -2
  3. data/.github/workflows/release.yml +47 -0
  4. data/.github/workflows/test.yml +6 -9
  5. data/.rspec +2 -2
  6. data/.rubocop.yml +16 -2
  7. data/.simplecov +12 -0
  8. data/Appraisals +2 -22
  9. data/CHANGELOG.md +16 -0
  10. data/CODE_OF_CONDUCT.md +74 -0
  11. data/Dockerfile +2 -3
  12. data/Envfile +0 -3
  13. data/Guardfile +44 -0
  14. data/LICENSE +1 -1
  15. data/Makefile +18 -7
  16. data/README.md +21 -8
  17. data/Rakefile +13 -68
  18. data/doc/kafka-playground/.gitignore +2 -0
  19. data/doc/kafka-playground/Dockerfile +41 -0
  20. data/doc/kafka-playground/Gemfile +8 -0
  21. data/doc/kafka-playground/Gemfile.lock +155 -0
  22. data/doc/kafka-playground/Makefile +209 -0
  23. data/doc/kafka-playground/README.md +185 -0
  24. data/doc/kafka-playground/bin/consume-topic +7 -0
  25. data/doc/kafka-playground/bin/create-topic +42 -0
  26. data/doc/kafka-playground/bin/delete-topic +22 -0
  27. data/doc/kafka-playground/bin/list-topics +3 -0
  28. data/doc/kafka-playground/bin/produce-event +64 -0
  29. data/doc/kafka-playground/config/avro_schemas/.gitignore +1 -0
  30. data/doc/kafka-playground/config/avro_schemas/playground_app/item_v1.avsc.erb +36 -0
  31. data/doc/kafka-playground/config/avro_schemas/playground_app/payment_v1.avsc.erb +59 -0
  32. data/doc/kafka-playground/config/avro_schemas/playground_app/payment_v1_event.avsc.erb +18 -0
  33. data/doc/kafka-playground/config/docker/shell/.bash_profile +3 -0
  34. data/doc/kafka-playground/config/docker/shell/.bashrc +231 -0
  35. data/doc/kafka-playground/config/docker/shell/.config/kcat.conf +3 -0
  36. data/doc/kafka-playground/config/docker/shell/.gemrc +2 -0
  37. data/doc/kafka-playground/config/docker/shell/.inputrc +17 -0
  38. data/doc/kafka-playground/config/environment.rb +69 -0
  39. data/doc/kafka-playground/doc/assets/project.svg +68 -0
  40. data/doc/kafka-playground/docker-compose.yml +83 -0
  41. data/doc/kafka-playground/examples/rimless-produce +48 -0
  42. data/gemfiles/rails_5.2.gemfile +2 -2
  43. data/lib/rimless/configuration_handling.rb +11 -1
  44. data/lib/rimless/consumer.rb +4 -2
  45. data/lib/rimless/dependencies.rb +3 -0
  46. data/lib/rimless/kafka_helpers.rb +2 -0
  47. data/lib/rimless/karafka/avro_deserializer.rb +3 -3
  48. data/lib/rimless/rspec/helpers.rb +3 -0
  49. data/lib/rimless/rspec/matchers.rb +3 -4
  50. data/lib/rimless/rspec.rb +1 -1
  51. data/lib/rimless/tasks/consumer.rake +3 -0
  52. data/lib/rimless/tasks/generator.rake +3 -0
  53. data/lib/rimless/tasks/stats.rake +5 -2
  54. data/lib/rimless/version.rb +18 -1
  55. data/lib/rimless.rb +0 -1
  56. data/rimless.gemspec +43 -29
  57. metadata +124 -79
  58. data/gemfiles/rails_4.2.gemfile +0 -8
  59. data/gemfiles/rails_5.0.gemfile +0 -8
  60. data/gemfiles/rails_5.1.gemfile +0 -8
  61. data/gemfiles/rails_6.0.gemfile +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5763fa79c04ca9d1db4e4c75d98bb76da2ff843acdd6d4be001a85bdfb37bfc2
4
- data.tar.gz: ede22c5243eab5f54ded67dd3f7c5d9b5d8aafb02b0c0d63280341e5ca96fc29
3
+ metadata.gz: 6dbc224f24dcbe2f389df010f71006d5ad54fcdbae53545849de1712cb7a1be1
4
+ data.tar.gz: 2437b078c99c323d2b7f44d6303b5190229685a4b90e34fd2041cd54ea7abf60
5
5
  SHA512:
6
- metadata.gz: 5e9c10c5e6699c126aba2aafbbea3812bb429b2bbcc6337fc4b324a06ca2eaf3560fb51b59481763b37f6e8014ff66efee3be831049da3cf1179d3966a0029a5
7
- data.tar.gz: 996be359cf6113ae58dc7847351b438987af6436510c7f8da5031eaf1e4bd957737c9f0feff8acab3b336b9c7b232348cf2f9b1978e9a911da2b0f46eebca5ce
6
+ metadata.gz: 71c699234facfda2cfd64f7f56d86566b5fda1547f779a14eef14c30509b60b6d3add916a721bcd80da2e907171508a823ffd92e5838b1bcd2f61abad42672f3
7
+ data.tar.gz: ad19eb10066b92db85b6bdb5ac104f03e099da91838594c1baf5f39332e9fec29a3339689e05bf6203a3257e5d07d2de7f74992ab3efccbdcd2237677ed52a5f
@@ -9,16 +9,17 @@ concurrency:
9
9
  jobs:
10
10
  docs:
11
11
  name: Build gem documentation
12
- runs-on: ubuntu-20.04
12
+ runs-on: ubuntu-22.04
13
13
  timeout-minutes: 5
14
14
  steps:
15
- - uses: actions/checkout@v2
15
+ - uses: actions/checkout@v3
16
16
 
17
17
  - name: Install the correct Ruby version
18
18
  uses: ruby/setup-ruby@v1
19
19
  with:
20
20
  ruby-version: 2.5
21
21
  bundler-cache: true
22
+ rubygems: '3.3.26'
22
23
 
23
24
  - name: Prepare the virtual environment
24
25
  uses: hausgold/actions/ci@master
@@ -0,0 +1,47 @@
1
+ name: Release
2
+ run-name: Release ${{ github.event.inputs.VERSION }}
3
+
4
+ on:
5
+ workflow_dispatch:
6
+ inputs:
7
+ VERSION:
8
+ description: The new version to release. (eg. `1.0.0`) Check the
9
+ changelog for the latest version.
10
+
11
+ concurrency:
12
+ group: '${{ github.event.inputs.VERSION }}'
13
+ cancel-in-progress: true
14
+
15
+ jobs:
16
+ docs:
17
+ name: Release the gem
18
+ runs-on: ubuntu-22.04
19
+ timeout-minutes: 5
20
+ steps:
21
+ - uses: actions/checkout@v3
22
+
23
+ - name: Install Ruby 2.5
24
+ uses: ruby/setup-ruby@v1
25
+ with:
26
+ ruby-version: 2.5
27
+ bundler-cache: true
28
+ rubygems: '3.3.26'
29
+
30
+ - name: Prepare the virtual environment
31
+ uses: hausgold/actions/ci@master
32
+ with:
33
+ clone_token: '${{ secrets.CLONE_TOKEN }}'
34
+ settings: '${{ github.repository }}'
35
+ target: ci/gem-test
36
+
37
+ - name: Switch to SSH remotes for the Git repository
38
+ run: git-ssh-remotes
39
+
40
+ - name: Enforce version '${{ github.event.inputs.VERSION }}'
41
+ run: set-gem-version '${{ github.event.inputs.VERSION }}'
42
+
43
+ - name: Prepare the Git release commit
44
+ run: git-release-commit '${{ github.event.inputs.VERSION }}'
45
+
46
+ - name: Push the release Git commit/tag and package to the registry
47
+ run: make release
@@ -13,27 +13,24 @@ concurrency:
13
13
  jobs:
14
14
  test:
15
15
  name: 'Test the gem (Ruby ${{ matrix.ruby }}, Rails ${{ matrix.rails }})'
16
- runs-on: ubuntu-20.04
16
+ runs-on: ubuntu-22.04
17
17
  timeout-minutes: 5
18
18
  strategy:
19
19
  fail-fast: false
20
20
  matrix:
21
- ruby: [2.5, 2.6, 2.7]
22
- rails: [4.2, '5.0', 5.1, 5.2, '6.0']
23
- exclude:
24
- # Rails 4.2 is not compatible with Ruby 2.7
25
- - ruby: 2.7
26
- rails: 4.2
21
+ ruby: ['2.5', '2.7']
22
+ rails: ['5.2']
27
23
  env:
28
24
  BUNDLE_GEMFILE: 'gemfiles/rails_${{ matrix.rails }}.gemfile'
29
25
  steps:
30
- - uses: actions/checkout@v2
26
+ - uses: actions/checkout@v3
31
27
 
32
28
  - name: Install the correct Ruby version
33
29
  uses: ruby/setup-ruby@v1
34
30
  with:
35
31
  ruby-version: ${{ matrix.ruby }}
36
32
  bundler-cache: true
33
+ rubygems: '3.3.26'
37
34
 
38
35
  - name: Prepare the virtual environment
39
36
  uses: hausgold/actions/ci@master
@@ -50,7 +47,7 @@ jobs:
50
47
 
51
48
  trigger-docs:
52
49
  name: Trigger the documentation upload
53
- runs-on: ubuntu-20.04
50
+ runs-on: ubuntu-22.04
54
51
  timeout-minutes: 2
55
52
  needs: test
56
53
  if: github.ref == 'refs/heads/master'
data/.rspec CHANGED
@@ -1,3 +1,3 @@
1
+ --backtrace
2
+ --force-color
1
3
  --format documentation
2
- --color
3
- --require spec_helper
data/.rubocop.yml CHANGED
@@ -1,19 +1,25 @@
1
- require: rubocop-rspec
1
+ require:
2
+ - rubocop-rspec
3
+ - rubocop-rails
2
4
 
3
5
  Rails:
4
6
  Enabled: true
5
7
 
6
- Documentation:
8
+ Style/Documentation:
7
9
  Enabled: true
8
10
 
9
11
  AllCops:
12
+ NewCops: enable
13
+ SuggestExtensions: false
10
14
  DisplayCopNames: true
11
15
  TargetRubyVersion: 2.5
16
+ TargetRailsVersion: 5.2
12
17
  Exclude:
13
18
  - bin/**/*
14
19
  - vendor/**/*
15
20
  - build/**/*
16
21
  - gemfiles/**/*
22
+ - doc/kafka-playground/**/*
17
23
 
18
24
  Metrics/BlockLength:
19
25
  Exclude:
@@ -23,6 +29,14 @@ Metrics/BlockLength:
23
29
  - '**/*.rake'
24
30
  - doc/**/*.rb
25
31
 
32
+ # MFA is not yet enabled for our gems yet.
33
+ Gemspec/RequireMFA:
34
+ Enabled: false
35
+
36
+ # We stay with the original Ruby Style Guide recommendation.
37
+ Layout/LineLength:
38
+ Max: 80
39
+
26
40
  # Document all the things.
27
41
  Style/DocumentationMethod:
28
42
  Enabled: true
data/.simplecov CHANGED
@@ -1,3 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'simplecov-html'
4
+ require 'simplecov_json_formatter'
5
+
6
+ SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new(
7
+ [
8
+ SimpleCov::Formatter::HTMLFormatter,
9
+ SimpleCov::Formatter::JSONFormatter
10
+ ]
11
+ )
12
+
1
13
  SimpleCov.start 'test_frameworks' do
2
14
  add_filter '/vendor/bundle/'
3
15
  end
data/Appraisals CHANGED
@@ -1,26 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- appraise 'rails-4.2' do
4
- gem 'activesupport', '~> 4.2.11'
5
- gem 'railties', '~> 4.2.11'
6
- end
7
-
8
- appraise 'rails-5.0' do
9
- gem 'activesupport', '~> 5.0.7'
10
- gem 'railties', '~> 5.0.7'
11
- end
12
-
13
- appraise 'rails-5.1' do
14
- gem 'activesupport', '~> 5.1.6'
15
- gem 'railties', '~> 5.1.6'
16
- end
17
-
18
3
  appraise 'rails-5.2' do
19
- gem 'activesupport', '~> 5.2.2'
20
- gem 'railties', '~> 5.2.2'
21
- end
22
-
23
- appraise 'rails-6.0' do
24
- gem 'activesupport', '~> 6.0.0'
25
- gem 'railties', '~> 6.0.0'
4
+ gem 'activesupport', '~> 5.2.0'
5
+ gem 'railties', '~> 5.2.0'
26
6
  end
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ### next
2
+
3
+ * TODO: Replace this bullet point with an actual description of a change.
4
+
5
+ ### 1.4.0
6
+
7
+ * Added support for Gem release automation
8
+
9
+ ### 1.3.0
10
+
11
+ * Bundler >= 2.3 is from now on required as minimal version (#19)
12
+ * Dropped support for Ruby < 2.5 (#19)
13
+ * Dropped support for Rails < 5.2 (#19)
14
+ * Updated all development/runtime gems to their latest
15
+ Ruby 2.5 compatible version (#19)
16
+
1
17
  ### 1.2.0
2
18
 
3
19
  * Added a `capture_kafka_messages` helper for RSpec (#12)
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at development@hausgold.de. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/
data/Dockerfile CHANGED
@@ -2,7 +2,7 @@ FROM hausgold/ruby:2.5
2
2
  MAINTAINER Hermann Mayer <hermann.mayer@hausgold.de>
3
3
 
4
4
  # Update system gem
5
- RUN gem update --system
5
+ RUN gem update --system '3.3.26'
6
6
 
7
7
  # Install system packages and the latest bundler
8
8
  RUN apt-get update -yqqq && \
@@ -11,8 +11,7 @@ RUN apt-get update -yqqq && \
11
11
  ca-certificates \
12
12
  bash-completion inotify-tools && \
13
13
  echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen && /usr/sbin/locale-gen && \
14
- gem install bundler -v '~> 2.0' --no-document --no-prerelease && \
15
- gem install bundler -v '~> 1.0' --no-document --no-prerelease
14
+ gem install bundler -v '~> 2.3.0' --no-document --no-prerelease
16
15
 
17
16
  # Add new web user
18
17
  RUN mkdir /app && \
data/Envfile CHANGED
@@ -1,6 +1,3 @@
1
1
  LANG=en_US.UTF-8
2
2
  LANGUAGE=en_US.UTF-8
3
3
  LC_ALL=en_US.UTF-8
4
-
5
- # Just fix this, so Appraisals with Rails 4 are working fine
6
- BUNDLER_VERSION=1.17.3
data/Guardfile ADDED
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A sample Guardfile
4
+ # More info at https://github.com/guard/guard#readme
5
+
6
+ ## Uncomment and set this to only include directories you want to watch
7
+ (directories %w[lib spec]).select do |d|
8
+ if Dir.exist?(d)
9
+ d
10
+ else
11
+ UI.warning("Directory #{d} does not exist")
12
+ end
13
+ end
14
+
15
+ ## Note: if you are using the `directories` clause above and you are not
16
+ ## watching the project directory ('.'), then you will want to move
17
+ ## the Guardfile to a watched dir and symlink it back, e.g.
18
+ #
19
+ # $ mkdir config
20
+ # $ mv Guardfile config/
21
+ # $ ln -s config/Guardfile .
22
+ #
23
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
24
+
25
+ # NOTE: The cmd option is now required due to the increasing number of ways
26
+ # rspec may be run, below are examples of the most common uses.
27
+ # * bundler: 'bundle exec rspec'
28
+ # * bundler binstubs: 'bin/rspec'
29
+ # * spring: 'bin/rspec' (This will use spring if running and you have
30
+ # installed the spring binstubs per the docs)
31
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
32
+ # * 'just' rspec: 'rspec'
33
+
34
+ guard :rspec, cmd: 'bundle exec rspec' do
35
+ watch('spec/spec_helper.rb') { 'spec' }
36
+ watch(%r{^lib/rimless.rb}) { 'spec' }
37
+ watch(%r{^spec/.+_spec\.rb$})
38
+ watch(%r{^lib/rimless/([^\\]+)\.rb$}) do |m|
39
+ "spec/rimless/#{m[1]}_spec.rb"
40
+ end
41
+ watch(%r{^lib/rimless/([^\\]+)/(.*)\.rb$}) do |m|
42
+ "spec/rimless/#{m[1]}/#{m[2]}_spec.rb"
43
+ end
44
+ end
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2019 HAUSGOLD | talocasa GmbH
3
+ Copyright (c) 2023 HAUSGOLD | talocasa GmbH
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/Makefile CHANGED
@@ -9,6 +9,7 @@ SHELL := bash
9
9
  # Environment switches
10
10
  MAKE_ENV ?= docker
11
11
  COMPOSE_RUN_SHELL_FLAGS ?= --rm
12
+ BASH_RUN_SHELL_FLAGS ?=
12
13
 
13
14
  # Directories
14
15
  VENDOR_DIR ?= vendor/bundle
@@ -29,7 +30,9 @@ XARGS ?= xargs
29
30
  APPRAISAL ?= appraisal
30
31
  BUNDLE ?= bundle
31
32
  GEM ?= gem
33
+ GUARD ?= guard
32
34
  RAKE ?= rake
35
+ RSPEC ?= rspec
33
36
  RUBOCOP ?= rubocop
34
37
  YARD ?= yard
35
38
 
@@ -45,7 +48,8 @@ define run-shell
45
48
  $(COMPOSE) run $(COMPOSE_RUN_SHELL_FLAGS) \
46
49
  -e LANG=en_US.UTF-8 -e LANGUAGE=en_US.UTF-8 -e LC_ALL=en_US.UTF-8 \
47
50
  -e HOME=/home/web -e BUNDLE_APP_CONFIG=/app/.bundle \
48
- -u `$(ID) -u` test bash -c 'sleep 0.1; echo; $(1)'
51
+ -u `$(ID) -u` test \
52
+ bash $(BASH_RUN_SHELL_FLAGS) -c 'sleep 0.1; echo; $(1)'
49
53
  endef
50
54
  else ifeq ($(MAKE_ENV),baremetal)
51
55
  define run-shell
@@ -62,6 +66,7 @@ all:
62
66
  #
63
67
  # test Run the whole test suite
64
68
  # test-style Test the code styles
69
+ # watch Watch for code changes and rerun the test suite
65
70
  #
66
71
  # docs Generate the Ruby documentation of the library
67
72
  # stats Print the code statistics (library and test suite)
@@ -71,19 +76,25 @@ all:
71
76
  # shell Run an interactive shell on the container
72
77
  # shell-irb Run an interactive IRB shell on the container
73
78
 
79
+ .interactive:
80
+ @$(eval BASH_RUN_SHELL_FLAGS = --login)
81
+
74
82
  install:
75
83
  # Install the dependencies
76
84
  @$(MKDIR) -p $(VENDOR_DIR)
77
85
  @$(call run-shell,$(BUNDLE) check || $(BUNDLE) install --path $(VENDOR_DIR))
78
- @$(call run-shell,GEM_HOME=vendor/bundle/ruby/$${RUBY_MAJOR}.0 \
79
- $(GEM) install bundler -v "~> 1.0")
80
86
  @$(call run-shell,$(BUNDLE) exec $(APPRAISAL) install)
81
87
 
82
88
  update:
83
89
  # Install the dependencies
84
90
  @$(MKDIR) -p $(VENDOR_DIR)
91
+ @$(call run-shell,$(BUNDLE) update)
85
92
  @$(call run-shell,$(BUNDLE) exec $(APPRAISAL) update)
86
93
 
94
+ watch: install .interactive
95
+ # Watch for code changes and rerun the test suite
96
+ @$(call run-shell,$(BUNDLE) exec $(GUARD))
97
+
87
98
  test: \
88
99
  test-specs \
89
100
  test-style
@@ -95,7 +106,7 @@ test-specs:
95
106
  $(TEST_GEMFILES): GEMFILE=$(@:test-%=%)
96
107
  $(TEST_GEMFILES):
97
108
  # Run the whole test suite ($(GEMFILE))
98
- @$(call run-shell,$(BUNDLE) exec $(APPRAISAL) $(GEMFILE) $(RAKE))
109
+ @$(call run-shell,$(BUNDLE) exec $(APPRAISAL) $(GEMFILE) $(RSPEC))
99
110
 
100
111
  test-style: \
101
112
  test-style-ruby
@@ -110,8 +121,8 @@ clean:
110
121
  @$(RM) -rf $(VENDOR_DIR)/Gemfile.lock
111
122
  @$(RM) -rf $(GEMFILES_DIR)/vendor
112
123
  @$(RM) -rf $(GEMFILES_DIR)/*.lock
113
- @$(RM) -rf pkg
114
- @$(RM) -rf coverage
124
+ @$(RM) -rf .bundle .yardoc coverage pkg Gemfile.lock doc/api \
125
+ .rspec_status
115
126
 
116
127
  clean-containers:
117
128
  # Clean running containers
@@ -122,7 +133,7 @@ endif
122
133
  clean-images:
123
134
  # Clean build images
124
135
  ifeq ($(MAKE_ENV),docker)
125
- @-$(DOCKER) images | $(GREP) rimless \
136
+ @-$(DOCKER) images | $(GREP) $(shell basename "`pwd`") \
126
137
  | $(AWK) '{ print $$3 }' \
127
138
  | $(XARGS) -rn1 $(DOCKER) rmi -f
128
139
  endif
data/README.md CHANGED
@@ -32,7 +32,9 @@ opinionated framework which sets up solid conventions for producing messages.
32
32
  - [Handling of schemaless deep blobs](#handling-of-schemaless-deep-blobs)
33
33
  - [Writing tests for your messages](#writing-tests-for-your-messages)
34
34
  - [Development](#development)
35
+ - [Code of Conduct](#code-of-conduct)
35
36
  - [Contributing](#contributing)
37
+ - [Releasing](#releasing)
36
38
 
37
39
  ## Installation
38
40
 
@@ -587,17 +589,28 @@ end
587
589
 
588
590
  ## Development
589
591
 
590
- After checking out the repo, run `bin/setup` to install dependencies. Then, run
591
- `bundle exec rake spec` to run the tests. You can also run `bin/console` for an
592
+ After checking out the repo, run `make install` to install dependencies. Then,
593
+ run `make test` to run the tests. You can also run `make shell-irb` for an
592
594
  interactive prompt that will allow you to experiment.
593
595
 
594
- To install this gem onto your local machine, run `bundle exec rake install`. To
595
- release a new version, update the version number in `version.rb`, and then run
596
- `bundle exec rake release`, which will create a git tag for the version, push
597
- git commits and tags, and push the `.gem` file to
598
- [rubygems.org](https://rubygems.org).
596
+ ## Code of Conduct
597
+
598
+ Everyone interacting in the project codebase, issue tracker, chat
599
+ rooms and mailing lists is expected to follow the [code of
600
+ conduct](./CODE_OF_CONDUCT.md).
599
601
 
600
602
  ## Contributing
601
603
 
602
604
  Bug reports and pull requests are welcome on GitHub at
603
- https://github.com/hausgold/rimless.
605
+ https://github.com/hausgold/rimless. Make sure that every pull request adds
606
+ a bullet point to the [changelog](./CHANGELOG.md) file with a reference to the
607
+ actual pull request.
608
+
609
+ ## Releasing
610
+
611
+ The release process of this Gem is fully automated. You just need to open the
612
+ Github Actions [Release
613
+ Workflow](https://github.com/hausgold/rimless/actions/workflows/release.yml)
614
+ and trigger a new run via the **Run workflow** button. Insert the new version
615
+ number (check the [changelog](./CHANGELOG.md) first for the latest release) and
616
+ you're done.
data/Rakefile CHANGED
@@ -2,78 +2,23 @@
2
2
 
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
- require 'rails/code_statistics'
6
- require 'pp'
5
+ require 'countless/rake_tasks'
7
6
 
8
7
  RSpec::Core::RakeTask.new(:spec)
9
8
 
10
9
  task default: :spec
11
10
 
12
- # Load some railties tasks
13
- load 'rails/tasks/statistics.rake'
14
- load 'rails/tasks/annotations.rake'
15
-
16
- # Clear the default statistics directory constant
17
- #
18
- # rubocop:disable Style/MutableConstant because we define it
19
- Object.send(:remove_const, :STATS_DIRECTORIES)
20
- ::STATS_DIRECTORIES = []
21
- # rubocop:enable Style/MutableConstant
22
-
23
- # Monkey patch the Rails +CodeStatistics+ class to support configurable
24
- # patterns per path. This is reuqired to support top-level only file matches.
25
- class CodeStatistics
26
- DEFAULT_PATTERN = /^(?!\.).*?\.(rb|js|coffee|rake)$/.freeze
27
-
28
- # Pass the possible +pattern+ argument down to the
29
- # +calculate_directory_statistics+ method call.
30
- def calculate_statistics
31
- Hash[@pairs.map do |pair|
32
- [pair.first, calculate_directory_statistics(*pair[1..-1])]
33
- end]
34
- end
35
-
36
- # Match the pattern against the individual file name and the relative file
37
- # path. This allows top-level only matches.
38
- def calculate_directory_statistics(directory, pattern = DEFAULT_PATTERN)
39
- stats = CodeStatisticsCalculator.new
40
-
41
- Dir.foreach(directory) do |file_name|
42
- path = "#{directory}/#{file_name}"
43
-
44
- if File.directory?(path) && (/^\./ !~ file_name)
45
- stats.add(calculate_directory_statistics(path, pattern))
46
- elsif file_name =~ pattern || path =~ pattern
47
- stats.add_by_file_path(path)
48
- end
49
- end
50
-
51
- stats
52
- end
53
- end
54
-
55
11
  # Configure all code statistics directories
56
- vendors = [
57
- [:unshift, 'Top-levels', 'lib', %r{lib(/rimless)?/[^/]+\.rb$}],
58
- [:unshift, 'Top-levels specs', 'spec',
59
- %r{spec/rimless(_spec\.rb|/[^/]+\.rb$)}],
60
-
61
- [:unshift, 'RSpec matchers', 'lib/rimless/rspec'],
62
- [:unshift, 'RSpec matchers specs', 'spec/rimless/rspec'],
63
-
64
- [:unshift, 'Rake Tasks', 'lib/rimless/tasks'],
65
- [:unshift, 'Karafka Extensions', 'lib/rimless/karafka']
66
- ].reverse
67
-
68
- vendors.each do |method, type, dir, pattern|
69
- ::STATS_DIRECTORIES.send(method, [type, dir, pattern].compact)
70
- ::CodeStatistics::TEST_TYPES << type if type.include? 'specs'
71
- end
72
-
73
- # Setup annotations
74
- ENV['SOURCE_ANNOTATION_DIRECTORIES'] = 'spec,doc'
75
-
76
- desc 'Enumerate all annotations'
77
- task :notes do
78
- SourceAnnotationExtractor.enumerate '@?OPTIMIZE|@?FIXME|@?TODO', tag: true
12
+ Countless.configure do |config|
13
+ config.stats_base_directories = [
14
+ { name: 'Top-levels', dir: 'lib',
15
+ pattern: %r{/lib(/rimless)?/[^/]+\.rb$} },
16
+ { name: 'Top-levels specs', test: true, dir: 'spec',
17
+ pattern: %r{/spec(/rimless)?/[^/]+_spec\.rb$} },
18
+ { name: 'RSpec matchers', pattern: 'lib/rimless/rspec/**/*.rb' },
19
+ { name: 'RSpec matchers specs', test: true,
20
+ pattern: 'spec/rimless/rspec/**/*_spec.rb' },
21
+ { name: 'Rake Tasks', pattern: 'lib/rimless/tasks/**/*' },
22
+ { name: 'Karafka Extensions', pattern: 'lib/rimless/karafka/**/*.rb' }
23
+ ]
79
24
  end
@@ -0,0 +1,2 @@
1
+ log
2
+ vendor/bundle
@@ -0,0 +1,41 @@
1
+ FROM hausgold/ruby:2.5
2
+ MAINTAINER Hermann Mayer <hermann.mayer@hausgold.de>
3
+
4
+ # Update system gem
5
+ RUN gem update --system
6
+
7
+ # Add backports repository
8
+ RUN echo 'deb http://ftp.debian.org/debian buster-backports main' \
9
+ >> /etc/apt/sources.list
10
+
11
+ # Install nodejs 16
12
+ RUN curl -sL https://deb.nodesource.com/setup_16.x | bash -
13
+
14
+ # Install system packages and the ruby bundless
15
+ RUN apt-get update -yqqq && \
16
+ apt-get install -y \
17
+ build-essential nodejs locales sudo vim \
18
+ ca-certificates jq curl cmake \
19
+ bash-completion inotify-tools && \
20
+ echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen && /usr/sbin/locale-gen && \
21
+ gem install bundler --no-document --no-prerelease
22
+
23
+ # Install kcat (formerly known as kafkacat)
24
+ RUN curl -sL https://github.com/edenhill/kcat/archive/refs/tags/1.7.0.tar.gz \
25
+ | tar xfvz - -C /tmp && cd /tmp/kcat-* && ./bootstrap.sh && \
26
+ mv kcat /usr/local/bin && cd / && rm -rf /tmp/kcat-*
27
+
28
+ # Add new app user
29
+ RUN mkdir /app && \
30
+ adduser app --home /home/app --shell /bin/bash \
31
+ --disabled-password --gecos ""
32
+ ADD config/docker/shell/ /home/app/
33
+ RUN chown app:app -R /app /home/app /usr/local/bundle && \
34
+ mkdir -p /home/app/.ssh && \
35
+ sudo -HEu app bash -c 'bundle config set system "true"'
36
+
37
+ # Set the root password and grant root access to app
38
+ RUN echo 'root:root' | chpasswd
39
+ RUN echo 'app ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
40
+
41
+ WORKDIR /app