diff --git a/Gemfile.lock b/Gemfile.lock index 24b5b28..0f7fa60 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,9 +1,9 @@ PATH remote: . specs: - code_ownership (1.29.1) + code_ownership (1.29.2) code_teams (~> 1.0) - parse_packwerk + packs sorbet-runtime GEM @@ -15,7 +15,7 @@ GEM coderay (1.1.3) diff-lcs (1.4.4) method_source (1.0.0) - parse_packwerk (0.14.0) + packs (0.0.2) sorbet-runtime parser (3.1.2.0) ast (~> 2.4.1) diff --git a/code_ownership.gemspec b/code_ownership.gemspec index 5a1c55e..5755328 100644 --- a/code_ownership.gemspec +++ b/code_ownership.gemspec @@ -1,6 +1,6 @@ Gem::Specification.new do |spec| spec.name = "code_ownership" - spec.version = '1.29.1' + spec.version = '1.29.2' spec.authors = ['Gusto Engineers'] spec.email = ['dev@gusto.com'] spec.summary = 'A gem to help engineering teams declare ownership of code' @@ -27,7 +27,7 @@ Gem::Specification.new do |spec| spec.require_paths = ['lib'] spec.add_dependency 'code_teams', '~> 1.0' - spec.add_dependency 'parse_packwerk' + spec.add_dependency 'packs' spec.add_dependency 'sorbet-runtime' spec.add_development_dependency 'rake' diff --git a/lib/code_ownership.rb b/lib/code_ownership.rb index e68f67c..457c6db 100644 --- a/lib/code_ownership.rb +++ b/lib/code_ownership.rb @@ -6,7 +6,7 @@ require 'code_teams' require 'sorbet-runtime' require 'json' -require 'parse_packwerk' +require 'packs' require 'code_ownership/cli' require 'code_ownership/private' @@ -140,7 +140,7 @@ def for_class(klass) end end - sig { params(package: ParsePackwerk::Package).returns(T.nilable(::CodeTeams::Team)) } + sig { params(package: Packs::Pack).returns(T.nilable(::CodeTeams::Team)) } def for_package(package) Private::OwnershipMappers::PackageOwnership.new.owner_for_package(package) end diff --git a/lib/code_ownership/private/ownership_mappers/package_ownership.rb b/lib/code_ownership/private/ownership_mappers/package_ownership.rb index 18a61bb..3690f8f 100644 --- a/lib/code_ownership/private/ownership_mappers/package_ownership.rb +++ b/lib/code_ownership/private/ownership_mappers/package_ownership.rb @@ -9,14 +9,14 @@ class PackageOwnership extend T::Sig include Interface - @@package_yml_cache = T.let({}, T::Hash[String, T.nilable(ParsePackwerk::Package)]) # rubocop:disable Style/ClassVars + @@package_yml_cache = T.let({}, T::Hash[String, T.nilable(Packs::Pack)]) # rubocop:disable Style/ClassVars sig do override.params(file: String). returns(T.nilable(::CodeTeams::Team)) end def map_file_to_owner(file) - package = ParsePackwerk.package_from_path(file) + package = Packs.for_file(file) return nil if package.nil? @@ -29,11 +29,11 @@ def map_file_to_owner(file) returns(T::Hash[String, T.nilable(::CodeTeams::Team)]) end def map_files_to_owners(files) # rubocop:disable Lint/UnusedMethodArgument - ParsePackwerk.all.each_with_object({}) do |package, res| + Packs.all.each_with_object({}) do |package, res| owner = owner_for_package(package) next if owner.nil? - glob = package.directory.join('**/**').to_s + glob = package.relative_path.join('**/**').to_s Dir.glob(glob).each do |path| res[path] = owner end @@ -52,11 +52,11 @@ def map_files_to_owners(files) # rubocop:disable Lint/UnusedMethodArgument override.returns(T::Hash[String, T.nilable(::CodeTeams::Team)]) end def codeowners_lines_to_owners - ParsePackwerk.all.each_with_object({}) do |package, res| + Packs.all.each_with_object({}) do |package, res| owner = owner_for_package(package) next if owner.nil? - res[package.directory.join('**/**').to_s] = owner + res[package.relative_path.join('**/**').to_s] = owner end end @@ -65,7 +65,7 @@ def description 'Owner metadata key in package.yml' end - sig { params(package: ParsePackwerk::Package).returns(T.nilable(CodeTeams::Team)) } + sig { params(package: Packs::Pack).returns(T.nilable(CodeTeams::Team)) } def owner_for_package(package) raw_owner_value = package.metadata['owner'] return nil if !raw_owner_value diff --git a/sorbet/rbi/gems/packs@0.0.2.rbi b/sorbet/rbi/gems/packs@0.0.2.rbi new file mode 100644 index 0000000..d82e889 --- /dev/null +++ b/sorbet/rbi/gems/packs@0.0.2.rbi @@ -0,0 +1,80 @@ +# typed: true + +# DO NOT EDIT MANUALLY +# This is an autogenerated file for types exported from the `packs` gem. +# Please instead update this file by running `bin/tapioca gem packs`. + +module Packs + class << self + sig { returns(T::Array[::Packs::Pack]) } + def all; end + + sig { void } + def bust_cache!; end + + sig { returns(::Packs::Configuration) } + def config; end + + sig { params(blk: T.proc.params(arg0: ::Packs::Configuration).void).void } + def configure(&blk); end + + sig { params(name: ::String).returns(T.nilable(::Packs::Pack)) } + def find(name); end + + sig { params(file_path: T.any(::Pathname, ::String)).returns(T.nilable(::Packs::Pack)) } + def for_file(file_path); end + + private + + sig { returns(T::Array[::Pathname]) } + def package_glob_patterns; end + + sig { returns(T::Hash[::String, ::Packs::Pack]) } + def packs_by_name; end + end +end + +class Packs::Configuration + sig { void } + def initialize; end + + sig { returns(T::Array[::Pathname]) } + def roots; end + + sig { params(roots: T::Array[::String]).void } + def roots=(roots); end +end + +Packs::PACKAGE_FILE = T.let(T.unsafe(nil), String) + +class Packs::Pack < ::T::Struct + const :name, ::String + const :path, ::Pathname + const :raw_hash, T::Hash[T.untyped, T.untyped] + const :relative_path, ::Pathname + + sig { returns(::String) } + def last_name; end + + sig { returns(T::Hash[T.untyped, T.untyped]) } + def metadata; end + + sig { returns(::Pathname) } + def yml; end + + class << self + sig { params(package_yml_absolute_path: ::Pathname).returns(::Packs::Pack) } + def from(package_yml_absolute_path); end + + def inherited(s); end + end +end + +module Packs::Private + class << self + sig { returns(::Pathname) } + def root; end + end +end + +Packs::ROOTS = T.let(T.unsafe(nil), Array) diff --git a/sorbet/rbi/gems/parse_packwerk@0.12.0.rbi b/sorbet/rbi/gems/parse_packwerk@0.12.0.rbi deleted file mode 100644 index af8d82f..0000000 --- a/sorbet/rbi/gems/parse_packwerk@0.12.0.rbi +++ /dev/null @@ -1,146 +0,0 @@ -# typed: true - -# DO NOT EDIT MANUALLY -# This is an autogenerated file for types exported from the `parse_packwerk` gem. -# Please instead update this file by running `bin/tapioca gem parse_packwerk`. - -module ParsePackwerk - class << self - sig { returns(T::Array[::ParsePackwerk::Package]) } - def all; end - - sig { void } - def bust_cache!; end - - sig { params(name: ::String).returns(T.nilable(::ParsePackwerk::Package)) } - def find(name); end - - sig { params(file_path: T.any(::Pathname, ::String)).returns(T.nilable(::ParsePackwerk::Package)) } - def package_from_path(file_path); end - - sig { params(package: ::ParsePackwerk::Package).void } - def write_package_yml!(package); end - - sig { returns(::ParsePackwerk::Configuration) } - def yml; end - - private - - sig { returns(T::Hash[::String, ::ParsePackwerk::Package]) } - def packages_by_name; end - end -end - -class ParsePackwerk::Configuration < ::T::Struct - const :exclude, T::Array[::String] - const :package_paths, T::Array[::String] - - class << self - sig { params(config_hash: T::Hash[T.untyped, T.untyped]).returns(T::Array[::String]) } - def excludes(config_hash); end - - sig { returns(::ParsePackwerk::Configuration) } - def fetch; end - - def inherited(s); end - - sig { params(config_hash: T::Hash[T.untyped, T.untyped]).returns(T::Array[::String]) } - def package_paths(config_hash); end - end -end - -ParsePackwerk::DEFAULT_EXCLUDE_GLOBS = T.let(T.unsafe(nil), Array) -ParsePackwerk::DEFAULT_PACKAGE_PATHS = T.let(T.unsafe(nil), Array) -ParsePackwerk::DEPENDENCIES = T.let(T.unsafe(nil), String) -ParsePackwerk::DEPRECATED_REFERENCES_YML_NAME = T.let(T.unsafe(nil), String) - -class ParsePackwerk::DeprecatedReferences < ::T::Struct - const :pathname, ::Pathname - const :violations, T::Array[::ParsePackwerk::Violation] - - class << self - sig { params(package: ::ParsePackwerk::Package).returns(::ParsePackwerk::DeprecatedReferences) } - def for(package); end - - sig { params(pathname: ::Pathname).returns(::ParsePackwerk::DeprecatedReferences) } - def from(pathname); end - - def inherited(s); end - end -end - -ParsePackwerk::ENFORCE_DEPENDENCIES = T.let(T.unsafe(nil), String) -ParsePackwerk::ENFORCE_PRIVACY = T.let(T.unsafe(nil), String) -ParsePackwerk::METADATA = T.let(T.unsafe(nil), String) -ParsePackwerk::MetadataYmlType = T.type_alias { T::Hash[T.untyped, T.untyped] } - -class ParsePackwerk::MissingConfiguration < ::StandardError - sig { params(packwerk_file_name: ::Pathname).void } - def initialize(packwerk_file_name); end -end - -ParsePackwerk::PACKAGE_YML_NAME = T.let(T.unsafe(nil), String) -ParsePackwerk::PACKWERK_YML_NAME = T.let(T.unsafe(nil), String) - -class ParsePackwerk::Package < ::T::Struct - const :dependencies, T::Array[::String] - const :enforce_dependencies, T::Boolean - const :enforce_privacy, T::Boolean - const :metadata, T::Hash[T.untyped, T.untyped] - const :name, ::String - - sig { returns(::Pathname) } - def directory; end - - sig { returns(T::Boolean) } - def enforces_dependencies?; end - - sig { returns(T::Boolean) } - def enforces_privacy?; end - - sig { returns(::Pathname) } - def yml; end - - class << self - sig { params(pathname: ::Pathname).returns(::ParsePackwerk::Package) } - def from(pathname); end - - def inherited(s); end - end -end - -class ParsePackwerk::PackageSet - class << self - sig do - params( - package_pathspec: T::Array[::String], - exclude_pathspec: T::Array[::String] - ).returns(T::Array[::ParsePackwerk::Package]) - end - def from(package_pathspec:, exclude_pathspec:); end - - private - - sig { params(globs: T::Array[::String], path: ::Pathname).returns(T::Boolean) } - def exclude_path?(globs, path); end - end -end - -ParsePackwerk::ROOT_PACKAGE_NAME = T.let(T.unsafe(nil), String) - -class ParsePackwerk::Violation < ::T::Struct - const :class_name, ::String - const :files, T::Array[::String] - const :to_package_name, ::String - const :type, ::String - - sig { returns(T::Boolean) } - def dependency?; end - - sig { returns(T::Boolean) } - def privacy?; end - - class << self - def inherited(s); end - end -end diff --git a/spec/lib/code_ownership_spec.rb b/spec/lib/code_ownership_spec.rb index da12c94..79bf417 100644 --- a/spec/lib/code_ownership_spec.rb +++ b/spec/lib/code_ownership_spec.rb @@ -762,7 +762,7 @@ def prevent_false_positive! before { create_non_empty_application } it 'returns the right team' do - team = CodeOwnership.for_package(ParsePackwerk.find('packs/my_other_package')) + team = CodeOwnership.for_package(Packs.find('packs/my_other_package')) expect(team.name).to eq 'Bar' end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 19052d3..788449c 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -31,7 +31,7 @@ config.before do CodeOwnership.bust_caches! CodeTeams.bust_caches! - ParsePackwerk.bust_cache! + Packs.bust_cache! allow(CodeTeams::Plugin).to receive(:registry).and_return({}) end end