diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-03-01 18:22:06 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-03-01 18:22:06 +0300 |
commit | 2ccb5c91c82c780c905ee77da144f17825610487 (patch) | |
tree | 92fd3f6a2638474bc0725714a31da365fd80a301 /app | |
parent | fbc7e1f503da80d993b970a74637a1edf53f7ab6 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
43 files changed, 91 insertions, 96 deletions
diff --git a/app/assets/javascripts/deploy_tokens/components/revoke_button.vue b/app/assets/javascripts/deploy_tokens/components/revoke_button.vue index fdf8b7796bf..7879357a042 100644 --- a/app/assets/javascripts/deploy_tokens/components/revoke_button.vue +++ b/app/assets/javascripts/deploy_tokens/components/revoke_button.vue @@ -17,9 +17,6 @@ export default { revokePath: { default: '', }, - buttonClass: { - default: '', - }, }, computed: { modalId() { @@ -38,10 +35,9 @@ export default { <div> <gl-button v-gl-modal="modalId" - :class="buttonClass" category="primary" variant="danger" - class="float-right" + class="gl-float-right" data-testid="revoke-button" >{{ s__('DeployTokens|Revoke') }}</gl-button > diff --git a/app/assets/javascripts/deploy_tokens/init_revoke_button.js b/app/assets/javascripts/deploy_tokens/init_revoke_button.js index 20187150a60..bc3f3c9ddf4 100644 --- a/app/assets/javascripts/deploy_tokens/init_revoke_button.js +++ b/app/assets/javascripts/deploy_tokens/init_revoke_button.js @@ -9,14 +9,13 @@ export default () => { } return containers.forEach((el) => { - const { token, revokePath, buttonClass } = el.dataset; + const { token, revokePath } = el.dataset; return new Vue({ el, provide: { token: JSON.parse(token), revokePath, - buttonClass, }, render(h) { return h(RevokeButton); diff --git a/app/assets/javascripts/integrations/edit/components/jira_issues_fields.vue b/app/assets/javascripts/integrations/edit/components/jira_issues_fields.vue index 7f2f7620a86..198cabfad81 100644 --- a/app/assets/javascripts/integrations/edit/components/jira_issues_fields.vue +++ b/app/assets/javascripts/integrations/edit/components/jira_issues_fields.vue @@ -83,17 +83,17 @@ export default { i18n: { sectionTitle: s__('JiraService|View Jira issues in GitLab'), sectionDescription: s__( - 'JiraService|Work on Jira issues without leaving GitLab. Adds a Jira menu to access your list of Jira issues and view any issue as read-only.', + 'JiraService|Work on Jira issues without leaving GitLab. Add a Jira menu to access a read-only list of your Jira issues.', ), enableCheckboxLabel: s__('JiraService|Enable Jira issues'), enableCheckboxHelp: s__( - 'JiraService|Warning: All GitLab users that have access to this GitLab project are able to view all issues from the Jira project specified below.', + 'JiraService|Warning: All GitLab users with access to this GitLab project can view all issues from the Jira project you select.', ), projectKeyLabel: s__('JiraService|Jira project key'), projectKeyPlaceholder: s__('JiraService|For example, AB'), requiredFieldFeedback: __('This field is required.'), issueTrackerConflictWarning: s__( - 'JiraService|Displaying Jira issues while leaving the GitLab issue functionality enabled might be confusing. Consider %{linkStart}disabling GitLab issues%{linkEnd} if they won’t otherwise be used.', + 'JiraService|Displaying Jira issues while leaving GitLab issues also enabled might be confusing. Consider %{linkStart}disabling GitLab issues%{linkEnd} if they won’t otherwise be used.', ), }, }; diff --git a/app/assets/javascripts/integrations/edit/components/jira_trigger_fields.vue b/app/assets/javascripts/integrations/edit/components/jira_trigger_fields.vue index df5946b814a..bb8d630fb0e 100644 --- a/app/assets/javascripts/integrations/edit/components/jira_trigger_fields.vue +++ b/app/assets/javascripts/integrations/edit/components/jira_trigger_fields.vue @@ -138,7 +138,7 @@ export default { label-for="service[trigger]" :description=" s__( - 'Integrations|When you mention a Jira issue in a commit or merge request, GitLab creates a remote link and comment (if enabled).', + 'JiraService|When a Jira issue is mentioned in a commit or merge request, a remote link and comment (if enabled) will be created.', ) " > diff --git a/app/assets/javascripts/invite_members/components/invite_modal_base.vue b/app/assets/javascripts/invite_members/components/invite_modal_base.vue index fc00f5b9343..e92433e0ccf 100644 --- a/app/assets/javascripts/invite_members/components/invite_modal_base.vue +++ b/app/assets/javascripts/invite_members/components/invite_modal_base.vue @@ -264,7 +264,7 @@ export default { <gl-button :disabled="submitDisabled" :loading="isLoading" - variant="success" + variant="confirm" data-qa-selector="invite_button" data-testid="invite-button" @click="submit" diff --git a/app/assets/javascripts/issues/show/components/header_actions.vue b/app/assets/javascripts/issues/show/components/header_actions.vue index 8ba08472ea0..78ec5071b59 100644 --- a/app/assets/javascripts/issues/show/components/header_actions.vue +++ b/app/assets/javascripts/issues/show/components/header_actions.vue @@ -135,6 +135,14 @@ export default { const canReopen = this.isClosed && this.canReopenIssue; return canClose || canReopen; }, + hasDesktopDropdown() { + return ( + this.canCreateIssue || this.canPromoteToEpic || !this.isIssueAuthor || this.canReportSpam + ); + }, + hasMobileDropdown() { + return this.hasDesktopDropdown || this.showToggleIssueStateButton; + }, }, created() { eventHub.$on('toggle.issuable.state', this.toggleIssueState); @@ -223,10 +231,12 @@ export default { <template> <div class="detail-page-header-actions gl-display-flex"> <gl-dropdown + v-if="hasMobileDropdown" class="gl-sm-display-none! w-100" block :text="dropdownText" data-qa-selector="issue_actions_dropdown" + data-testid="mobile-dropdown" :loading="isToggleStateButtonLoading" > <gl-dropdown-item @@ -276,11 +286,13 @@ export default { </gl-button> <gl-dropdown + v-if="hasDesktopDropdown" class="gl-display-none gl-sm-display-inline-flex! gl-ml-3" icon="ellipsis_v" category="tertiary" :text="dropdownText" :text-sr-only="true" + data-testid="desktop-dropdown" no-caret right > diff --git a/app/assets/javascripts/merge_conflicts/merge_conflict_resolver_app.vue b/app/assets/javascripts/merge_conflicts/merge_conflict_resolver_app.vue index 5fcc778a714..fdcb99351a7 100644 --- a/app/assets/javascripts/merge_conflicts/merge_conflict_resolver_app.vue +++ b/app/assets/javascripts/merge_conflicts/merge_conflict_resolver_app.vue @@ -1,5 +1,5 @@ <script> -import { GlSprintf, GlButton, GlButtonGroup } from '@gitlab/ui'; +import { GlSprintf, GlButton, GlButtonGroup, GlLoadingIcon } from '@gitlab/ui'; import { mapGetters, mapState, mapActions } from 'vuex'; import { __ } from '~/locale'; import FileIcon from '~/vue_shared/components/file_icon.vue'; @@ -23,6 +23,7 @@ export default { GlButton, GlButtonGroup, GlSprintf, + GlLoadingIcon, FileIcon, DiffFileEditor, InlineConflictLines, @@ -72,9 +73,7 @@ export default { </script> <template> <div id="conflicts"> - <div v-if="isLoading" class="loading"> - <div class="spinner spinner-md"></div> - </div> + <gl-loading-icon v-if="isLoading" size="md" data-testid="loading-spinner" /> <div v-if="hasError" class="nothing-here-block"> {{ conflictsData.errorMessage }} </div> diff --git a/app/assets/javascripts/pipeline_editor/pipeline_editor_app.vue b/app/assets/javascripts/pipeline_editor/pipeline_editor_app.vue index 1da50c55a68..a5436ca63cb 100644 --- a/app/assets/javascripts/pipeline_editor/pipeline_editor_app.vue +++ b/app/assets/javascripts/pipeline_editor/pipeline_editor_app.vue @@ -69,9 +69,10 @@ export default { // If it's a brand new file, we don't want to fetch the content. // Then when the user commits the first time, the query would run // to get the initial file content, but we already have it in `lastCommitedContent` - // so we skip the loading altogether. - skip({ isNewCiConfigFile, lastCommittedContent }) { - return isNewCiConfigFile || lastCommittedContent; + // so we skip the loading altogether. We also wait for the currentBranch + // to have been fetched + skip() { + return this.shouldSkipBlobContentQuery; }, variables() { return { @@ -128,8 +129,8 @@ export default { }, ciConfigData: { query: getCiConfigData, - skip({ currentCiFileContent }) { - return !currentCiFileContent; + skip() { + return this.shouldSkipCiConfigQuery; }, variables() { return { @@ -174,6 +175,9 @@ export default { }, commitSha: { query: getLatestCommitShaQuery, + skip({ currentBranch }) { + return !currentBranch; + }, variables() { return { projectPath: this.projectFullPath, @@ -181,7 +185,7 @@ export default { }; }, update(data) { - const latestCommitSha = data.project?.repository?.tree?.lastCommit?.sha; + const latestCommitSha = data?.project?.repository?.tree?.lastCommit?.sha; if (this.isFetchingCommitSha && latestCommitSha === this.commitSha) { this.$apollo.queries.commitSha.startPolling(COMMIT_SHA_POLL_INTERVAL); @@ -192,6 +196,9 @@ export default { this.$apollo.queries.commitSha.stopPolling(); return latestCommitSha; }, + error() { + this.reportFailure(LOAD_FAILURE_UNKNOWN); + }, }, currentBranch: { query: getCurrentBranch, @@ -234,6 +241,12 @@ export default { isEmpty() { return this.currentCiFileContent === ''; }, + shouldSkipBlobContentQuery() { + return this.isNewCiConfigFile || this.lastCommittedContent || !this.currentBranch; + }, + shouldSkipCiConfigQuery() { + return !this.currentCiFileContent || !this.commitSha; + }, }, i18n: { resetModal: { diff --git a/app/assets/javascripts/runner/admin_runner_edit/admin_runner_edit_app.vue b/app/assets/javascripts/runner/admin_runner_edit/admin_runner_edit_app.vue index 4d2ca9b0c58..c2db3b9facd 100644 --- a/app/assets/javascripts/runner/admin_runner_edit/admin_runner_edit_app.vue +++ b/app/assets/javascripts/runner/admin_runner_edit/admin_runner_edit_app.vue @@ -5,7 +5,7 @@ import { convertToGraphQLId } from '~/graphql_shared/utils'; import RunnerHeader from '../components/runner_header.vue'; import RunnerUpdateForm from '../components/runner_update_form.vue'; import { I18N_FETCH_ERROR } from '../constants'; -import getRunnerQuery from '../graphql/get_runner.query.graphql'; +import runnerQuery from '../graphql/details/runner.query.graphql'; import { captureException } from '../sentry_utils'; export default { @@ -27,7 +27,7 @@ export default { }, apollo: { runner: { - query: getRunnerQuery, + query: runnerQuery, variables() { return { id: convertToGraphQLId(TYPE_CI_RUNNER, this.runnerId), diff --git a/app/assets/javascripts/runner/admin_runner_show/admin_runner_show_app.vue b/app/assets/javascripts/runner/admin_runner_show/admin_runner_show_app.vue index 2795ddbbbcb..86ad912f017 100644 --- a/app/assets/javascripts/runner/admin_runner_show/admin_runner_show_app.vue +++ b/app/assets/javascripts/runner/admin_runner_show/admin_runner_show_app.vue @@ -8,7 +8,7 @@ import RunnerPauseButton from '../components/runner_pause_button.vue'; import RunnerHeader from '../components/runner_header.vue'; import RunnerDetails from '../components/runner_details.vue'; import { I18N_FETCH_ERROR } from '../constants'; -import getRunnerQuery from '../graphql/get_runner.query.graphql'; +import runnerQuery from '../graphql/details/runner.query.graphql'; import { captureException } from '../sentry_utils'; export default { @@ -35,7 +35,7 @@ export default { }, apollo: { runner: { - query: getRunnerQuery, + query: runnerQuery, variables() { return { id: convertToGraphQLId(TYPE_CI_RUNNER, this.runnerId), diff --git a/app/assets/javascripts/runner/admin_runners/admin_runners_app.vue b/app/assets/javascripts/runner/admin_runners/admin_runners_app.vue index 3ce9a890b37..5e487ee5c52 100644 --- a/app/assets/javascripts/runner/admin_runners/admin_runners_app.vue +++ b/app/assets/javascripts/runner/admin_runners/admin_runners_app.vue @@ -26,8 +26,8 @@ import { STATUS_STALE, I18N_FETCH_ERROR, } from '../constants'; -import getRunnersQuery from '../graphql/get_runners.query.graphql'; -import getRunnersCountQuery from '../graphql/get_runners_count.query.graphql'; +import runnersAdminQuery from '../graphql/list/admin_runners.query.graphql'; +import runnersAdminCountQuery from '../graphql/list/admin_runners_count.query.graphql'; import { fromUrlQueryToSearch, fromSearchToUrl, @@ -36,7 +36,7 @@ import { import { captureException } from '../sentry_utils'; const runnersCountSmartQuery = { - query: getRunnersCountQuery, + query: runnersAdminCountQuery, fetchPolicy: fetchPolicies.CACHE_AND_NETWORK, update(data) { return data?.runners?.count; @@ -77,7 +77,7 @@ export default { }, apollo: { runners: { - query: getRunnersQuery, + query: runnersAdminQuery, // Runners can be updated by users directly in this list. // A "cache and network" policy prevents outdated filtered // results. diff --git a/app/assets/javascripts/runner/components/registration/registration_token_reset_dropdown_item.vue b/app/assets/javascripts/runner/components/registration/registration_token_reset_dropdown_item.vue index e65d30afee1..1234054c660 100644 --- a/app/assets/javascripts/runner/components/registration/registration_token_reset_dropdown_item.vue +++ b/app/assets/javascripts/runner/components/registration/registration_token_reset_dropdown_item.vue @@ -4,7 +4,7 @@ import { createAlert } from '~/flash'; import { TYPE_GROUP, TYPE_PROJECT } from '~/graphql_shared/constants'; import { convertToGraphQLId } from '~/graphql_shared/utils'; import { __, s__ } from '~/locale'; -import runnersRegistrationTokenResetMutation from '~/runner/graphql/runners_registration_token_reset.mutation.graphql'; +import runnersRegistrationTokenResetMutation from '~/runner/graphql/list/runners_registration_token_reset.mutation.graphql'; import { captureException } from '~/runner/sentry_utils'; import { INSTANCE_TYPE, GROUP_TYPE, PROJECT_TYPE } from '../../constants'; diff --git a/app/assets/javascripts/runner/components/runner_delete_button.vue b/app/assets/javascripts/runner/components/runner_delete_button.vue index 4a508c64214..cf71a4705ca 100644 --- a/app/assets/javascripts/runner/components/runner_delete_button.vue +++ b/app/assets/javascripts/runner/components/runner_delete_button.vue @@ -1,6 +1,6 @@ <script> import { GlButton, GlModalDirective, GlTooltipDirective } from '@gitlab/ui'; -import runnerDeleteMutation from '~/runner/graphql/runner_delete.mutation.graphql'; +import runnerDeleteMutation from '~/runner/graphql/shared/runner_delete.mutation.graphql'; import { createAlert } from '~/flash'; import { s__, sprintf } from '~/locale'; import { captureException } from '~/runner/sentry_utils'; diff --git a/app/assets/javascripts/runner/components/runner_jobs.vue b/app/assets/javascripts/runner/components/runner_jobs.vue index f9804ed815a..eb77babcc57 100644 --- a/app/assets/javascripts/runner/components/runner_jobs.vue +++ b/app/assets/javascripts/runner/components/runner_jobs.vue @@ -1,7 +1,7 @@ <script> import { GlSkeletonLoading } from '@gitlab/ui'; import { createAlert } from '~/flash'; -import getRunnerJobsQuery from '../graphql/get_runner_jobs.query.graphql'; +import runnerJobsQuery from '../graphql/details/runner_jobs.query.graphql'; import { I18N_FETCH_ERROR, I18N_NO_JOBS_FOUND, RUNNER_DETAILS_JOBS_PAGE_SIZE } from '../constants'; import { captureException } from '../sentry_utils'; import { getPaginationVariables } from '../utils'; @@ -34,7 +34,7 @@ export default { }, apollo: { jobs: { - query: getRunnerJobsQuery, + query: runnerJobsQuery, variables() { return this.variables; }, diff --git a/app/assets/javascripts/runner/components/runner_pause_button.vue b/app/assets/javascripts/runner/components/runner_pause_button.vue index 3ea2006d17a..a1901c55e61 100644 --- a/app/assets/javascripts/runner/components/runner_pause_button.vue +++ b/app/assets/javascripts/runner/components/runner_pause_button.vue @@ -1,6 +1,6 @@ <script> import { GlButton, GlTooltipDirective } from '@gitlab/ui'; -import runnerToggleActiveMutation from '~/runner/graphql/runner_toggle_active.mutation.graphql'; +import runnerToggleActiveMutation from '~/runner/graphql/shared/runner_toggle_active.mutation.graphql'; import { createAlert } from '~/flash'; import { captureException } from '~/runner/sentry_utils'; import { I18N_PAUSE, I18N_RESUME } from '../constants'; diff --git a/app/assets/javascripts/runner/components/runner_projects.vue b/app/assets/javascripts/runner/components/runner_projects.vue index 2040b39e948..f8ec29b8a24 100644 --- a/app/assets/javascripts/runner/components/runner_projects.vue +++ b/app/assets/javascripts/runner/components/runner_projects.vue @@ -2,7 +2,7 @@ import { GlSkeletonLoading } from '@gitlab/ui'; import { sprintf, formatNumber } from '~/locale'; import { createAlert } from '~/flash'; -import getRunnerProjectsQuery from '../graphql/get_runner_projects.query.graphql'; +import runnerProjectsQuery from '../graphql/details/runner_projects.query.graphql'; import { I18N_ASSIGNED_PROJECTS, I18N_NONE, @@ -41,7 +41,7 @@ export default { }, apollo: { projects: { - query: getRunnerProjectsQuery, + query: runnerProjectsQuery, variables() { return this.variables; }, diff --git a/app/assets/javascripts/runner/components/runner_update_form.vue b/app/assets/javascripts/runner/components/runner_update_form.vue index abff3e59407..e44450a2a8d 100644 --- a/app/assets/javascripts/runner/components/runner_update_form.vue +++ b/app/assets/javascripts/runner/components/runner_update_form.vue @@ -15,7 +15,7 @@ import { createAlert, VARIANT_SUCCESS } from '~/flash'; import { __ } from '~/locale'; import { captureException } from '~/runner/sentry_utils'; import { ACCESS_LEVEL_NOT_PROTECTED, ACCESS_LEVEL_REF_PROTECTED, PROJECT_TYPE } from '../constants'; -import runnerUpdateMutation from '../graphql/runner_update.mutation.graphql'; +import runnerUpdateMutation from '../graphql/details/runner_update.mutation.graphql'; export default { name: 'RunnerUpdateForm', diff --git a/app/assets/javascripts/runner/graphql/get_runner.query.graphql b/app/assets/javascripts/runner/graphql/details/runner.query.graphql index f6ce8281c64..4792a186160 100644 --- a/app/assets/javascripts/runner/graphql/get_runner.query.graphql +++ b/app/assets/javascripts/runner/graphql/details/runner.query.graphql @@ -1,10 +1,9 @@ -#import "ee_else_ce/runner/graphql/runner_details.fragment.graphql" +#import "ee_else_ce/runner/graphql/details/runner_details.fragment.graphql" query getRunner($id: CiRunnerID!) { # We have an id in deeply nested fragment # eslint-disable-next-line @graphql-eslint/require-id-when-available runner(id: $id) { - __typename ...RunnerDetails } } diff --git a/app/assets/javascripts/runner/graphql/runner_details.fragment.graphql b/app/assets/javascripts/runner/graphql/details/runner_details.fragment.graphql index 2449ee0fc0f..2449ee0fc0f 100644 --- a/app/assets/javascripts/runner/graphql/runner_details.fragment.graphql +++ b/app/assets/javascripts/runner/graphql/details/runner_details.fragment.graphql diff --git a/app/assets/javascripts/runner/graphql/runner_details_shared.fragment.graphql b/app/assets/javascripts/runner/graphql/details/runner_details_shared.fragment.graphql index 74760bbaa07..d8c67728fac 100644 --- a/app/assets/javascripts/runner/graphql/runner_details_shared.fragment.graphql +++ b/app/assets/javascripts/runner/graphql/details/runner_details_shared.fragment.graphql @@ -1,4 +1,5 @@ fragment RunnerDetailsShared on CiRunner { + __typename id runnerType active @@ -22,7 +23,7 @@ fragment RunnerDetailsShared on CiRunner { groups { # Only a single group can be loaded here, while projects # are loaded separately using the query with pagination - # parameters `get_runner_projects.query.graphql`. + # parameters `runner_projects.query.graphql`. nodes { id avatarUrl diff --git a/app/assets/javascripts/runner/graphql/get_runner_jobs.query.graphql b/app/assets/javascripts/runner/graphql/details/runner_jobs.query.graphql index 2b1decd3ddd..2b1decd3ddd 100644 --- a/app/assets/javascripts/runner/graphql/get_runner_jobs.query.graphql +++ b/app/assets/javascripts/runner/graphql/details/runner_jobs.query.graphql diff --git a/app/assets/javascripts/runner/graphql/get_runner_projects.query.graphql b/app/assets/javascripts/runner/graphql/details/runner_projects.query.graphql index f97237b8267..f97237b8267 100644 --- a/app/assets/javascripts/runner/graphql/get_runner_projects.query.graphql +++ b/app/assets/javascripts/runner/graphql/details/runner_projects.query.graphql diff --git a/app/assets/javascripts/runner/graphql/runner_update.mutation.graphql b/app/assets/javascripts/runner/graphql/details/runner_update.mutation.graphql index 8d1b75828be..e4bf51e2c30 100644 --- a/app/assets/javascripts/runner/graphql/runner_update.mutation.graphql +++ b/app/assets/javascripts/runner/graphql/details/runner_update.mutation.graphql @@ -1,4 +1,4 @@ -#import "ee_else_ce/runner/graphql/runner_details.fragment.graphql" +#import "ee_else_ce/runner/graphql/details/runner_details.fragment.graphql" # Mutation for updates from the runner form, loads # attributes shown in the runner details. diff --git a/app/assets/javascripts/runner/graphql/get_runners.query.graphql b/app/assets/javascripts/runner/graphql/list/admin_runners.query.graphql index ed03a8c34ae..8df4c2fc65c 100644 --- a/app/assets/javascripts/runner/graphql/get_runners.query.graphql +++ b/app/assets/javascripts/runner/graphql/list/admin_runners.query.graphql @@ -1,4 +1,4 @@ -#import "~/runner/graphql/runner_node.fragment.graphql" +#import "~/runner/graphql/list/list_item.fragment.graphql" #import "~/graphql_shared/fragments/pageInfo.fragment.graphql" query getRunners( @@ -24,7 +24,7 @@ query getRunners( sort: $sort ) { nodes { - ...RunnerNode + ...ListItem adminUrl editAdminUrl } diff --git a/app/assets/javascripts/runner/graphql/get_runners_count.query.graphql b/app/assets/javascripts/runner/graphql/list/admin_runners_count.query.graphql index 181a4495cae..181a4495cae 100644 --- a/app/assets/javascripts/runner/graphql/get_runners_count.query.graphql +++ b/app/assets/javascripts/runner/graphql/list/admin_runners_count.query.graphql diff --git a/app/assets/javascripts/runner/graphql/get_group_runners.query.graphql b/app/assets/javascripts/runner/graphql/list/group_runners.query.graphql index f9c7b89fc01..b517f5e89a8 100644 --- a/app/assets/javascripts/runner/graphql/get_group_runners.query.graphql +++ b/app/assets/javascripts/runner/graphql/list/group_runners.query.graphql @@ -1,4 +1,4 @@ -#import "~/runner/graphql/runner_node.fragment.graphql" +#import "~/runner/graphql/list/list_item.fragment.graphql" #import "~/graphql_shared/fragments/pageInfo.fragment.graphql" query getGroupRunners( @@ -29,8 +29,7 @@ query getGroupRunners( webUrl editUrl node { - __typename - ...RunnerNode + ...ListItem } } pageInfo { diff --git a/app/assets/javascripts/runner/graphql/get_group_runners_count.query.graphql b/app/assets/javascripts/runner/graphql/list/group_runners_count.query.graphql index 554eb09e372..554eb09e372 100644 --- a/app/assets/javascripts/runner/graphql/get_group_runners_count.query.graphql +++ b/app/assets/javascripts/runner/graphql/list/group_runners_count.query.graphql diff --git a/app/assets/javascripts/runner/graphql/runner_node.fragment.graphql b/app/assets/javascripts/runner/graphql/list/list_item.fragment.graphql index fbdef817f2f..620c18c5bc0 100644 --- a/app/assets/javascripts/runner/graphql/runner_node.fragment.graphql +++ b/app/assets/javascripts/runner/graphql/list/list_item.fragment.graphql @@ -1,4 +1,4 @@ -fragment RunnerNode on CiRunner { +fragment ListItem on CiRunner { __typename id description diff --git a/app/assets/javascripts/runner/graphql/runners_registration_token_reset.mutation.graphql b/app/assets/javascripts/runner/graphql/list/runners_registration_token_reset.mutation.graphql index 9c2797732ad..9c2797732ad 100644 --- a/app/assets/javascripts/runner/graphql/runners_registration_token_reset.mutation.graphql +++ b/app/assets/javascripts/runner/graphql/list/runners_registration_token_reset.mutation.graphql diff --git a/app/assets/javascripts/runner/graphql/runner_delete.mutation.graphql b/app/assets/javascripts/runner/graphql/shared/runner_delete.mutation.graphql index d580ea2785e..d580ea2785e 100644 --- a/app/assets/javascripts/runner/graphql/runner_delete.mutation.graphql +++ b/app/assets/javascripts/runner/graphql/shared/runner_delete.mutation.graphql diff --git a/app/assets/javascripts/runner/graphql/runner_toggle_active.mutation.graphql b/app/assets/javascripts/runner/graphql/shared/runner_toggle_active.mutation.graphql index 9b15570dbc0..9b15570dbc0 100644 --- a/app/assets/javascripts/runner/graphql/runner_toggle_active.mutation.graphql +++ b/app/assets/javascripts/runner/graphql/shared/runner_toggle_active.mutation.graphql diff --git a/app/assets/javascripts/runner/group_runners/group_runners_app.vue b/app/assets/javascripts/runner/group_runners/group_runners_app.vue index ba33ead6f46..f6b631bd216 100644 --- a/app/assets/javascripts/runner/group_runners/group_runners_app.vue +++ b/app/assets/javascripts/runner/group_runners/group_runners_app.vue @@ -24,8 +24,8 @@ import { STATUS_OFFLINE, STATUS_STALE, } from '../constants'; -import getGroupRunnersQuery from '../graphql/get_group_runners.query.graphql'; -import getGroupRunnersCountQuery from '../graphql/get_group_runners_count.query.graphql'; +import groupRunnersQuery from '../graphql/list/group_runners.query.graphql'; +import groupRunnersCountQuery from '../graphql/list/group_runners_count.query.graphql'; import { fromUrlQueryToSearch, fromSearchToUrl, @@ -34,7 +34,7 @@ import { import { captureException } from '../sentry_utils'; const runnersCountSmartQuery = { - query: getGroupRunnersCountQuery, + query: groupRunnersCountQuery, fetchPolicy: fetchPolicies.CACHE_AND_NETWORK, update(data) { return data?.group?.runners?.count; @@ -84,7 +84,7 @@ export default { }, apollo: { runners: { - query: getGroupRunnersQuery, + query: groupRunnersQuery, // Runners can be updated by users directly in this list. // A "cache and network" policy prevents outdated filtered // results. diff --git a/app/controllers/projects/cluster_agents_controller.rb b/app/controllers/projects/cluster_agents_controller.rb index 84bb01ee266..282b9ef1fb7 100644 --- a/app/controllers/projects/cluster_agents_controller.rb +++ b/app/controllers/projects/cluster_agents_controller.rb @@ -3,10 +3,6 @@ class Projects::ClusterAgentsController < Projects::ApplicationController before_action :authorize_can_read_cluster_agent! - before_action do - push_frontend_feature_flag(:cluster_vulnerabilities, project, default_enabled: :yaml) - end - feature_category :kubernetes_management def show diff --git a/app/experiments/application_experiment.rb b/app/experiments/application_experiment.rb index 15c7f3389c4..f74e7fe3b1d 100644 --- a/app/experiments/application_experiment.rb +++ b/app/experiments/application_experiment.rb @@ -3,20 +3,6 @@ class ApplicationExperiment < Gitlab::Experiment control { nil } # provide a default control for anonymous experiments - def publish(_result = nil) - super - - publish_to_client - end - - def publish_to_client - return unless should_track? - - Gon.push({ experiment: { name => signature } }, true) - rescue NoMethodError - # means we're not in the request cycle, and can't add to Gon. Log a warning maybe? - end - def publish_to_database ActiveSupport::Deprecation.warn('publish_to_database is deprecated and should not be used for reporting anymore') diff --git a/app/helpers/deploy_tokens_helper.rb b/app/helpers/deploy_tokens_helper.rb index d6fbe0b6b45..560d2fcd29f 100644 --- a/app/helpers/deploy_tokens_helper.rb +++ b/app/helpers/deploy_tokens_helper.rb @@ -16,4 +16,11 @@ module DeployTokensHelper Gitlab.config.packages.enabled && can?(current_user, :read_package, group_or_project) end + + def deploy_token_revoke_button_data(token:, group_or_project:) + { + token: token.to_json(only: [:id, :name]), + revoke_path: revoke_deploy_token_path(group_or_project, token) + } + end end diff --git a/app/models/integrations/jira.rb b/app/models/integrations/jira.rb index 8266d113492..8fc0a3461f7 100644 --- a/app/models/integrations/jira.rb +++ b/app/models/integrations/jira.rb @@ -111,8 +111,8 @@ module Integrations end def help - jira_doc_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_url('integration/jira/index.html') } - s_("JiraService|You must configure Jira before enabling this integration. For more details, read the %{jira_doc_link_start}Jira integration documentation%{link_end}.") % { jira_doc_link_start: jira_doc_link_start, link_end: '</a>'.html_safe } + jira_doc_link_start = '<a href="%{url}">'.html_safe % { url: help_page_url('integration/jira/index.html') } + s_("JiraService|You must configure Jira before enabling this integration. %{jira_doc_link_start}Learn more.%{link_end}") % { jira_doc_link_start: jira_doc_link_start, link_end: '</a>'.html_safe } end def title diff --git a/app/models/namespace/traversal_hierarchy.rb b/app/models/namespace/traversal_hierarchy.rb index 93193cc2022..d2de85b5dd4 100644 --- a/app/models/namespace/traversal_hierarchy.rb +++ b/app/models/namespace/traversal_hierarchy.rb @@ -40,12 +40,7 @@ class Namespace SQL Namespace.transaction do - if Feature.enabled?(:for_no_key_update_lock, default_enabled: :yaml) - @root.lock!("FOR NO KEY UPDATE") - else - @root.lock! - end - + @root.lock!("FOR NO KEY UPDATE") Namespace.connection.exec_query(sql) end rescue ActiveRecord::Deadlocked diff --git a/app/models/namespaces/traversal/linear.rb b/app/models/namespaces/traversal/linear.rb index 99a5b8cb063..1963745cf4d 100644 --- a/app/models/namespaces/traversal/linear.rb +++ b/app/models/namespaces/traversal/linear.rb @@ -44,22 +44,15 @@ module Namespaces included do before_update :lock_both_roots, if: -> { sync_traversal_ids? && parent_id_changed? } after_update :sync_traversal_ids, if: -> { sync_traversal_ids? && saved_change_to_parent_id? } - # sync traversal_ids on namespace create, which can happen quite early within a transaction, thus keeping the lock on root namespace record - # for a relatively long time, e.g. creating the project namespace when a project is being created. - after_create :sync_traversal_ids, if: -> { sync_traversal_ids? && !sync_traversal_ids_before_commit? } # This uses rails internal before_commit API to sync traversal_ids on namespace create, right before transaction is committed. # This helps reduce the time during which the root namespace record is locked to ensure updated traversal_ids are valid - before_commit :sync_traversal_ids, on: [:create], if: -> { sync_traversal_ids? && sync_traversal_ids_before_commit? } + before_commit :sync_traversal_ids, on: [:create], if: -> { sync_traversal_ids? } end def sync_traversal_ids? Feature.enabled?(:sync_traversal_ids, root_ancestor, default_enabled: :yaml) end - def sync_traversal_ids_before_commit? - Feature.enabled?(:sync_traversal_ids_before_commit, root_ancestor, default_enabled: :yaml) - end - def use_traversal_ids? return false unless Feature.enabled?(:use_traversal_ids, default_enabled: :yaml) diff --git a/app/views/admin/application_settings/_eks.html.haml b/app/views/admin/application_settings/_eks.html.haml index c83e28d7f0b..d9c0a01beb0 100644 --- a/app/views/admin/application_settings/_eks.html.haml +++ b/app/views/admin/application_settings/_eks.html.haml @@ -22,15 +22,15 @@ = f.label :eks_account_id, _('Account ID'), class: 'label-bold' = f.text_field :eks_account_id, class: 'form-control gl-form-input' .form-group - = f.label :eks_access_key_id, _('Access key ID'), class: 'label-bold' + = f.label :eks_access_key_id, _('AWS access key ID (Optional)'), class: 'label-bold' = f.text_field :eks_access_key_id, class: 'form-control gl-form-input' .form-text.text-muted - = _('AWS Access Key. Only required if not using role instance credentials') + = _('Only required if not using role instance credentials.') .form-group - = f.label :eks_secret_access_key, _('Secret access key'), class: 'label-bold' + = f.label :eks_secret_access_key, _('AWS secret access key (Optional)'), class: 'label-bold' = f.password_field :eks_secret_access_key, autocomplete: 'off', class: 'form-control gl-form-input' .form-text.text-muted - = _('AWS Secret Access Key. Only required if not using role instance credentials') + = _('Only required if not using role instance credentials.') = f.submit _('Save changes'), class: "gl-button btn btn-confirm" diff --git a/app/views/admin/application_settings/_sourcegraph.html.haml b/app/views/admin/application_settings/_sourcegraph.html.haml index b92cf7b156a..65b2a95bcc1 100644 --- a/app/views/admin/application_settings/_sourcegraph.html.haml +++ b/app/views/admin/application_settings/_sourcegraph.html.haml @@ -12,7 +12,7 @@ - link_end = "#{sprite_icon('external-link', size: 12, css_class: 'ml-1 vertical-align-center')}</a>".html_safe = s_('SourcegraphAdmin|Enable code intelligence powered by %{link_start}Sourcegraph%{link_end} on your GitLab instance\'s code views and merge requests.').html_safe % { link_start: link_start, link_end: link_end } %span - = link_to s_('SourcegraphAdmin|More information'), help_page_path('integration/sourcegraph.md'), target: '_blank', rel: 'noopener noreferrer' + = link_to s_('SourcegraphAdmin|Learn more.'), help_page_path('integration/sourcegraph.md'), target: '_blank', rel: 'noopener noreferrer' .settings-content @@ -29,10 +29,10 @@ = f.check_box :sourcegraph_public_only, class: 'form-check-input' = f.label :sourcegraph_public_only, s_('SourcegraphAdmin|Block on private and internal projects'), class: 'form-check-label' .form-text.text-muted - = s_('SourcegraphAdmin|If checked, only public projects will have code intelligence and communicate with Sourcegraph.') + = s_('SourcegraphAdmin|Only public projects have code intelligence enabled and communicate with Sourcegraph.') .form-group = f.label :sourcegraph_url, s_('SourcegraphAdmin|Sourcegraph URL'), class: 'label-bold' - = f.text_field :sourcegraph_url, class: 'form-control gl-form-input', placeholder: s_('SourcegraphAdmin|e.g. https://sourcegraph.example.com') + = f.text_field :sourcegraph_url, class: 'form-control gl-form-input', placeholder: s_('SourcegraphAdmin|https://sourcegraph.example.com') .form-text.text-muted = s_('SourcegraphAdmin|Configure the URL to a Sourcegraph instance which can read your GitLab projects.') = f.submit s_('SourcegraphAdmin|Save changes'), class: 'gl-button btn btn-confirm' diff --git a/app/views/groups/group_members/index.html.haml b/app/views/groups/group_members/index.html.haml index d1f56a50907..dce1754a66d 100644 --- a/app/views/groups/group_members/index.html.haml +++ b/app/views/groups/group_members/index.html.haml @@ -15,7 +15,7 @@ .gl-w-half.gl-xs-w-full .gl-display-flex.gl-flex-wrap.gl-justify-content-end.gl-mb-3 .js-invite-group-trigger{ data: { classes: 'gl-mt-3 gl-sm-w-auto gl-w-full', display_text: _('Invite a group') } } - .js-invite-members-trigger{ data: { variant: 'success', + .js-invite-members-trigger{ data: { variant: 'confirm', classes: 'gl-mt-3 gl-sm-w-auto gl-w-full gl-sm-ml-3', trigger_source: 'group-members-page', display_text: _('Invite members') } } diff --git a/app/views/projects/project_members/index.html.haml b/app/views/projects/project_members/index.html.haml index 220e44679cd..ef83c512e8d 100644 --- a/app/views/projects/project_members/index.html.haml +++ b/app/views/projects/project_members/index.html.haml @@ -23,7 +23,7 @@ .js-invite-group-trigger{ data: { classes: 'gl-mt-3 gl-sm-w-auto gl-w-full gl-sm-ml-3', display_text: _('Invite a group') } } = render 'projects/invite_groups_modal', project: @project - if can_admin_project_member?(@project) - .js-invite-members-trigger{ data: { variant: 'success', + .js-invite-members-trigger{ data: { variant: 'confirm', classes: 'gl-mt-3 gl-sm-w-auto gl-w-full gl-sm-ml-3', trigger_source: 'project-members-page', display_text: _('Invite members') } } diff --git a/app/views/shared/deploy_tokens/_table.html.haml b/app/views/shared/deploy_tokens/_table.html.haml index db9c646b694..a7bf3bfb81e 100644 --- a/app/views/shared/deploy_tokens/_table.html.haml +++ b/app/views/shared/deploy_tokens/_table.html.haml @@ -25,7 +25,7 @@ %span.token-never-expires-label= _('Never') %td= token.scopes.present? ? token.scopes.join(', ') : _('no scopes selected') %td - .js-deploy-token-revoke-button{ data: { button_class: 'float-right', token: token.to_json, revoke_path: revoke_deploy_token_path(group_or_project, token) } } + .js-deploy-token-revoke-button{ data: deploy_token_revoke_button_data(token: token, group_or_project: group_or_project) } - else .settings-message.text-center |