From 11df4bf91b8cf9ac7bb601241992e300eebf684c Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 11 May 2022 18:07:55 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitlab/ci/review-apps/qa.gitlab-ci.yml | 34 ++- .../components/environment_folder.vue | 8 +- .../notes/components/comment_form.vue | 2 +- .../releases/components/tag_field_new.vue | 12 +- .../stores/modules/edit_new/actions.js | 2 +- .../stores/modules/edit_new/getters.js | 10 +- .../stores/modules/edit_new/mutations.js | 1 + .../releases/stores/modules/edit_new/state.js | 1 + .../admin_runner_edit_app.vue | 4 +- .../admin_runner_show_app.vue | 2 +- .../runner/components/runner_jobs.vue | 2 +- .../runner/components/runner_projects.vue | 2 +- .../runner/components/runner_update_form.vue | 2 +- .../graphql/details/runner.query.graphql | 7 - .../details/runner_details.fragment.graphql | 5 - .../runner_details_shared.fragment.graphql | 39 ---- .../edit/runner_fields.fragment.graphql | 5 + .../runner_fields_shared.fragment.graphql | 15 ++ .../graphql/edit/runner_form.query.graphql | 7 + .../runner_update.mutation.graphql | 4 +- .../runner/graphql/show/runner.query.graphql | 41 ++++ .../runner_jobs.query.graphql | 0 .../runner_projects.query.graphql | 0 .../sidebar/issuable_move_dropdown.vue | 2 +- app/controllers/projects_controller.rb | 5 + app/helpers/application_settings_helper.rb | 1 + app/helpers/merge_requests_helper.rb | 6 +- app/helpers/profiles_helper.rb | 4 +- app/models/application_setting.rb | 5 + .../application_setting_implementation.rb | 1 + app/models/ci/build.rb | 2 +- app/models/instance_configuration.rb | 1 + app/models/key.rb | 5 + app/models/project.rb | 11 + .../push_options_handler_service.rb | 4 + .../_account_and_limit.html.haml | 5 +- .../_size_limits.html.haml | 3 + ...ticate_running_job_token_for_artifacts.yml | 8 + ...expose_running_job_token_for_artifacts.yml | 8 + .../15-0-deprecate-postgresql-12.yml | 19 ++ ...max_export_size_to_application_settings.rb | 7 + ...e_namespaces_id_parent_id_partial_index.rb | 15 ++ db/schema_migrations/20220426130217 | 1 + db/schema_migrations/20220505060011 | 1 + db/structure.sql | 3 +- doc/api/api_resources.md | 1 + doc/api/cluster_agent_tokens.md | 216 ++++++++++++++++++ doc/api/graphql/reference/index.md | 4 +- doc/api/managed_licenses.md | 16 +- doc/api/project_import_export.md | 6 + doc/api/settings.md | 3 + ...t_application_and_rate_limit_guidelines.md | 2 +- doc/development/migration_style_guide.md | 6 +- doc/development/pipelines.md | 2 +- doc/update/deprecations.md | 21 ++ doc/update/index.md | 3 +- .../settings/account_and_limit_settings.md | 28 +-- .../dependency_scanning/index.md | 2 +- doc/user/ssh.md | 2 - lib/api/api.rb | 1 + lib/api/ci/helpers/runner.rb | 37 ++- lib/api/ci/runner.rb | 9 +- lib/api/clusters/agent_tokens.rb | 98 ++++++++ lib/api/entities/ci/job_request/dependency.rb | 11 +- lib/api/entities/ci/job_request/response.rb | 4 +- lib/api/entities/clusters/agent_token.rb | 11 + .../entities/clusters/agent_token_basic.rb | 17 ++ .../clusters/agent_token_with_token.rb | 11 + lib/api/project_export.rb | 10 +- lib/api/settings.rb | 1 + lib/api/usage_data.rb | 2 +- lib/api/usage_data_non_sql_metrics.rb | 1 + .../references/abstract_reference_filter.rb | 5 + .../references/issue_reference_filter.rb | 4 + .../Jobs/Dependency-Scanning.gitlab-ci.yml | 17 +- lib/gitlab/git_access.rb | 4 +- locale/gitlab.pot | 41 ++-- qa/qa/support/knapsack_report.rb | 4 +- qa/tasks/knapsack.rake | 2 +- spec/controllers/projects_controller_spec.rb | 35 +++ spec/factories/clusters/agent_tokens.rb | 1 + spec/factories/keys.rb | 10 + spec/features/admin/admin_settings_spec.rb | 10 + .../schemas/public_api/v4/agent_token.json | 24 ++ .../public_api/v4/agent_token_basic.json | 22 ++ .../public_api/v4/agent_token_with_token.json | 26 +++ .../schemas/public_api/v4/agent_tokens.json | 4 + .../markdown_golden_master_examples.yml | 2 +- .../environments/environment_folder_spec.js | 19 +- spec/frontend/fixtures/runner.rb | 22 +- .../releases/components/tag_field_new_spec.js | 13 ++ .../stores/modules/detail/actions_spec.js | 2 +- .../stores/modules/detail/getters_spec.js | 10 + .../stores/modules/detail/mutations_spec.js | 3 +- .../admin_runner_edit_app_spec.js | 10 +- .../admin_runner_show_app_spec.js | 2 +- .../runner/components/runner_jobs_spec.js | 2 +- .../runner/components/runner_projects_spec.js | 2 +- .../components/runner_update_form_spec.js | 25 +- spec/frontend/runner/mock_data.js | 22 +- spec/helpers/profiles_helper_spec.rb | 9 +- .../ci/job_request/dependency_spec.rb | 17 +- .../references/issue_reference_filter_spec.rb | 22 ++ spec/lib/gitlab/git_access_spec.rb | 9 + spec/models/application_setting_spec.rb | 8 + spec/models/instance_configuration_spec.rb | 9 +- spec/models/key_spec.rb | 8 +- spec/models/project_spec.rb | 30 ++- spec/models/user_spec.rb | 4 +- .../api/ci/runner/jobs_artifacts_spec.rb | 187 ++++++++++++--- .../api/ci/runner/jobs_request_post_spec.rb | 31 ++- .../api/clusters/agent_tokens_spec.rb | 179 +++++++++++++++ spec/requests/api/internal/base_spec.rb | 8 +- spec/requests/api/project_export_spec.rb | 21 ++ spec/requests/api/settings_spec.rb | 3 + spec/requests/api/users_spec.rb | 8 +- .../keys/expiry_notification_service_spec.rb | 2 +- .../push_options_handler_service_spec.rb | 25 ++ .../profiles/keys/_form.html.haml_spec.rb | 4 +- .../profiles/keys/_key.html.haml_spec.rb | 8 +- .../expired_notification_worker_spec.rb | 10 +- .../expiring_soon_notification_worker_spec.rb | 2 +- 122 files changed, 1509 insertions(+), 285 deletions(-) delete mode 100644 app/assets/javascripts/runner/graphql/details/runner.query.graphql delete mode 100644 app/assets/javascripts/runner/graphql/details/runner_details.fragment.graphql delete mode 100644 app/assets/javascripts/runner/graphql/details/runner_details_shared.fragment.graphql create mode 100644 app/assets/javascripts/runner/graphql/edit/runner_fields.fragment.graphql create mode 100644 app/assets/javascripts/runner/graphql/edit/runner_fields_shared.fragment.graphql create mode 100644 app/assets/javascripts/runner/graphql/edit/runner_form.query.graphql rename app/assets/javascripts/runner/graphql/{details => edit}/runner_update.mutation.graphql (68%) create mode 100644 app/assets/javascripts/runner/graphql/show/runner.query.graphql rename app/assets/javascripts/runner/graphql/{details => show}/runner_jobs.query.graphql (100%) rename app/assets/javascripts/runner/graphql/{details => show}/runner_projects.query.graphql (100%) create mode 100644 config/feature_flags/development/ci_authenticate_running_job_token_for_artifacts.yml create mode 100644 config/feature_flags/development/ci_expose_running_job_token_for_artifacts.yml create mode 100644 data/deprecations/15-0-deprecate-postgresql-12.yml create mode 100644 db/migrate/20220426130217_add_max_export_size_to_application_settings.rb create mode 100644 db/post_migrate/20220505060011_remove_namespaces_id_parent_id_partial_index.rb create mode 100644 db/schema_migrations/20220426130217 create mode 100644 db/schema_migrations/20220505060011 create mode 100644 doc/api/cluster_agent_tokens.md create mode 100644 lib/api/clusters/agent_tokens.rb create mode 100644 lib/api/entities/clusters/agent_token.rb create mode 100644 lib/api/entities/clusters/agent_token_basic.rb create mode 100644 lib/api/entities/clusters/agent_token_with_token.rb create mode 100644 spec/fixtures/api/schemas/public_api/v4/agent_token.json create mode 100644 spec/fixtures/api/schemas/public_api/v4/agent_token_basic.json create mode 100644 spec/fixtures/api/schemas/public_api/v4/agent_token_with_token.json create mode 100644 spec/fixtures/api/schemas/public_api/v4/agent_tokens.json create mode 100644 spec/requests/api/clusters/agent_tokens_spec.rb diff --git a/.gitlab/ci/review-apps/qa.gitlab-ci.yml b/.gitlab/ci/review-apps/qa.gitlab-ci.yml index a1bd57ce4f6..98928ce4715 100644 --- a/.gitlab/ci/review-apps/qa.gitlab-ci.yml +++ b/.gitlab/ci/review-apps/qa.gitlab-ci.yml @@ -5,6 +5,12 @@ include: - /ci/allure-report.yml - /ci/knapsack-report.yml +.bundler_variables: + variables: + BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES: "true" + BUNDLE_SILENCE_ROOT_WARNING: "true" + BUNDLE_PATH: vendor + .test_variables: variables: QA_DEBUG: "true" @@ -21,16 +27,17 @@ include: - .use-docker-in-docker - .qa-cache - .test_variables + - .bundler_variables image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images:debian-bullseye-ruby-2.7-bundler-2.3-git-2.33-lfs-2.9-chrome-99-docker-20.10.14-gcloud-383-kubectl-1.23 stage: qa - needs: ["review-deploy"] + needs: + - review-deploy + - download-knapsack-report variables: DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_CERTDIR: /certs DOCKER_CERT_PATH: /certs/client DOCKER_TLS_VERIFY: 1 - BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES: "true" - BUNDLE_PATH: vendor before_script: - export EE_LICENSE="$(cat $REVIEW_APPS_EE_LICENSE_FILE)" - export QA_GITLAB_URL="$(cat environment_url.txt)" @@ -71,6 +78,25 @@ include: ALLURE_MERGE_REQUEST_IID: $CI_MERGE_REQUEST_IID ALLURE_RESULTS_GLOB: qa/tmp/allure-results/* +# Store knapsack report as artifact so the same report is reused across all jobs +download-knapsack-report: + image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/gitlab-build-images/debian-bullseye-ruby-2.7:bundler-2.3-git-2.33-chrome-99 + extends: + - .qa-cache + - .bundler_variables + - .review:rules:review-qa-reliable + stage: prepare + before_script: + - cd qa && bundle install + script: + - QA_KNAPSACK_REPORT_NAME=review-qa-reliable bundle exec rake "knapsack:download" + - QA_KNAPSACK_REPORT_NAME=review-qa-all bundle exec rake "knapsack:download" + allow_failure: true + artifacts: + paths: + - qa/knapsack/review-qa-*.json + expire_in: 1 day + review-qa-smoke: extends: - .review-qa-base @@ -145,7 +171,7 @@ allure-report-qa-all: variables: ALLURE_JOB_NAME: review-qa-all -knapsack-report: +upload-knapsack-report: extends: - .generate-knapsack-report-base stage: post-qa diff --git a/app/assets/javascripts/environments/components/environment_folder.vue b/app/assets/javascripts/environments/components/environment_folder.vue index d5c6d26cfd0..788c3ba6fed 100644 --- a/app/assets/javascripts/environments/components/environment_folder.vue +++ b/app/assets/javascripts/environments/components/environment_folder.vue @@ -34,9 +34,6 @@ export default { variables() { return { environment: this.nestedEnvironment.latest, scope: this.scope }; }, - pollInterval() { - return this.interval; - }, }, interval: { query: pollIntervalQuery, @@ -73,6 +70,11 @@ export default { methods: { toggleCollapse() { this.visible = !this.visible; + if (this.visible) { + this.$apollo.queries.folder.startPolling(this.interval); + } else { + this.$apollo.queries.folder.stopPolling(); + } }, isFirstEnvironment(index) { return index === 0; diff --git a/app/assets/javascripts/notes/components/comment_form.vue b/app/assets/javascripts/notes/components/comment_form.vue index a9948fed3b6..3432fe12705 100644 --- a/app/assets/javascripts/notes/components/comment_form.vue +++ b/app/assets/javascripts/notes/components/comment_form.vue @@ -386,7 +386,7 @@ export default { data-testid="add-to-review-button" type="submit" category="primary" - variant="success" + variant="confirm" @click.prevent="handleSaveDraft()" >{{ __('Add to review') }} diff --git a/app/assets/javascripts/releases/components/tag_field_new.vue b/app/assets/javascripts/releases/components/tag_field_new.vue index dcdf89ae0d9..d3b6d07590f 100644 --- a/app/assets/javascripts/releases/components/tag_field_new.vue +++ b/app/assets/javascripts/releases/components/tag_field_new.vue @@ -52,7 +52,10 @@ export default { }, }, showTagNameValidationError() { - return this.isInputDirty && this.validationErrors.isTagNameEmpty; + return ( + this.isInputDirty && + (this.validationErrors.isTagNameEmpty || this.validationErrors.existingRelease) + ); }, tagNameInputId() { return uniqueId('tag-name-input-'); @@ -60,6 +63,11 @@ export default { createFromSelectorId() { return uniqueId('create-from-selector-'); }, + tagFeedback() { + return this.validationErrors.existingRelease + ? __('Selected tag is already in use. Choose another option.') + : __('Tag name is required.'); + }, }, methods: { ...mapActions('editNew', ['updateReleaseTagName', 'updateCreateFrom', 'fetchTagNotes']), @@ -112,7 +120,7 @@ export default { { }) .catch((error) => { createFlash({ - message: s__('Release|Something went wrong while getting the tag notes.'), + message: s__('Release|Unable to fetch the tag notes.'), }); commit(types.RECEIVE_TAG_NOTES_ERROR, error); diff --git a/app/assets/javascripts/releases/stores/modules/edit_new/getters.js b/app/assets/javascripts/releases/stores/modules/edit_new/getters.js index 036bf4f3eaf..0ca5eb9931a 100644 --- a/app/assets/javascripts/releases/stores/modules/edit_new/getters.js +++ b/app/assets/javascripts/releases/stores/modules/edit_new/getters.js @@ -53,6 +53,10 @@ export const validationErrors = (state) => { errors.isTagNameEmpty = true; } + if (state.existingRelease) { + errors.existingRelease = true; + } + // Each key of this object is a URL, and the value is an // array of Release link objects that share this URL. // This is used for detecting duplicate URLs. @@ -114,7 +118,11 @@ export const validationErrors = (state) => { /** Returns whether or not the release object is valid */ export const isValid = (_state, getters) => { const errors = getters.validationErrors; - return Object.values(errors.assets.links).every(isEmpty) && !errors.isTagNameEmpty; + return ( + Object.values(errors.assets.links).every(isEmpty) && + !errors.isTagNameEmpty && + !errors.existingRelease + ); }; /** Returns all the variables for a `releaseUpdate` GraphQL mutation */ diff --git a/app/assets/javascripts/releases/stores/modules/edit_new/mutations.js b/app/assets/javascripts/releases/stores/modules/edit_new/mutations.js index 38153e4c67b..6b22468bbfe 100644 --- a/app/assets/javascripts/releases/stores/modules/edit_new/mutations.js +++ b/app/assets/javascripts/releases/stores/modules/edit_new/mutations.js @@ -103,6 +103,7 @@ export default { state.fetchError = undefined; state.isFetchingTagNotes = false; state.tagNotes = data.message; + state.existingRelease = data.release; }, [types.RECEIVE_TAG_NOTES_ERROR](state, error) { state.fetchError = error; diff --git a/app/assets/javascripts/releases/stores/modules/edit_new/state.js b/app/assets/javascripts/releases/stores/modules/edit_new/state.js index 9f8146997c1..33cb3ee06d0 100644 --- a/app/assets/javascripts/releases/stores/modules/edit_new/state.js +++ b/app/assets/javascripts/releases/stores/modules/edit_new/state.js @@ -53,4 +53,5 @@ export default ({ tagNotes: '', includeTagNotes: false, + existingRelease: null, }); diff --git a/app/assets/javascripts/runner/admin_runner_edit/admin_runner_edit_app.vue b/app/assets/javascripts/runner/admin_runner_edit/admin_runner_edit_app.vue index 7c2a575bf93..40787cf72da 100644 --- a/app/assets/javascripts/runner/admin_runner_edit/admin_runner_edit_app.vue +++ b/app/assets/javascripts/runner/admin_runner_edit/admin_runner_edit_app.vue @@ -5,7 +5,7 @@ import { convertToGraphQLId } from '~/graphql_shared/utils'; import RunnerHeader from '../components/runner_header.vue'; import RunnerUpdateForm from '../components/runner_update_form.vue'; import { I18N_FETCH_ERROR } from '../constants'; -import runnerQuery from '../graphql/details/runner.query.graphql'; +import runnerFormQuery from '../graphql/edit/runner_form.query.graphql'; import { captureException } from '../sentry_utils'; export default { @@ -32,7 +32,7 @@ export default { }, apollo: { runner: { - query: runnerQuery, + query: runnerFormQuery, variables() { return { id: convertToGraphQLId(TYPE_CI_RUNNER, this.runnerId), diff --git a/app/assets/javascripts/runner/admin_runner_show/admin_runner_show_app.vue b/app/assets/javascripts/runner/admin_runner_show/admin_runner_show_app.vue index ef48d7799f8..c3f317b40b0 100644 --- a/app/assets/javascripts/runner/admin_runner_show/admin_runner_show_app.vue +++ b/app/assets/javascripts/runner/admin_runner_show/admin_runner_show_app.vue @@ -10,7 +10,7 @@ import RunnerPauseButton from '../components/runner_pause_button.vue'; import RunnerHeader from '../components/runner_header.vue'; import RunnerDetails from '../components/runner_details.vue'; import { I18N_FETCH_ERROR } from '../constants'; -import runnerQuery from '../graphql/details/runner.query.graphql'; +import runnerQuery from '../graphql/show/runner.query.graphql'; import { captureException } from '../sentry_utils'; import { saveAlertToLocalStorage } from '../local_storage_alert/save_alert_to_local_storage'; diff --git a/app/assets/javascripts/runner/components/runner_jobs.vue b/app/assets/javascripts/runner/components/runner_jobs.vue index b25d92d049e..4eb1312b204 100644 --- a/app/assets/javascripts/runner/components/runner_jobs.vue +++ b/app/assets/javascripts/runner/components/runner_jobs.vue @@ -1,7 +1,7 @@