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
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,8 @@ jobs:
ruby-version: "3.4"
bundler-cache: true

- name: Check appraisal lockfiles
run: ruby bin/check-appraisal-lockfiles

- name: Check Ruby syntax
run: ruby -c lib/**/*.rb
43 changes: 43 additions & 0 deletions bin/check-appraisal-lockfiles
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/usr/bin/env ruby
# frozen_string_literal: true

require_relative "../lib/fixture_kit/version"

root = File.expand_path("..", __dir__)
expected_version = FixtureKit::VERSION
gemfiles = Dir.glob(File.join(root, "gemfiles", "*.gemfile")).sort
errors = []

if gemfiles.empty?
errors << "No appraisal gemfiles found in gemfiles/*.gemfile."
end

gemfiles.each do |gemfile|
lockfile = "#{gemfile}.lock"
relative_lockfile = lockfile.delete_prefix("#{root}/")

unless File.exist?(lockfile)
errors << "#{relative_lockfile} is missing."
next
end

versions = File.read(lockfile).scan(/^\s*fixture_kit \(([^)]+)\)$/).flatten.uniq

if versions.empty?
errors << "#{relative_lockfile} does not contain a fixture_kit version entry."
next
end

next if versions == [expected_version]

errors << "#{relative_lockfile} has fixture_kit version(s) #{versions.join(", ")}, expected #{expected_version}."
end

if errors.any?
warn "Appraisal lockfile check failed:"
errors.each { |error| warn "- #{error}" }
warn "Run `bundle exec appraisal install` and commit updated gemfiles/*.gemfile.lock files."
exit 1
end

puts "Appraisal lockfile check passed for #{gemfiles.size} gemfile(s)."