Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
- [#52](https://github.com/dblock/ruby-gem-release/pull/52): Support configured contribution placeholders and complete category templates in Keep a Changelog releases - [@dblock](https://github.com/dblock).
- [#53](https://github.com/dblock/ruby-gem-release/pull/53): Add Markdown section replacement and text substitution for project-specific release documentation - [@dblock](https://github.com/dblock).
- [#54](https://github.com/dblock/ruby-gem-release/pull/54): Add whole-project or selected fixture file copying to the optional release spec helper - [@dblock](https://github.com/dblock).
- [#55](https://github.com/dblock/ruby-gem-release/pull/55): Run full and integration specs concurrently while retaining isolated release processes and combined coverage - [@dblock](https://github.com/dblock).
- Your contribution here.

## 0.5.1 (2026/11/10)
Expand Down
2 changes: 2 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ Run focused source tests with `bundle exec rake spec:unit`, which excludes `spec

Consumer integration specs live in `spec/integration/`. Keep a small real-process matrix covering both Actions interfaces' success, failure/recovery, empty-release rejection, custom registry, and credential propagation. Preserve the provider-neutral consumers across separate processes: they verify environment transport, private state, and installed-library loading. Stub orchestration boundaries in focused specs, not these smoke tests. Existing domain specs cover detailed format, version, timezone, Git, and authentication edge cases without repeating whole release pipelines.

`bundle exec rake spec` and `spec:integration` run independent spec files concurrently with `parallel_tests`; coverage reports are generated once, after all workers finish. Workers default to the available processors. Set `PARALLEL_TEST_PROCESSORS=2` to limit workers, or use `bundle exec rake spec:serial` for a serial full-suite run. `SPEC=spec/path_spec.rb` selects files and `SPEC_OPTS='--seed 12345'` passes RSpec options.

Profile integration examples with `bundle exec rake spec:integration SPEC_OPTS='--profile 15 --seed 12345'`. Compare before and after on the same machine and Ruby, including subprocess counts when changing the harness; do not enforce environment-dependent timing thresholds.

The release integration workflow builds and installs the actual gem, then exercises both interfaces' callback commands with real local Git pushes and isolated RubyGems and GitHub publication boundaries. Tests verify release and next development iteration commits, artifact identity, and publication ordering without publishing packages or creating hosted releases. They do not execute live Actions authentication or artifact uploading. Preserve authentication selection and failure-aware artifact upload when changing either interface. Validate workflow examples with `actionlint .github/workflows/*.yml examples/.github/workflows/*.yml`.
Expand Down
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ gem 'danger-changelog', require: false
gem 'danger-pr-comment', require: false
# Danger 9.6.1 does not load with git 6.
gem 'git', '< 6', require: false
gem 'parallel_tests', require: false
gem 'rake'
gem 'rspec'
gem 'rubocop'
Expand Down
21 changes: 17 additions & 4 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,26 @@ RubyGemRelease::Workflow::RubyGem.new(
changelog: RubyGemRelease::Changelog::Intridea.new
).install_tasks

RSpec::Core::RakeTask.new(:spec)
{
spec: 'spec/**/*_spec.rb',
'spec:integration' => 'spec/integration/**/*_spec.rb'
}.each do |name, pattern|
desc "Run #{name} in parallel"
task name do
FileUtils.rm_f('coverage/.resultset.json')
files = Dir.glob(ENV.fetch('SPEC', pattern))
abort "No spec files match #{ENV.fetch('SPEC', pattern).inspect}" if files.empty?

sh 'bundle', 'exec', 'parallel_rspec', '--serialize-stdout', '--test-options', ENV.fetch('SPEC_OPTS', ''), *files
ensure
require_relative 'spec/coverage_setup'
SimpleCov.collate(['coverage/.resultset.json']) if File.file?('coverage/.resultset.json')
end
end
RSpec::Core::RakeTask.new('spec:serial')
RSpec::Core::RakeTask.new('spec:unit') do |task|
task.exclude_pattern = 'spec/integration/**/*_spec.rb'
end
RSpec::Core::RakeTask.new('spec:integration') do |task|
task.pattern = 'spec/integration/**/*_spec.rb'
end
RuboCop::RakeTask.new

task default: %i[spec rubocop]
12 changes: 12 additions & 0 deletions spec/coverage_setup.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# frozen_string_literal: true

require 'simplecov'
require 'simplecov-lcov'

SimpleCov::Formatter::LcovFormatter.config.report_with_single_file = true
SimpleCov::Formatter::LcovFormatter.config.single_report_path = 'coverage/lcov.info'
coverage_formatters = [
SimpleCov::Formatter::HTMLFormatter,
SimpleCov::Formatter::LcovFormatter
]
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new(coverage_formatters)
Loading
Loading