diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml index 4f6f0e09fd5..0748fd35267 100644 --- a/.gitlab/ci/docs.gitlab-ci.yml +++ b/.gitlab/ci/docs.gitlab-ci.yml @@ -35,7 +35,7 @@ review-docs-cleanup: .docs-markdown-lint-image: # When updating the image version here, update it in /scripts/lint-doc.sh too. - image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/technical-writing/docs-gitlab-com/lint-markdown:alpine-3.21-vale-3.9.3-markdownlint2-0.17.1-lychee-0.18.0 + image: ${REGISTRY_HOST}/${REGISTRY_GROUP}/technical-writing/docs-gitlab-com/lint-markdown:alpine-3.21-vale-3.11.2-markdownlint2-0.17.2-lychee-0.18.1 docs-lint markdown: extends: diff --git a/.vale.ini b/.vale.ini index 6111cc3a749..0eb17152be7 100644 --- a/.vale.ini +++ b/.vale.ini @@ -5,6 +5,8 @@ StylesPath = doc/.vale MinAlertLevel = suggestion +IgnoredScopes = code, text.frontmatter.redirect_to + [*.md] BasedOnStyles = gitlab_base, gitlab_docs diff --git a/Gemfile.checksum b/Gemfile.checksum index 06f16753ec9..b7ffb888a64 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -631,7 +631,7 @@ {"name":"rubocop-rspec","version":"3.0.5","platform":"ruby","checksum":"c6a8e29fb1b00d227c32df159e92f5ebb9e0ff734e52955fb13aff5c74977e0f"}, {"name":"rubocop-rspec_rails","version":"2.30.0","platform":"ruby","checksum":"888112e83f9d7ef7ad2397e9d69a0b9614a4bae24f072c399804a180f80c4c46"}, {"name":"ruby-fogbugz","version":"0.3.0","platform":"ruby","checksum":"5e04cde474648f498a71cf1e1a7ab42c66b953862fbe224f793ec0a7a1d5f657"}, -{"name":"ruby-lsp","version":"0.23.10","platform":"ruby","checksum":"71dfb08ff3bdc66f92c18e49f7ce3fe772b25804bcd08a4369f70bcad1534d6c"}, +{"name":"ruby-lsp","version":"0.23.13","platform":"ruby","checksum":"a1875a9905a79a41c63d8df52bd016f238d635b64c8f0aac3639336bcf659f48"}, {"name":"ruby-lsp-rails","version":"0.3.31","platform":"ruby","checksum":"670aed466e54b5632e4907b8dedb91d8b144917c42513e013d656af175bf8c76"}, {"name":"ruby-lsp-rspec","version":"0.1.22","platform":"ruby","checksum":"e982edf5cd6ec1530c3f5fa7e423624ad00532ebeff7fc94e02c7516a9b759c0"}, {"name":"ruby-magic","version":"0.6.0","platform":"ruby","checksum":"7b2138877b7d23aff812c95564eba6473b74b815ef85beb0eb792e729a2b6101"}, @@ -754,7 +754,7 @@ {"name":"typhoeus","version":"1.4.1","platform":"ruby","checksum":"1c17db8364bd45ab302dc61e460173c3e69835896be88a3df07c206d5c55ef7c"}, {"name":"tzinfo","version":"2.0.6","platform":"ruby","checksum":"8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b"}, {"name":"uber","version":"0.1.0","platform":"ruby","checksum":"5beeb407ff807b5db994f82fa9ee07cfceaa561dad8af20be880bc67eba935dc"}, -{"name":"undercover","version":"0.6.3","platform":"ruby","checksum":"a74c4246bc3ed0a506681f9cc41e2cf353c12f1544bb2b7798807e81f2cb65fa"}, +{"name":"undercover","version":"0.6.4","platform":"ruby","checksum":"3c34fcf129b52a4993065c52612a65e5e05e77f0cac3f4f8f388114fb129ec1a"}, {"name":"unf","version":"0.1.4","platform":"java","checksum":"49a5972ec0b3d091d3b0b2e00113f2f342b9b212f0db855eb30a629637f6d302"}, {"name":"unf","version":"0.1.4","platform":"ruby","checksum":"4999517a531f2a955750f8831941891f6158498ec9b6cb1c81ce89388e63022e"}, {"name":"unf_ext","version":"0.0.8.2","platform":"ruby","checksum":"90b9623ee359cc4878461c5d2eab7d3d3ce5801a680a9e7ac83b8040c5b742fa"}, diff --git a/Gemfile.lock b/Gemfile.lock index bc55799c4cb..e8098875896 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1698,7 +1698,7 @@ GEM ruby-fogbugz (0.3.0) crack (~> 0.4) multipart-post (~> 2.0) - ruby-lsp (0.23.10) + ruby-lsp (0.23.13) language_server-protocol (~> 3.17.0) prism (>= 1.2, < 2.0) rbs (>= 3, < 4) @@ -1910,11 +1910,12 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) - undercover (0.6.3) + undercover (0.6.4) + base64 bigdecimal imagen (>= 0.2.0) rainbow (>= 2.1, < 4.0) - rugged (>= 0.27, < 1.8) + rugged (>= 0.27, < 1.10) unf (0.1.4) unf_ext unf_ext (0.0.8.2) diff --git a/Gemfile.next.checksum b/Gemfile.next.checksum index 5b5d8480963..46debf5aa35 100644 --- a/Gemfile.next.checksum +++ b/Gemfile.next.checksum @@ -641,7 +641,7 @@ {"name":"rubocop-rspec","version":"3.0.5","platform":"ruby","checksum":"c6a8e29fb1b00d227c32df159e92f5ebb9e0ff734e52955fb13aff5c74977e0f"}, {"name":"rubocop-rspec_rails","version":"2.30.0","platform":"ruby","checksum":"888112e83f9d7ef7ad2397e9d69a0b9614a4bae24f072c399804a180f80c4c46"}, {"name":"ruby-fogbugz","version":"0.3.0","platform":"ruby","checksum":"5e04cde474648f498a71cf1e1a7ab42c66b953862fbe224f793ec0a7a1d5f657"}, -{"name":"ruby-lsp","version":"0.23.10","platform":"ruby","checksum":"71dfb08ff3bdc66f92c18e49f7ce3fe772b25804bcd08a4369f70bcad1534d6c"}, +{"name":"ruby-lsp","version":"0.23.13","platform":"ruby","checksum":"a1875a9905a79a41c63d8df52bd016f238d635b64c8f0aac3639336bcf659f48"}, {"name":"ruby-lsp-rails","version":"0.3.31","platform":"ruby","checksum":"670aed466e54b5632e4907b8dedb91d8b144917c42513e013d656af175bf8c76"}, {"name":"ruby-lsp-rspec","version":"0.1.22","platform":"ruby","checksum":"e982edf5cd6ec1530c3f5fa7e423624ad00532ebeff7fc94e02c7516a9b759c0"}, {"name":"ruby-magic","version":"0.6.0","platform":"ruby","checksum":"7b2138877b7d23aff812c95564eba6473b74b815ef85beb0eb792e729a2b6101"}, @@ -767,7 +767,7 @@ {"name":"typhoeus","version":"1.4.1","platform":"ruby","checksum":"1c17db8364bd45ab302dc61e460173c3e69835896be88a3df07c206d5c55ef7c"}, {"name":"tzinfo","version":"2.0.6","platform":"ruby","checksum":"8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b"}, {"name":"uber","version":"0.1.0","platform":"ruby","checksum":"5beeb407ff807b5db994f82fa9ee07cfceaa561dad8af20be880bc67eba935dc"}, -{"name":"undercover","version":"0.6.3","platform":"ruby","checksum":"a74c4246bc3ed0a506681f9cc41e2cf353c12f1544bb2b7798807e81f2cb65fa"}, +{"name":"undercover","version":"0.6.4","platform":"ruby","checksum":"3c34fcf129b52a4993065c52612a65e5e05e77f0cac3f4f8f388114fb129ec1a"}, {"name":"unf","version":"0.1.4","platform":"java","checksum":"49a5972ec0b3d091d3b0b2e00113f2f342b9b212f0db855eb30a629637f6d302"}, {"name":"unf","version":"0.1.4","platform":"ruby","checksum":"4999517a531f2a955750f8831941891f6158498ec9b6cb1c81ce89388e63022e"}, {"name":"unf_ext","version":"0.0.8.2","platform":"ruby","checksum":"90b9623ee359cc4878461c5d2eab7d3d3ce5801a680a9e7ac83b8040c5b742fa"}, diff --git a/Gemfile.next.lock b/Gemfile.next.lock index adbbab95ffc..aa86b16b2c8 100644 --- a/Gemfile.next.lock +++ b/Gemfile.next.lock @@ -1730,7 +1730,7 @@ GEM ruby-fogbugz (0.3.0) crack (~> 0.4) multipart-post (~> 2.0) - ruby-lsp (0.23.10) + ruby-lsp (0.23.13) language_server-protocol (~> 3.17.0) prism (>= 1.2, < 2.0) rbs (>= 3, < 4) @@ -1944,11 +1944,12 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) - undercover (0.6.3) + undercover (0.6.4) + base64 bigdecimal imagen (>= 0.2.0) rainbow (>= 2.1, < 4.0) - rugged (>= 0.27, < 1.8) + rugged (>= 0.27, < 1.10) unf (0.1.4) unf_ext unf_ext (0.0.8.2) diff --git a/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_table.vue b/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_table.vue index b04da6ddb7e..33010842e0e 100644 --- a/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_table.vue +++ b/app/assets/javascripts/ci/ci_variable_list/components/ci_variable_table.vue @@ -14,6 +14,7 @@ import { import { __, s__, sprintf } from '~/locale'; import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin'; import CrudComponent from '~/vue_shared/components/crud_component.vue'; +import ClipboardButton from '~/vue_shared/components/clipboard_button.vue'; import { convertEnvironmentScope } from '~/ci/common/private/ci_environments_dropdown'; import { DEFAULT_EXCEEDS_VARIABLE_LIMIT_TEXT, @@ -69,6 +70,7 @@ export default { GlTable, GlModal, CrudComponent, + ClipboardButton, }, directives: { GlModalDirective, @@ -273,15 +275,12 @@ export default { class="gl-inline-block gl-max-w-full gl-break-anywhere" >{{ item.key }} -
@@ -304,7 +303,7 @@ export default { v-if="!item.hidden" class="-gl-mr-3 gl-flex gl-items-start gl-justify-end md:gl-justify-start" > - ***** + ••••• {{ item.value }} -
@@ -331,15 +327,12 @@ export default { class="gl-inline-block gl-max-w-full gl-break-anywhere" >{{ convertEnvironmentScopeValue(item.environmentScope) }} - diff --git a/app/assets/javascripts/ci/pipeline_details/graph/components/linked_pipeline.vue b/app/assets/javascripts/ci/pipeline_details/graph/components/linked_pipeline.vue index 038f406de87..3aa037fbbdc 100644 --- a/app/assets/javascripts/ci/pipeline_details/graph/components/linked_pipeline.vue +++ b/app/assets/javascripts/ci/pipeline_details/graph/components/linked_pipeline.vue @@ -309,18 +309,22 @@ export default { > - +
+ + + +
-
+

🎉 {{ s__("Runners|You've registered a new runner!") }}

diff --git a/app/assets/javascripts/ci/runner/constants.js b/app/assets/javascripts/ci/runner/constants.js index adacf77bfcf..ad01b34f9c9 100644 --- a/app/assets/javascripts/ci/runner/constants.js +++ b/app/assets/javascripts/ci/runner/constants.js @@ -150,6 +150,11 @@ export const GROUP_TYPE = 'GROUP_TYPE'; export const PROJECT_TYPE = 'PROJECT_TYPE'; export const RUNNER_TYPES = [INSTANCE_TYPE, GROUP_TYPE, PROJECT_TYPE]; +// CiRunnerCreationState + +export const CREATION_STATE_STARTED = 'STARTED'; +export const CREATION_STATE_FINISHED = 'FINISHED'; + // CiRunnerStatus export const STATUS_ONLINE = 'ONLINE'; diff --git a/app/assets/javascripts/ci/runner/graphql/register/runner_for_registration.query.graphql b/app/assets/javascripts/ci/runner/graphql/register/runner_for_registration.query.graphql index f6cee807620..62866ddddb5 100644 --- a/app/assets/javascripts/ci/runner/graphql/register/runner_for_registration.query.graphql +++ b/app/assets/javascripts/ci/runner/graphql/register/runner_for_registration.query.graphql @@ -3,6 +3,6 @@ query getRunnerForRegistration($id: CiRunnerID!) { id description ephemeralAuthenticationToken - status + creationState } } diff --git a/app/assets/javascripts/diffs/components/app.vue b/app/assets/javascripts/diffs/components/app.vue index 796a47bf1d9..331c662320a 100644 --- a/app/assets/javascripts/diffs/components/app.vue +++ b/app/assets/javascripts/diffs/components/app.vue @@ -787,6 +787,7 @@ export default {

diff --git a/app/assets/javascripts/diffs/components/diffs_file_tree.vue b/app/assets/javascripts/diffs/components/diffs_file_tree.vue index a35cf3c0af9..1174340602c 100644 --- a/app/assets/javascripts/diffs/components/diffs_file_tree.vue +++ b/app/assets/javascripts/diffs/components/diffs_file_tree.vue @@ -29,6 +29,11 @@ export default { required: false, default: false, }, + totalFilesCount: { + type: [Number, String], + default: undefined, + required: false, + }, }, data() { const treeWidth = @@ -133,6 +138,7 @@ export default {
diff --git a/app/assets/javascripts/diffs/components/tree_list.vue b/app/assets/javascripts/diffs/components/tree_list.vue index 7cd03c90d07..19859b504d4 100644 --- a/app/assets/javascripts/diffs/components/tree_list.vue +++ b/app/assets/javascripts/diffs/components/tree_list.vue @@ -41,6 +41,11 @@ export default { required: false, default: null, }, + totalFilesCount: { + type: [Number, String], + default: undefined, + required: false, + }, }, data() { return { @@ -52,7 +57,6 @@ export default { 'renderTreeList', 'currentDiffFileId', 'viewedDiffFileIds', - 'realSize', 'fileTree', 'allBlobs', 'linkedFile', @@ -191,7 +195,9 @@ export default {
{{ __('Files') }}
- {{ realSize }} + {{ + totalFilesCount + }} diff --git a/app/assets/javascripts/rapid_diffs/app/index.js b/app/assets/javascripts/rapid_diffs/app/index.js index c060c3b388d..5e7d1d12389 100644 --- a/app/assets/javascripts/rapid_diffs/app/index.js +++ b/app/assets/javascripts/rapid_diffs/app/index.js @@ -25,14 +25,11 @@ class RapidDiffsFacade { document.querySelector('[data-diffs-list]'), this.DiffFileImplementation, ); - const { reloadStreamUrl, metadataEndpoint, diffFilesEndpoint } = + const { reloadStreamUrl, diffsStatsEndpoint, diffFilesEndpoint } = document.querySelector('[data-rapid-diffs]').dataset; - useDiffsView(pinia).metadataEndpoint = metadataEndpoint; + useDiffsView(pinia).diffsStatsEndpoint = diffsStatsEndpoint; useDiffsView(pinia) - .loadMetadata() - .then(() => { - initHiddenFilesWarning(); - }) + .loadDiffsStats() .catch((error) => { createAlert({ message: __('Failed to load additional diffs information. Try reloading the page.'), @@ -46,6 +43,7 @@ class RapidDiffsFacade { }); }); initViewSettings({ pinia, streamUrl: reloadStreamUrl }); + initHiddenFilesWarning(); document.addEventListener(DIFF_FILE_MOUNTED, useDiffsList(pinia).addLoadedFile); } diff --git a/app/assets/javascripts/rapid_diffs/app/init_hidden_files_warning.js b/app/assets/javascripts/rapid_diffs/app/init_hidden_files_warning.js index 7fb995e3161..b742d962b3d 100644 --- a/app/assets/javascripts/rapid_diffs/app/init_hidden_files_warning.js +++ b/app/assets/javascripts/rapid_diffs/app/init_hidden_files_warning.js @@ -12,17 +12,17 @@ export async function initHiddenFilesWarning() { el, pinia, computed: { - ...mapState(useDiffsView, ['diffStats']), + ...mapState(useDiffsView, ['overflow', 'totalFilesCount']), }, render(h) { - if (!this.diffStats?.renderOverflowWarning) return null; + if (!this.overflow) return null; return h(HiddenFilesWarning, { props: { - total: this.diffStats?.realSize, - visible: this.diffStats?.size, - plainDiffPath: this.diffStats?.plainDiffPath, - emailPatchPath: this.diffStats?.emailPatchPath, + total: this.totalFilesCount, + visible: this.overflow?.visibleCount, + plainDiffPath: this.overflow?.diffPath, + emailPatchPath: this.overflow?.emailPath, }, }); }, diff --git a/app/assets/javascripts/rapid_diffs/app/view_settings.js b/app/assets/javascripts/rapid_diffs/app/view_settings.js index 819ad296308..0894e961aa6 100644 --- a/app/assets/javascripts/rapid_diffs/app/view_settings.js +++ b/app/assets/javascripts/rapid_diffs/app/view_settings.js @@ -26,7 +26,7 @@ const initSettingsApp = (el, pinia) => { 'viewType', 'fileByFileMode', 'singleFileMode', - 'diffStats', + 'diffsStats', ]), }, methods: { @@ -40,9 +40,9 @@ const initSettingsApp = (el, pinia) => { diffViewType: this.viewType, viewDiffsFileByFile: this.singleFileMode, isLoading: this.isLoading, - addedLines: this.diffStats?.addedLines, - removedLines: this.diffStats?.removedLines, - diffsCount: this.diffStats?.diffsCount, + addedLines: this.diffsStats?.addedLines, + removedLines: this.diffsStats?.removedLines, + diffsCount: this.diffsStats?.diffsCount, }, on: { updateDiffViewType: this.updateViewType, diff --git a/app/assets/javascripts/rapid_diffs/stores/diffs_view.js b/app/assets/javascripts/rapid_diffs/stores/diffs_view.js index dccf3f875c8..647ac479f92 100644 --- a/app/assets/javascripts/rapid_diffs/stores/diffs_view.js +++ b/app/assets/javascripts/rapid_diffs/stores/diffs_view.js @@ -11,7 +11,6 @@ import { queueRedisHllEvents } from '~/diffs/utils/queue_events'; import { mergeUrlParams } from '~/lib/utils/url_utility'; import axios from '~/lib/utils/axios_utils'; import { useDiffsList } from '~/rapid_diffs/stores/diffs_list'; -import store from '~/mr_notes/stores'; export const useDiffsView = defineStore('diffsView', { state() { @@ -21,28 +20,38 @@ export const useDiffsView = defineStore('diffsView', { singleFileMode: false, updateUserEndpoint: undefined, streamUrl: undefined, - metadataEndpoint: undefined, - diffStats: null, + diffsStatsEndpoint: undefined, + diffsStats: null, + overflow: null, }; }, actions: { - async loadMetadata() { - // TODO: refactor this to our own Pinia stores - store.state.diffs.endpointMetadata = this.metadataEndpoint; - store.state.diffs.diffViewType = this.viewType; - store.state.diffs.showWhitespace = this.showWhitespace; - await store.dispatch('diffs/fetchDiffFilesMeta'); - this.diffStats = { - addedLines: store.state.diffs.addedLines, - removedLines: store.state.diffs.removedLines, - size: store.state.diffs.size, - realSize: store.state.diffs.realSize, - plainDiffPath: store.state.diffs.plainDiffPath, - emailPatchPath: store.state.diffs.emailPatchPath, - renderOverflowWarning: store.state.diffs.renderOverflowWarning, - // we will be using a number for that after refactoring - diffsCount: parseInt(store.state.diffs.realSize, 10), + async loadDiffsStats() { + const { data } = await axios.get(this.diffsStatsEndpoint); + const { + added_lines: addedLines, + removed_lines: removedLines, + diffs_count: diffsCount, + } = data.diffs_stats; + this.diffsStats = { + addedLines, + removedLines, + diffsCount, }; + if (data.overflow) { + const { + visible_count: visibleCount, + email_path: emailPath, + diff_path: diffPath, + } = data.overflow || {}; + this.overflow = { + visibleCount, + emailPath, + diffPath, + }; + } else { + this.overflow = null; + } }, updateDiffView() { if (this.singleFileMode) { @@ -68,7 +77,6 @@ export const useDiffsView = defineStore('diffsView', { // we don't have to wait for the setting to be saved since whitespace param is passed explicitly axios.put(this.updateUserEndpoint, { show_whitespace_in_diffs: value }); } - this.loadMetadata(); this.updateDiffView(); }, }, @@ -77,5 +85,8 @@ export const useDiffsView = defineStore('diffsView', { // w: '1' means ignore whitespace, app/helpers/diff_helper.rb#hide_whitespace? return { view: this.viewType, w: this.showWhitespace ? '0' : '1' }; }, + totalFilesCount() { + return this.diffsStats?.diffsCount; + }, }, }); diff --git a/app/assets/javascripts/super_sidebar/components/global_search/components/global_search_header_app.vue b/app/assets/javascripts/super_sidebar/components/global_search/components/global_search_header_app.vue index 505d8135634..1fd694074a1 100644 --- a/app/assets/javascripts/super_sidebar/components/global_search/components/global_search_header_app.vue +++ b/app/assets/javascripts/super_sidebar/components/global_search/components/global_search_header_app.vue @@ -1,6 +1,6 @@ @@ -63,26 +52,33 @@ export default { diff --git a/app/assets/javascripts/vue_shared/components/entity_select/entity_select.vue b/app/assets/javascripts/vue_shared/components/entity_select/entity_select.vue index 191e61d8ce7..a2c29967629 100644 --- a/app/assets/javascripts/vue_shared/components/entity_select/entity_select.vue +++ b/app/assets/javascripts/vue_shared/components/entity_select/entity_select.vue @@ -20,6 +20,11 @@ export default { required: false, default: false, }, + fluidWidth: { + type: Boolean, + required: false, + default: false, + }, label: { type: String, required: true, @@ -207,6 +212,7 @@ export default { ref="listbox" v-model="selected" :block="block" + :fluid-width="fluidWidth" :header-text="headerText" :reset-button-label="resetButtonLabel" :toggle-text="toggleText" diff --git a/app/assets/javascripts/vue_shared/components/entity_select/group_select.vue b/app/assets/javascripts/vue_shared/components/entity_select/group_select.vue index a72143ec4a9..53981cbc8ac 100644 --- a/app/assets/javascripts/vue_shared/components/entity_select/group_select.vue +++ b/app/assets/javascripts/vue_shared/components/entity_select/group_select.vue @@ -29,6 +29,11 @@ export default { required: false, default: false, }, + fluidWidth: { + type: Boolean, + required: false, + default: false, + }, label: { type: String, required: false, @@ -141,6 +146,7 @@ export default { :fetch-items="fetchGroups" :fetch-initial-selection="fetchInitialGroup" :block="block" + :fluid-width="fluidWidth" v-on="$listeners" >