Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-11-10 21:09:07 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-11-10 21:09:07 +0300
commit206b03aeae3a368983ac3d6ad5e5828030bbaacd (patch)
treed36ce0745729f64bb54c468422f896c53748672c
parentff06f859cdabec3c874c004f93fe5082aeacf917 (diff)
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--GITALY_SERVER_VERSION2
-rw-r--r--Gemfile2
-rw-r--r--Gemfile.lock7
-rw-r--r--app/assets/javascripts/repository/components/preview/index.vue2
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue13
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/index.js7
-rw-r--r--app/assets/javascripts/vue_shared/security_reports/store/modules/sast/actions.js24
-rw-r--r--app/assets/javascripts/vue_shared/security_reports/store/modules/sast/index.js10
-rw-r--r--app/assets/javascripts/vue_shared/security_reports/store/modules/sast/mutation_types.js4
-rw-r--r--app/assets/javascripts/vue_shared/security_reports/store/modules/sast/mutations.js31
-rw-r--r--app/assets/javascripts/vue_shared/security_reports/store/modules/sast/state.js16
-rw-r--r--app/assets/javascripts/vue_shared/security_reports/store/utils.js70
-rw-r--r--app/helpers/stat_anchors_helper.rb24
-rw-r--r--app/models/ci/bridge.rb6
-rw-r--r--app/models/ci/build.rb18
-rw-r--r--app/models/ci/processable.rb20
-rw-r--r--app/presenters/project_presenter.rb6
-rw-r--r--app/views/layouts/project.html.haml1
-rw-r--r--app/views/projects/_home_panel.html.haml12
-rw-r--r--app/views/projects/_stat_anchor_list.html.haml2
-rw-r--r--changelogs/unreleased/36846-fj-add-structured-data-for-projects.yml5
-rw-r--r--config/feature_flags/development/approval_suggestions.yml6
-rw-r--r--config/feature_flags/development/async_commit_diff_files.yml6
-rw-r--r--config/feature_flags/development/auto_devops_banner_disabled.yml4
-rw-r--r--config/feature_flags/development/branch_list_keyset_pagination.yml6
-rw-r--r--config/feature_flags/development/bulk_update_health_status.yml4
-rw-r--r--config/feature_flags/development/ci_bridge_dependency_variables.yml7
-rw-r--r--config/feature_flags/development/ci_jwt_signing_key.yml2
-rw-r--r--config/feature_flags/development/ci_store_pipeline_messages.yml4
-rw-r--r--config/feature_flags/development/default_merge_ref_for_diffs.yml2
-rw-r--r--config/feature_flags/development/feature_flags_legacy_read_only.yml4
-rw-r--r--config/feature_flags/development/force_autodevops_on_by_default.yml6
-rw-r--r--config/feature_flags/development/grape_gitlab_json.yml6
-rw-r--r--config/feature_flags/development/graphql_logging.yml4
-rw-r--r--config/feature_flags/development/hide_jump_to_next_unresolved_in_threads.yml6
-rw-r--r--config/feature_flags/development/lfs_check.yml4
-rw-r--r--config/feature_flags/development/merge_red_head_comments_position_on_demand.yml6
-rw-r--r--config/feature_flags/development/merge_ref_auto_sync.yml6
-rw-r--r--config/feature_flags/development/merge_ref_auto_sync_lock.yml6
-rw-r--r--config/feature_flags/development/remove_legacy_github_client.yml4
-rw-r--r--config/feature_flags/development/remove_resolve_note.yml4
-rw-r--r--config/feature_flags/development/rugged_commit_tree_entry.yml6
-rw-r--r--config/feature_flags/development/rugged_list_commits_by_oid.yml6
-rw-r--r--config/feature_flags/development/snippets_binary_blob.yml4
-rw-r--r--config/feature_flags/development/squash_options.yml6
-rw-r--r--config/feature_flags/development/sse_image_uploads.yml6
-rw-r--r--config/feature_flags/development/webauthn.yml6
-rw-r--r--config/feature_flags/ops/gitlab_sidekiq_enable_semi_reliable_fetcher.yml6
-rw-r--r--doc/administration/audit_events.md2
-rw-r--r--doc/administration/troubleshooting/img/OneLogin-encryption.pngbin9980 -> 0 bytes
-rw-r--r--doc/ci/ci_cd_for_external_repos/img/github_omniauth.pngbin29022 -> 0 bytes
-rw-r--r--doc/ci/ci_cd_for_external_repos/img/github_push_webhook.pngbin45725 -> 0 bytes
-rw-r--r--doc/ci/merge_request_pipelines/img/merge_request_pipelines_doubled_MR_v12_09.pngbin29650 -> 0 bytes
-rw-r--r--doc/ci/merge_request_pipelines/img/merge_request_pipelines_doubled_branch_v12_09.pngbin29680 -> 0 bytes
-rw-r--r--doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merge_request_pipeline_config.pngbin5296 -> 0 bytes
-rw-r--r--doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/img/merge_train_config_v12_0.pngbin9012 -> 0 bytes
-rw-r--r--doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/img/merge_train_immediate_merge.pngbin13038 -> 0 bytes
-rw-r--r--doc/ci/runners/img/shared_runners_admin.pngbin29192 -> 0 bytes
-rw-r--r--doc/development/fe_guide/img/gl-modal.pngbin8767 -> 0 bytes
-rw-r--r--doc/development/geo/framework.md104
-rw-r--r--doc/gitlab-basics/img/fork_choose_namespace.pngbin13674 -> 0 bytes
-rw-r--r--doc/gitlab-basics/img/fork_new.pngbin10572 -> 0 bytes
-rw-r--r--doc/gitlab-basics/img/merge_request_page.pngbin33801 -> 0 bytes
-rw-r--r--doc/gitlab-basics/img/merge_request_select_branch.pngbin16654 -> 0 bytes
-rw-r--r--doc/gitlab-basics/img/project_clone_url.pngbin14978 -> 0 bytes
-rw-r--r--doc/integration/img/jira_dev_panel_jira_setup_1.pngbin29546 -> 0 bytes
-rw-r--r--doc/operations/incident_management/img/alert_detail_full_v13_1.pngbin26957 -> 0 bytes
-rw-r--r--doc/operations/incident_management/img/alert_detail_overview_v13_1.pngbin14827 -> 0 bytes
-rw-r--r--doc/operations/incident_management/img/alert_detail_system_notes_v13_1.pngbin22329 -> 0 bytes
-rw-r--r--doc/operations/incident_management/img/alert_list_search_v13_1.pngbin12166 -> 0 bytes
-rw-r--r--doc/operations/incident_management/img/alert_list_sort_v13_1.pngbin13919 -> 0 bytes
-rw-r--r--doc/operations/incident_management/img/incident_highlight_bar_v13_5.pngbin36177 -> 0 bytes
-rw-r--r--doc/operations/incident_management/img/incident_list.pngbin34194 -> 0 bytes
-rw-r--r--doc/operations/incident_management/img/incident_list_search_v13_3.pngbin29780 -> 0 bytes
-rw-r--r--doc/operations/incident_management/img/incident_sla_settings_v13_5.pngbin21480 -> 0 bytes
-rw-r--r--doc/subscriptions/img/additional_minutes.pngbin12668 -> 0 bytes
-rw-r--r--doc/subscriptions/img/buy_btn.pngbin10917 -> 0 bytes
-rw-r--r--doc/subscriptions/img/buy_minutes_card.pngbin11875 -> 0 bytes
-rw-r--r--doc/topics/autodevops/img/autodevops_multiple_clusters.pngbin12619 -> 0 bytes
-rw-r--r--doc/topics/git/git_rebase.md2
-rw-r--r--doc/user/application_security/dast/img/dast_on_demand_v13_2.pngbin26144 -> 0 bytes
-rw-r--r--doc/user/application_security/dependency_list/img/dependency_list_v12_3.pngbin156081 -> 0 bytes
-rw-r--r--doc/user/application_security/dependency_list/img/dependency_list_v12_4.pngbin137591 -> 0 bytes
-rw-r--r--doc/user/application_security/img/security_configuration_page_v13_2.pngbin51691 -> 0 bytes
-rw-r--r--doc/user/application_security/img/vulnerability_solution.pngbin9750 -> 0 bytes
-rw-r--r--doc/user/application_security/security_dashboard/img/group_security_dashboard_export_csv_v13_1.pngbin42309 -> 0 bytes
-rw-r--r--doc/user/application_security/security_dashboard/img/project_security_dashboard_export_csv_v12_10.pngbin9766 -> 0 bytes
-rw-r--r--doc/user/application_security/vulnerabilities/img/vulnerability_page_download_patch_button_v13_1.pngbin8979 -> 0 bytes
-rw-r--r--doc/user/compliance/license_compliance/img/license_compliance_add_license_v13_0.pngbin21244 -> 0 bytes
-rw-r--r--doc/user/compliance/license_compliance/img/license_compliance_pipeline_tab_v13_0.pngbin18910 -> 0 bytes
-rw-r--r--doc/user/compliance/license_compliance/img/license_compliance_search_v13_0.pngbin10686 -> 0 bytes
-rw-r--r--doc/user/compliance/license_compliance/img/license_compliance_settings_v13_0.pngbin6763 -> 0 bytes
-rw-r--r--doc/user/discussions/img/discussions_resolved.pngbin4152 -> 0 bytes
-rw-r--r--doc/user/discussions/img/mr_review_unresolve2.pngbin8971 -> 0 bytes
-rw-r--r--doc/user/discussions/img/new_issue_for_discussion.pngbin11324 -> 0 bytes
-rw-r--r--doc/user/discussions/img/only_allow_merge_if_all_discussions_are_resolved.pngbin17888 -> 0 bytes
-rw-r--r--doc/user/discussions/img/only_allow_merge_if_all_discussions_are_resolved_msg.pngbin4944 -> 0 bytes
-rw-r--r--doc/user/discussions/img/preview_issue_for_discussion.pngbin26965 -> 0 bytes
-rw-r--r--doc/user/discussions/img/preview_issue_for_discussions.pngbin35211 -> 0 bytes
-rw-r--r--doc/user/discussions/img/resolve_discussion_button.pngbin4683 -> 0 bytes
-rw-r--r--doc/user/discussions/img/resolve_discussion_issue_notice.pngbin4186 -> 0 bytes
-rw-r--r--doc/user/discussions/img/resolve_discussion_open_issue.pngbin7514 -> 0 bytes
-rw-r--r--doc/user/group/dependency_proxy/img/group_dependency_proxy.pngbin40162 -> 0 bytes
-rw-r--r--doc/user/img/unordered_check_list_render_gfm.pngbin2781 -> 0 bytes
-rw-r--r--doc/user/infrastructure/img/terraform_plan_widget_v13_0.pngbin10986 -> 0 bytes
-rw-r--r--doc/user/infrastructure/index.md2
-rw-r--r--doc/user/packages/composer_repository/img/project_id_v13_5.pngbin9264 -> 0 bytes
-rw-r--r--doc/user/packages/go_proxy/index.md149
-rw-r--r--doc/user/profile/img/unknown_sign_in_email_v13_0.pngbin20047 -> 0 bytes
-rw-r--r--doc/user/project/import/img/jira/import_issues_from_jira_form_v12_10.pngbin31679 -> 0 bytes
-rw-r--r--doc/user/project/integrations/img/jira_create_new_group_name.pngbin5168 -> 0 bytes
-rw-r--r--doc/user/project/integrations/img/toggle_metrics_user_starred_dashboard_v13_0.pngbin14922 -> 0 bytes
-rw-r--r--doc/user/project/integrations/img/webex_teams_configuration.pngbin75327 -> 0 bytes
-rw-r--r--doc/user/project/issues/img/closing_and_related_issues.pngbin6395 -> 0 bytes
-rw-r--r--doc/user/project/issues/img/delete_single_design_v12_4.pngbin921627 -> 0 bytes
-rw-r--r--doc/user/project/issues/img/design_drag_and_drop_uploads_v12_9.pngbin245564 -> 0 bytes
-rw-r--r--doc/user/project/issues/img/design_management_v12_3.pngbin91233 -> 0 bytes
-rw-r--r--doc/user/project/issues/img/epic_tree_health_status_v12_10.pngbin38018 -> 0 bytes
-rw-r--r--doc/user/project/issues/img/issue_health_status_v12_10.pngbin12185 -> 0 bytes
-rw-r--r--doc/user/project/issues/img/issue_health_status_v12_9.pngbin10509 -> 0 bytes
-rw-r--r--doc/user/project/merge_requests/img/merge_when_pipeline_succeeds_only_if_succeeds_settings.pngbin7433 -> 0 bytes
-rw-r--r--doc/user/project/operations/img/alert_issue_v13_1.pngbin38546 -> 0 bytes
-rw-r--r--doc/user/project/operations/img/error_details_v12_5.pngbin148683 -> 0 bytes
-rw-r--r--doc/user/project/operations/img/error_details_v12_6.pngbin47553 -> 0 bytes
-rw-r--r--doc/user/project/operations/img/error_details_with_issue_v12_6.pngbin50767 -> 0 bytes
-rw-r--r--doc/user/project/operations/img/error_details_with_issue_v12_7.pngbin80625 -> 0 bytes
-rw-r--r--doc/user/project/operations/img/feature_flags_list_v12_7.pngbin7124 -> 0 bytes
-rw-r--r--doc/user/project/operations/img/specs_list_v12_6.pngbin28297 -> 0 bytes
-rw-r--r--doc/user/project/packages/img/maven_package_view.pngbin16105 -> 0 bytes
-rw-r--r--doc/user/project/packages/img/npm_package_view.pngbin10349 -> 0 bytes
-rw-r--r--doc/user/project/pages/img/icons/click.pngbin4683 -> 0 bytes
-rw-r--r--doc/user/project/pages/img/icons/cogs.pngbin4425 -> 0 bytes
-rw-r--r--doc/user/project/pages/img/icons/fork.pngbin4380 -> 0 bytes
-rw-r--r--doc/user/project/pages/img/icons/free.pngbin3563 -> 0 bytes
-rw-r--r--doc/user/project/pages/img/icons/monitor.pngbin1982 -> 0 bytes
-rw-r--r--doc/user/project/pages/img/pages_workflow_v12_5.pngbin29541 -> 0 bytes
-rw-r--r--doc/user/project/releases/img/edit_release_page_v12_10.pngbin85295 -> 0 bytes
-rw-r--r--doc/user/project/releases/img/edit_release_page_v12_6.pngbin44412 -> 0 bytes
-rw-r--r--doc/user/project/releases/img/release_with_milestone_v12_5.pngbin20197 -> 0 bytes
-rw-r--r--doc/user/project/releases/img/releases.pngbin43776 -> 0 bytes
-rw-r--r--doc/user/project/releases/img/releases_count_v12_8.pngbin27622 -> 0 bytes
-rw-r--r--doc/user/search/img/issue_search_filter.pngbin27091 -> 0 bytes
-rw-r--r--package.json2
-rw-r--r--qa/qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb111
-rwxr-xr-xscripts/lint-doc.sh14
-rw-r--r--spec/features/projects/show/schema_markup_spec.rb23
-rw-r--r--spec/frontend/repository/components/preview/__snapshots__/index_spec.js.snap1
-rw-r--r--spec/frontend/vue_shared/security_reports/store/modules/sast/actions_spec.js203
-rw-r--r--spec/frontend/vue_shared/security_reports/store/modules/sast/mutations_spec.js84
-rw-r--r--spec/helpers/stat_anchors_helper_spec.rb53
-rw-r--r--spec/models/ci/bridge_spec.rb60
-rw-r--r--yarn.lock8
152 files changed, 992 insertions, 245 deletions
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index ebab7e45a64..920d7f9bf9c 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-c6ba78e87bed03254417fe4cd52d377d88ac0b60
+0926b9f8ff2215874eef0e22f750a74da5fe4321
diff --git a/Gemfile b/Gemfile
index 04e78f33d22..e4ddff2a803 100644
--- a/Gemfile
+++ b/Gemfile
@@ -372,7 +372,7 @@ group :development, :test do
gem 'gitlab-styles', '~> 5.0.0', require: false
- gem 'scss_lint', '~> 0.56.0', require: false
+ gem 'scss_lint', '~> 0.59.0', require: false
gem 'haml_lint', '~> 0.36.0', require: false
gem 'bundler-audit', '~> 0.6.1', require: false
diff --git a/Gemfile.lock b/Gemfile.lock
index 3b26093b11d..271c1950ca1 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1081,9 +1081,8 @@ GEM
sawyer (0.8.2)
addressable (>= 2.3.5)
faraday (> 0.8, < 2.0)
- scss_lint (0.56.0)
- rake (>= 0.9, < 13)
- sass (~> 3.5.3)
+ scss_lint (0.59.0)
+ sass (~> 3.5, >= 3.5.5)
securecompare (1.0.0)
seed-fu (2.3.7)
activerecord (>= 3.1)
@@ -1484,7 +1483,7 @@ DEPENDENCIES
rugged (~> 0.28)
sanitize (~> 5.2.1)
sassc-rails (~> 2.1.0)
- scss_lint (~> 0.56.0)
+ scss_lint (~> 0.59.0)
seed-fu (~> 2.3.7)
selenium-webdriver (~> 3.142)
sentry-raven (~> 3.0)
diff --git a/app/assets/javascripts/repository/components/preview/index.vue b/app/assets/javascripts/repository/components/preview/index.vue
index 4e2c8332f37..c9c5aa37645 100644
--- a/app/assets/javascripts/repository/components/preview/index.vue
+++ b/app/assets/javascripts/repository/components/preview/index.vue
@@ -58,7 +58,7 @@ export default {
</gl-link>
</div>
</div>
- <div class="blob-viewer" data-qa-selector="blob_viewer_content">
+ <div class="blob-viewer" data-qa-selector="blob_viewer_content" itemprop="about">
<gl-loading-icon v-if="loading > 0" size="md" color="dark" class="my-4 mx-auto" />
<div v-else-if="readme" ref="readme" v-html="readme.html"></div>
</div>
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue
index e12682b0a49..1d591168a17 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/states/work_in_progress.vue
@@ -1,6 +1,7 @@
<script>
import $ from 'jquery';
import { GlButton } from '@gitlab/ui';
+import { produce } from 'immer';
import { __ } from '~/locale';
import { deprecatedCreateFlash as createFlash } from '~/flash';
import MergeRequest from '~/merge_request';
@@ -80,12 +81,18 @@ export default {
return;
}
- const data = store.readQuery({
+ const sourceData = store.readQuery({
query: getStateQuery,
variables: mergeRequestQueryVariables,
});
- data.project.mergeRequest.workInProgress = workInProgress;
- data.project.mergeRequest.title = title;
+
+ const data = produce(sourceData, draftState => {
+ // eslint-disable-next-line no-param-reassign
+ draftState.project.mergeRequest.workInProgress = workInProgress;
+ // eslint-disable-next-line no-param-reassign
+ draftState.project.mergeRequest.title = title;
+ });
+
store.writeQuery({
query: getStateQuery,
data,
diff --git a/app/assets/javascripts/vue_merge_request_widget/index.js b/app/assets/javascripts/vue_merge_request_widget/index.js
index 72d4e7063ad..8f2cca3309a 100644
--- a/app/assets/javascripts/vue_merge_request_widget/index.js
+++ b/app/assets/javascripts/vue_merge_request_widget/index.js
@@ -10,7 +10,12 @@ Vue.use(Translate);
Vue.use(VueApollo);
const apolloProvider = new VueApollo({
- defaultClient: createDefaultClient(),
+ defaultClient: createDefaultClient(
+ {},
+ {
+ assumeImmutableResults: true,
+ },
+ ),
});
export default () => {
diff --git a/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/actions.js b/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/actions.js
new file mode 100644
index 00000000000..22a45341c51
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/actions.js
@@ -0,0 +1,24 @@
+import * as types from './mutation_types';
+import { fetchDiffData } from '../../utils';
+
+export const setDiffEndpoint = ({ commit }, path) => commit(types.SET_DIFF_ENDPOINT, path);
+
+export const requestDiff = ({ commit }) => commit(types.REQUEST_DIFF);
+
+export const receiveDiffSuccess = ({ commit }, response) =>
+ commit(types.RECEIVE_DIFF_SUCCESS, response);
+
+export const receiveDiffError = ({ commit }, response) =>
+ commit(types.RECEIVE_DIFF_ERROR, response);
+
+export const fetchDiff = ({ state, rootState, dispatch }) => {
+ dispatch('requestDiff');
+
+ return fetchDiffData(rootState, state.paths.diffEndpoint, 'sast')
+ .then(data => {
+ dispatch('receiveDiffSuccess', data);
+ })
+ .catch(() => {
+ dispatch('receiveDiffError');
+ });
+};
diff --git a/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/index.js b/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/index.js
new file mode 100644
index 00000000000..68c81bb4509
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/index.js
@@ -0,0 +1,10 @@
+import state from './state';
+import mutations from './mutations';
+import * as actions from './actions';
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions,
+};
diff --git a/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/mutation_types.js b/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/mutation_types.js
new file mode 100644
index 00000000000..aacec0fb679
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/mutation_types.js
@@ -0,0 +1,4 @@
+export const RECEIVE_DIFF_SUCCESS = 'RECEIVE_DIFF_SUCCESS';
+export const RECEIVE_DIFF_ERROR = 'RECEIVE_DIFF_ERROR';
+export const REQUEST_DIFF = 'REQUEST_DIFF';
+export const SET_DIFF_ENDPOINT = 'SET_DIFF_ENDPOINT';
diff --git a/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/mutations.js b/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/mutations.js
new file mode 100644
index 00000000000..5f6153ca3b1
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/mutations.js
@@ -0,0 +1,31 @@
+import Vue from 'vue';
+import * as types from './mutation_types';
+import { parseDiff } from '../../utils';
+
+export default {
+ [types.SET_DIFF_ENDPOINT](state, path) {
+ Vue.set(state.paths, 'diffEndpoint', path);
+ },
+
+ [types.REQUEST_DIFF](state) {
+ state.isLoading = true;
+ },
+
+ [types.RECEIVE_DIFF_SUCCESS](state, { diff, enrichData }) {
+ const { added, fixed, existing } = parseDiff(diff, enrichData);
+ const baseReportOutofDate = diff.base_report_out_of_date || false;
+ const hasBaseReport = Boolean(diff.base_report_created_at);
+
+ state.isLoading = false;
+ state.newIssues = added;
+ state.resolvedIssues = fixed;
+ state.allIssues = existing;
+ state.baseReportOutofDate = baseReportOutofDate;
+ state.hasBaseReport = hasBaseReport;
+ },
+
+ [types.RECEIVE_DIFF_ERROR](state) {
+ state.isLoading = false;
+ state.hasError = true;
+ },
+};
diff --git a/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/state.js b/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/state.js
new file mode 100644
index 00000000000..e860e3af924
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/security_reports/store/modules/sast/state.js
@@ -0,0 +1,16 @@
+export default () => ({
+ paths: {
+ head: null,
+ base: null,
+ diffEndpoint: null,
+ },
+
+ isLoading: false,
+ hasError: false,
+
+ newIssues: [],
+ resolvedIssues: [],
+ allIssues: [],
+ baseReportOutofDate: false,
+ hasBaseReport: false,
+});
diff --git a/app/assets/javascripts/vue_shared/security_reports/store/utils.js b/app/assets/javascripts/vue_shared/security_reports/store/utils.js
new file mode 100644
index 00000000000..9a3581e276e
--- /dev/null
+++ b/app/assets/javascripts/vue_shared/security_reports/store/utils.js
@@ -0,0 +1,70 @@
+import pollUntilComplete from '~/lib/utils/poll_until_complete';
+import axios from '~/lib/utils/axios_utils';
+
+export const fetchDiffData = (state, endpoint, category) => {
+ const requests = [pollUntilComplete(endpoint)];
+
+ if (state.canReadVulnerabilityFeedback) {
+ requests.push(axios.get(state.vulnerabilityFeedbackPath, { params: { category } }));
+ }
+
+ return Promise.all(requests).then(([diffResponse, enrichResponse]) => ({
+ diff: diffResponse.data,
+ enrichData: enrichResponse?.data ?? [],
+ }));
+};
+
+/**
+ * Returns given vulnerability enriched with the corresponding
+ * feedback (`dismissal` or `issue` type)
+ * @param {Object} vulnerability
+ * @param {Array} feedback
+ */
+export const enrichVulnerabilityWithFeedback = (vulnerability, feedback = []) =>
+ feedback
+ .filter(fb => fb.project_fingerprint === vulnerability.project_fingerprint)
+ .reduce((vuln, fb) => {
+ if (fb.feedback_type === 'dismissal') {
+ return {
+ ...vuln,
+ isDismissed: true,
+ dismissalFeedback: fb,
+ };
+ }
+ if (fb.feedback_type === 'issue' && fb.issue_iid) {
+ return {
+ ...vuln,
+ hasIssue: true,
+ issue_feedback: fb,
+ };
+ }
+ if (fb.feedback_type === 'merge_request' && fb.merge_request_iid) {
+ return {
+ ...vuln,
+ hasMergeRequest: true,
+ merge_request_feedback: fb,
+ };
+ }
+ return vuln;
+ }, vulnerability);
+
+/**
+ * Generates the added, fixed, and existing vulnerabilities from the API report.
+ *
+ * @param {Object} diff The original reports.
+ * @param {Object} enrichData Feedback data to add to the reports.
+ * @returns {Object}
+ */
+export const parseDiff = (diff, enrichData) => {
+ const enrichVulnerability = vulnerability => ({
+ ...enrichVulnerabilityWithFeedback(vulnerability, enrichData),
+ category: vulnerability.report_type,
+ title: vulnerability.message || vulnerability.name,
+ });
+
+ return {
+ added: diff.added ? diff.added.map(enrichVulnerability) : [],
+ fixed: diff.fixed ? diff.fixed.map(enrichVulnerability) : [],
+ existing: diff.existing ? diff.existing.map(enrichVulnerability) : [],
+ };
+};
diff --git a/app/helpers/stat_anchors_helper.rb b/app/helpers/stat_anchors_helper.rb
new file mode 100644
index 00000000000..76e58b45912
--- /dev/null
+++ b/app/helpers/stat_anchors_helper.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+module StatAnchorsHelper
+ def stat_anchor_attrs(anchor)
+ {}.tap do |attrs|
+ attrs[:class] = %w(nav-link gl-display-flex gl-align-items-center) << extra_classes(anchor)
+ attrs[:itemprop] = anchor.itemprop if anchor.itemprop
+ end
+ end
+
+ private
+
+ def button_attribute(anchor)
+ "btn-#{anchor.class_modifier || 'missing'}"
+ end
+
+ def extra_classes(anchor)
+ if anchor.is_link
+ 'stat-link'
+ else
+ "btn #{button_attribute(anchor)}"
+ end
+ end
+end
diff --git a/app/models/ci/bridge.rb b/app/models/ci/bridge.rb
index 2e725e0baff..5b23cf46fdb 100644
--- a/app/models/ci/bridge.rb
+++ b/app/models/ci/bridge.rb
@@ -7,6 +7,7 @@ module Ci
include Importable
include AfterCommitQueue
include Ci::HasRef
+ extend ::Gitlab::Utils::Override
InvalidBridgeTypeError = Class.new(StandardError)
InvalidTransitionError = Class.new(StandardError)
@@ -203,8 +204,11 @@ module Ci
end
end
+ override :dependency_variables
def dependency_variables
- []
+ return [] unless ::Feature.enabled?(:ci_bridge_dependency_variables, project)
+
+ super
end
def target_revision_ref
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 9c21db93a52..a009d7c8062 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -571,14 +571,6 @@ module Ci
end
end
- def dependency_variables
- return [] if all_dependencies.empty?
-
- Gitlab::Ci::Variables::Collection.new.concat(
- Ci::JobVariable.where(job: all_dependencies).dotenv_source
- )
- end
-
def features
{ trace_sections: true }
end
@@ -828,10 +820,6 @@ module Ci
Gitlab::Ci::Build::Credentials::Factory.new(self).create!
end
- def all_dependencies
- dependencies.all
- end
-
def has_valid_build_dependencies?
dependencies.valid?
end
@@ -994,12 +982,6 @@ module Ci
end
end
- def dependencies
- strong_memoize(:dependencies) do
- Ci::BuildDependencies.new(self)
- end
- end
-
def build_data
@build_data ||= Gitlab::DataBuilder::Build.build(self)
end
diff --git a/app/models/ci/processable.rb b/app/models/ci/processable.rb
index ac5785d9c91..6aaf6ac530b 100644
--- a/app/models/ci/processable.rb
+++ b/app/models/ci/processable.rb
@@ -103,5 +103,25 @@ module Ci
pipeline.ensure_scheduling_type!
reset
end
+
+ def dependency_variables
+ return [] if all_dependencies.empty?
+
+ Gitlab::Ci::Variables::Collection.new.concat(
+ Ci::JobVariable.where(job: all_dependencies).dotenv_source
+ )
+ end
+
+ def all_dependencies
+ dependencies.all
+ end
+
+ private
+
+ def dependencies
+ strong_memoize(:dependencies) do
+ Ci::BuildDependencies.new(self)
+ end
+ end
end
end
diff --git a/app/presenters/project_presenter.rb b/app/presenters/project_presenter.rb
index 392eeafb2b4..0f5b601f2b0 100644
--- a/app/presenters/project_presenter.rb
+++ b/app/presenters/project_presenter.rb
@@ -13,7 +13,7 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated
presents :project
- AnchorData = Struct.new(:is_link, :label, :link, :class_modifier, :icon)
+ AnchorData = Struct.new(:is_link, :label, :link, :class_modifier, :icon, :itemprop)
MAX_TOPICS_TO_SHOW = 3
def statistic_icon(icon_name = 'plus-square-o')
@@ -277,7 +277,9 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated
AnchorData.new(false,
icon + content_tag(:span, license_short_name, class: 'project-stat-value'),
license_path,
- 'default')
+ 'default',
+ nil,
+ 'license')
else
if current_user && can_current_user_push_to_default_branch?
AnchorData.new(false,
diff --git a/app/views/layouts/project.html.haml b/app/views/layouts/project.html.haml
index a0c82380023..62e5431e290 100644
--- a/app/views/layouts/project.html.haml
+++ b/app/views/layouts/project.html.haml
@@ -2,6 +2,7 @@
- page_description @project.description_html unless page_description
- header_title project_title(@project) unless header_title
- nav "project"
+- page_itemtype 'http://schema.org/SoftwareSourceCode'
- display_subscription_banner!
- display_namespace_storage_limit_alert!
- @left_sidebar = true
diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml
index 9f4496e7a13..eb847bea95b 100644
--- a/app/views/projects/_home_panel.html.haml
+++ b/app/views/projects/_home_panel.html.haml
@@ -7,17 +7,17 @@
.row.gl-mb-3
.home-panel-title-row.col-md-12.col-lg-6.d-flex
.avatar-container.rect-avatar.s64.home-panel-avatar.gl-flex-shrink-0.gl-w-11.gl-h-11.gl-mr-3.float-none
- = project_icon(@project, alt: @project.name, class: 'avatar avatar-tile s64', width: 64, height: 64)
+ = project_icon(@project, alt: @project.name, class: 'avatar avatar-tile s64', width: 64, height: 64, itemprop: 'image')
.d-flex.flex-column.flex-wrap.align-items-baseline
.d-inline-flex.align-items-baseline
- %h1.home-panel-title.gl-mt-3.gl-mb-2.gl-font-size-h1.gl-line-height-24.gl-font-weight-bold{ data: { qa_selector: 'project_name_content' } }
+ %h1.home-panel-title.gl-mt-3.gl-mb-2.gl-font-size-h1.gl-line-height-24.gl-font-weight-bold{ data: { qa_selector: 'project_name_content' }, itemprop: 'name' }
= @project.name
%span.visibility-icon.text-secondary.gl-ml-2.has-tooltip{ data: { container: 'body' }, title: visibility_icon_description(@project) }
= visibility_level_icon(@project.visibility_level, options: { class: 'icon' })
= render_if_exists 'compliance_management/compliance_framework/compliance_framework_badge', project: @project
.home-panel-metadata.d-flex.flex-wrap.text-secondary.gl-font-base.gl-font-weight-normal.gl-line-height-normal
- if can?(current_user, :read_project, @project)
- %span.text-secondary
+ %span.text-secondary{ itemprop: 'identifier' }
= s_('ProjectPage|Project ID: %{project_id}') % { project_id: @project.id }
- if current_user
%span.access-request-links.gl-ml-3
@@ -30,10 +30,10 @@
- project_topics_classes = "badge badge-pill badge-secondary gl-mr-2"
- explore_project_topic_path = explore_projects_path(tag: topic)
- if topic.length > max_project_topic_length
- %a{ class: "#{ project_topics_classes } str-truncated-30 has-tooltip", data: { container: "body" }, title: topic, href: explore_project_topic_path }
+ %a{ class: "#{ project_topics_classes } str-truncated-30 has-tooltip", data: { container: "body" }, title: topic, href: explore_project_topic_path, itemprop: 'keywords' }
= topic.titleize
- else
- %a{ class: project_topics_classes, href: explore_project_topic_path }
+ %a{ class: project_topics_classes, href: explore_project_topic_path, itemprop: 'keywords' }
= topic.titleize
- if @project.has_extra_topics?
@@ -61,7 +61,7 @@
.home-panel-home-desc.mt-1
- if @project.description.present?
.home-panel-description.text-break
- .home-panel-description-markdown.read-more-container
+ .home-panel-description-markdown.read-more-container{ itemprop: 'abstract' }
= markdown_field(@project, :description)
%button.btn.btn-blank.btn-link.js-read-more-trigger.d-lg-none{ type: "button" }
= _("Read more")
diff --git a/app/views/projects/_stat_anchor_list.html.haml b/app/views/projects/_stat_anchor_list.html.haml
index 516790fb6d9..8a93d93a538 100644
--- a/app/views/projects/_stat_anchor_list.html.haml
+++ b/app/views/projects/_stat_anchor_list.html.haml
@@ -5,5 +5,5 @@
%ul.nav
- anchors.each do |anchor|
%li.nav-item
- = link_to_if anchor.link, anchor.label, anchor.link, class: anchor.is_link ? 'nav-link stat-link d-flex align-items-center' : "nav-link btn btn-#{anchor.class_modifier || 'missing'} d-flex align-items-center" do
+ = link_to_if(anchor.link, anchor.label, anchor.link, stat_anchor_attrs(anchor)) do
.stat-text.d-flex.align-items-center{ class: ('btn btn-default disabled' if project_buttons) }= anchor.label
diff --git a/changelogs/unreleased/36846-fj-add-structured-data-for-projects.yml b/changelogs/unreleased/36846-fj-add-structured-data-for-projects.yml
new file mode 100644
index 00000000000..a71a9757324
--- /dev/null
+++ b/changelogs/unreleased/36846-fj-add-structured-data-for-projects.yml
@@ -0,0 +1,5 @@
+---
+title: Add structured data for projects
+merge_request: 46858
+author:
+type: added
diff --git a/config/feature_flags/development/approval_suggestions.yml b/config/feature_flags/development/approval_suggestions.yml
index 478bd1847db..14961d2e248 100644
--- a/config/feature_flags/development/approval_suggestions.yml
+++ b/config/feature_flags/development/approval_suggestions.yml
@@ -1,8 +1,8 @@
---
name: approval_suggestions
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/38992
rollout_issue_url:
-milestone:
+milestone: '13.3'
type: development
-group:
+group: group::composition analysis
default_enabled: true
diff --git a/config/feature_flags/development/async_commit_diff_files.yml b/config/feature_flags/development/async_commit_diff_files.yml
index 2279ac18869..a4519835fa1 100644
--- a/config/feature_flags/development/async_commit_diff_files.yml
+++ b/config/feature_flags/development/async_commit_diff_files.yml
@@ -1,8 +1,8 @@
---
name: async_commit_diff_files
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/38450
rollout_issue_url:
-milestone:
+milestone: '13.3'
type: development
-group:
+group: group::source code
default_enabled: false
diff --git a/config/feature_flags/development/auto_devops_banner_disabled.yml b/config/feature_flags/development/auto_devops_banner_disabled.yml
index 691aa895841..cb9566c3de3 100644
--- a/config/feature_flags/development/auto_devops_banner_disabled.yml
+++ b/config/feature_flags/development/auto_devops_banner_disabled.yml
@@ -1,8 +1,8 @@
---
name: auto_devops_banner_disabled
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/14218
rollout_issue_url:
-milestone:
+milestone: '10.0'
type: development
group:
default_enabled: false
diff --git a/config/feature_flags/development/branch_list_keyset_pagination.yml b/config/feature_flags/development/branch_list_keyset_pagination.yml
index 9ba7728aa80..5397282aecc 100644
--- a/config/feature_flags/development/branch_list_keyset_pagination.yml
+++ b/config/feature_flags/development/branch_list_keyset_pagination.yml
@@ -1,8 +1,8 @@
---
name: branch_list_keyset_pagination
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/35819
rollout_issue_url:
-milestone:
+milestone: '13.2'
type: development
-group:
+group: group::source code
default_enabled: false
diff --git a/config/feature_flags/development/bulk_update_health_status.yml b/config/feature_flags/development/bulk_update_health_status.yml
index 302ae0fe462..29841ba584c 100644
--- a/config/feature_flags/development/bulk_update_health_status.yml
+++ b/config/feature_flags/development/bulk_update_health_status.yml
@@ -1,8 +1,8 @@
---
name: bulk_update_health_status
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/33065
rollout_issue_url:
-milestone:
+milestone: '13.2'
type: development
group: group::portfolio management
default_enabled: true
diff --git a/config/feature_flags/development/ci_bridge_dependency_variables.yml b/config/feature_flags/development/ci_bridge_dependency_variables.yml
new file mode 100644
index 00000000000..db23a30d2cb
--- /dev/null
+++ b/config/feature_flags/development/ci_bridge_dependency_variables.yml
@@ -0,0 +1,7 @@
+---
+name: ci_bridge_dependency_variables
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/46530
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/273734
+type: development
+group: group::pipeline authoring
+default_enabled: false
diff --git a/config/feature_flags/development/ci_jwt_signing_key.yml b/config/feature_flags/development/ci_jwt_signing_key.yml
index 87098d3e3d7..5fae64b71d2 100644
--- a/config/feature_flags/development/ci_jwt_signing_key.yml
+++ b/config/feature_flags/development/ci_jwt_signing_key.yml
@@ -1,6 +1,6 @@
---
name: ci_jwt_signing_key
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/34249
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/258546
milestone: '13.6'
type: development
diff --git a/config/feature_flags/development/ci_store_pipeline_messages.yml b/config/feature_flags/development/ci_store_pipeline_messages.yml
index 2ef85ce663c..ae20b11f79c 100644
--- a/config/feature_flags/development/ci_store_pipeline_messages.yml
+++ b/config/feature_flags/development/ci_store_pipeline_messages.yml
@@ -1,8 +1,8 @@
---
name: ci_store_pipeline_messages
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/33762
rollout_issue_url:
-milestone:
+milestone: '13.2'
type: development
group: group::continuous integration
default_enabled: true
diff --git a/config/feature_flags/development/default_merge_ref_for_diffs.yml b/config/feature_flags/development/default_merge_ref_for_diffs.yml
index 433e42c9bff..8442240e442 100644
--- a/config/feature_flags/development/default_merge_ref_for_diffs.yml
+++ b/config/feature_flags/development/default_merge_ref_for_diffs.yml
@@ -1,7 +1,7 @@
---
name: default_merge_ref_for_diffs
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/34472
-rollout_issue_url:
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/276917
milestone: '13.4'
type: development
group: group::source code
diff --git a/config/feature_flags/development/feature_flags_legacy_read_only.yml b/config/feature_flags/development/feature_flags_legacy_read_only.yml
index ab5510f0804..b960d2df1fa 100644
--- a/config/feature_flags/development/feature_flags_legacy_read_only.yml
+++ b/config/feature_flags/development/feature_flags_legacy_read_only.yml
@@ -1,8 +1,8 @@
---
name: feature_flags_legacy_read_only
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/38353
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/240985
-milestone: '13.7'
+milestone: '13.3'
type: development
group: group::progressive delivery
default_enabled: true
diff --git a/config/feature_flags/development/force_autodevops_on_by_default.yml b/config/feature_flags/development/force_autodevops_on_by_default.yml
index 3cd06fefd6d..a2430dc1c27 100644
--- a/config/feature_flags/development/force_autodevops_on_by_default.yml
+++ b/config/feature_flags/development/force_autodevops_on_by_default.yml
@@ -1,8 +1,8 @@
---
name: force_autodevops_on_by_default
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/21136
rollout_issue_url:
-milestone:
+milestone: '11.3'
type: development
-group:
+group: group::configure
default_enabled: false
diff --git a/config/feature_flags/development/grape_gitlab_json.yml b/config/feature_flags/development/grape_gitlab_json.yml
index 6ab6563e41d..e29496c917d 100644
--- a/config/feature_flags/development/grape_gitlab_json.yml
+++ b/config/feature_flags/development/grape_gitlab_json.yml
@@ -1,8 +1,8 @@
---
name: grape_gitlab_json
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/36472
rollout_issue_url:
-milestone:
+milestone: '13.2'
type: development
-group:
+group: group::source code
default_enabled: true
diff --git a/config/feature_flags/development/graphql_logging.yml b/config/feature_flags/development/graphql_logging.yml
index 9d76343511c..30f03a60a06 100644
--- a/config/feature_flags/development/graphql_logging.yml
+++ b/config/feature_flags/development/graphql_logging.yml
@@ -1,8 +1,8 @@
---
name: graphql_logging
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/27885
rollout_issue_url:
-milestone:
+milestone: '12.0'
type: development
group:
default_enabled: true
diff --git a/config/feature_flags/development/hide_jump_to_next_unresolved_in_threads.yml b/config/feature_flags/development/hide_jump_to_next_unresolved_in_threads.yml
index 9c1afa43dd2..6337f6154d9 100644
--- a/config/feature_flags/development/hide_jump_to_next_unresolved_in_threads.yml
+++ b/config/feature_flags/development/hide_jump_to_next_unresolved_in_threads.yml
@@ -1,8 +1,8 @@
---
name: hide_jump_to_next_unresolved_in_threads
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/37873
rollout_issue_url:
-milestone:
+milestone: '13.3'
type: development
-group:
+group: group::source code
default_enabled: true
diff --git a/config/feature_flags/development/lfs_check.yml b/config/feature_flags/development/lfs_check.yml
index 4eb53739cf6..1a6413bd016 100644
--- a/config/feature_flags/development/lfs_check.yml
+++ b/config/feature_flags/development/lfs_check.yml
@@ -1,8 +1,8 @@
---
name: lfs_check
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/27451
rollout_issue_url:
-milestone:
+milestone: '11.11'
type: development
group:
default_enabled: true
diff --git a/config/feature_flags/development/merge_red_head_comments_position_on_demand.yml b/config/feature_flags/development/merge_red_head_comments_position_on_demand.yml
index df19f53fffe..2c85632cf7f 100644
--- a/config/feature_flags/development/merge_red_head_comments_position_on_demand.yml
+++ b/config/feature_flags/development/merge_red_head_comments_position_on_demand.yml
@@ -1,8 +1,8 @@
---
name: merge_red_head_comments_position_on_demand
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/34148
rollout_issue_url:
-milestone:
+milestone: '13.1'
type: development
-group:
+group: group::source code
default_enabled: true
diff --git a/config/feature_flags/development/merge_ref_auto_sync.yml b/config/feature_flags/development/merge_ref_auto_sync.yml
index 29e958b877f..f22a18940c7 100644
--- a/config/feature_flags/development/merge_ref_auto_sync.yml
+++ b/config/feature_flags/development/merge_ref_auto_sync.yml
@@ -1,8 +1,8 @@
---
name: merge_ref_auto_sync
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/29569
rollout_issue_url:
-milestone:
+milestone: '12.1'
type: development
-group:
+group: group::source code
default_enabled: true
diff --git a/config/feature_flags/development/merge_ref_auto_sync_lock.yml b/config/feature_flags/development/merge_ref_auto_sync_lock.yml
index 27727bf22c7..e26c5ed5050 100644
--- a/config/feature_flags/development/merge_ref_auto_sync_lock.yml
+++ b/config/feature_flags/development/merge_ref_auto_sync_lock.yml
@@ -1,8 +1,8 @@
---
name: merge_ref_auto_sync_lock
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/31082
rollout_issue_url:
-milestone:
+milestone: '12.2'
type: development
-group:
+group: group::source code
default_enabled: true
diff --git a/config/feature_flags/development/remove_legacy_github_client.yml b/config/feature_flags/development/remove_legacy_github_client.yml
index 63e4704bba7..1469a99ab2f 100644
--- a/config/feature_flags/development/remove_legacy_github_client.yml
+++ b/config/feature_flags/development/remove_legacy_github_client.yml
@@ -1,8 +1,8 @@
---
name: remove_legacy_github_client
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/37555
rollout_issue_url:
-milestone:
+milestone: '13.3'
type: development
group: group::import
default_enabled: false
diff --git a/config/feature_flags/development/remove_resolve_note.yml b/config/feature_flags/development/remove_resolve_note.yml
index 540e3412aac..f5ec26f7580 100644
--- a/config/feature_flags/development/remove_resolve_note.yml
+++ b/config/feature_flags/development/remove_resolve_note.yml
@@ -1,8 +1,8 @@
---
name: remove_resolve_note
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/45549
rollout_issue_url:
-milestone:
+milestone: '13.6'
type: development
group: group::source code
default_enabled: true
diff --git a/config/feature_flags/development/rugged_commit_tree_entry.yml b/config/feature_flags/development/rugged_commit_tree_entry.yml
index 36d44a1270b..c0ba656f7a6 100644
--- a/config/feature_flags/development/rugged_commit_tree_entry.yml
+++ b/config/feature_flags/development/rugged_commit_tree_entry.yml
@@ -1,8 +1,8 @@
---
name: rugged_commit_tree_entry
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/25896
rollout_issue_url:
-milestone:
+milestone: '11.9'
type: development
-group:
+group: group::gitaly
default_enabled: false
diff --git a/config/feature_flags/development/rugged_list_commits_by_oid.yml b/config/feature_flags/development/rugged_list_commits_by_oid.yml
index 0498c3020ec..e41c717a5fe 100644
--- a/config/feature_flags/development/rugged_list_commits_by_oid.yml
+++ b/config/feature_flags/development/rugged_list_commits_by_oid.yml
@@ -1,8 +1,8 @@
---
name: rugged_list_commits_by_oid
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/27441
rollout_issue_url:
-milestone:
+milestone: '11.10'
type: development
-group:
+group: group::gitaly
default_enabled: false
diff --git a/config/feature_flags/development/snippets_binary_blob.yml b/config/feature_flags/development/snippets_binary_blob.yml
index 665bd1cbb60..72a959858d9 100644
--- a/config/feature_flags/development/snippets_binary_blob.yml
+++ b/config/feature_flags/development/snippets_binary_blob.yml
@@ -1,8 +1,8 @@
---
name: snippets_binary_blob
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/37419
rollout_issue_url:
-milestone:
+milestone: '13.3'
type: development
group: group::editor
default_enabled: false
diff --git a/config/feature_flags/development/squash_options.yml b/config/feature_flags/development/squash_options.yml
index 778700b2338..70114cfa252 100644
--- a/config/feature_flags/development/squash_options.yml
+++ b/config/feature_flags/development/squash_options.yml
@@ -1,8 +1,8 @@
---
name: squash_options
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/33930
rollout_issue_url:
-milestone:
+milestone: '13.2'
type: development
-group:
+group: group::source code
default_enabled: true
diff --git a/config/feature_flags/development/sse_image_uploads.yml b/config/feature_flags/development/sse_image_uploads.yml
index 543dcc16b2f..070704da024 100644
--- a/config/feature_flags/development/sse_image_uploads.yml
+++ b/config/feature_flags/development/sse_image_uploads.yml
@@ -1,8 +1,8 @@
---
name: sse_image_uploads
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/35126
rollout_issue_url:
-milestone:
+milestone: '13.2'
type: development
-group:
+group: group::static site editor
default_enabled: false
diff --git a/config/feature_flags/development/webauthn.yml b/config/feature_flags/development/webauthn.yml
index 7d09c80c5dc..5339074e84a 100644
--- a/config/feature_flags/development/webauthn.yml
+++ b/config/feature_flags/development/webauthn.yml
@@ -1,8 +1,8 @@
---
name: webauthn
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/26692
rollout_issue_url:
-milestone:
+milestone: '13.4'
type: development
-group:
+group: group::access
default_enabled: false
diff --git a/config/feature_flags/ops/gitlab_sidekiq_enable_semi_reliable_fetcher.yml b/config/feature_flags/ops/gitlab_sidekiq_enable_semi_reliable_fetcher.yml
index 136731e229e..4d6eedb840a 100644
--- a/config/feature_flags/ops/gitlab_sidekiq_enable_semi_reliable_fetcher.yml
+++ b/config/feature_flags/ops/gitlab_sidekiq_enable_semi_reliable_fetcher.yml
@@ -1,8 +1,8 @@
---
name: gitlab_sidekiq_enable_semi_reliable_fetcher
-introduced_by_url:
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/23854
rollout_issue_url:
-milestone:
+milestone: '11.6'
type: ops
-group:
+group: group::geo
default_enabled: true
diff --git a/doc/administration/audit_events.md b/doc/administration/audit_events.md
index 4b8aaa8157a..f2a801ff576 100644
--- a/doc/administration/audit_events.md
+++ b/doc/administration/audit_events.md
@@ -11,6 +11,8 @@ GitLab offers a way to view the changes made within the GitLab server for owners
GitLab system administrators can also take advantage of the logs located on the
file system. See [the logs system documentation](logs.md) for more details.
+You can generate an [Audit report](audit_reports.md) of audit events.
+
## Overview
**Audit Events** is a tool for GitLab owners and administrators
diff --git a/doc/administration/troubleshooting/img/OneLogin-encryption.png b/doc/administration/troubleshooting/img/OneLogin-encryption.png
deleted file mode 100644
index 2b811409bd0..00000000000
--- a/doc/administration/troubleshooting/img/OneLogin-encryption.png
+++ /dev/null
Binary files differ
diff --git a/doc/ci/ci_cd_for_external_repos/img/github_omniauth.png b/doc/ci/ci_cd_for_external_repos/img/github_omniauth.png
deleted file mode 100644
index 71a3a057a41..00000000000
--- a/doc/ci/ci_cd_for_external_repos/img/github_omniauth.png
+++ /dev/null
Binary files differ
diff --git a/doc/ci/ci_cd_for_external_repos/img/github_push_webhook.png b/doc/ci/ci_cd_for_external_repos/img/github_push_webhook.png
deleted file mode 100644
index e8c17d664e1..00000000000
--- a/doc/ci/ci_cd_for_external_repos/img/github_push_webhook.png
+++ /dev/null
Binary files differ
diff --git a/doc/ci/merge_request_pipelines/img/merge_request_pipelines_doubled_MR_v12_09.png b/doc/ci/merge_request_pipelines/img/merge_request_pipelines_doubled_MR_v12_09.png
deleted file mode 100644
index 3e4c72b9279..00000000000
--- a/doc/ci/merge_request_pipelines/img/merge_request_pipelines_doubled_MR_v12_09.png
+++ /dev/null
Binary files differ
diff --git a/doc/ci/merge_request_pipelines/img/merge_request_pipelines_doubled_branch_v12_09.png b/doc/ci/merge_request_pipelines/img/merge_request_pipelines_doubled_branch_v12_09.png
deleted file mode 100644
index dd70c3f8c20..00000000000
--- a/doc/ci/merge_request_pipelines/img/merge_request_pipelines_doubled_branch_v12_09.png
+++ /dev/null
Binary files differ
diff --git a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merge_request_pipeline_config.png b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merge_request_pipeline_config.png
deleted file mode 100644
index 3ee9d8ec93b..00000000000
--- a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merge_request_pipeline_config.png
+++ /dev/null
Binary files differ
diff --git a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/img/merge_train_config_v12_0.png b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/img/merge_train_config_v12_0.png
deleted file mode 100644
index 9da959ad440..00000000000
--- a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/img/merge_train_config_v12_0.png
+++ /dev/null
Binary files differ
diff --git a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/img/merge_train_immediate_merge.png b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/img/merge_train_immediate_merge.png
deleted file mode 100644
index 03bc61129ba..00000000000
--- a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/merge_trains/img/merge_train_immediate_merge.png
+++ /dev/null
Binary files differ
diff --git a/doc/ci/runners/img/shared_runners_admin.png b/doc/ci/runners/img/shared_runners_admin.png
deleted file mode 100644
index e049b339b36..00000000000
--- a/doc/ci/runners/img/shared_runners_admin.png
+++ /dev/null
Binary files differ
diff --git a/doc/development/fe_guide/img/gl-modal.png b/doc/development/fe_guide/img/gl-modal.png
deleted file mode 100644
index b2d2d637e57..00000000000
--- a/doc/development/fe_guide/img/gl-modal.png
+++ /dev/null
Binary files differ
diff --git a/doc/development/geo/framework.md b/doc/development/geo/framework.md
index 79e9868ec85..e440e324c4a 100644
--- a/doc/development/geo/framework.md
+++ b/doc/development/geo/framework.md
@@ -4,17 +4,12 @@ group: Geo
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
-# Geo self-service framework (alpha)
+# Geo self-service framework
NOTE: **Note:**
-This document might be subjected to change. It's a
-proposal we're working on and once the implementation is complete this
-documentation will be updated. Follow progress in the
-[epic](https://gitlab.com/groups/gitlab-org/-/epics/2161).
-
-NOTE: **Note:**
-The Geo self-service framework is currently in
-alpha. If you need to replicate a new data type, reach out to the Geo
+This document is subject to change as we continue to implement and iterate on the framework.
+Follow the progress in the [epic](https://gitlab.com/groups/gitlab-org/-/epics/2161).
+If you need to replicate a new data type, reach out to the Geo
team to discuss the options. You can contact them in `#g_geo` on Slack
or mention `@geo-team` in the issue or merge request.
@@ -26,38 +21,40 @@ minimal effort of the engineer who created a data type.
## Nomenclature
Before digging into the API, developers need to know some Geo-specific
-naming conventions.
+naming conventions:
-Model
-: A model is an Active Model, which is how it is known in the entire
+- **Model**:
+ A model is an Active Model, which is how it is known in the entire
Rails codebase. It usually is tied to a database table. From Geo
perspective, a model can have one or more resources.
-Resource
-: A resource is a piece of data that belongs to a model and is
+- **Resource**:
+ A resource is a piece of data that belongs to a model and is
produced by a GitLab feature. It is persisted using a storage
- mechanism. By default, a resource is not a replicable.
+ mechanism. By default, a resource is not a Geo replicable.
-Data type
-: Data type is how a resource is stored. Each resource should
+- **Data type**:
+ Data type is how a resource is stored. Each resource should
fit in one of the data types Geo supports:
-:- Git repository
-:- Blob
-:- Database
-: For more detail, see [Data types](../../administration/geo/replication/datatypes.md).
+ - Git repository
+ - Blob
+ - Database
-Geo Replicable
-: A Replicable is a resource Geo wants to sync across Geo nodes. There
+ For more detail, see [Data types](../../administration/geo/replication/datatypes.md).
+
+- **Geo Replicable**:
+ A Replicable is a resource Geo wants to sync across Geo nodes. There
is a limited set of supported data types of replicables. The effort
required to implement replication of a resource that belongs to one
of the known data types is minimal.
-Geo Replicator
-: A Geo Replicator is the object that knows how to replicate a
+- **Geo Replicator**:
+ A Geo Replicator is the object that knows how to replicate a
replicable. It's responsible for:
-:- Firing events (producer)
-:- Consuming events (consumer)
-: It's tied to the Geo Replicable data type. All replicators have a
+ - Firing events (producer)
+ - Consuming events (consumer)
+
+ It's tied to the Geo Replicable data type. All replicators have a
common interface that can be used to process (that is, produce and
consume) events. It takes care of the communication between the
primary node (where events are produced) and the secondary node
@@ -65,8 +62,8 @@ Geo Replicator
Geo in their feature will use the API of replicators to make this
happen.
-Geo Domain-Specific Language
-: The syntactic sugar that allows engineers to easily specify which
+- **Geo Domain-Specific Language**:
+ The syntactic sugar that allows engineers to easily specify which
resources should be replicated and how.
## Geo Domain-Specific Language
@@ -144,7 +141,7 @@ replicator.model_record
```
The replicator can be used to generate events, for example in
-ActiveRecord hooks:
+`ActiveRecord` hooks:
```ruby
after_create_commit -> { replicator.publish_created_event }
@@ -207,14 +204,12 @@ For example, to add support for files referenced by a `Widget` model with a
end
```
- NOTE: **Note:**
-
If there is a common constraint for records to be available for replication,
make sure to also overwrite the `available_replicables` scope.
1. Create `ee/app/replicators/geo/widget_replicator.rb`. Implement the
- `#carrierwave_uploader` method which should return a `CarrierWave::Uploader`.
- And implement the class method `.model` to return the `Widget` class.
+ `#carrierwave_uploader` method which should return a `CarrierWave::Uploader`,
+ and implement the class method `.model` to return the `Widget` class:
```ruby
# frozen_string_literal: true
@@ -241,7 +236,7 @@ For example, to add support for files referenced by a `Widget` model with a
```
1. Add this replicator class to the method `replicator_classes` in
-`ee/lib/gitlab/geo.rb`:
+ `ee/lib/gitlab/geo.rb`:
```ruby
REPLICATOR_CLASSES = [
@@ -252,8 +247,8 @@ For example, to add support for files referenced by a `Widget` model with a
```
1. Create `ee/spec/replicators/geo/widget_replicator_spec.rb` and perform
- the setup necessary to define the `model_record` variable for the shared
- examples.
+ the necessary setup to define the `model_record` variable for the shared
+ examples:
```ruby
# frozen_string_literal: true
@@ -324,9 +319,7 @@ For example, to add support for files referenced by a `Widget` model with a
```
1. Update `REGISTRY_CLASSES` in `ee/app/workers/geo/secondary/registry_consistency_worker.rb`.
-
1. Add `widget_registry` to `ActiveSupport::Inflector.inflections` in `config/initializers_before_autoloader/000_inflections.rb`.
-
1. Create `ee/spec/factories/geo/widget_registry.rb`:
```ruby
@@ -380,17 +373,17 @@ For example, to add support for files referenced by a `Widget` model with a
end
```
-Widgets should now be replicated by Geo!
+Widgets should now be replicated by Geo.
#### Verification
There are two ways to add verification related fields so that the Geo primary
-can track verification state:
+can track verification state.
##### Option 1: Add verification state fields to the existing `widgets` table itself
1. Add a migration to add columns ordered according to [our guidelines](../ordering_table_columns.md)
-for verification state to the widgets table:
+ for verification state to the widgets table:
```ruby
# frozen_string_literal: true
@@ -467,7 +460,7 @@ for verification state to the widgets table:
1. Create a `widget_states` table and add a partial index on `verification_failure` and
`verification_checksum` to ensure re-verification can be performed efficiently. Order
- the columns according to [our guidelines](../ordering_table_columns.md):
+ the columns according to [the guidelines](../ordering_table_columns.md):
```ruby
# frozen_string_literal: true
@@ -525,12 +518,12 @@ for verification state to the widgets table:
To do: Add verification on secondaries. This should be done as part of
[Geo: Self Service Framework - First Implementation for Package File verification](https://gitlab.com/groups/gitlab-org/-/epics/1817)
-Widgets should now be verified by Geo!
+Widgets should now be verified by Geo.
#### Metrics
Metrics are gathered by `Geo::MetricsUpdateWorker`, persisted in
-`GeoNodeStatus` for display in the UI, and sent to Prometheus.
+`GeoNodeStatus` for display in the UI, and sent to Prometheus:
1. Add fields `widgets_count`, `widgets_checksummed_count`,
`widgets_checksum_failed_count`, `widgets_synced_count`,
@@ -570,7 +563,7 @@ Metrics are gathered by `Geo::MetricsUpdateWorker`, persisted in
attribute. Check out `spec/factories/merge_request_diffs.rb` for an example.
Widget replication and verification metrics should now be available in the API,
-the Admin Area UI, and Prometheus!
+the Admin Area UI, and Prometheus.
#### GraphQL API
@@ -587,7 +580,6 @@ the Admin Area UI, and Prometheus!
1. Add the new `widget_registries` field name to the `expected_fields` array in
`ee/spec/graphql/types/geo/geo_node_type_spec.rb`.
-
1. Create `ee/app/graphql/resolvers/geo/widget_registries_resolver.rb`:
```ruby
@@ -696,14 +688,14 @@ the Admin Area UI, and Prometheus!
```
Individual widget synchronization and verification data should now be available
-via the GraphQL API!
+via the GraphQL API.
-1. Take care of replicating "update" events. Geo Framework does not currently support
- replicating "update" events because all entities added to the framework, by this time,
- are immutable. If this is the case
- for the entity you're going to add, please follow <https://gitlab.com/gitlab-org/gitlab/-/issues/118743>
- and <https://gitlab.com/gitlab-org/gitlab/-/issues/118745> as examples to add the new event type.
- Please also remove this notice when you've added it.
+Make sure to replicate the "update" events. Geo Framework does not currently support
+replicating "update" events because all entities added to the framework, by this time,
+are immutable. If this is the case
+for the entity you're going to add, follow <https://gitlab.com/gitlab-org/gitlab/-/issues/118743>
+and <https://gitlab.com/gitlab-org/gitlab/-/issues/118745> as examples to add the new event type.
+Also, remove this notice when you've added it.
#### Admin UI
@@ -711,7 +703,7 @@ To do: This should be done as part of
[Geo: Implement frontend for Self-Service Framework replicables](https://gitlab.com/groups/gitlab-org/-/epics/2525)
Widget sync and verification data (aggregate and individual) should now be
-available in the Admin UI!
+available in the Admin UI.
#### Releasing the feature
diff --git a/doc/gitlab-basics/img/fork_choose_namespace.png b/doc/gitlab-basics/img/fork_choose_namespace.png
deleted file mode 100644
index 4c50276d5ad..00000000000
--- a/doc/gitlab-basics/img/fork_choose_namespace.png
+++ /dev/null
Binary files differ
diff --git a/doc/gitlab-basics/img/fork_new.png b/doc/gitlab-basics/img/fork_new.png
deleted file mode 100644
index 7bbc3d8fbae..00000000000
--- a/doc/gitlab-basics/img/fork_new.png
+++ /dev/null
Binary files differ
diff --git a/doc/gitlab-basics/img/merge_request_page.png b/doc/gitlab-basics/img/merge_request_page.png
deleted file mode 100644
index f6087294e22..00000000000
--- a/doc/gitlab-basics/img/merge_request_page.png
+++ /dev/null
Binary files differ
diff --git a/doc/gitlab-basics/img/merge_request_select_branch.png b/doc/gitlab-basics/img/merge_request_select_branch.png
deleted file mode 100644
index b1dec975f9b..00000000000
--- a/doc/gitlab-basics/img/merge_request_select_branch.png
+++ /dev/null
Binary files differ
diff --git a/doc/gitlab-basics/img/project_clone_url.png b/doc/gitlab-basics/img/project_clone_url.png
deleted file mode 100644
index bdd7d011db3..00000000000
--- a/doc/gitlab-basics/img/project_clone_url.png
+++ /dev/null
Binary files differ
diff --git a/doc/integration/img/jira_dev_panel_jira_setup_1.png b/doc/integration/img/jira_dev_panel_jira_setup_1.png
deleted file mode 100644
index 5c0f594cc1d..00000000000
--- a/doc/integration/img/jira_dev_panel_jira_setup_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/operations/incident_management/img/alert_detail_full_v13_1.png b/doc/operations/incident_management/img/alert_detail_full_v13_1.png
deleted file mode 100644
index 18a6f4fb67b..00000000000
--- a/doc/operations/incident_management/img/alert_detail_full_v13_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/operations/incident_management/img/alert_detail_overview_v13_1.png b/doc/operations/incident_management/img/alert_detail_overview_v13_1.png
deleted file mode 100644
index 10c945d3810..00000000000
--- a/doc/operations/incident_management/img/alert_detail_overview_v13_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/operations/incident_management/img/alert_detail_system_notes_v13_1.png b/doc/operations/incident_management/img/alert_detail_system_notes_v13_1.png
deleted file mode 100644
index 2a6d0320a54..00000000000
--- a/doc/operations/incident_management/img/alert_detail_system_notes_v13_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/operations/incident_management/img/alert_list_search_v13_1.png b/doc/operations/incident_management/img/alert_list_search_v13_1.png
deleted file mode 100644
index ba993fe530b..00000000000
--- a/doc/operations/incident_management/img/alert_list_search_v13_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/operations/incident_management/img/alert_list_sort_v13_1.png b/doc/operations/incident_management/img/alert_list_sort_v13_1.png
deleted file mode 100644
index 8e06c3478f7..00000000000
--- a/doc/operations/incident_management/img/alert_list_sort_v13_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/operations/incident_management/img/incident_highlight_bar_v13_5.png b/doc/operations/incident_management/img/incident_highlight_bar_v13_5.png
deleted file mode 100644
index 6a40e97820c..00000000000
--- a/doc/operations/incident_management/img/incident_highlight_bar_v13_5.png
+++ /dev/null
Binary files differ
diff --git a/doc/operations/incident_management/img/incident_list.png b/doc/operations/incident_management/img/incident_list.png
deleted file mode 100644
index 0498fec6c9c..00000000000
--- a/doc/operations/incident_management/img/incident_list.png
+++ /dev/null
Binary files differ
diff --git a/doc/operations/incident_management/img/incident_list_search_v13_3.png b/doc/operations/incident_management/img/incident_list_search_v13_3.png
deleted file mode 100644
index 293268986cc..00000000000
--- a/doc/operations/incident_management/img/incident_list_search_v13_3.png
+++ /dev/null
Binary files differ
diff --git a/doc/operations/incident_management/img/incident_sla_settings_v13_5.png b/doc/operations/incident_management/img/incident_sla_settings_v13_5.png
deleted file mode 100644
index 94c8b840210..00000000000
--- a/doc/operations/incident_management/img/incident_sla_settings_v13_5.png
+++ /dev/null
Binary files differ
diff --git a/doc/subscriptions/img/additional_minutes.png b/doc/subscriptions/img/additional_minutes.png
deleted file mode 100644
index b159b98c9ce..00000000000
--- a/doc/subscriptions/img/additional_minutes.png
+++ /dev/null
Binary files differ
diff --git a/doc/subscriptions/img/buy_btn.png b/doc/subscriptions/img/buy_btn.png
deleted file mode 100644
index 4fd05c0fba7..00000000000
--- a/doc/subscriptions/img/buy_btn.png
+++ /dev/null
Binary files differ
diff --git a/doc/subscriptions/img/buy_minutes_card.png b/doc/subscriptions/img/buy_minutes_card.png
deleted file mode 100644
index cab098300cd..00000000000
--- a/doc/subscriptions/img/buy_minutes_card.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/autodevops/img/autodevops_multiple_clusters.png b/doc/topics/autodevops/img/autodevops_multiple_clusters.png
deleted file mode 100644
index f4d101ca921..00000000000
--- a/doc/topics/autodevops/img/autodevops_multiple_clusters.png
+++ /dev/null
Binary files differ
diff --git a/doc/topics/git/git_rebase.md b/doc/topics/git/git_rebase.md
index 6f50dea26dd..c01080400ac 100644
--- a/doc/topics/git/git_rebase.md
+++ b/doc/topics/git/git_rebase.md
@@ -119,7 +119,7 @@ repository, you can run `git remote -v`.
If there are [merge conflicts](#merge-conflicts), Git will prompt you to fix
them before continuing the rebase.
-To learn more, check Git's documentation on [rebasing](ttps://git-scm.com/book/en/v2/Git-Branching-Rebasing)
+To learn more, check Git's documentation on [rebasing](https://git-scm.com/book/en/v2/Git-Branching-Rebasing)
and [rebasing strategies](https://git-scm.com/book/en/v2/Git-Branching-Rebasing).
### Interactive rebase
diff --git a/doc/user/application_security/dast/img/dast_on_demand_v13_2.png b/doc/user/application_security/dast/img/dast_on_demand_v13_2.png
deleted file mode 100644
index 045221d713c..00000000000
--- a/doc/user/application_security/dast/img/dast_on_demand_v13_2.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/dependency_list/img/dependency_list_v12_3.png b/doc/user/application_security/dependency_list/img/dependency_list_v12_3.png
deleted file mode 100644
index 8eeadb34504..00000000000
--- a/doc/user/application_security/dependency_list/img/dependency_list_v12_3.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/dependency_list/img/dependency_list_v12_4.png b/doc/user/application_security/dependency_list/img/dependency_list_v12_4.png
deleted file mode 100644
index 4687987b763..00000000000
--- a/doc/user/application_security/dependency_list/img/dependency_list_v12_4.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/img/security_configuration_page_v13_2.png b/doc/user/application_security/img/security_configuration_page_v13_2.png
deleted file mode 100644
index 016328948cc..00000000000
--- a/doc/user/application_security/img/security_configuration_page_v13_2.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/img/vulnerability_solution.png b/doc/user/application_security/img/vulnerability_solution.png
deleted file mode 100644
index 63e9c1473b6..00000000000
--- a/doc/user/application_security/img/vulnerability_solution.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/security_dashboard/img/group_security_dashboard_export_csv_v13_1.png b/doc/user/application_security/security_dashboard/img/group_security_dashboard_export_csv_v13_1.png
deleted file mode 100644
index 8fab4e39175..00000000000
--- a/doc/user/application_security/security_dashboard/img/group_security_dashboard_export_csv_v13_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/security_dashboard/img/project_security_dashboard_export_csv_v12_10.png b/doc/user/application_security/security_dashboard/img/project_security_dashboard_export_csv_v12_10.png
deleted file mode 100644
index 07b41b471d4..00000000000
--- a/doc/user/application_security/security_dashboard/img/project_security_dashboard_export_csv_v12_10.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/application_security/vulnerabilities/img/vulnerability_page_download_patch_button_v13_1.png b/doc/user/application_security/vulnerabilities/img/vulnerability_page_download_patch_button_v13_1.png
deleted file mode 100644
index b925c342a11..00000000000
--- a/doc/user/application_security/vulnerabilities/img/vulnerability_page_download_patch_button_v13_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/compliance/license_compliance/img/license_compliance_add_license_v13_0.png b/doc/user/compliance/license_compliance/img/license_compliance_add_license_v13_0.png
deleted file mode 100644
index 1366c569f17..00000000000
--- a/doc/user/compliance/license_compliance/img/license_compliance_add_license_v13_0.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/compliance/license_compliance/img/license_compliance_pipeline_tab_v13_0.png b/doc/user/compliance/license_compliance/img/license_compliance_pipeline_tab_v13_0.png
deleted file mode 100644
index 49c66832f00..00000000000
--- a/doc/user/compliance/license_compliance/img/license_compliance_pipeline_tab_v13_0.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/compliance/license_compliance/img/license_compliance_search_v13_0.png b/doc/user/compliance/license_compliance/img/license_compliance_search_v13_0.png
deleted file mode 100644
index 5a4216dd645..00000000000
--- a/doc/user/compliance/license_compliance/img/license_compliance_search_v13_0.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/compliance/license_compliance/img/license_compliance_settings_v13_0.png b/doc/user/compliance/license_compliance/img/license_compliance_settings_v13_0.png
deleted file mode 100644
index 91f1eec2a23..00000000000
--- a/doc/user/compliance/license_compliance/img/license_compliance_settings_v13_0.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/discussions/img/discussions_resolved.png b/doc/user/discussions/img/discussions_resolved.png
deleted file mode 100644
index 3fd496f6da5..00000000000
--- a/doc/user/discussions/img/discussions_resolved.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/discussions/img/mr_review_unresolve2.png b/doc/user/discussions/img/mr_review_unresolve2.png
deleted file mode 100644
index 79da61bb556..00000000000
--- a/doc/user/discussions/img/mr_review_unresolve2.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/discussions/img/new_issue_for_discussion.png b/doc/user/discussions/img/new_issue_for_discussion.png
deleted file mode 100644
index 819d872a9a2..00000000000
--- a/doc/user/discussions/img/new_issue_for_discussion.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/discussions/img/only_allow_merge_if_all_discussions_are_resolved.png b/doc/user/discussions/img/only_allow_merge_if_all_discussions_are_resolved.png
deleted file mode 100644
index 928c7d33898..00000000000
--- a/doc/user/discussions/img/only_allow_merge_if_all_discussions_are_resolved.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/discussions/img/only_allow_merge_if_all_discussions_are_resolved_msg.png b/doc/user/discussions/img/only_allow_merge_if_all_discussions_are_resolved_msg.png
deleted file mode 100644
index 9044926b0eb..00000000000
--- a/doc/user/discussions/img/only_allow_merge_if_all_discussions_are_resolved_msg.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/discussions/img/preview_issue_for_discussion.png b/doc/user/discussions/img/preview_issue_for_discussion.png
deleted file mode 100644
index 30c273ca4c5..00000000000
--- a/doc/user/discussions/img/preview_issue_for_discussion.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/discussions/img/preview_issue_for_discussions.png b/doc/user/discussions/img/preview_issue_for_discussions.png
deleted file mode 100644
index 3d906e1b0b0..00000000000
--- a/doc/user/discussions/img/preview_issue_for_discussions.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/discussions/img/resolve_discussion_button.png b/doc/user/discussions/img/resolve_discussion_button.png
deleted file mode 100644
index ab454f661e0..00000000000
--- a/doc/user/discussions/img/resolve_discussion_button.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/discussions/img/resolve_discussion_issue_notice.png b/doc/user/discussions/img/resolve_discussion_issue_notice.png
deleted file mode 100644
index ed50dc1de91..00000000000
--- a/doc/user/discussions/img/resolve_discussion_issue_notice.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/discussions/img/resolve_discussion_open_issue.png b/doc/user/discussions/img/resolve_discussion_open_issue.png
deleted file mode 100644
index 9d0a14671d6..00000000000
--- a/doc/user/discussions/img/resolve_discussion_open_issue.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/group/dependency_proxy/img/group_dependency_proxy.png b/doc/user/group/dependency_proxy/img/group_dependency_proxy.png
deleted file mode 100644
index 035aff0b6c4..00000000000
--- a/doc/user/group/dependency_proxy/img/group_dependency_proxy.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/img/unordered_check_list_render_gfm.png b/doc/user/img/unordered_check_list_render_gfm.png
deleted file mode 100644
index 2ce0fb95645..00000000000
--- a/doc/user/img/unordered_check_list_render_gfm.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/infrastructure/img/terraform_plan_widget_v13_0.png b/doc/user/infrastructure/img/terraform_plan_widget_v13_0.png
deleted file mode 100644
index 62bf4b279b2..00000000000
--- a/doc/user/infrastructure/img/terraform_plan_widget_v13_0.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/infrastructure/index.md b/doc/user/infrastructure/index.md
index ed79b819c00..4af18873798 100644
--- a/doc/user/infrastructure/index.md
+++ b/doc/user/infrastructure/index.md
@@ -35,6 +35,8 @@ Read more on setting up and [using GitLab Managed Terraform states](terraform_st
Collaborating around Infrastructure as Code (IaC) changes requires both code changes and expected infrastructure changes to be checked and approved. GitLab provides a solution to help collaboration around Terraform code changes and their expected effects using the Merge Request pages. This way users don't have to build custom tools or rely on 3rd party solutions to streamline their IaC workflows.
+Read more on setting up and [using the merge request integrations](mr_integration.md).
+
## Quick Start
Use the following `.gitlab-ci.yml` to set up a simple Terraform project integration
diff --git a/doc/user/packages/composer_repository/img/project_id_v13_5.png b/doc/user/packages/composer_repository/img/project_id_v13_5.png
deleted file mode 100644
index 45861b6ff1b..00000000000
--- a/doc/user/packages/composer_repository/img/project_id_v13_5.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/packages/go_proxy/index.md b/doc/user/packages/go_proxy/index.md
index bd3b5b49ebd..70ce17994fc 100644
--- a/doc/user/packages/go_proxy/index.md
+++ b/doc/user/packages/go_proxy/index.md
@@ -4,11 +4,11 @@ group: Package
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
-# GitLab Go Proxy
+# Go proxy for GitLab
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/27376) in [GitLab Premium](https://about.gitlab.com/pricing/) 13.1.
> - It's deployed behind a feature flag, disabled by default.
-> - It's disabled on GitLab.com.
+> - It's disabled for GitLab.com.
> - It's not recommended for production use.
> - To use it in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-the-go-proxy).
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/221259) to GitLab Core in 13.3.
@@ -16,14 +16,12 @@ info: To determine the technical writer assigned to the Stage/Group associated w
With the Go proxy for GitLab, every project in GitLab can be fetched with the
[Go proxy protocol](https://proxy.golang.org/).
-## Prerequisites
+## Enable the Go proxy
-### Enable the Go proxy
+The Go proxy for GitLab is under development, and isn't ready for production use
+due to [potential performance issues with large repositories](https://gitlab.com/gitlab-org/gitlab/-/issues/218083).
-The Go proxy for GitLab is under development and not ready for production use, due to
-[potential performance issues with large repositories](https://gitlab.com/gitlab-org/gitlab/-/issues/218083).
-
-It is deployed behind a feature flag that is **disabled by default**.
+It's deployed behind a feature flag that is _disabled by default_.
[GitLab administrators with access to the GitLab Rails console](../../../administration/feature_flags.md)
can enable it for your instance.
@@ -47,57 +45,46 @@ Feature.enable(:go_proxy, Project.find(1))
Feature.disable(:go_proxy, Project.find(2))
```
-### Enable the Package Registry
-
-The Package Registry is enabled for new projects by default. If you cannot find
-the **Packages > List** entry under your project's sidebar, verify
-the following:
-
-1. Your GitLab administrator has
- [enabled support for the Package Registry](../../../administration/packages/index.md).
-1. The Package Registry is [enabled for your project](../index.md).
-
NOTE: **Note:**
-GitLab does not currently display Go modules in the **Packages Registry** of a project.
-Follow [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/213770) for details.
+Even if it's enabled, GitLab doesn't display Go modules in the **Package Registry**.
+Follow [this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/213770) for
+details.
## Add GitLab as a Go proxy
-NOTE: **Note:**
-To use a Go proxy, you must be using Go 1.13 or later.
-
-The available proxy endpoints are:
+To use GitLab as a Go proxy, you must be using Go 1.13 or later.
-- Project - can fetch modules defined by a project - `/api/v4/projects/:id/packages/go`
+The available proxy endpoint is for fetching modules by project: `/api/v4/projects/:id/packages/go`
-To use the Go proxy for GitLab to fetch Go modules from GitLab, add the
-appropriate proxy endpoint to `GOPROXY`. For details on setting Go environment
-variables, see [Set environment variables](#set-environment-variables). For
-details on configuring `GOPROXY`, see [Dependency Management in Go >
-Proxies](../../../development/go_guide/dependencies.md#proxies).
+To fetch Go modules from GitLab, add the project-specific endpoint to `GOPROXY`.
-For example, adding the project-specific endpoint to `GOPROXY` will tell Go
-to initially query that endpoint and fall back to the default behavior:
+Go queries the endpoint and falls back to the default behavior:
```shell
-go env -w GOPROXY='https://gitlab.com/api/v4/projects/1234/packages/go,https://proxy.golang.org,direct'
+go env -w GOPROXY='https://gitlab.example.com/api/v4/projects/1234/packages/go,https://proxy.golang.org,direct'
```
-With this configuration, Go fetches dependencies as follows:
+With this configuration, Go fetches dependencies in this order:
-1. Attempt to fetch from the project-specific Go proxy.
-1. Attempt to fetch from [proxy.golang.org](https://proxy.golang.org).
-1. Fetch directly with version control system operations (such as `git clone`,
+1. Go attempts to fetch from the project-specific Go proxy.
+1. Go attempts to fetch from [proxy.golang.org](https://proxy.golang.org).
+1. Go fetches directly with version control system operations (like `git clone`,
`svn checkout`, and so on).
-If `GOPROXY` is not specified, Go follows steps 2 and 3, which corresponds to
-setting `GOPROXY` to `https://proxy.golang.org,direct`. If `GOPROXY` only
-contains the project-specific endpoint, Go will only query that endpoint.
+If `GOPROXY` isn't specified, Go follows steps 2 and 3, which corresponds to
+setting `GOPROXY` to `https://proxy.golang.org,direct`. If `GOPROXY`
+contains only the project-specific endpoint, Go queries only that endpoint.
+
+For details about how to set Go environment variables, see
+[Set environment variables](#set-environment-variables).
+
+For details about configuring `GOPROXY`, see
+[Dependency Management in Go > Proxies](../../../development/go_guide/dependencies.md#proxies).
## Fetch modules from private projects
-`go` does not support transmitting credentials over insecure connections. The
-steps below work only if GitLab is configured for HTTPS.
+`go` doesn't support transmitting credentials over insecure connections. The
+following steps work only if GitLab is configured for HTTPS:
1. Configure Go to include HTTP basic authentication credentials when fetching
from the Go proxy for GitLab.
@@ -107,31 +94,37 @@ steps below work only if GitLab is configured for HTTPS.
### Enable request authentication
Create a [personal access token](../../profile/personal_access_tokens.md) with
-the `api` or `read_api` scope and add it to
-[`~/.netrc`](https://ec.haxx.se/usingcurl/usingcurl-netrc):
+the scope set to `api` or `read_api`.
-```netrc
+Add it to [`~/.netrc`](https://ec.haxx.se/usingcurl/usingcurl-netrc):
+
+```shell
machine <url> login <username> password <token>
```
-`<url>` should be the URL of the GitLab instance, for example `gitlab.com`.
-`<username>` and `<token>` should be your username and the personal access
-token, respectively.
+- `<url>`: The GitLab URL, for example `gitlab.com`.
+- `<username>`: Your username.
+- `<token>`: Your personal access token.
### Disable checksum database queries
-When downloading dependencies, by default Go 1.13 and later validate fetched
-sources against the checksum database `sum.golang.org`. If the checksum of the
-fetched sources does not match the checksum from the database, Go will not build
-the dependency. This causes private modules to fail to build, as
-`sum.golang.org` cannot fetch the source of private modules and thus cannot
-provide a checksum. To resolve this issue, `GONOSUMDB` should be set to a
-comma-separated list of private projects. For details on setting Go environment
-variables, see [Set environment variables](#set-environment-variables). For more
-details on disabling this feature of Go, see [Dependency Management in Go >
-Checksums](../../../development/go_guide/dependencies.md#checksums).
+When downloading dependencies with Go 1.13 and later, fetched sources are
+validated against the checksum database `sum.golang.org`.
+
+If the checksum of the fetched sources doesn't match the checksum from the
+database, Go doesn't build the dependency.
+
+Private modules fail to build because `sum.golang.org` can't fetch the source
+of private modules, and so it cannot provide a checksum.
-For example, to disable checksum queries for `gitlab.com/my/project`, set `GONOSUMDB`:
+To resolve this issue, set `GONOSUMDB` to a comma-separated list of private
+projects. For details about setting Go environment variables, see
+[Set environment variables](#set-environment-variables). For more details about
+disabling this feature of Go, see
+[Dependency Management in Go > Checksums](../../../development/go_guide/dependencies.md#checksums).
+
+For example, to disable checksum queries for `gitlab.com/my/project`, set
+`GONOSUMDB`:
```shell
go env -w GONOSUMDB='gitlab.com/my/project,<previous value>'
@@ -139,32 +132,36 @@ go env -w GONOSUMDB='gitlab.com/my/project,<previous value>'
## Working with Go
-If you are unfamiliar with managing dependencies in Go, or Go in general,
-consider reviewing the following documentation:
+If you're unfamiliar with managing dependencies in Go, or Go in general, review
+the following documentation:
- [Dependency Management in Go](../../../development/go_guide/dependencies.md)
- [Go Modules Reference](https://golang.org/ref/mod)
-- [Documentation (golang.org)](https://golang.org/doc/)
-- [Learn (learn.go.dev)](https://learn.go.dev/)
+- [Documentation (`golang.org`)](https://golang.org/doc/)
+- [Learn (`learn.go.dev`)](https://learn.go.dev/)
### Set environment variables
-Go uses environment variables to control various features. These can be managed
-in all the usual ways, but Go 1.14 will read and write Go environment variables
-from and to a special Go environment file, `~/.go/env` by default. If `GOENV` is
-set to a file, Go will read and write that file instead. If `GOENV` is not set
-but `GOPATH` is set, Go will read and write `$GOPATH/env`.
+Go uses environment variables to control various features. You can manage these
+variables in all the usual ways. However, Go 1.14 reads and writes Go
+environment variables to and from a special Go environment file, `~/.go/env` by
+default.
+
+- If `GOENV` is set to a file, Go reads and writes to and from that file instead.
+- If `GOENV` is not set but `GOPATH` is set, Go reads and writes `$GOPATH/env`.
Go environment variables can be read with `go env <var>` and, in Go 1.14 and
-later, can be written with `go env -w <var>=<value>`. For example, `go env
-GOPATH` or `go env -w GOPATH=/go`.
+later, can be written with `go env -w <var>=<value>`. For example,
+`go env GOPATH` or `go env -w GOPATH=/go`.
### Release a module
Go modules and module versions are defined by source repositories, such as Git,
-SVN, Mercurial, and so on. A module is a repository containing `go.mod` and Go
-files. Module versions are defined by VCS tags. To publish a module, push
-`go.mod` and source files to a VCS repository. To publish a module version, push
-a VCS tag. See [Dependency Management in Go >
-Versioning](../../../development/go_guide/dependencies.md#versioning) for more
-details on what constitutes a valid module or module version.
+SVN, and Mercurial. A module is a repository that contains `go.mod` and Go
+files. Module versions are defined by VCS tags.
+
+To publish a module, push `go.mod` and source files to a VCS repository. To
+publish a module version, push a VCS tag.
+
+See [Dependency Management in Go > Versioning](../../../development/go_guide/dependencies.md#versioning)
+for more details about what constitutes a valid module or module version.
diff --git a/doc/user/profile/img/unknown_sign_in_email_v13_0.png b/doc/user/profile/img/unknown_sign_in_email_v13_0.png
deleted file mode 100644
index 51a7c29cdfa..00000000000
--- a/doc/user/profile/img/unknown_sign_in_email_v13_0.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/import/img/jira/import_issues_from_jira_form_v12_10.png b/doc/user/project/import/img/jira/import_issues_from_jira_form_v12_10.png
deleted file mode 100644
index 317a426394c..00000000000
--- a/doc/user/project/import/img/jira/import_issues_from_jira_form_v12_10.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/integrations/img/jira_create_new_group_name.png b/doc/user/project/integrations/img/jira_create_new_group_name.png
deleted file mode 100644
index bfc0dc6b2e9..00000000000
--- a/doc/user/project/integrations/img/jira_create_new_group_name.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/integrations/img/toggle_metrics_user_starred_dashboard_v13_0.png b/doc/user/project/integrations/img/toggle_metrics_user_starred_dashboard_v13_0.png
deleted file mode 100644
index 59dc9ccfd30..00000000000
--- a/doc/user/project/integrations/img/toggle_metrics_user_starred_dashboard_v13_0.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/integrations/img/webex_teams_configuration.png b/doc/user/project/integrations/img/webex_teams_configuration.png
deleted file mode 100644
index 493b3ea50a0..00000000000
--- a/doc/user/project/integrations/img/webex_teams_configuration.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/issues/img/closing_and_related_issues.png b/doc/user/project/issues/img/closing_and_related_issues.png
deleted file mode 100644
index c6543e85fdb..00000000000
--- a/doc/user/project/issues/img/closing_and_related_issues.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/issues/img/delete_single_design_v12_4.png b/doc/user/project/issues/img/delete_single_design_v12_4.png
deleted file mode 100644
index 158b4949ce4..00000000000
--- a/doc/user/project/issues/img/delete_single_design_v12_4.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/issues/img/design_drag_and_drop_uploads_v12_9.png b/doc/user/project/issues/img/design_drag_and_drop_uploads_v12_9.png
deleted file mode 100644
index 6680c792063..00000000000
--- a/doc/user/project/issues/img/design_drag_and_drop_uploads_v12_9.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/issues/img/design_management_v12_3.png b/doc/user/project/issues/img/design_management_v12_3.png
deleted file mode 100644
index b3647aa97c1..00000000000
--- a/doc/user/project/issues/img/design_management_v12_3.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/issues/img/epic_tree_health_status_v12_10.png b/doc/user/project/issues/img/epic_tree_health_status_v12_10.png
deleted file mode 100644
index 1a603656fd8..00000000000
--- a/doc/user/project/issues/img/epic_tree_health_status_v12_10.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/issues/img/issue_health_status_v12_10.png b/doc/user/project/issues/img/issue_health_status_v12_10.png
deleted file mode 100644
index dd6becbb970..00000000000
--- a/doc/user/project/issues/img/issue_health_status_v12_10.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/issues/img/issue_health_status_v12_9.png b/doc/user/project/issues/img/issue_health_status_v12_9.png
deleted file mode 100644
index f8922a74fc1..00000000000
--- a/doc/user/project/issues/img/issue_health_status_v12_9.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/merge_requests/img/merge_when_pipeline_succeeds_only_if_succeeds_settings.png b/doc/user/project/merge_requests/img/merge_when_pipeline_succeeds_only_if_succeeds_settings.png
deleted file mode 100644
index ed374b11fbd..00000000000
--- a/doc/user/project/merge_requests/img/merge_when_pipeline_succeeds_only_if_succeeds_settings.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/operations/img/alert_issue_v13_1.png b/doc/user/project/operations/img/alert_issue_v13_1.png
deleted file mode 100644
index da79074aa2f..00000000000
--- a/doc/user/project/operations/img/alert_issue_v13_1.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/operations/img/error_details_v12_5.png b/doc/user/project/operations/img/error_details_v12_5.png
deleted file mode 100644
index f4866141948..00000000000
--- a/doc/user/project/operations/img/error_details_v12_5.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/operations/img/error_details_v12_6.png b/doc/user/project/operations/img/error_details_v12_6.png
deleted file mode 100644
index 3194d8284d7..00000000000
--- a/doc/user/project/operations/img/error_details_v12_6.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/operations/img/error_details_with_issue_v12_6.png b/doc/user/project/operations/img/error_details_with_issue_v12_6.png
deleted file mode 100644
index 963b70bd1e4..00000000000
--- a/doc/user/project/operations/img/error_details_with_issue_v12_6.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/operations/img/error_details_with_issue_v12_7.png b/doc/user/project/operations/img/error_details_with_issue_v12_7.png
deleted file mode 100644
index aa846ee7220..00000000000
--- a/doc/user/project/operations/img/error_details_with_issue_v12_7.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/operations/img/feature_flags_list_v12_7.png b/doc/user/project/operations/img/feature_flags_list_v12_7.png
deleted file mode 100644
index a28a844b46d..00000000000
--- a/doc/user/project/operations/img/feature_flags_list_v12_7.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/operations/img/specs_list_v12_6.png b/doc/user/project/operations/img/specs_list_v12_6.png
deleted file mode 100644
index ea429802a40..00000000000
--- a/doc/user/project/operations/img/specs_list_v12_6.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/packages/img/maven_package_view.png b/doc/user/project/packages/img/maven_package_view.png
deleted file mode 100644
index 2eb4b6f76b4..00000000000
--- a/doc/user/project/packages/img/maven_package_view.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/packages/img/npm_package_view.png b/doc/user/project/packages/img/npm_package_view.png
deleted file mode 100644
index e0634718c02..00000000000
--- a/doc/user/project/packages/img/npm_package_view.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/pages/img/icons/click.png b/doc/user/project/pages/img/icons/click.png
deleted file mode 100644
index 62a997a7591..00000000000
--- a/doc/user/project/pages/img/icons/click.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/pages/img/icons/cogs.png b/doc/user/project/pages/img/icons/cogs.png
deleted file mode 100644
index f37f8f361d1..00000000000
--- a/doc/user/project/pages/img/icons/cogs.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/pages/img/icons/fork.png b/doc/user/project/pages/img/icons/fork.png
deleted file mode 100644
index 1ae8fa722b7..00000000000
--- a/doc/user/project/pages/img/icons/fork.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/pages/img/icons/free.png b/doc/user/project/pages/img/icons/free.png
deleted file mode 100644
index c74cd90fa1a..00000000000
--- a/doc/user/project/pages/img/icons/free.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/pages/img/icons/monitor.png b/doc/user/project/pages/img/icons/monitor.png
deleted file mode 100644
index ce27b7e177e..00000000000
--- a/doc/user/project/pages/img/icons/monitor.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/pages/img/pages_workflow_v12_5.png b/doc/user/project/pages/img/pages_workflow_v12_5.png
deleted file mode 100644
index ca5190fca79..00000000000
--- a/doc/user/project/pages/img/pages_workflow_v12_5.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/releases/img/edit_release_page_v12_10.png b/doc/user/project/releases/img/edit_release_page_v12_10.png
deleted file mode 100644
index ebb12a549b7..00000000000
--- a/doc/user/project/releases/img/edit_release_page_v12_10.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/releases/img/edit_release_page_v12_6.png b/doc/user/project/releases/img/edit_release_page_v12_6.png
deleted file mode 100644
index ae7641ac8a5..00000000000
--- a/doc/user/project/releases/img/edit_release_page_v12_6.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/releases/img/release_with_milestone_v12_5.png b/doc/user/project/releases/img/release_with_milestone_v12_5.png
deleted file mode 100644
index 2a7a2ee9754..00000000000
--- a/doc/user/project/releases/img/release_with_milestone_v12_5.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/releases/img/releases.png b/doc/user/project/releases/img/releases.png
deleted file mode 100644
index da5bcd9d913..00000000000
--- a/doc/user/project/releases/img/releases.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/project/releases/img/releases_count_v12_8.png b/doc/user/project/releases/img/releases_count_v12_8.png
deleted file mode 100644
index e70f623d508..00000000000
--- a/doc/user/project/releases/img/releases_count_v12_8.png
+++ /dev/null
Binary files differ
diff --git a/doc/user/search/img/issue_search_filter.png b/doc/user/search/img/issue_search_filter.png
deleted file mode 100644
index d4de3ff7656..00000000000
--- a/doc/user/search/img/issue_search_filter.png
+++ /dev/null
Binary files differ
diff --git a/package.json b/package.json
index ffd539e445b..1e4ec1e3e33 100644
--- a/package.json
+++ b/package.json
@@ -44,7 +44,7 @@
"@babel/preset-env": "^7.10.1",
"@gitlab/at.js": "1.5.5",
"@gitlab/svgs": "1.175.0",
- "@gitlab/ui": "23.0.0",
+ "@gitlab/ui": "23.3.0",
"@gitlab/visual-review-tools": "1.6.1",
"@rails/actioncable": "^6.0.3-3",
"@rails/ujs": "^6.0.3-2",
diff --git a/qa/qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb
new file mode 100644
index 00000000000..eafe28c1ee6
--- /dev/null
+++ b/qa/qa/specs/features/browser_ui/4_verify/pipeline/pass_dotenv_variables_to_downstream_via_bridge_spec.rb
@@ -0,0 +1,111 @@
+# frozen_string_literal: true
+
+require 'faker'
+
+module QA
+ RSpec.describe 'Verify', :runner, :requires_admin do
+ describe "Pass dotenv variables to downstream via bridge" do
+ let(:feature_flag) { :ci_bridge_dependency_variables }
+ let(:executor_1) { "qa-runner-#{Faker::Alphanumeric.alphanumeric(8)}" }
+ let(:executor_2) { "qa-runner-#{Faker::Alphanumeric.alphanumeric(8)}" }
+
+ let(:upstream_project) do
+ Resource::Project.fabricate_via_api! do |project|
+ project.name = 'project-with-pipeline-1'
+ end
+ end
+
+ let(:downstream_project) do
+ Resource::Project.fabricate_via_api! do |project|
+ project.name = 'project-with-pipeline-2'
+ end
+ end
+
+ let!(:runner_1) do
+ Resource::Runner.fabricate! do |runner|
+ runner.project = upstream_project
+ runner.name = executor_1
+ runner.tags = [executor_1]
+ end
+ end
+
+ let!(:runner_2) do
+ Resource::Runner.fabricate! do |runner|
+ runner.project = downstream_project
+ runner.name = executor_2
+ runner.tags = [executor_2]
+ end
+ end
+
+ before do
+ Runtime::Feature.enable(feature_flag)
+ Flow::Login.sign_in
+ add_ci_file(downstream_project, downstream_ci_file)
+ add_ci_file(upstream_project, upstream_ci_file)
+ upstream_project.visit!
+ Flow::Pipeline.visit_latest_pipeline(pipeline_condition: 'success')
+ end
+
+ after do
+ Runtime::Feature.disable(feature_flag)
+ runner_1.remove_via_api!
+ runner_2.remove_via_api!
+ end
+
+ it 'runs the pipeline with composed config', testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1086' do
+ Page::Project::Pipeline::Show.perform do |parent_pipeline|
+ Support::Waiter.wait_until { parent_pipeline.has_child_pipeline? }
+ parent_pipeline.expand_child_pipeline
+ parent_pipeline.click_job('downstream_test')
+ end
+
+ Page::Project::Job::Show.perform do |show|
+ expect(show).to have_passed(timeout: 360)
+ end
+ end
+
+ private
+
+ def add_ci_file(project, file)
+ Resource::Repository::Commit.fabricate_via_api! do |commit|
+ commit.project = project
+ commit.commit_message = 'Add config file'
+ commit.add_files([file])
+ end
+ end
+
+ def upstream_ci_file
+ {
+ file_path: '.gitlab-ci.yml',
+ content: <<~YAML
+ build:
+ stage: build
+ tags: ["#{executor_1}"]
+ script: echo "MY_VAR=hello" >> variables.env
+ artifacts:
+ reports:
+ dotenv: variables.env
+
+ trigger:
+ stage: deploy
+ variables:
+ PASSED_MY_VAR: $MY_VAR
+ trigger: #{downstream_project.full_path}
+ YAML
+ }
+ end
+
+ def downstream_ci_file
+ {
+ file_path: '.gitlab-ci.yml',
+ content: <<~YAML
+ downstream_test:
+ stage: test
+ tags: ["#{executor_2}"]
+ script: '[ "$PASSED_MY_VAR" = hello ]; exit "$?"'
+ YAML
+ }
+ end
+ end
+ end
+end
diff --git a/scripts/lint-doc.sh b/scripts/lint-doc.sh
index 1b671df84e6..63c5b80ffff 100755
--- a/scripts/lint-doc.sh
+++ b/scripts/lint-doc.sh
@@ -66,8 +66,11 @@ then
else
MERGE_BASE=$(git merge-base ${CI_MERGE_REQUEST_TARGET_BRANCH_SHA} ${CI_MERGE_REQUEST_SOURCE_BRANCH_SHA})
MD_DOC_PATH=$(git diff --name-only "${MERGE_BASE}..${CI_MERGE_REQUEST_SOURCE_BRANCH_SHA}" 'doc/*.md')
- echo -e "Merged results pipeline detected. Testing only the following files:\n${MD_DOC_PATH}"
- fi
+ if [ -n "${MD_DOC_PATH}" ]
+ then
+ echo -e "Merged results pipeline detected. Testing only the following files:\n${MD_DOC_PATH}"
+ fi
+fi
function run_locally_or_in_docker() {
local cmd=$1
@@ -98,7 +101,12 @@ function run_locally_or_in_docker() {
echo '=> Linting markdown style...'
echo
-run_locally_or_in_docker 'markdownlint' "--config .markdownlint.json ${MD_DOC_PATH}"
+if [ -z "${MD_DOC_PATH}" ]
+then
+ echo "Merged results pipeline detected, but no markdown files found. Skipping."
+else
+ run_locally_or_in_docker 'markdownlint' "--config .markdownlint.json ${MD_DOC_PATH}"
+fi
echo '=> Linting prose...'
run_locally_or_in_docker 'vale' "--minAlertLevel error --output=JSON ${MD_DOC_PATH}" "ruby scripts/vale.rb"
diff --git a/spec/features/projects/show/schema_markup_spec.rb b/spec/features/projects/show/schema_markup_spec.rb
new file mode 100644
index 00000000000..e651798af23
--- /dev/null
+++ b/spec/features/projects/show/schema_markup_spec.rb
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe 'Projects > Show > Schema Markup' do
+ let_it_be(:project) { create(:project, :repository, :public, :with_avatar, description: 'foobar', tag_list: 'tag1, tag2') }
+
+ it 'shows SoftwareSourceCode structured markup', :js do
+ visit project_path(project)
+ wait_for_all_requests
+
+ aggregate_failures do
+ expect(page).to have_selector('[itemscope][itemtype="http://schema.org/SoftwareSourceCode"]')
+ expect(page).to have_selector('img[itemprop="image"]')
+ expect(page).to have_selector('[itemprop="name"]', text: project.name)
+ expect(page).to have_selector('[itemprop="identifier"]', text: "Project ID: #{project.id}")
+ expect(page).to have_selector('[itemprop="abstract"]', text: project.description)
+ expect(page).to have_selector('[itemprop="license"]', text: project.repository.license.name)
+ expect(find_all('[itemprop="keywords"]').map(&:text)).to match_array(project.tag_list.map(&:capitalize))
+ expect(page).to have_selector('[itemprop="about"]')
+ end
+ end
+end
diff --git a/spec/frontend/repository/components/preview/__snapshots__/index_spec.js.snap b/spec/frontend/repository/components/preview/__snapshots__/index_spec.js.snap
index 23c06dc5e68..e2ccc07d0f2 100644
--- a/spec/frontend/repository/components/preview/__snapshots__/index_spec.js.snap
+++ b/spec/frontend/repository/components/preview/__snapshots__/index_spec.js.snap
@@ -29,6 +29,7 @@ exports[`Repository file preview component renders file HTML 1`] = `
<div
class="blob-viewer"
data-qa-selector="blob_viewer_content"
+ itemprop="about"
>
<div>
<div
diff --git a/spec/frontend/vue_shared/security_reports/store/modules/sast/actions_spec.js b/spec/frontend/vue_shared/security_reports/store/modules/sast/actions_spec.js
new file mode 100644
index 00000000000..a11f4e05913
--- /dev/null
+++ b/spec/frontend/vue_shared/security_reports/store/modules/sast/actions_spec.js
@@ -0,0 +1,203 @@
+import MockAdapter from 'axios-mock-adapter';
+import testAction from 'helpers/vuex_action_helper';
+
+import createState from '~/vue_shared/security_reports/store/modules/sast/state';
+import * as types from '~/vue_shared/security_reports/store/modules/sast/mutation_types';
+import * as actions from '~/vue_shared/security_reports/store/modules/sast/actions';
+import axios from '~/lib/utils/axios_utils';
+
+const diffEndpoint = 'diff-endpoint.json';
+const blobPath = 'blob-path.json';
+const reports = {
+ base: 'base',
+ head: 'head',
+ enrichData: 'enrichData',
+ diff: 'diff',
+};
+const error = 'Something went wrong';
+const vulnerabilityFeedbackPath = 'vulnerability-feedback-path';
+const rootState = { vulnerabilityFeedbackPath, blobPath };
+
+let state;
+
+describe('sast report actions', () => {
+ beforeEach(() => {
+ state = createState();
+ });
+
+ describe('setDiffEndpoint', () => {
+ it(`should commit ${types.SET_DIFF_ENDPOINT} with the correct path`, done => {
+ testAction(
+ actions.setDiffEndpoint,
+ diffEndpoint,
+ state,
+ [
+ {
+ type: types.SET_DIFF_ENDPOINT,
+ payload: diffEndpoint,
+ },
+ ],
+ [],
+ done,
+ );
+ });
+ });
+
+ describe('requestDiff', () => {
+ it(`should commit ${types.REQUEST_DIFF}`, done => {
+ testAction(actions.requestDiff, {}, state, [{ type: types.REQUEST_DIFF }], [], done);
+ });
+ });
+
+ describe('receiveDiffSuccess', () => {
+ it(`should commit ${types.RECEIVE_DIFF_SUCCESS} with the correct response`, done => {
+ testAction(
+ actions.receiveDiffSuccess,
+ reports,
+ state,
+ [
+ {
+ type: types.RECEIVE_DIFF_SUCCESS,
+ payload: reports,
+ },
+ ],
+ [],
+ done,
+ );
+ });
+ });
+
+ describe('receiveDiffError', () => {
+ it(`should commit ${types.RECEIVE_DIFF_ERROR} with the correct response`, done => {
+ testAction(
+ actions.receiveDiffError,
+ error,
+ state,
+ [
+ {
+ type: types.RECEIVE_DIFF_ERROR,
+ payload: error,
+ },
+ ],
+ [],
+ done,
+ );
+ });
+ });
+
+ describe('fetchDiff', () => {
+ let mock;
+
+ beforeEach(() => {
+ mock = new MockAdapter(axios);
+ state.paths.diffEndpoint = diffEndpoint;
+ rootState.canReadVulnerabilityFeedback = true;
+ });
+
+ afterEach(() => {
+ mock.restore();
+ });
+
+ describe('when diff and vulnerability feedback endpoints respond successfully', () => {
+ beforeEach(() => {
+ mock
+ .onGet(diffEndpoint)
+ .replyOnce(200, reports.diff)
+ .onGet(vulnerabilityFeedbackPath)
+ .replyOnce(200, reports.enrichData);
+ });
+
+ it('should dispatch the `receiveDiffSuccess` action', done => {
+ const { diff, enrichData } = reports;
+ testAction(
+ actions.fetchDiff,
+ {},
+ { ...rootState, ...state },
+ [],
+ [
+ { type: 'requestDiff' },
+ {
+ type: 'receiveDiffSuccess',
+ payload: {
+ diff,
+ enrichData,
+ },
+ },
+ ],
+ done,
+ );
+ });
+ });
+
+ describe('when diff endpoint responds successfully and fetching vulnerability feedback is not authorized', () => {
+ beforeEach(() => {
+ rootState.canReadVulnerabilityFeedback = false;
+ mock.onGet(diffEndpoint).replyOnce(200, reports.diff);
+ });
+
+ it('should dispatch the `receiveDiffSuccess` action with empty enrich data', done => {
+ const { diff } = reports;
+ const enrichData = [];
+ testAction(
+ actions.fetchDiff,
+ {},
+ { ...rootState, ...state },
+ [],
+ [
+ { type: 'requestDiff' },
+ {
+ type: 'receiveDiffSuccess',
+ payload: {
+ diff,
+ enrichData,
+ },
+ },
+ ],
+ done,
+ );
+ });
+ });
+
+ describe('when the vulnerability feedback endpoint fails', () => {
+ beforeEach(() => {
+ mock
+ .onGet(diffEndpoint)
+ .replyOnce(200, reports.diff)
+ .onGet(vulnerabilityFeedbackPath)
+ .replyOnce(404);
+ });
+
+ it('should dispatch the `receiveError` action', done => {
+ testAction(
+ actions.fetchDiff,
+ {},
+ { ...rootState, ...state },
+ [],
+ [{ type: 'requestDiff' }, { type: 'receiveDiffError' }],
+ done,
+ );
+ });
+ });
+
+ describe('when the diff endpoint fails', () => {
+ beforeEach(() => {
+ mock
+ .onGet(diffEndpoint)
+ .replyOnce(404)
+ .onGet(vulnerabilityFeedbackPath)
+ .replyOnce(200, reports.enrichData);
+ });
+
+ it('should dispatch the `receiveDiffError` action', done => {
+ testAction(
+ actions.fetchDiff,
+ {},
+ { ...rootState, ...state },
+ [],
+ [{ type: 'requestDiff' }, { type: 'receiveDiffError' }],
+ done,
+ );
+ });
+ });
+ });
+});
diff --git a/spec/frontend/vue_shared/security_reports/store/modules/sast/mutations_spec.js b/spec/frontend/vue_shared/security_reports/store/modules/sast/mutations_spec.js
new file mode 100644
index 00000000000..fd611f38a34
--- /dev/null
+++ b/spec/frontend/vue_shared/security_reports/store/modules/sast/mutations_spec.js
@@ -0,0 +1,84 @@
+import * as types from '~/vue_shared/security_reports/store/modules/sast/mutation_types';
+import createState from '~/vue_shared/security_reports/store/modules/sast/state';
+import mutations from '~/vue_shared/security_reports/store/modules/sast/mutations';
+
+const createIssue = ({ ...config }) => ({ changed: false, ...config });
+
+describe('sast module mutations', () => {
+ const path = 'path';
+ let state;
+
+ beforeEach(() => {
+ state = createState();
+ });
+
+ describe(types.SET_DIFF_ENDPOINT, () => {
+ it('should set the SAST diff endpoint', () => {
+ mutations[types.SET_DIFF_ENDPOINT](state, path);
+
+ expect(state.paths.diffEndpoint).toBe(path);
+ });
+ });
+
+ describe(types.REQUEST_DIFF, () => {
+ it('should set the `isLoading` status to `true`', () => {
+ mutations[types.REQUEST_DIFF](state);
+
+ expect(state.isLoading).toBe(true);
+ });
+ });
+
+ describe(types.RECEIVE_DIFF_SUCCESS, () => {
+ beforeEach(() => {
+ const reports = {
+ diff: {
+ added: [
+ createIssue({ cve: 'CVE-1' }),
+ createIssue({ cve: 'CVE-2' }),
+ createIssue({ cve: 'CVE-3' }),
+ ],
+ fixed: [createIssue({ cve: 'CVE-4' }), createIssue({ cve: 'CVE-5' })],
+ existing: [createIssue({ cve: 'CVE-6' })],
+ base_report_out_of_date: true,
+ },
+ };
+ state.isLoading = true;
+ mutations[types.RECEIVE_DIFF_SUCCESS](state, reports);
+ });
+
+ it('should set the `isLoading` status to `false`', () => {
+ expect(state.isLoading).toBe(false);
+ });
+
+ it('should set the `baseReportOutofDate` status to `false`', () => {
+ expect(state.baseReportOutofDate).toBe(true);
+ });
+
+ it('should have the relevant `new` issues', () => {
+ expect(state.newIssues).toHaveLength(3);
+ });
+
+ it('should have the relevant `resolved` issues', () => {
+ expect(state.resolvedIssues).toHaveLength(2);
+ });
+
+ it('should have the relevant `all` issues', () => {
+ expect(state.allIssues).toHaveLength(1);
+ });
+ });
+
+ describe(types.RECEIVE_DIFF_ERROR, () => {
+ beforeEach(() => {
+ state.isLoading = true;
+ mutations[types.RECEIVE_DIFF_ERROR](state);
+ });
+
+ it('should set the `isLoading` status to `false`', () => {
+ expect(state.isLoading).toBe(false);
+ });
+
+ it('should set the `hasError` status to `true`', () => {
+ expect(state.hasError).toBe(true);
+ });
+ });
+});
diff --git a/spec/helpers/stat_anchors_helper_spec.rb b/spec/helpers/stat_anchors_helper_spec.rb
new file mode 100644
index 00000000000..c6556647bc8
--- /dev/null
+++ b/spec/helpers/stat_anchors_helper_spec.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe StatAnchorsHelper do
+ let(:anchor_klass) { ProjectPresenter::AnchorData }
+
+ describe '#stat_anchor_attrs' do
+ subject { helper.stat_anchor_attrs(anchor) }
+
+ context 'when anchor is a link' do
+ let(:anchor) { anchor_klass.new(true) }
+
+ it 'returns the proper attributes' do
+ expect(subject[:class]).to include('stat-link')
+ end
+ end
+
+ context 'when anchor is not a link' do
+ context 'when class_modifier is set' do
+ let(:anchor) { anchor_klass.new(false, nil, nil, 'default') }
+
+ it 'returns the proper attributes' do
+ expect(subject[:class]).to include('btn btn-default')
+ end
+ end
+
+ context 'when class_modifier is not set' do
+ let(:anchor) { anchor_klass.new(false) }
+
+ it 'returns the proper attributes' do
+ expect(subject[:class]).to include('btn btn-missing')
+ end
+ end
+ end
+
+ context 'when itemprop is not set' do
+ let(:anchor) { anchor_klass.new(false, nil, nil, nil, nil, false) }
+
+ it 'returns the itemprop attributes' do
+ expect(subject[:itemprop]).to be_nil
+ end
+ end
+
+ context 'when itemprop is set set' do
+ let(:anchor) { anchor_klass.new(false, nil, nil, nil, nil, true) }
+
+ it 'returns the itemprop attributes' do
+ expect(subject[:itemprop]).to eq true
+ end
+ end
+ end
+end
diff --git a/spec/models/ci/bridge_spec.rb b/spec/models/ci/bridge_spec.rb
index c464e176c17..51e82061d97 100644
--- a/spec/models/ci/bridge_spec.rb
+++ b/spec/models/ci/bridge_spec.rb
@@ -55,6 +55,17 @@ RSpec.describe Ci::Bridge do
expect(bridge.scoped_variables_hash.keys).to include(*variables)
end
+
+ context 'when bridge has dependency which has dotenv variable' do
+ let(:test) { create(:ci_build, pipeline: pipeline, stage_idx: 0) }
+ let(:bridge) { create(:ci_bridge, pipeline: pipeline, stage_idx: 1, options: { dependencies: [test.name] }) }
+
+ let!(:job_variable) { create(:ci_job_variable, :dotenv_source, job: test) }
+
+ it 'includes inherited variable' do
+ expect(bridge.scoped_variables_hash).to include(job_variable.key => job_variable.value)
+ end
+ end
end
describe 'state machine transitions' do
@@ -357,4 +368,53 @@ RSpec.describe Ci::Bridge do
it { is_expected.to be_falsey }
end
end
+
+ describe '#dependency_variables' do
+ subject { bridge.dependency_variables }
+
+ shared_context 'when ci_bridge_dependency_variables is disabled' do
+ before do
+ stub_feature_flags(ci_bridge_dependency_variables: false)
+ end
+
+ it { is_expected.to be_empty }
+ end
+
+ context 'when downloading from previous stages' do
+ let!(:prepare1) { create(:ci_build, name: 'prepare1', pipeline: pipeline, stage_idx: 0) }
+ let!(:bridge) { create(:ci_bridge, pipeline: pipeline, stage_idx: 1) }
+
+ let!(:job_variable_1) { create(:ci_job_variable, :dotenv_source, job: prepare1) }
+ let!(:job_variable_2) { create(:ci_job_variable, job: prepare1) }
+
+ it 'inherits only dependent variables' do
+ expect(subject.to_hash).to eq(job_variable_1.key => job_variable_1.value)
+ end
+
+ it_behaves_like 'when ci_bridge_dependency_variables is disabled'
+ end
+
+ context 'when using needs' do
+ let!(:prepare1) { create(:ci_build, name: 'prepare1', pipeline: pipeline, stage_idx: 0) }
+ let!(:prepare2) { create(:ci_build, name: 'prepare2', pipeline: pipeline, stage_idx: 0) }
+ let!(:prepare3) { create(:ci_build, name: 'prepare3', pipeline: pipeline, stage_idx: 0) }
+ let!(:bridge) do
+ create(:ci_bridge, pipeline: pipeline,
+ stage_idx: 1,
+ scheduling_type: 'dag',
+ needs_attributes: [{ name: 'prepare1', artifacts: true },
+ { name: 'prepare2', artifacts: false }])
+ end
+
+ let!(:job_variable_1) { create(:ci_job_variable, :dotenv_source, job: prepare1) }
+ let!(:job_variable_2) { create(:ci_job_variable, :dotenv_source, job: prepare2) }
+ let!(:job_variable_3) { create(:ci_job_variable, :dotenv_source, job: prepare3) }
+
+ it 'inherits only needs with artifacts variables' do
+ expect(subject.to_hash).to eq(job_variable_1.key => job_variable_1.value)
+ end
+
+ it_behaves_like 'when ci_bridge_dependency_variables is disabled'
+ end
+ end
end
diff --git a/yarn.lock b/yarn.lock
index 2ac639f47db..133651075db 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -866,10 +866,10 @@
resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-1.175.0.tgz#734f341784af1cd1d62d160a17bcdfb61ff7b04d"
integrity sha512-gXpc87TGSXIzfAr4QER1Qw1v3P47pBO6BXkma52blgwXVmcFNe3nhQzqsqt66wKNzrIrk3lAcB4GUyPHbPVXpg==
-"@gitlab/ui@23.0.0":
- version "23.0.0"
- resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-23.0.0.tgz#c6b96220c0a7f8f249e06b8ad67ddf53ded89e33"
- integrity sha512-y5WIkDHq4VS3eFQDOkQNrfroDu8rNyWLVhTE89oZ1zxlOh228yXdql8FccNTnRaPhC1YbZLGcvDJzYsWXht58A==
+"@gitlab/ui@23.3.0":
+ version "23.3.0"
+ resolved "https://registry.yarnpkg.com/@gitlab/ui/-/ui-23.3.0.tgz#642e5246320342824a77a4bc5c9e3d348758821c"
+ integrity sha512-hRKbihMy1qFEwW3FCYsoC7hgD7gGLhbGZXY3e9yIxL+cthRGwnA+RUuuXmMn6qCTFzM1i95hT6JViKa6NNygTg==
dependencies:
"@babel/standalone" "^7.0.0"
"@gitlab/vue-toasted" "^1.3.0"