diff --git a/.rubocop_todo/layout/line_length.yml b/.rubocop_todo/layout/line_length.yml
index 87fa8802f1df3a720a7748601c6d0cc1ac551897..c71c6e49a6bb7cbf6f8e7b7cc695170f9522a914 100644
--- a/.rubocop_todo/layout/line_length.yml
+++ b/.rubocop_todo/layout/line_length.yml
@@ -3719,8 +3719,6 @@ Layout/LineLength:
     - 'spec/mailers/notify_spec.rb'
     - 'spec/migrations/active_record/schema_spec.rb'
     - 'spec/models/active_session_spec.rb'
-    - 'spec/models/acts_as_taggable_on/tag_spec.rb'
-    - 'spec/models/acts_as_taggable_on/tagging_spec.rb'
     - 'spec/models/alert_management/alert_spec.rb'
     - 'spec/models/analytics/cycle_analytics/aggregation_spec.rb'
     - 'spec/models/appearance_spec.rb'
diff --git a/.rubocop_todo/rspec/context_wording.yml b/.rubocop_todo/rspec/context_wording.yml
index 9435e38155eaf4a07ed248629828ddaf47f8014b..65c050242334c0e860cfb6a8dc4cb96510a7523b 100644
--- a/.rubocop_todo/rspec/context_wording.yml
+++ b/.rubocop_todo/rspec/context_wording.yml
@@ -1373,7 +1373,6 @@ RSpec/ContextWording:
     - 'spec/helpers/users_helper_spec.rb'
     - 'spec/helpers/web_hooks/web_hooks_helper_spec.rb'
     - 'spec/helpers/whats_new_helper_spec.rb'
-    - 'spec/initializers/1_acts_as_taggable_spec.rb'
     - 'spec/initializers/carrierwave_s3_encryption_headers_patch_spec.rb'
     - 'spec/initializers/mail_encoding_patch_spec.rb'
     - 'spec/initializers/rack_multipart_patch_spec.rb'
diff --git a/.rubocop_todo/rspec/expect_change.yml b/.rubocop_todo/rspec/expect_change.yml
index aacfada66250092e6b7e4eda2694c1176d4f0501..4b4a0057c2cafe55ac8b2deb6d51211a741e601d 100644
--- a/.rubocop_todo/rspec/expect_change.yml
+++ b/.rubocop_todo/rspec/expect_change.yml
@@ -191,7 +191,6 @@ RSpec/ExpectChange:
     - 'spec/graphql/mutations/merge_requests/create_spec.rb'
     - 'spec/graphql/mutations/user_callouts/create_spec.rb'
     - 'spec/graphql/types/base_enum_spec.rb'
-    - 'spec/initializers/1_acts_as_taggable_spec.rb'
     - 'spec/initializers/load_balancing_spec.rb'
     - 'spec/lib/api/helpers_spec.rb'
     - 'spec/lib/bulk_imports/common/pipelines/badges_pipeline_spec.rb'
diff --git a/.rubocop_todo/rspec/feature_category.yml b/.rubocop_todo/rspec/feature_category.yml
index 0db55518c68d1d31fd8a7a5b57d739d7c6ada5f4..c59fa7958c0ad3d6d754ac24ea8a0cbf98b12fef 100644
--- a/.rubocop_todo/rspec/feature_category.yml
+++ b/.rubocop_todo/rspec/feature_category.yml
@@ -1999,7 +1999,6 @@ RSpec/FeatureCategory:
     - 'spec/initializers/0_postgresql_types_spec.rb'
     - 'spec/initializers/100_patch_omniauth_oauth2_spec.rb'
     - 'spec/initializers/100_patch_omniauth_saml_spec.rb'
-    - 'spec/initializers/1_acts_as_taggable_spec.rb'
     - 'spec/initializers/6_validations_spec.rb'
     - 'spec/initializers/action_cable_subscription_adapter_identifier_spec.rb'
     - 'spec/initializers/action_mailer_hooks_spec.rb'
@@ -3416,8 +3415,6 @@ RSpec/FeatureCategory:
     - 'spec/mailers/repository_check_mailer_spec.rb'
     - 'spec/models/ability_spec.rb'
     - 'spec/models/active_session_spec.rb'
-    - 'spec/models/acts_as_taggable_on/tag_spec.rb'
-    - 'spec/models/acts_as_taggable_on/tagging_spec.rb'
     - 'spec/models/alert_management/alert_assignee_spec.rb'
     - 'spec/models/alert_management/alert_user_mention_spec.rb'
     - 'spec/models/alert_management/metric_image_spec.rb'
diff --git a/Gemfile b/Gemfile
index 56749cc56ccc770d05202c1b37dc4d72f706404a..95625716c122e2b6a5a81f6875400d2dc15f1127 100644
--- a/Gemfile
+++ b/Gemfile
@@ -278,9 +278,6 @@ end
 # State machine
 gem 'state_machines-activerecord', '~> 0.8.0' # rubocop:todo Gemfile/MissingFeatureCategory
 
-# CI domain tags
-gem 'acts-as-taggable-on', '~> 10.0' # rubocop:todo Gemfile/MissingFeatureCategory
-
 # Background jobs
 gem 'sidekiq', path: 'vendor/gems/sidekiq-7.1.6', require: 'sidekiq', feature_category: :scalability
 gem 'sidekiq-cron', '~> 1.12.0', feature_category: :scalability
diff --git a/Gemfile.checksum b/Gemfile.checksum
index 59a808785f89aac58ffbabbf1cfdcd53e2e2d06a..0b189c1de70e294288b36d1815a15020e583b525 100644
--- a/Gemfile.checksum
+++ b/Gemfile.checksum
@@ -14,7 +14,6 @@
 {"name":"activerecord-explain-analyze","version":"0.1.0","platform":"ruby","checksum":"5debb11fe23f35b91953a80677d80ba9284ee737fd9d148c1d7603ce45217f7b"},
 {"name":"activestorage","version":"7.0.8.4","platform":"ruby","checksum":"cbfc2d9a708aa47822f1bfc36180c835515d3a22a160b43e8fe74ddc80e8b8e1"},
 {"name":"activesupport","version":"7.0.8.4","platform":"ruby","checksum":"69047070402b20fbaeebbeb56d21238db457c54c7e66f356dcba683e500ae197"},
-{"name":"acts-as-taggable-on","version":"10.0.0","platform":"ruby","checksum":"d360e96f1622010a2f8fe5c6f480f8cf95ba0bc2072e0b9974574e5f336edb83"},
 {"name":"addressable","version":"2.8.1","platform":"ruby","checksum":"bc724a176ef02118c8a3ed6b5c04c39cf59209607ffcce77b91d0261dbadedfa"},
 {"name":"aes_key_wrap","version":"1.1.0","platform":"ruby","checksum":"b935f4756b37375895db45669e79dfcdc0f7901e12d4e08974d5540c8e0776a5"},
 {"name":"akismet","version":"3.0.0","platform":"ruby","checksum":"74991b8e3d3257eeea996b47069abb8da2006c84a144255123e8dffd1c86b230"},
diff --git a/Gemfile.lock b/Gemfile.lock
index 9ede923784bc3760ec73faf4725a731cd31048e6..afbef087fdd17eaf9972eec43476653e83b26ccc 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -286,8 +286,6 @@ GEM
       i18n (>= 1.6, < 2)
       minitest (>= 5.1)
       tzinfo (~> 2.0)
-    acts-as-taggable-on (10.0.0)
-      activerecord (>= 6.1, < 7.2)
     addressable (2.8.1)
       public_suffix (>= 2.0.2, < 6.0)
     aes_key_wrap (1.1.0)
@@ -1958,7 +1956,6 @@ DEPENDENCIES
   acme-client (~> 2.0.18)
   activerecord-explain-analyze (~> 0.1)
   activerecord-gitlab!
-  acts-as-taggable-on (~> 10.0)
   addressable (~> 2.8)
   akismet (~> 3.0)
   apollo_upload_server (~> 2.1.6)
diff --git a/app/models/ci/bridge.rb b/app/models/ci/bridge.rb
index 6f02a37b6cd5172b8fd82f725900f7585f22de6c..bd1aef6a61f5649b5beca8054075b3dd0fd72a81 100644
--- a/app/models/ci/bridge.rb
+++ b/app/models/ci/bridge.rb
@@ -189,7 +189,7 @@ def artifacts_expire_at; end
     def runner; end
 
     def tag_list
-      ActsAsTaggableOn::TagList.new
+      Gitlab::Ci::Tags::TagList.new
     end
 
     def artifacts?
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 10ee8dde587be719eda062aa81d9772ca3036d5f..5a767a56f39dc630f210f33d91ba9af8fb8e17a0 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -12,6 +12,7 @@ class Build < Ci::Processable
     include Ci::HasRef
     include Ci::TrackEnvironmentUsage
     include EachBatch
+    include Ci::Taggable
 
     extend ::Gitlab::Utils::Override
 
@@ -219,8 +220,6 @@ class Build < Ci::Processable
       .or(with_job_artifacts.where(project_id: project_id, job_artifacts: { file_type: 'dotenv' })).distinct
     end
 
-    acts_as_taggable
-
     add_authentication_token_field :token,
       encrypted: :required,
       format_with_prefix: :prefix_and_partition_for_token
@@ -730,14 +729,6 @@ def remove_token!
       update!(token_encrypted: nil)
     end
 
-    # acts_as_taggable uses this method create/remove tags with contexts
-    # defined by taggings and to get those contexts it executes a query.
-    # We don't use any other contexts except `tags`, so we don't need it.
-    override :custom_contexts
-    def custom_contexts
-      []
-    end
-
     def tag_list
       if tags.loaded?
         tags.map(&:name)
diff --git a/app/models/ci/build_tag.rb b/app/models/ci/build_tag.rb
index 30436f2da73af22c68158c2f5606e955b34b7bfb..c0f21754c68b98cc123ffe542fc6dc4746eec29d 100644
--- a/app/models/ci/build_tag.rb
+++ b/app/models/ci/build_tag.rb
@@ -11,7 +11,7 @@ class BuildTag < Ci::ApplicationRecord
 
     belongs_to :build, ->(build_tag) { in_partition(build_tag) }, # rubocop:disable Rails/InverseOf -- Will be added once association on build is added
       class_name: 'Ci::Build', partition_foreign_key: :partition_id, optional: false
-    belongs_to :tag, class_name: 'ActsAsTaggableOn::Tag', optional: false
+    belongs_to :tag, class_name: 'Ci::Tag', optional: false
 
     validates :project_id, presence: true
   end
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index d8bf8eb1203c696773cb76d622ab48dfc7063c41..cb705167645e2f9231c2bae61f1c0906b6529bdf 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -607,11 +607,11 @@ def total_size
     end
 
     def tags_count
-      ActsAsTaggableOn::Tagging.where(taggable: builds).count
+      Ci::Tagging.where(taggable: builds).count
     end
 
     def distinct_tags_count
-      ActsAsTaggableOn::Tagging.where(taggable: builds).count('distinct(tag_id)')
+      Ci::Tagging.where(taggable: builds).count('distinct(tag_id)')
     end
 
     def stages_names
diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb
index 1e1fd36d5d01d908ae8cc8851b2134e42c3884f3..f18c383bff1a8506552c082f21fa7c2832cc1e74 100644
--- a/app/models/ci/runner.rb
+++ b/app/models/ci/runner.rb
@@ -16,6 +16,7 @@ class Runner < Ci::ApplicationRecord
     include IgnorableColumns
     include Ci::HasRunnerExecutor
     include Ci::HasRunnerStatus
+    include Ci::Taggable
 
     extend ::Gitlab::Utils::Override
 
@@ -239,8 +240,6 @@ class Runner < Ci::ApplicationRecord
       where(runner_type: runner_type)
     end
 
-    acts_as_taggable
-
     after_destroy :cleanup_runner_queue
 
     cached_attr_reader :contacted_at
diff --git a/app/models/concerns/taggable_queries.rb b/app/models/concerns/taggable_queries.rb
index 06799f0a9f4af9091943645bea0ff2a45d2e37d8..2bdfd0730aa39ea7228ae3123f34c17591ebc754 100644
--- a/app/models/concerns/taggable_queries.rb
+++ b/app/models/concerns/taggable_queries.rb
@@ -10,7 +10,7 @@ module TaggableQueries
   class_methods do
     # context is a name `acts_as_taggable context`
     def arel_tag_names_array(context = :tags)
-      ActsAsTaggableOn::Tagging
+      Ci::Tagging
         .joins(:tag)
         .where("taggings.taggable_id=#{quoted_table_name}.id") # rubocop:disable GitlabSecurity/SqlInjection
         .where(taggings: { context: context, taggable_type: polymorphic_name })
@@ -18,7 +18,7 @@ def arel_tag_names_array(context = :tags)
     end
 
     def matches_tag_ids(tag_ids, table: quoted_table_name, column: 'id')
-      matcher = ::ActsAsTaggableOn::Tagging
+      matcher = ::Ci::Tagging
         .where(taggable_type: CommitStatus.name)
         .where(context: 'tags')
         .where("taggable_id = #{connection.quote_table_name(table)}.#{connection.quote_column_name(column)}") # rubocop:disable GitlabSecurity/SqlInjection
@@ -29,7 +29,7 @@ def matches_tag_ids(tag_ids, table: quoted_table_name, column: 'id')
     end
 
     def with_any_tags(table: quoted_table_name, column: 'id')
-      matcher = ::ActsAsTaggableOn::Tagging
+      matcher = ::Ci::Tagging
         .where(taggable_type: CommitStatus.name)
         .where(context: 'tags')
         .where("taggable_id = #{connection.quote_table_name(table)}.#{connection.quote_column_name(column)}") # rubocop:disable GitlabSecurity/SqlInjection
diff --git a/config/initializers/1_acts_as_taggable.rb b/config/initializers/1_acts_as_taggable.rb
deleted file mode 100644
index 0c34bf3941b9c66508d44d72280cc14444cb3d55..0000000000000000000000000000000000000000
--- a/config/initializers/1_acts_as_taggable.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-# frozen_string_literal: true
-
-ActsAsTaggableOn.strict_case_match = true
-
-# tags_counter enables caching count of tags which results in an update whenever a tag is added or removed
-# since the count is not used anywhere its better performance wise to disable this cache
-ActsAsTaggableOn.tags_counter = false
-
-# validate that counter cache is disabled
-raise "Counter cache is not disabled" if
-    ActsAsTaggableOn::Tagging.reflections["tag"].options[:counter_cache]
-
-# Redirects retrieve_connection to use Ci::ApplicationRecord's connection
-[::ActsAsTaggableOn::Tag, ::ActsAsTaggableOn::Tagging].each do |model|
-  model.connection_specification_name = Ci::ApplicationRecord.connection_specification_name
-  model.singleton_class.delegate :connection, :sticking, to: '::Ci::ApplicationRecord'
-end
-
-# Modified from https://github.com/mbleigh/acts-as-taggable-on/pull/1081
-# with insert_all, which is not supported in MySQL
-# See https://gitlab.com/gitlab-org/gitlab/-/issues/338346#note_996969960
-module ActsAsTaggableOnTagPatch
-  def find_or_create_all_with_like_by_name(*list)
-    list = Array(list).flatten
-
-    return [] if list.empty?
-
-    existing_tags = named_any(list)
-
-    missing = list.reject do |tag_name|
-      comparable_tag_name = comparable_name(tag_name)
-      existing_tags.find { |tag| comparable_name(tag.name) == comparable_tag_name }
-    end
-
-    if missing.empty?
-      new_tags = []
-    else
-      attributes_to_add = missing.map do |tag_name|
-        { name: tag_name }
-      end
-
-      insert_all(attributes_to_add, unique_by: :name)
-      new_tags = named_any(missing)
-    end
-
-    existing_tags + new_tags
-  end
-end
-
-::ActsAsTaggableOn::Tag.singleton_class.prepend(ActsAsTaggableOnTagPatch)
diff --git a/db/docs/taggings.yml b/db/docs/taggings.yml
index f6f070c8ab8ed142f127695453c9b2cf2f8cebbb..9ef176392016711660a04aacc6c2ba6d54276155 100644
--- a/db/docs/taggings.yml
+++ b/db/docs/taggings.yml
@@ -1,7 +1,6 @@
 ---
 table_name: taggings
 classes:
-- ActsAsTaggableOn::Tagging
 - Ci::Tagging
 feature_categories:
 - continuous_integration
diff --git a/db/docs/tags.yml b/db/docs/tags.yml
index bea3904b77bd8857f7027cf51203b0b5a6bfcc7d..42823ebdbcfa04cc82f3c6047db27ecbaa364530 100644
--- a/db/docs/tags.yml
+++ b/db/docs/tags.yml
@@ -1,7 +1,6 @@
 ---
 table_name: tags
 classes:
-- ActsAsTaggableOn::Tag
 - Ci::Tag
 feature_categories:
 - continuous_integration
diff --git a/lib/gitlab/ci/tags/bulk_insert.rb b/lib/gitlab/ci/tags/bulk_insert.rb
index 2e56e47f5b8da3745fc8ed1c26c41bacf8e88352..bb4b29817f25ac9fc9837494f966e3b6488d9e39 100644
--- a/lib/gitlab/ci/tags/bulk_insert.rb
+++ b/lib/gitlab/ci/tags/bulk_insert.rb
@@ -46,7 +46,7 @@ def persist_build_tags!
           return false if taggings.empty?
 
           taggings.each_slice(TAGGINGS_BATCH_SIZE) do |taggings_slice|
-            ActsAsTaggableOn::Tagging.insert_all!(taggings_slice)
+            ::Ci::Tagging.insert_all!(taggings_slice)
           end
 
           true
@@ -54,17 +54,17 @@ def persist_build_tags!
 
         # rubocop: disable CodeReuse/ActiveRecord
         def create_tags(tags)
-          existing_tag_records = ActsAsTaggableOn::Tag.where(name: tags).to_a
+          existing_tag_records = ::Ci::Tag.where(name: tags).to_a
           missing_tags = detect_missing_tags(tags, existing_tag_records)
           return existing_tag_records if missing_tags.empty?
 
           missing_tags
             .map { |tag| { name: tag } }
             .each_slice(TAGS_BATCH_SIZE) do |tags_attributes|
-              ActsAsTaggableOn::Tag.insert_all!(tags_attributes)
+              ::Ci::Tag.insert_all!(tags_attributes)
             end
 
-          ActsAsTaggableOn::Tag.where(name: tags).to_a
+          ::Ci::Tag.where(name: tags).to_a
         end
         # rubocop: enable CodeReuse/ActiveRecord
 
diff --git a/spec/factories/ci/build_tag.rb b/spec/factories/ci/build_tag.rb
index 08bd426f30169c29416f31609be32de26ddccc07..e1315a5ce977c66e8ae3617d3b829fa59d3caefd 100644
--- a/spec/factories/ci/build_tag.rb
+++ b/spec/factories/ci/build_tag.rb
@@ -3,7 +3,7 @@
 FactoryBot.define do
   factory :ci_build_tag, class: 'Ci::BuildTag' do
     build factory: :ci_build
-    tag factory: :tag
+    tag factory: :ci_tag
     project_id { build.project_id }
   end
 end
diff --git a/spec/factories/tag.rb b/spec/factories/tag.rb
deleted file mode 100644
index f51c2b061b6deb4db10f105881d83bb47e681510..0000000000000000000000000000000000000000
--- a/spec/factories/tag.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-# frozen_string_literal: true
-
-FactoryBot.define do
-  factory :tag, class: 'ActsAsTaggableOn::Tag' do
-    name { generate(:name) }
-  end
-end
diff --git a/spec/initializers/1_acts_as_taggable_spec.rb b/spec/initializers/1_acts_as_taggable_spec.rb
deleted file mode 100644
index f9ccc9718d5ba1f48b7cc76821ae94aa5a3731b8..0000000000000000000000000000000000000000
--- a/spec/initializers/1_acts_as_taggable_spec.rb
+++ /dev/null
@@ -1,64 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe 'ActsAsTaggableOn::Tag' do
-  describe '.find_or_create_all_with_like_by_name' do
-    let(:tags) { %w[tag] }
-
-    subject(:find_or_create) { ActsAsTaggableOn::Tag.find_or_create_all_with_like_by_name(tags) }
-
-    it 'creates a tag' do
-      expect { find_or_create }.to change(ActsAsTaggableOn::Tag, :count).by(1)
-    end
-
-    it 'returns the Tag record' do
-      results = find_or_create
-
-      expect(results.size).to eq(1)
-      expect(results.first).to be_an_instance_of(ActsAsTaggableOn::Tag)
-      expect(results.first.name).to eq('tag')
-    end
-
-    context 'some tags already existing' do
-      let(:tags) { %w[tag preexisting_tag tag2] }
-
-      before_all do
-        ActsAsTaggableOn::Tag.create!(name: 'preexisting_tag')
-      end
-
-      it 'creates only the missing tag' do
-        expect(ActsAsTaggableOn::Tag).to receive(:insert_all)
-          .with([{ name: 'tag' }, { name: 'tag2' }], unique_by: :name)
-          .and_call_original
-
-        expect { find_or_create }.to change(ActsAsTaggableOn::Tag, :count).by(2)
-      end
-
-      it 'returns the Tag records' do
-        results = find_or_create
-
-        expect(results.map(&:name)).to match_array(tags)
-      end
-    end
-
-    context 'all tags already existing' do
-      let(:tags) { %w[preexisting_tag preexisting_tag2] }
-
-      before_all do
-        ActsAsTaggableOn::Tag.create!(name: 'preexisting_tag')
-        ActsAsTaggableOn::Tag.create!(name: 'preexisting_tag2')
-      end
-
-      it 'does not create new tags' do
-        expect { find_or_create }.not_to change(ActsAsTaggableOn::Tag, :count)
-      end
-
-      it 'returns the Tag records' do
-        results = find_or_create
-
-        expect(results.map(&:name)).to match_array(tags)
-      end
-    end
-  end
-end
diff --git a/spec/lib/gitlab/ci/tags/bulk_insert_spec.rb b/spec/lib/gitlab/ci/tags/bulk_insert_spec.rb
index c5125689207d5c20e5f210814bd00aeefc201aa7..a46e1e51b897959ba2d40c5be75413f7813e0b70 100644
--- a/spec/lib/gitlab/ci/tags/bulk_insert_spec.rb
+++ b/spec/lib/gitlab/ci/tags/bulk_insert_spec.rb
@@ -12,21 +12,6 @@
 
   subject(:service) { described_class.new(statuses) }
 
-  describe 'gem version' do
-    let(:acceptable_version) { '10.0.0' }
-
-    let(:error_message) do
-      <<~MESSAGE
-      A mechanism depending on internals of 'act-as-taggable-on` has been designed
-      to bulk insert tags for Ci::Build/Ci::Runner records.
-      Please review the code carefully before updating the gem version
-      https://gitlab.com/gitlab-org/gitlab/-/issues/350053
-      MESSAGE
-    end
-
-    it { expect(ActsAsTaggableOn::VERSION).to eq(acceptable_version), error_message }
-  end
-
   describe '.bulk_insert_tags!' do
     let(:inserter) { instance_double(described_class) }
 
diff --git a/spec/lib/gitlab/data_builder/pipeline_spec.rb b/spec/lib/gitlab/data_builder/pipeline_spec.rb
index 5fa61b1680dd88509d203bfcb5feab000590e8a9..326393ecf6ffc009a3bfa903ebddb9c5028ced02 100644
--- a/spec/lib/gitlab/data_builder/pipeline_spec.rb
+++ b/spec/lib/gitlab/data_builder/pipeline_spec.rb
@@ -67,7 +67,7 @@
 
     context 'build with runner' do
       let_it_be(:tag_names) { %w[tag-1 tag-2] }
-      let_it_be(:ci_runner) { create(:ci_runner, tag_list: tag_names.map { |n| ActsAsTaggableOn::Tag.create!(name: n) }) }
+      let_it_be(:ci_runner) { create(:ci_runner, tag_list: tag_names.map { |n| create(:ci_tag, name: n) }) }
       let_it_be(:build) { create(:ci_build, pipeline: pipeline, runner: ci_runner) }
 
       it 'has runner attributes', :aggregate_failures do
diff --git a/spec/models/acts_as_taggable_on/tag_spec.rb b/spec/models/acts_as_taggable_on/tag_spec.rb
deleted file mode 100644
index 4b390bbd0bb3c042c87f948a11037a448a287838..0000000000000000000000000000000000000000
--- a/spec/models/acts_as_taggable_on/tag_spec.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe ActsAsTaggableOn::Tag do
-  it 'has the same connection as Ci::ApplicationRecord' do
-    query = 'select current_database()'
-
-    expect(described_class.connection.execute(query).first).to eq(Ci::ApplicationRecord.connection.execute(query).first)
-    expect(described_class.retrieve_connection.execute(query).first).to eq(Ci::ApplicationRecord.retrieve_connection.execute(query).first)
-  end
-
-  it 'has the same sticking as Ci::ApplicationRecord' do
-    expect(described_class.sticking).to eq(Ci::ApplicationRecord.sticking)
-  end
-end
diff --git a/spec/models/acts_as_taggable_on/tagging_spec.rb b/spec/models/acts_as_taggable_on/tagging_spec.rb
deleted file mode 100644
index 4520a0aaf704fa456566942c6cbe127c4ca7d579..0000000000000000000000000000000000000000
--- a/spec/models/acts_as_taggable_on/tagging_spec.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe ActsAsTaggableOn::Tagging do
-  it 'has the same connection as Ci::ApplicationRecord' do
-    query = 'select current_database()'
-
-    expect(described_class.connection.execute(query).first).to eq(Ci::ApplicationRecord.connection.execute(query).first)
-    expect(described_class.retrieve_connection.execute(query).first).to eq(Ci::ApplicationRecord.retrieve_connection.execute(query).first)
-  end
-
-  it 'has the same sticking as Ci::ApplicationRecord' do
-    expect(described_class.sticking).to eq(Ci::ApplicationRecord.sticking)
-  end
-end
diff --git a/spec/models/ci/bridge_spec.rb b/spec/models/ci/bridge_spec.rb
index 38a590eeff045f8e86c748ddef5bde0128de64c9..88a127c2421c84b9c6f93b19a8bceb4317f5b1c1 100644
--- a/spec/models/ci/bridge_spec.rb
+++ b/spec/models/ci/bridge_spec.rb
@@ -52,7 +52,7 @@
     end
 
     it 'returns an empty TagList for tag_list' do
-      expect(bridge.tag_list).to be_a(ActsAsTaggableOn::TagList)
+      expect(bridge.tag_list).to be_a(Gitlab::Ci::Tags::TagList)
     end
   end
 
diff --git a/spec/models/ci/build_spec.rb b/spec/models/ci/build_spec.rb
index 56de00daacc97a3b1287c01686aab441f57273a0..cccf39e26cf135a6fa8a63116d08501802a295f1 100644
--- a/spec/models/ci/build_spec.rb
+++ b/spec/models/ci/build_spec.rb
@@ -4262,7 +4262,7 @@ def run_job_without_exception
   describe '.matches_tag_ids' do
     let_it_be(:build, reload: true) { create(:ci_build, pipeline: pipeline, user: user) }
 
-    let(:tag_ids) { ::ActsAsTaggableOn::Tag.named_any(tag_list).ids }
+    let(:tag_ids) { Ci::Tag.named_any(tag_list).ids }
 
     subject { described_class.where(id: build).matches_tag_ids(tag_ids) }
 
diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb
index c9112e22ec5374445caa1f06fc6c01a2ec23c5bd..83cdee44c7418e2d992e431ae14e91ee605d697d 100644
--- a/spec/models/ci/runner_spec.rb
+++ b/spec/models/ci/runner_spec.rb
@@ -64,7 +64,7 @@
 
       context 'tag does not exist' do
         it 'creates a tag' do
-          expect { runner.save! }.to change(ActsAsTaggableOn::Tag, :count).by(1)
+          expect { runner.save! }.to change(Ci::Tag, :count).by(1)
         end
 
         it 'creates an association to the tag' do
@@ -76,11 +76,11 @@
 
       context 'tag already exists' do
         before do
-          ActsAsTaggableOn::Tag.create!(name: tag_name)
+          Ci::Tag.create!(name: tag_name)
         end
 
         it 'does not create a tag' do
-          expect { runner.save! }.not_to change(ActsAsTaggableOn::Tag, :count)
+          expect { runner.save! }.not_to change(Ci::Tag, :count)
         end
 
         it 'creates an association to the tag' do
diff --git a/spec/support/rspec_order_todo.yml b/spec/support/rspec_order_todo.yml
index 20f2141ae5273dd56541e8b6ae00a7d56d9240db..1015fac53940aecb1195c8d32d88eb7367f3fe2f 100644
--- a/spec/support/rspec_order_todo.yml
+++ b/spec/support/rspec_order_todo.yml
@@ -6083,8 +6083,6 @@
 - './spec/models/ability_spec.rb'
 - './spec/models/abuse_report_spec.rb'
 - './spec/models/active_session_spec.rb'
-- './spec/models/acts_as_taggable_on/tagging_spec.rb'
-- './spec/models/acts_as_taggable_on/tag_spec.rb'
 - './spec/models/alerting/project_alerting_setting_spec.rb'
 - './spec/models/alert_management/alert_assignee_spec.rb'
 - './spec/models/alert_management/alert_spec.rb'