diff options
Diffstat (limited to 'scripts/rspec_helpers.sh')
-rw-r--r-- | scripts/rspec_helpers.sh | 100 |
1 files changed, 86 insertions, 14 deletions
diff --git a/scripts/rspec_helpers.sh b/scripts/rspec_helpers.sh index cabd2e6380c..2a6eb91a1f3 100644 --- a/scripts/rspec_helpers.sh +++ b/scripts/rspec_helpers.sh @@ -16,19 +16,27 @@ function retrieve_tests_metadata() { # always target the canonical project here, so the branch must be hardcoded local project_path="gitlab-org/gitlab" local artifact_branch="master" + local username="gitlab-bot" + local job_name="update-tests-metadata" local test_metadata_job_id # Ruby - test_metadata_job_id=$(scripts/api/get_job_id.rb --endpoint "https://gitlab.com/api/v4" --project "${project_path}" -q "status=success" -q "ref=${artifact_branch}" -q "username=gitlab-bot" -Q "scope=success" --job-name "update-tests-metadata") - - if [[ ! -f "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" ]]; then - scripts/api/download_job_artifact.rb --endpoint "https://gitlab.com/api/v4" --project "${project_path}" --job-id "${test_metadata_job_id}" --artifact-path "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" || echo "{}" > "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" - fi - - if [[ ! -f "${FLAKY_RSPEC_SUITE_REPORT_PATH}" ]]; then - # Fixed ID to get the report back to a good state after https://gitlab.com/gitlab-org/gitlab/-/issues/345798 / https://gitlab.com/gitlab-org/gitlab/-/merge_requests/74617 - test_metadata_job_id=1766932099 - scripts/api/download_job_artifact.rb --endpoint "https://gitlab.com/api/v4" --project "${project_path}" --job-id "${test_metadata_job_id}" --artifact-path "${FLAKY_RSPEC_SUITE_REPORT_PATH}" || echo "{}" > "${FLAKY_RSPEC_SUITE_REPORT_PATH}" + test_metadata_job_id=$(scripts/api/get_job_id.rb --endpoint "https://gitlab.com/api/v4" --project "${project_path}" -q "status=success" -q "ref=${artifact_branch}" -q "username=${username}" -Q "scope=success" --job-name "${job_name}") + + if [[ -n "${test_metadata_job_id}" ]]; then + echo "test_metadata_job_id: ${test_metadata_job_id}" + + if [[ ! -f "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" ]]; then + scripts/api/download_job_artifact.rb --endpoint "https://gitlab.com/api/v4" --project "${project_path}" --job-id "${test_metadata_job_id}" --artifact-path "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" || echo "{}" > "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" + fi + + if [[ ! -f "${FLAKY_RSPEC_SUITE_REPORT_PATH}" ]]; then + scripts/api/download_job_artifact.rb --endpoint "https://gitlab.com/api/v4" --project "${project_path}" --job-id "${test_metadata_job_id}" --artifact-path "${FLAKY_RSPEC_SUITE_REPORT_PATH}" || echo "{}" > "${FLAKY_RSPEC_SUITE_REPORT_PATH}" + fi + else + echo "test_metadata_job_id couldn't be found!" + echo "{}" > "${KNAPSACK_RSPEC_SUITE_REPORT_PATH}" + echo "{}" > "${FLAKY_RSPEC_SUITE_REPORT_PATH}" fi fi } @@ -63,18 +71,58 @@ function retrieve_tests_mapping() { # always target the canonical project here, so the branch must be hardcoded local project_path="gitlab-org/gitlab" local artifact_branch="master" + local username="gitlab-bot" + local job_name="update-tests-metadata" local test_metadata_with_mapping_job_id - test_metadata_with_mapping_job_id=$(scripts/api/get_job_id.rb --endpoint "https://gitlab.com/api/v4" --project "${project_path}" -q "status=success" -q "ref=${artifact_branch}" -q "username=gitlab-bot" -Q "scope=success" --job-name "update-tests-metadata" --artifact-path "${RSPEC_PACKED_TESTS_MAPPING_PATH}.gz") + test_metadata_with_mapping_job_id=$(scripts/api/get_job_id.rb --endpoint "https://gitlab.com/api/v4" --project "${project_path}" -q "status=success" -q "ref=${artifact_branch}" -q "username=${username}" -Q "scope=success" --job-name "${job_name}") - if [[ ! -f "${RSPEC_PACKED_TESTS_MAPPING_PATH}" ]]; then - (scripts/api/download_job_artifact.rb --endpoint "https://gitlab.com/api/v4" --project "${project_path}" --job-id "${test_metadata_with_mapping_job_id}" --artifact-path "${RSPEC_PACKED_TESTS_MAPPING_PATH}.gz" && gzip -d "${RSPEC_PACKED_TESTS_MAPPING_PATH}.gz") || echo "{}" > "${RSPEC_PACKED_TESTS_MAPPING_PATH}" + if [[ -n "${test_metadata_with_mapping_job_id}" ]]; then + echo "test_metadata_with_mapping_job_id: ${test_metadata_with_mapping_job_id}" + + if [[ ! -f "${RSPEC_PACKED_TESTS_MAPPING_PATH}" ]]; then + (scripts/api/download_job_artifact.rb --endpoint "https://gitlab.com/api/v4" --project "${project_path}" --job-id "${test_metadata_with_mapping_job_id}" --artifact-path "${RSPEC_PACKED_TESTS_MAPPING_PATH}.gz" && gzip -d "${RSPEC_PACKED_TESTS_MAPPING_PATH}.gz") || echo "{}" > "${RSPEC_PACKED_TESTS_MAPPING_PATH}" + fi + else + echo "test_metadata_with_mapping_job_id couldn't be found!" + echo "{}" > "${RSPEC_PACKED_TESTS_MAPPING_PATH}" fi fi scripts/unpack-test-mapping "${RSPEC_PACKED_TESTS_MAPPING_PATH}" "${RSPEC_TESTS_MAPPING_PATH}" } +function retrieve_frontend_fixtures_mapping() { + mkdir -p $(dirname "$FRONTEND_FIXTURES_MAPPING_PATH") + + if [[ -n "${RETRIEVE_TESTS_METADATA_FROM_PAGES}" ]]; then + if [[ ! -f "${FRONTEND_FIXTURES_MAPPING_PATH}" ]]; then + (curl --location -o "${FRONTEND_FIXTURES_MAPPING_PATH}" "https://gitlab-org.gitlab.io/gitlab/${FRONTEND_FIXTURES_MAPPING_PATH}") || echo "{}" > "${FRONTEND_FIXTURES_MAPPING_PATH}" + fi + else + # ${CI_DEFAULT_BRANCH} might not be master in other forks but we want to + # always target the canonical project here, so the branch must be hardcoded + local project_path="gitlab-org/gitlab" + local artifact_branch="master" + local username="gitlab-bot" + local job_name="generate-frontend-fixtures-mapping" + local test_metadata_with_mapping_job_id + + test_metadata_with_mapping_job_id=$(scripts/api/get_job_id.rb --endpoint "https://gitlab.com/api/v4" --project "${project_path}" -q "ref=${artifact_branch}" -q "username=${username}" -Q "scope=success" --job-name "${job_name}") + + if [[ $? -eq 0 ]] && [[ -n "${test_metadata_with_mapping_job_id}" ]]; then + echo "test_metadata_with_mapping_job_id: ${test_metadata_with_mapping_job_id}" + + if [[ ! -f "${FRONTEND_FIXTURES_MAPPING_PATH}" ]]; then + (scripts/api/download_job_artifact.rb --endpoint "https://gitlab.com/api/v4" --project "${project_path}" --job-id "${test_metadata_with_mapping_job_id}" --artifact-path "${FRONTEND_FIXTURES_MAPPING_PATH}") || echo "{}" > "${FRONTEND_FIXTURES_MAPPING_PATH}" + fi + else + echo "test_metadata_with_mapping_job_id couldn't be found!" + echo "{}" > "${FRONTEND_FIXTURES_MAPPING_PATH}" + fi + fi +} + function update_tests_mapping() { if ! crystalball_rspec_data_exists; then echo "No crystalball rspec data found." @@ -115,7 +163,7 @@ function rspec_simple_job() { export NO_KNAPSACK="1" - bin/rspec -Ispec -rspec_helper --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml ${rspec_opts} + eval "bin/rspec -Ispec -rspec_helper --color --format documentation --format RspecJunitFormatter --out junit_rspec.xml ${rspec_opts}" } function rspec_db_library_code() { @@ -258,3 +306,27 @@ function rspec_matched_foss_tests() { echo "No impacted FOSS rspec tests to run" fi } + +function generate_frontend_fixtures_mapping() { + local pattern="" + + if [[ -d "ee/" ]]; then + pattern=",ee/" + fi + + if [[ -d "jh/" ]]; then + pattern="${pattern},jh/" + fi + + if [[ -n "${pattern}" ]]; then + pattern="{${pattern}}" + fi + + pattern="${pattern}spec/frontend/fixtures/**/*.rb" + + export GENERATE_FRONTEND_FIXTURES_MAPPING="true" + + mkdir -p $(dirname "$FRONTEND_FIXTURES_MAPPING_PATH") + + rspec_simple_job "--pattern \"${pattern}\"" +} |