Skip to content

Commit 130f20d

Browse files
author
Alex Evanczuk
authored
Migrate from bigrails-teams to code_teams (#12)
* Use CodeTeams instead of Teams * add major version constarint on code_teams * fix other uses of bigrails
1 parent 610d408 commit 130f20d

File tree

16 files changed

+88
-88
lines changed

16 files changed

+88
-88
lines changed

Gemfile.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
PATH
22
remote: .
33
specs:
4-
code_ownership (1.27.1)
5-
bigrails-teams
4+
code_ownership (1.28.0)
5+
code_teams (~> 1.0)
66
parse_packwerk
77
sorbet-runtime
88

99
GEM
1010
remote: https://rubygems.org/
1111
specs:
1212
ast (2.4.2)
13-
bigrails-teams (0.1.1)
13+
code_teams (1.0.0)
1414
sorbet-runtime
1515
coderay (1.1.3)
1616
diff-lcs (1.4.4)
1717
method_source (1.0.0)
18-
parse_packwerk (0.10.0)
18+
parse_packwerk (0.10.1)
1919
sorbet-runtime
2020
parser (3.1.2.0)
2121
ast (~> 2.4.1)

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ metadata:
1919
```
2020
2121
### Glob-Based Ownership
22-
In your team's configured YML (see [`bigrails-teams`](https://github.com/rubyatscale/bigrails-teams)), you can set `owned_globs` to be a glob of files your team owns. For example, in `my_team.yml`:
22+
In your team's configured YML (see [`code_teams`](https://github.com/rubyatscale/code_teams)), you can set `owned_globs` to be a glob of files your team owns. For example, in `my_team.yml`:
2323
```yml
2424
name: My Team
2525
owned_globs:
@@ -33,7 +33,7 @@ File annotations are a last resort if there is no clear home for your code. File
3333
```
3434
## Usage: Reading CodeOwnership
3535
### `for_file`
36-
`CodeOwnership.for_file`, given a relative path to a file returns a `Teams::Team` if there is a team that owns the file, `nil` otherwise.
36+
`CodeOwnership.for_file`, given a relative path to a file returns a `CodeTeams::Team` if there is a team that owns the file, `nil` otherwise.
3737

3838
```ruby
3939
CodeOwnership.for_file('path/to/file/relative/to/application/root.rb')
@@ -44,7 +44,7 @@ Contributor note: If you are making updates to this method or the methods gettin
4444
See `code_ownership_spec.rb` for examples.
4545

4646
### `for_backtrace`
47-
`CodeOwnership.for_backtrace` can be given a backtrace and will either return `nil`, or a `Teams::Team`.
47+
`CodeOwnership.for_backtrace` can be given a backtrace and will either return `nil`, or a `CodeTeams::Team`.
4848

4949
```ruby
5050
CodeOwnership.for_backtrace(exception.backtrace)
@@ -56,7 +56,7 @@ See `code_ownership_spec.rb` for an example.
5656

5757
### `for_class`
5858

59-
`CodeOwnership.for_class` can be given a class and will either return `nil`, or a `Teams::Team`.
59+
`CodeOwnership.for_class` can be given a class and will either return `nil`, or a `CodeTeams::Team`.
6060

6161
```ruby
6262
CodeOwnership.for_class(MyClass.name)
@@ -73,7 +73,7 @@ A `CODEOWNERS` file defines who owns specific files or paths in a repository. Wh
7373
## Proper Configuration & Validation
7474
CodeOwnership comes with a validation function to ensure the following things are true:
7575
1) Only one mechanism is defining file ownership. That is -- you can't have a file annotation on a file owned via package-based or glob-based ownership. This helps make ownership behavior more clear by avoiding concerns about precedence.
76-
2) All teams referenced as an owner for any file or package is a valid team (i.e. it's in the list of `Teams.all`).
76+
2) All teams referenced as an owner for any file or package is a valid team (i.e. it's in the list of `CodeTeams.all`).
7777
3) All files have ownership. You can specify in `unowned_globs` to represent a TODO list of files to add ownership to.
7878
3) The `.github/CODEOWNERS` file is up to date. This is automatically corrected and staged unless specified otherwise with `bin/codeownership validate --skip-autocorrect --skip-stage`. You can turn this validation off by setting `skip_codeowners_validation: true` in `code_ownership.yml`.
7979

code_ownership.gemspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Gem::Specification.new do |spec|
22
spec.name = "code_ownership"
3-
spec.version = '1.27.1'
3+
spec.version = '1.28.0'
44
spec.authors = ['Gusto Engineers']
55
spec.email = ['[email protected]']
66
spec.summary = 'A gem to help engineering teams declare ownership of code'
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
2626
spec.files = Dir['README.md', 'sorbet/**/*', 'lib/**/*', 'bin/**/*']
2727
spec.require_paths = ['lib']
2828

29-
spec.add_dependency 'bigrails-teams'
29+
spec.add_dependency 'code_teams', '~> 1.0'
3030
spec.add_dependency 'parse_packwerk'
3131
spec.add_dependency 'sorbet-runtime'
3232

lib/code_ownership.rb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# typed: strict
44

55
require 'set'
6-
require 'teams'
6+
require 'code_teams'
77
require 'sorbet-runtime'
88
require 'json'
99
require 'parse_packwerk'
@@ -17,15 +17,15 @@ module CodeOwnership
1717

1818
requires_ancestor { Kernel }
1919

20-
sig { params(file: String).returns(T.nilable(Teams::Team)) }
20+
sig { params(file: String).returns(T.nilable(CodeTeams::Team)) }
2121
def for_file(file)
22-
@for_file ||= T.let(@for_file, T.nilable(T::Hash[String, T.nilable(Teams::Team)]))
22+
@for_file ||= T.let(@for_file, T.nilable(T::Hash[String, T.nilable(CodeTeams::Team)]))
2323
@for_file ||= {}
2424

2525
return nil if file.start_with?('./')
2626
return @for_file[file] if @for_file.key?(file)
2727

28-
owner = T.let(nil, T.nilable(Teams::Team))
28+
owner = T.let(nil, T.nilable(CodeTeams::Team))
2929

3030
Private.mappers.each do |mapper|
3131
owner = mapper.map_file_to_owner(file)
@@ -61,7 +61,7 @@ def validate!(
6161

6262
# Given a backtrace from either `Exception#backtrace` or `caller`, find the
6363
# first line that corresponds to a file with assigned ownership
64-
sig { params(backtrace: T.nilable(T::Array[String]), excluded_teams: T::Array[::Teams::Team]).returns(T.nilable(::Teams::Team)) }
64+
sig { params(backtrace: T.nilable(T::Array[String]), excluded_teams: T::Array[::CodeTeams::Team]).returns(T.nilable(::CodeTeams::Team)) }
6565
def for_backtrace(backtrace, excluded_teams: [])
6666
return unless backtrace
6767

@@ -93,9 +93,9 @@ def for_backtrace(backtrace, excluded_teams: [])
9393
nil
9494
end
9595

96-
sig { params(klass: T.nilable(T.any(Class, Module))).returns(T.nilable(::Teams::Team)) }
96+
sig { params(klass: T.nilable(T.any(Class, Module))).returns(T.nilable(::CodeTeams::Team)) }
9797
def for_class(klass)
98-
@memoized_values ||= T.let(@memoized_values, T.nilable(T::Hash[String, T.nilable(::Teams::Team)]))
98+
@memoized_values ||= T.let(@memoized_values, T.nilable(T::Hash[String, T.nilable(::CodeTeams::Team)]))
9999
@memoized_values ||= {}
100100
# We use key because the memoized value could be `nil`
101101
if !@memoized_values.key?(klass.to_s)
@@ -110,7 +110,7 @@ def for_class(klass)
110110
end
111111
end
112112

113-
sig { params(package: ParsePackwerk::Package).returns(T.nilable(::Teams::Team)) }
113+
sig { params(package: ParsePackwerk::Package).returns(T.nilable(::CodeTeams::Team)) }
114114
def for_package(package)
115115
Private::OwnershipMappers::PackageOwnership.new.owner_for_package(package)
116116
end

lib/code_ownership/private.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@ def self.tracked_files
9292
@tracked_files ||= Dir.glob(configuration.owned_globs)
9393
end
9494

95-
sig { params(team_name: String, location_of_reference: String).returns(Teams::Team) }
95+
sig { params(team_name: String, location_of_reference: String).returns(CodeTeams::Team) }
9696
def self.find_team!(team_name, location_of_reference)
97-
found_team = Teams.find(team_name)
97+
found_team = CodeTeams.find(team_name)
9898
if found_team.nil?
99-
raise StandardError, "Could not find team with name: `#{team_name}` in #{location_of_reference}. Make sure the team is one of `#{Teams.all.map(&:name).sort}`"
99+
raise StandardError, "Could not find team with name: `#{team_name}` in #{location_of_reference}. Make sure the team is one of `#{CodeTeams.all.map(&:name).sort}`"
100100
else
101101
found_team
102102
end

lib/code_ownership/private/ownership_mappers/file_annotations.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ class FileAnnotations
1818
extend T::Sig
1919
include Interface
2020

21-
@@map_files_to_owners = T.let({}, T.nilable(T::Hash[String, T.nilable(::Teams::Team)])) # rubocop:disable Style/ClassVars
21+
@@map_files_to_owners = T.let({}, T.nilable(T::Hash[String, T.nilable(::CodeTeams::Team)])) # rubocop:disable Style/ClassVars
2222

2323
TEAM_PATTERN = T.let(/\A(?:#|\/\/) @team (?<team>.*)\Z/.freeze, Regexp)
2424

2525
sig do
2626
override.params(file: String).
27-
returns(T.nilable(::Teams::Team))
27+
returns(T.nilable(::CodeTeams::Team))
2828
end
2929
def map_file_to_owner(file)
3030
file_annotation_based_owner(file)
@@ -33,7 +33,7 @@ def map_file_to_owner(file)
3333
sig do
3434
override.
3535
params(files: T::Array[String]).
36-
returns(T::Hash[String, T.nilable(::Teams::Team)])
36+
returns(T::Hash[String, T.nilable(::CodeTeams::Team)])
3737
end
3838
def map_files_to_owners(files)
3939
return @@map_files_to_owners if @@map_files_to_owners&.keys && @@map_files_to_owners.keys.count > 0
@@ -46,7 +46,7 @@ def map_files_to_owners(files)
4646
end
4747
end
4848

49-
sig { params(filename: String).returns(T.nilable(Teams::Team)) }
49+
sig { params(filename: String).returns(T.nilable(CodeTeams::Team)) }
5050
def file_annotation_based_owner(filename)
5151
# If for a directory is named with an ownable extension, we need to skip
5252
# so File.foreach doesn't blow up below. This was needed because Cypress
@@ -97,7 +97,7 @@ def remove_file_annotation!(filename)
9797
end
9898

9999
sig do
100-
override.returns(T::Hash[String, T.nilable(::Teams::Team)])
100+
override.returns(T::Hash[String, T.nilable(::CodeTeams::Team)])
101101
end
102102
def codeowners_lines_to_owners
103103
@@map_files_to_owners = nil # rubocop:disable Style/ClassVars

lib/code_ownership/private/ownership_mappers/interface.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ module Interface
1616
#
1717
sig do
1818
abstract.params(file: String).
19-
returns(T.nilable(::Teams::Team))
19+
returns(T.nilable(::CodeTeams::Team))
2020
end
2121
def map_file_to_owner(file)
2222
end
@@ -26,13 +26,13 @@ def map_file_to_owner(file)
2626
#
2727
sig do
2828
abstract.params(files: T::Array[String]).
29-
returns(T::Hash[String, T.nilable(::Teams::Team)])
29+
returns(T::Hash[String, T.nilable(::CodeTeams::Team)])
3030
end
3131
def map_files_to_owners(files)
3232
end
3333

3434
sig do
35-
abstract.returns(T::Hash[String, T.nilable(::Teams::Team)])
35+
abstract.returns(T::Hash[String, T.nilable(::CodeTeams::Team)])
3636
end
3737
def codeowners_lines_to_owners
3838
end

lib/code_ownership/private/ownership_mappers/js_package_ownership.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class JsPackageOwnership
1313

1414
sig do
1515
override.params(file: String).
16-
returns(T.nilable(::Teams::Team))
16+
returns(T.nilable(::CodeTeams::Team))
1717
end
1818
def map_file_to_owner(file)
1919
package = map_file_to_relevant_package(file)
@@ -26,7 +26,7 @@ def map_file_to_owner(file)
2626
sig do
2727
override.
2828
params(files: T::Array[String]).
29-
returns(T::Hash[String, T.nilable(::Teams::Team)])
29+
returns(T::Hash[String, T.nilable(::CodeTeams::Team)])
3030
end
3131
def map_files_to_owners(files) # rubocop:disable Lint/UnusedMethodArgument
3232
ParseJsPackages.all.each_with_object({}) do |package, res|
@@ -49,7 +49,7 @@ def map_files_to_owners(files) # rubocop:disable Lint/UnusedMethodArgument
4949
# subset of files, but rather we want code ownership for all files.
5050
#
5151
sig do
52-
override.returns(T::Hash[String, T.nilable(::Teams::Team)])
52+
override.returns(T::Hash[String, T.nilable(::CodeTeams::Team)])
5353
end
5454
def codeowners_lines_to_owners
5555
ParseJsPackages.all.each_with_object({}) do |package, res|
@@ -65,7 +65,7 @@ def description
6565
'Owner metadata key in package.json'
6666
end
6767

68-
sig { params(package: ParseJsPackages::Package).returns(T.nilable(Teams::Team)) }
68+
sig { params(package: ParseJsPackages::Package).returns(T.nilable(CodeTeams::Team)) }
6969
def owner_for_package(package)
7070
raw_owner_value = package.metadata['owner']
7171
return nil if !raw_owner_value

lib/code_ownership/private/ownership_mappers/package_ownership.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class PackageOwnership
1313

1414
sig do
1515
override.params(file: String).
16-
returns(T.nilable(::Teams::Team))
16+
returns(T.nilable(::CodeTeams::Team))
1717
end
1818
def map_file_to_owner(file)
1919
package = map_file_to_relevant_package(file)
@@ -26,7 +26,7 @@ def map_file_to_owner(file)
2626
sig do
2727
override.
2828
params(files: T::Array[String]).
29-
returns(T::Hash[String, T.nilable(::Teams::Team)])
29+
returns(T::Hash[String, T.nilable(::CodeTeams::Team)])
3030
end
3131
def map_files_to_owners(files) # rubocop:disable Lint/UnusedMethodArgument
3232
ParsePackwerk.all.each_with_object({}) do |package, res|
@@ -49,7 +49,7 @@ def map_files_to_owners(files) # rubocop:disable Lint/UnusedMethodArgument
4949
# subset of files, but rather we want code ownership for all files.
5050
#
5151
sig do
52-
override.returns(T::Hash[String, T.nilable(::Teams::Team)])
52+
override.returns(T::Hash[String, T.nilable(::CodeTeams::Team)])
5353
end
5454
def codeowners_lines_to_owners
5555
ParsePackwerk.all.each_with_object({}) do |package, res|
@@ -65,7 +65,7 @@ def description
6565
'Owner metadata key in package.yml'
6666
end
6767

68-
sig { params(package: ParsePackwerk::Package).returns(T.nilable(Teams::Team)) }
68+
sig { params(package: ParsePackwerk::Package).returns(T.nilable(CodeTeams::Team)) }
6969
def owner_for_package(package)
7070
raw_owner_value = package.metadata['owner']
7171
return nil if !raw_owner_value

lib/code_ownership/private/ownership_mappers/team_globs.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,20 @@ class TeamGlobs
99
extend T::Sig
1010
include Interface
1111

12-
@@map_files_to_owners = T.let(@map_files_to_owners, T.nilable(T::Hash[String, T.nilable(::Teams::Team)])) # rubocop:disable Style/ClassVars
12+
@@map_files_to_owners = T.let(@map_files_to_owners, T.nilable(T::Hash[String, T.nilable(::CodeTeams::Team)])) # rubocop:disable Style/ClassVars
1313
@@map_files_to_owners = {} # rubocop:disable Style/ClassVars
14-
@@codeowners_lines_to_owners = T.let(@codeowners_lines_to_owners, T.nilable(T::Hash[String, T.nilable(::Teams::Team)])) # rubocop:disable Style/ClassVars
14+
@@codeowners_lines_to_owners = T.let(@codeowners_lines_to_owners, T.nilable(T::Hash[String, T.nilable(::CodeTeams::Team)])) # rubocop:disable Style/ClassVars
1515
@@codeowners_lines_to_owners = {} # rubocop:disable Style/ClassVars
1616

1717
sig do
1818
override.
1919
params(files: T::Array[String]).
20-
returns(T::Hash[String, T.nilable(::Teams::Team)])
20+
returns(T::Hash[String, T.nilable(::CodeTeams::Team)])
2121
end
2222
def map_files_to_owners(files) # rubocop:disable Lint/UnusedMethodArgument
2323
return @@map_files_to_owners if @@map_files_to_owners&.keys && @@map_files_to_owners.keys.count > 0
2424

25-
@@map_files_to_owners = Teams.all.each_with_object({}) do |team, map| # rubocop:disable Style/ClassVars
25+
@@map_files_to_owners = CodeTeams.all.each_with_object({}) do |team, map| # rubocop:disable Style/ClassVars
2626
TeamPlugins::Ownership.for(team).owned_globs.each do |glob|
2727
Dir.glob(glob).each do |filename|
2828
map[filename] = team
@@ -33,19 +33,19 @@ def map_files_to_owners(files) # rubocop:disable Lint/UnusedMethodArgument
3333

3434
sig do
3535
override.params(file: String).
36-
returns(T.nilable(::Teams::Team))
36+
returns(T.nilable(::CodeTeams::Team))
3737
end
3838
def map_file_to_owner(file)
3939
map_files_to_owners([file])[file]
4040
end
4141

4242
sig do
43-
override.returns(T::Hash[String, T.nilable(::Teams::Team)])
43+
override.returns(T::Hash[String, T.nilable(::CodeTeams::Team)])
4444
end
4545
def codeowners_lines_to_owners
4646
return @@codeowners_lines_to_owners if @@codeowners_lines_to_owners&.keys && @@codeowners_lines_to_owners.keys.count > 0
4747

48-
@@codeowners_lines_to_owners = Teams.all.each_with_object({}) do |team, map| # rubocop:disable Style/ClassVars
48+
@@codeowners_lines_to_owners = CodeTeams.all.each_with_object({}) do |team, map| # rubocop:disable Style/ClassVars
4949
TeamPlugins::Ownership.for(team).owned_globs.each do |owned_glob|
5050
map[owned_glob] = team
5151
end

0 commit comments

Comments
 (0)