summaryrefslogtreecommitdiff
path: root/qa/qa/specs/features/project/auto_devops_spec.rb
blob: 4ab4135a11c1de386a840009ab84f8c64dffbc6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
module QA
  feature 'Auto Devops', :kubernetes do
    let(:executor) { "qa-runner-#{Time.now.to_i}" }

    after do
      @cluster&.remove!
    end

    scenario 'user creates a new project and runs auto devops' do
      Runtime::Browser.visit(:gitlab, Page::Main::Login)
      Page::Main::Login.act { sign_in_using_credentials }

      project = Factory::Resource::Project.fabricate! do |p|
        p.name = 'project-with-autodevops'
        p.description = 'Project with Auto Devops'
      end

      # Create Auto Devops compatible repo
      project.visit!
      Git::Repository.perform do |repository|
        repository.uri = Page::Project::Show.act do
          choose_repository_clone_http
          repository_location.uri
        end

        repository.use_default_credentials
        repository.clone
        repository.configure_identity('GitLab QA', 'root@gitlab.com')

        repository.checkout_new_branch('master')
        repository.add_file('config.ru', File.read(File.join(__dir__, "../../../fixtures/auto_devops_rack/config.ru")))
        repository.add_file('Gemfile', File.read(File.join(__dir__, "../../../fixtures/auto_devops_rack/Gemfile")))
        repository.add_file('Gemfile.lock', File.read(File.join(__dir__, "../../../fixtures/auto_devops_rack/Gemfile.lock")))
        repository.add_file('Rakefile', File.read(File.join(__dir__, "../../../fixtures/auto_devops_rack/Rakefile")))
        repository.commit('Create auto devops repo')
        repository.push_changes("master:master")
      end

      # Create and connect K8s cluster
      @cluster = Service::KubernetesCluster.new.create!
      kubernetes_cluster = Factory::Resource::KubernetesCluster.fabricate! do |c|
        c.project = project
        c.cluster = @cluster
        c.install_helm_tiller = true
        c.install_ingress = true
        c.install_prometheus = true
        c.install_runner = true
      end

      project.visit!
      Page::Menu::Side.act { click_ci_cd_settings }
      Page::Project::Settings::CICD.perform do |p|
        p.enable_auto_devops_with_domain("#{kubernetes_cluster.ingress_ip}.nip.io")
      end

      project.visit!
      Page::Menu::Side.act { click_ci_cd_pipelines }
      Page::Project::Pipeline::Index.act { go_to_latest_pipeline }

      Page::Project::Pipeline::Show.perform do |pipeline|
        expect(pipeline).to have_build('build', status: :success, wait: 600)
        expect(pipeline).to have_build('test', status: :success, wait: 600)
        expect(pipeline).to have_build('production', status: :success, wait: 600)
        expect(pipeline).to have_build('performance', status: :success, wait: 800)
      end
    end
  end
end