1# frozen_string_literal: true 2 3module QA 4 RSpec.describe 'Package', :orchestrated, :packages, :object_storage, quarantine: { 5 only: { job: 'object_storage' }, 6 issue: 'https://gitlab.com/gitlab-org/gitlab/-/issues/335981', 7 type: :bug 8 } do 9 describe 'Conan Repository' do 10 include Runtime::Fixtures 11 12 let(:project) do 13 Resource::Project.fabricate_via_api! do |project| 14 project.name = 'conan-package-project' 15 end 16 end 17 18 let(:package) do 19 Resource::Package.init do |package| 20 package.name = "conantest-#{SecureRandom.hex(8)}" 21 package.project = project 22 end 23 end 24 25 let!(:runner) do 26 Resource::Runner.fabricate! do |runner| 27 runner.name = "qa-runner-#{Time.now.to_i}" 28 runner.tags = ["runner-for-#{project.name}"] 29 runner.executor = :docker 30 runner.project = project 31 end 32 end 33 34 let(:gitlab_address_with_port) do 35 uri = URI.parse(Runtime::Scenario.gitlab_address) 36 "#{uri.scheme}://#{uri.host}:#{uri.port}" 37 end 38 39 after do 40 runner.remove_via_api! 41 package.remove_via_api! 42 end 43 44 it 'publishes, installs, and deletes a Conan package', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/348014' do 45 Flow::Login.sign_in 46 47 Support::Retrier.retry_on_exception(max_attempts: 3, sleep_interval: 2) do 48 Resource::Repository::Commit.fabricate_via_api! do |commit| 49 commit.project = project 50 commit.commit_message = 'Add .gitlab-ci.yml' 51 commit.add_files([{ 52 file_path: '.gitlab-ci.yml', 53 content: 54 <<~YAML 55 image: conanio/gcc7 56 57 test_package: 58 stage: deploy 59 script: 60 - "conan remote add gitlab #{gitlab_address_with_port}/api/v4/projects/#{project.id}/packages/conan" 61 - "conan new #{package.name}/0.1 -t" 62 - "conan create . mycompany/stable" 63 - "CONAN_LOGIN_USERNAME=ci_user CONAN_PASSWORD=${CI_JOB_TOKEN} conan upload #{package.name}/0.1@mycompany/stable --all --remote=gitlab" 64 - "conan install #{package.name}/0.1@mycompany/stable --remote=gitlab" 65 tags: 66 - "runner-for-#{project.name}" 67 YAML 68 }]) 69 end 70 end 71 72 project.visit! 73 Flow::Pipeline.visit_latest_pipeline 74 75 Page::Project::Pipeline::Show.perform do |pipeline| 76 pipeline.click_job('test_package') 77 end 78 79 Page::Project::Job::Show.perform do |job| 80 expect(job).to be_successful(timeout: 800) 81 end 82 83 Page::Project::Menu.perform(&:click_packages_link) 84 85 Page::Project::Packages::Index.perform do |index| 86 expect(index).to have_package(package.name) 87 index.click_package(package.name) 88 end 89 90 Page::Project::Packages::Show.perform(&:click_delete) 91 92 Page::Project::Packages::Index.perform do |index| 93 expect(index).to have_content("Package deleted successfully") 94 expect(index).not_to have_package(package.name) 95 end 96 end 97 end 98 end 99end 100