Upgrade rails to 7.2.2 so that we can proceed with the rails 8 upgrade afterwards # Changelog - `.circleci/config.yml` — align CI DB setup with GitHub Actions (`db:create` + `db:schema:load`) to avoid trigger-dependent prep steps. - `.rubocop.yml` — add `rubocop-rspec_rails` and disable new cops that don't match existing spec style. - `AGENTS.md` — document that specs should run without `.env` (rename temporarily when present). - `Gemfile` — upgrade to Rails 7.2, switch Azure storage gem, pin `commonmarker`, bump `sidekiq-cron`, add `rubocop-rspec_rails`, and relax some gem pins. - `Gemfile.lock` — dependency lockfile updates from the Rails 7.2 and gem changes. - `app/controllers/api/v1/accounts/integrations/linear_controller.rb` — stringify params before passing to the Linear service to keep key types stable. - `app/controllers/super_admin/instance_statuses_controller.rb` — use `MigrationContext` API for migration status in Rails 7.2. - `app/models/installation_config.rb` — add commentary on YAML serialization and future JSONB migration (no behavior change). - `app/models/integrations/hook.rb` — ensure hook type is set on create only and guard against missing app. - `app/models/user.rb` — update enum syntax for Rails 7.2 deprecation, serialize OTP backup codes with JSON, and use Ruby `alias`. - `app/services/crm/leadsquared/setup_service.rb` — stringify hook settings keys before merge to keep JSON shape consistent. - `app/services/macros/execution_service.rb` — remove macro-specific assignee activity workaround; rely on standard assignment handlers. - `config/application.rb` — load Rails 7.2 defaults. - `config/storage.yml` — update Azure Active Storage service name to `AzureBlob`. - `db/migrate/20230515051424_update_article_image_keys.rb` — use credentials `secret_key_base` with fallback to legacy secrets. - `docker/Dockerfile` — add `yaml-dev` and `pkgconf` packages for native extensions (Ruby 3.4 / psych). - `lib/seeders/reports/message_creator.rb` — add parentheses for clarity in range calculation. - `package.json` — pin Vite version and bump `vite-plugin-ruby`. - `pnpm-lock.yaml` — lockfile changes from JS dependency updates. - `spec/builders/v2/report_builder_spec.rb` — disable transactional fixtures; truncate tables per example via Rails `truncate_tables` so after_commit callbacks run with clean isolation; keep builder spec metadata minimal. - `spec/builders/v2/reports/label_summary_builder_spec.rb` — disable transactional fixtures + truncate tables via Rails `truncate_tables`; revert to real `resolved!`/`open!`/`resolved!` flow for multiple resolution events; align date range to `Time.zone` to avoid offset gaps; keep builder spec metadata minimal. - `spec/controllers/api/v1/accounts/macros_controller_spec.rb` — assert `assignee_id` instead of activity message to avoid transaction-timing flakes. - `spec/services/telegram/incoming_message_service_spec.rb` — reference the contact tied to the created conversation instead of `Contact.all.first` to avoid order-dependent failures when other specs leave data behind. - `spec/mailers/administrator_notifications/shared/smtp_config_shared.rb` — use `with_modified_env` instead of stubbing mailer internals. - `spec/services/account/sign_up_email_validation_service_spec.rb` — compare error `class.name` for parallel/reload-safe assertions.
358 lines
6.5 KiB
YAML
358 lines
6.5 KiB
YAML
plugins:
|
|
- rubocop-performance
|
|
- rubocop-rails
|
|
- rubocop-rspec
|
|
- rubocop-rspec_rails
|
|
- rubocop-factory_bot
|
|
|
|
require:
|
|
- ./rubocop/use_from_email.rb
|
|
- ./rubocop/custom_cop_location.rb
|
|
- ./rubocop/attachment_download.rb
|
|
- ./rubocop/one_class_per_file.rb
|
|
|
|
Layout/LineLength:
|
|
Max: 150
|
|
|
|
Metrics/ClassLength:
|
|
Max: 175
|
|
Exclude:
|
|
- 'app/models/message.rb'
|
|
- 'app/models/conversation.rb'
|
|
|
|
Metrics/MethodLength:
|
|
Max: 19
|
|
Exclude:
|
|
- 'enterprise/lib/captain/agent.rb'
|
|
|
|
RSpec/ExampleLength:
|
|
Max: 50
|
|
|
|
Style/Documentation:
|
|
Enabled: false
|
|
|
|
Style/ExponentialNotation:
|
|
Enabled: false
|
|
|
|
Style/FrozenStringLiteralComment:
|
|
Enabled: false
|
|
|
|
Style/SymbolArray:
|
|
Enabled: false
|
|
|
|
Style/OpenStructUse:
|
|
Enabled: false
|
|
|
|
Chatwoot/AttachmentDownload:
|
|
Enabled: true
|
|
Exclude:
|
|
- 'spec/**/*'
|
|
- 'test/**/*'
|
|
|
|
Style/OptionalBooleanParameter:
|
|
Exclude:
|
|
- 'app/services/email_templates/db_resolver_service.rb'
|
|
- 'app/dispatchers/dispatcher.rb'
|
|
|
|
Style/GlobalVars:
|
|
Exclude:
|
|
- 'config/initializers/01_redis.rb'
|
|
- 'config/initializers/rack_attack.rb'
|
|
- 'lib/redis/alfred.rb'
|
|
- 'lib/global_config.rb'
|
|
|
|
Style/ClassVars:
|
|
Exclude:
|
|
- 'app/services/email_templates/db_resolver_service.rb'
|
|
|
|
Lint/MissingSuper:
|
|
Exclude:
|
|
- 'app/drops/base_drop.rb'
|
|
|
|
Lint/SymbolConversion:
|
|
Enabled: false
|
|
|
|
Lint/EmptyBlock:
|
|
Exclude:
|
|
- 'app/views/api/v1/accounts/conversations/toggle_status.json.jbuilder'
|
|
|
|
Lint/OrAssignmentToConstant:
|
|
Exclude:
|
|
- 'lib/redis/config.rb'
|
|
|
|
Metrics/BlockLength:
|
|
Max: 30
|
|
Exclude:
|
|
- spec/**/*
|
|
- '**/routes.rb'
|
|
- 'config/environments/*'
|
|
- db/schema.rb
|
|
|
|
Metrics/ModuleLength:
|
|
Exclude:
|
|
- lib/seeders/message_seeder.rb
|
|
- spec/support/slack_stubs.rb
|
|
|
|
Rails/HelperInstanceVariable:
|
|
Exclude:
|
|
- enterprise/app/helpers/captain/chat_helper.rb
|
|
- enterprise/app/helpers/captain/chat_response_helper.rb
|
|
Rails/ApplicationController:
|
|
Exclude:
|
|
- 'app/controllers/api/v1/widget/messages_controller.rb'
|
|
- 'app/controllers/dashboard_controller.rb'
|
|
- 'app/controllers/widget_tests_controller.rb'
|
|
- 'app/controllers/widgets_controller.rb'
|
|
- 'app/controllers/platform_controller.rb'
|
|
- 'app/controllers/public_controller.rb'
|
|
- 'app/controllers/survey/responses_controller.rb'
|
|
|
|
Rails/FindEach:
|
|
Enabled: true
|
|
Include:
|
|
- 'app/**/*.rb'
|
|
|
|
Rails/CompactBlank:
|
|
Enabled: false
|
|
|
|
Rails/EnvironmentVariableAccess:
|
|
Enabled: false
|
|
|
|
Rails/TimeZoneAssignment:
|
|
Enabled: false
|
|
|
|
Rails/RedundantPresenceValidationOnBelongsTo:
|
|
Enabled: false
|
|
|
|
Rails/InverseOf:
|
|
Exclude:
|
|
- enterprise/app/models/captain/assistant.rb
|
|
|
|
Rails/UniqueValidationWithoutIndex:
|
|
Exclude:
|
|
- app/models/canned_response.rb
|
|
- app/models/telegram_bot.rb
|
|
- enterprise/app/models/captain_inbox.rb
|
|
- 'app/models/channel/twitter_profile.rb'
|
|
- 'app/models/webhook.rb'
|
|
- 'app/models/contact.rb'
|
|
|
|
Style/ClassAndModuleChildren:
|
|
EnforcedStyle: compact
|
|
Exclude:
|
|
- 'config/application.rb'
|
|
- 'config/initializers/monkey_patches/*'
|
|
|
|
Style/MapToHash:
|
|
Enabled: false
|
|
|
|
Style/HashSyntax:
|
|
Enabled: true
|
|
EnforcedStyle: no_mixed_keys
|
|
EnforcedShorthandSyntax: never
|
|
|
|
RSpec/NestedGroups:
|
|
Enabled: true
|
|
Max: 4
|
|
|
|
RSpec/MessageSpies:
|
|
Enabled: false
|
|
|
|
RSpec/StubbedMock:
|
|
Enabled: false
|
|
|
|
Naming/VariableNumber:
|
|
Enabled: false
|
|
|
|
Naming/MemoizedInstanceVariableName:
|
|
Exclude:
|
|
- 'app/models/message.rb'
|
|
|
|
Style/GuardClause:
|
|
Exclude:
|
|
- 'app/builders/account_builder.rb'
|
|
- 'app/models/attachment.rb'
|
|
- 'app/models/message.rb'
|
|
|
|
Metrics/AbcSize:
|
|
Max: 26
|
|
Exclude:
|
|
- 'app/controllers/concerns/auth_helper.rb'
|
|
|
|
- 'app/models/integrations/hook.rb'
|
|
- 'app/models/canned_response.rb'
|
|
- 'app/models/telegram_bot.rb'
|
|
|
|
Rails/RenderInline:
|
|
Exclude:
|
|
- 'app/controllers/swagger_controller.rb'
|
|
|
|
Rails/ThreeStateBooleanColumn:
|
|
Exclude:
|
|
- 'db/migrate/20230503101201_create_sla_policies.rb'
|
|
|
|
RSpec/IndexedLet:
|
|
Enabled: false
|
|
|
|
RSpec/NamedSubject:
|
|
Enabled: false
|
|
|
|
# we should bring this down
|
|
RSpec/MultipleExpectations:
|
|
Max: 7
|
|
|
|
RSpec/MultipleMemoizedHelpers:
|
|
Max: 14
|
|
|
|
RSpecRails/InferredSpecType:
|
|
Enabled: false
|
|
|
|
RSpecRails/NegationBeValid:
|
|
Enabled: false
|
|
|
|
# custom rules
|
|
UseFromEmail:
|
|
Enabled: true
|
|
Exclude:
|
|
- 'app/models/user.rb'
|
|
- 'app/models/contact.rb'
|
|
|
|
CustomCopLocation:
|
|
Enabled: true
|
|
|
|
Style/OneClassPerFile:
|
|
Enabled: true
|
|
|
|
AllCops:
|
|
NewCops: enable
|
|
Exclude:
|
|
- 'bin/**/*'
|
|
- 'db/schema.rb'
|
|
- 'public/**/*'
|
|
- 'config/initializers/bot.rb'
|
|
- 'vendor/**/*'
|
|
- 'node_modules/**/*'
|
|
- 'lib/tasks/auto_annotate_models.rake'
|
|
- 'config/environments/**/*'
|
|
- 'tmp/**/*'
|
|
- 'storage/**/*'
|
|
- 'db/migrate/20230426130150_init_schema.rb'
|
|
|
|
FactoryBot/SyntaxMethods:
|
|
Enabled: false
|
|
|
|
# Disable new rules causing errors
|
|
Layout/LeadingCommentSpace:
|
|
Enabled: false
|
|
|
|
Style/ReturnNilInPredicateMethodDefinition:
|
|
Enabled: false
|
|
|
|
Style/RedundantParentheses:
|
|
Enabled: false
|
|
|
|
Performance/StringIdentifierArgument:
|
|
Enabled: false
|
|
|
|
Layout/EmptyLinesAroundExceptionHandlingKeywords:
|
|
Enabled: false
|
|
|
|
Lint/LiteralAsCondition:
|
|
Enabled: false
|
|
|
|
Style/RedundantReturn:
|
|
Enabled: false
|
|
|
|
Layout/SpaceAroundOperators:
|
|
Enabled: false
|
|
|
|
Rails/EnvLocal:
|
|
Enabled: false
|
|
|
|
Rails/WhereRange:
|
|
Enabled: false
|
|
|
|
Lint/UselessConstantScoping:
|
|
Enabled: false
|
|
|
|
Style/MultipleComparison:
|
|
Enabled: false
|
|
|
|
Bundler/OrderedGems:
|
|
Enabled: false
|
|
|
|
RSpec/ExampleWording:
|
|
Enabled: false
|
|
|
|
RSpec/ReceiveMessages:
|
|
Enabled: false
|
|
|
|
FactoryBot/AssociationStyle:
|
|
Enabled: false
|
|
|
|
Rails/EnumSyntax:
|
|
Enabled: false
|
|
|
|
Lint/RedundantTypeConversion:
|
|
Enabled: false
|
|
|
|
# Additional rules to disable
|
|
Rails/RedundantActiveRecordAllMethod:
|
|
Enabled: false
|
|
|
|
Layout/TrailingEmptyLines:
|
|
Enabled: true
|
|
|
|
Style/SafeNavigationChainLength:
|
|
Enabled: false
|
|
|
|
Lint/SafeNavigationConsistency:
|
|
Enabled: false
|
|
|
|
Lint/CopDirectiveSyntax:
|
|
Enabled: false
|
|
|
|
# Final set of rules to disable
|
|
FactoryBot/ExcessiveCreateList:
|
|
Enabled: false
|
|
|
|
RSpec/MissingExpectationTargetMethod:
|
|
Enabled: false
|
|
|
|
Performance/InefficientHashSearch:
|
|
Enabled: false
|
|
|
|
Style/RedundantSelfAssignmentBranch:
|
|
Enabled: false
|
|
|
|
Style/YAMLFileRead:
|
|
Enabled: false
|
|
|
|
Layout/ExtraSpacing:
|
|
Enabled: false
|
|
|
|
Style/RedundantFilterChain:
|
|
Enabled: false
|
|
|
|
Performance/MapMethodChain:
|
|
Enabled: false
|
|
|
|
Rails/RootPathnameMethods:
|
|
Enabled: false
|
|
|
|
Style/SuperArguments:
|
|
Enabled: false
|
|
|
|
# Final remaining rules to disable
|
|
Rails/Delegate:
|
|
Enabled: false
|
|
|
|
Style/CaseLikeIf:
|
|
Enabled: false
|
|
|
|
FactoryBot/RedundantFactoryOption:
|
|
Enabled: false
|
|
|
|
FactoryBot/FactoryAssociationWithStrategy:
|
|
Enabled: false
|