From 8e45d25f7dde6508839ffee719c0ddc2cf6b12d3 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 16 Oct 2019 18:08:01 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .gitattributes | 1 - .gitlab/ci/docs.gitlab-ci.yml | 15 + .gitlab/ci/frontend.gitlab-ci.yml | 36 +- .gitlab/ci/global.gitlab-ci.yml | 8 +- .gitlab/ci/pages.gitlab-ci.yml | 2 +- .gitlab/ci/qa.gitlab-ci.yml | 2 +- .gitlab/ci/rails.gitlab-ci.yml | 25 +- .gitlab/ci/review.gitlab-ci.yml | 4 +- app/assets/javascripts/api.js | 17 + .../pages/projects/releases/edit/index.js | 7 + .../releases/detail/components/app.vue | 156 +++++ .../javascripts/releases/detail/index.js | 19 + .../releases/detail/store/actions.js | 62 ++ .../releases/detail/store/index.js | 14 + .../releases/detail/store/mutation_types.js | 12 + .../releases/detail/store/mutations.js | 42 ++ .../releases/detail/store/state.js | 15 + app/assets/stylesheets/framework/lists.scss | 2 +- app/assets/stylesheets/pages/tags.scss | 3 + app/controllers/health_controller.rb | 21 +- .../projects/deployments_controller.rb | 4 +- .../merge_requests/diffs_controller.rb | 8 +- app/helpers/application_settings_helper.rb | 3 +- app/helpers/environment_helper.rb | 33 +- app/helpers/releases_helper.rb | 10 + app/models/application_setting.rb | 3 + .../application_setting_implementation.rb | 1 + app/models/deployment.rb | 8 +- app/models/environment.rb | 7 +- app/models/project.rb | 2 +- app/policies/deployment_policy.rb | 14 +- app/policies/project_policy.rb | 1 + .../deployments/after_create_service.rb | 60 ++ app/services/deployments/create_service.rb | 39 ++ app/services/deployments/update_service.rb | 16 + app/services/git/base_hooks_service.rb | 2 + .../git/process_ref_changes_service.rb | 11 +- app/services/update_deployment_service.rb | 57 -- .../_performance.html.haml | 5 + app/views/projects/blob/show.html.haml | 2 +- .../deployments/_deployment.html.haml | 40 +- app/views/projects/deployments/_rollback.haml | 2 +- .../projects/environments/show.html.haml | 9 +- .../issues/import_csv/_button.html.haml | 2 +- app/views/projects/releases/edit.html.haml | 3 + app/views/projects/tags/_tag.html.haml | 2 +- .../shared/issuable/_feed_buttons.html.haml | 6 +- app/workers/deployments/success_worker.rb | 2 +- .../27715-fix-unrenderable-notes.yml | 5 + .../31009-limit-project-hooks-services.yml | 5 + .../32380-update-issue-list-icons.yml | 5 + .../unreleased/add-ansi2json-log-parser.yml | 5 + ...w-api-lookup-of-inherited-member-by-id.yml | 5 + changelogs/unreleased/deployments-api.yml | 5 + .../nfriend-add-edit-release-page.yml | 5 + changelogs/unreleased/nfriend-fix-lin.yml | 5 + config/helpers/is_ee_env.js | 8 +- config/webpack.config.js | 2 +- ...ent_hooks_limit_to_application_settings.rb | 17 + db/schema.rb | 1 + .../high_availability/README.md | 33 +- doc/api/deployments.md | 97 ++++ doc/api/graphql/reference/index.md | 260 ++++++++- doc/api/members.md | 45 +- doc/api/settings.md | 1 + doc/development/chatops_on_gitlabcom.md | 2 +- doc/development/documentation/styleguide.md | 49 +- doc/development/ee_features.md | 6 +- doc/development/pipelines.md | 42 +- .../group/epics/img/child_epics_roadmap.png | Bin 30149 -> 0 bytes doc/user/group/epics/img/epic_view.png | Bin 176740 -> 0 bytes .../epics/img/epic_view_roadmap_v12.3.png | Bin 0 -> 50491 bytes doc/user/group/epics/img/epic_view_v12.3.png | Bin 0 -> 61402 bytes doc/user/group/epics/img/epics_list_view.png | Bin 96826 -> 0 bytes .../group/epics/img/epics_list_view_v12.3.png | Bin 0 -> 39450 bytes doc/user/group/epics/index.md | 112 ++-- doc/user/group/roadmap/index.md | 2 +- doc/user/packages/maven_repository/index.md | 2 +- .../project/integrations/project_services.md | 10 + doc/user/project/integrations/webhooks.md | 7 + lib/api/deployments.rb | 82 +++ lib/api/members.rb | 21 + lib/api/settings.rb | 1 + lib/gitlab.rb | 6 +- lib/gitlab/ci/ansi2json.rb | 12 + lib/gitlab/ci/ansi2json/converter.rb | 131 +++++ lib/gitlab/ci/ansi2json/line.rb | 93 +++ lib/gitlab/ci/ansi2json/parser.rb | 200 +++++++ lib/gitlab/ci/ansi2json/state.rb | 98 ++++ lib/gitlab/ci/ansi2json/style.rb | 84 +++ lib/gitlab/cycle_analytics/summary/deploy.rb | 2 +- lib/gitlab/diff/position_collection.rb | 18 +- lib/gitlab/graphql/docs/renderer.rb | 11 +- .../graphql/docs/templates/default.md.haml | 3 - lib/gitlab/health_checks/checks.rb | 14 - .../probes/{readiness.rb => collection.rb} | 7 +- lib/gitlab/health_checks/probes/liveness.rb | 13 - lib/gitlab/metrics/exporter/base_exporter.rb | 6 +- lib/gitlab/metrics/exporter/web_exporter.rb | 2 +- lib/tasks/gitlab/graphql.rake | 20 +- locale/gitlab.pot | 51 ++ .../projects/deployments_controller_spec.rb | 17 +- .../merge_requests/diffs_controller_spec.rb | 4 +- .../projects/environments/environment_spec.rb | 10 +- spec/fixtures/api/schemas/deployment.json | 2 +- .../releases/detail/components/app_spec.js | 70 +++ .../releases/detail/store/actions_spec.js | 217 +++++++ .../releases/detail/store/mutations_spec.js | 119 ++++ spec/helpers/environment_helper_spec.rb | 25 + spec/javascripts/test_bundle.js | 6 +- spec/lib/gitlab/ci/ansi2json/line_spec.rb | 168 ++++++ spec/lib/gitlab/ci/ansi2json/parser_spec.rb | 30 + spec/lib/gitlab/ci/ansi2json/style_spec.rb | 166 ++++++ spec/lib/gitlab/ci/ansi2json_spec.rb | 544 ++++++++++++++++++ .../gitlab/diff/position_collection_spec.rb | 13 +- .../health_checks/probes/collection_spec.rb | 62 ++ .../health_checks/probes/liveness_spec.rb | 17 - .../health_checks/probes/readiness_spec.rb | 39 -- spec/lib/gitlab_spec.rb | 82 ++- spec/models/application_setting_spec.rb | 4 + spec/models/deployment_spec.rb | 13 + spec/models/environment_spec.rb | 15 + spec/policies/project_policy_spec.rb | 4 +- spec/requests/api/deployments_spec.rb | 162 ++++++ spec/requests/api/members_spec.rb | 29 +- spec/requests/api/settings_spec.rb | 4 +- .../after_create_service_spec.rb} | 2 +- .../deployments/create_service_spec.rb | 92 +++ .../deployments/update_service_spec.rb | 15 + spec/services/git/base_hooks_service_spec.rb | 29 +- .../git/process_ref_changes_service_spec.rb | 54 ++ spec/support/features/rss_shared_examples.rb | 8 +- .../policies/project_policy_shared_context.rb | 4 +- .../deployments/success_worker_spec.rb | 12 +- spec/workers/post_receive_spec.rb | 2 + 135 files changed, 4055 insertions(+), 411 deletions(-) create mode 100644 app/assets/javascripts/pages/projects/releases/edit/index.js create mode 100644 app/assets/javascripts/releases/detail/components/app.vue create mode 100644 app/assets/javascripts/releases/detail/index.js create mode 100644 app/assets/javascripts/releases/detail/store/actions.js create mode 100644 app/assets/javascripts/releases/detail/store/index.js create mode 100644 app/assets/javascripts/releases/detail/store/mutation_types.js create mode 100644 app/assets/javascripts/releases/detail/store/mutations.js create mode 100644 app/assets/javascripts/releases/detail/store/state.js create mode 100644 app/assets/stylesheets/pages/tags.scss create mode 100644 app/services/deployments/after_create_service.rb create mode 100644 app/services/deployments/create_service.rb create mode 100644 app/services/deployments/update_service.rb delete mode 100644 app/services/update_deployment_service.rb create mode 100644 app/views/projects/releases/edit.html.haml create mode 100644 changelogs/unreleased/27715-fix-unrenderable-notes.yml create mode 100644 changelogs/unreleased/31009-limit-project-hooks-services.yml create mode 100644 changelogs/unreleased/32380-update-issue-list-icons.yml create mode 100644 changelogs/unreleased/add-ansi2json-log-parser.yml create mode 100644 changelogs/unreleased/allow-api-lookup-of-inherited-member-by-id.yml create mode 100644 changelogs/unreleased/deployments-api.yml create mode 100644 changelogs/unreleased/nfriend-add-edit-release-page.yml create mode 100644 changelogs/unreleased/nfriend-fix-lin.yml create mode 100644 db/migrate/20191003060227_add_push_event_hooks_limit_to_application_settings.rb delete mode 100644 doc/user/group/epics/img/child_epics_roadmap.png delete mode 100644 doc/user/group/epics/img/epic_view.png create mode 100755 doc/user/group/epics/img/epic_view_roadmap_v12.3.png create mode 100755 doc/user/group/epics/img/epic_view_v12.3.png delete mode 100644 doc/user/group/epics/img/epics_list_view.png create mode 100755 doc/user/group/epics/img/epics_list_view_v12.3.png create mode 100644 lib/gitlab/ci/ansi2json.rb create mode 100644 lib/gitlab/ci/ansi2json/converter.rb create mode 100644 lib/gitlab/ci/ansi2json/line.rb create mode 100644 lib/gitlab/ci/ansi2json/parser.rb create mode 100644 lib/gitlab/ci/ansi2json/state.rb create mode 100644 lib/gitlab/ci/ansi2json/style.rb delete mode 100644 lib/gitlab/health_checks/checks.rb rename lib/gitlab/health_checks/probes/{readiness.rb => collection.rb} (87%) delete mode 100644 lib/gitlab/health_checks/probes/liveness.rb create mode 100644 spec/frontend/releases/detail/components/app_spec.js create mode 100644 spec/frontend/releases/detail/store/actions_spec.js create mode 100644 spec/frontend/releases/detail/store/mutations_spec.js create mode 100644 spec/helpers/environment_helper_spec.rb create mode 100644 spec/lib/gitlab/ci/ansi2json/line_spec.rb create mode 100644 spec/lib/gitlab/ci/ansi2json/parser_spec.rb create mode 100644 spec/lib/gitlab/ci/ansi2json/style_spec.rb create mode 100644 spec/lib/gitlab/ci/ansi2json_spec.rb create mode 100644 spec/lib/gitlab/health_checks/probes/collection_spec.rb delete mode 100644 spec/lib/gitlab/health_checks/probes/liveness_spec.rb delete mode 100644 spec/lib/gitlab/health_checks/probes/readiness_spec.rb rename spec/services/{update_deployment_service_spec.rb => deployments/after_create_service_spec.rb} (99%) create mode 100644 spec/services/deployments/create_service_spec.rb create mode 100644 spec/services/deployments/update_service_spec.rb diff --git a/.gitattributes b/.gitattributes index 0b87a97df9c..55c422f0f8c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,2 @@ VERSION merge=ours Dangerfile gitlab-language=ruby -db/schema.rb merge=merge_db_schema diff --git a/.gitlab/ci/docs.gitlab-ci.yml b/.gitlab/ci/docs.gitlab-ci.yml index 008151f889f..cc0999b50c6 100644 --- a/.gitlab/ci/docs.gitlab-ci.yml +++ b/.gitlab/ci/docs.gitlab-ci.yml @@ -67,3 +67,18 @@ docs lint: - bundle exec nanoc check internal_links # Check the internal anchor links - bundle exec nanoc check internal_anchors + +graphql-docs-verify: + extends: + - .default-tags + - .default-retry + - .default-cache + - .default-only + - .default-before_script + - .only-graphql-changes + variables: + SETUP_DB: "false" + stage: test + needs: ["setup-test-env"] + script: + - bundle exec rake gitlab:graphql:check_docs diff --git a/.gitlab/ci/frontend.gitlab-ci.yml b/.gitlab/ci/frontend.gitlab-ci.yml index a3a2ab0691f..2f457bc0ee2 100644 --- a/.gitlab/ci/frontend.gitlab-ci.yml +++ b/.gitlab/ci/frontend.gitlab-ci.yml @@ -53,7 +53,7 @@ - gitlab-org - docker -gitlab:assets:compile: +gitlab:assets:compile pull-push-cache: extends: .gitlab:assets:compile-metadata only: refs: @@ -63,9 +63,6 @@ gitlab:assets:compile: gitlab:assets:compile pull-cache: extends: .gitlab:assets:compile-metadata - except: - refs: - - master cache: policy: pull @@ -89,14 +86,14 @@ gitlab:assets:compile pull-cache: # we override the max_old_space_size to prevent OOM errors NODE_OPTIONS: --max_old_space_size=3584 cache: - key: "assets-compile:test:vendor_ruby:.yarn-cache:tmp_cache_assets_sprockets:v6" + key: "assets-compile:v7" artifacts: expire_in: 7d paths: - node_modules - public/assets -compile-assets: +compile-assets pull-push-cache: extends: .compile-assets-metadata only: refs: @@ -104,14 +101,26 @@ compile-assets: cache: policy: pull-push -compile-assets pull-cache: - extends: .compile-assets-metadata - except: +compile-assets pull-push-cache foss: + extends: [".compile-assets-metadata", ".only-ee-as-if-foss"] + only: refs: - master + cache: + policy: pull-push + key: "assets-compile:v7:foss" + +compile-assets pull-cache: + extends: .compile-assets-metadata cache: policy: pull +compile-assets pull-cache foss: + extends: [".compile-assets-metadata", ".only-ee-as-if-foss"] + cache: + policy: pull + key: "assets-compile:v7:foss" + .only-code-frontend-job-base: extends: - .default-tags @@ -121,7 +130,9 @@ compile-assets pull-cache: - .default-before_script - .only-code-changes - .use-pg9 - dependencies: ["compile-assets", "compile-assets pull-cache", "setup-test-env"] + stage: test + needs: ["setup-test-env", "compile-assets pull-cache"] + dependencies: ["setup-test-env", "compile-assets pull-cache"] .karma-base: extends: .only-code-frontend-job-base @@ -195,6 +206,7 @@ jest-foss: - .default-cache - .default-only - .only-code-changes + stage: test dependencies: [] cache: key: "$CI_JOB_NAME" @@ -227,7 +239,9 @@ webpack-dev-server: - .default-cache - .default-only - .only-code-changes - dependencies: ["setup-test-env", "compile-assets", "compile-assets pull-cache"] + stage: test + needs: ["setup-test-env", "compile-assets pull-cache"] + dependencies: ["setup-test-env", "compile-assets pull-cache"] variables: WEBPACK_MEMORY_TEST: "true" script: diff --git a/.gitlab/ci/global.gitlab-ci.yml b/.gitlab/ci/global.gitlab-ci.yml index af7c7a0d152..fc9b00b5d3c 100644 --- a/.gitlab/ci/global.gitlab-ci.yml +++ b/.gitlab/ci/global.gitlab-ci.yml @@ -71,6 +71,12 @@ - "doc/**/*" - ".markdownlint.json" +.only-graphql-changes: + only: + changes: + - "{,ee/}app/graphql/**/*" + - "{,ee/}lib/gitlab/graphql/**/*" + .only-code-qa-changes: only: changes: @@ -153,4 +159,4 @@ .only-ee-as-if-foss: extends: .only-ee variables: - IS_GITLAB_EE: '0' + FOSS_ONLY: '1' diff --git a/.gitlab/ci/pages.gitlab-ci.yml b/.gitlab/ci/pages.gitlab-ci.yml index a59b84fe1cf..a30772d5664 100644 --- a/.gitlab/ci/pages.gitlab-ci.yml +++ b/.gitlab/ci/pages.gitlab-ci.yml @@ -11,7 +11,7 @@ pages: variables: - $CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE == "gitlab-org" stage: pages - dependencies: ["coverage", "karma", "gitlab:assets:compile"] + dependencies: ["coverage", "karma", "gitlab:assets:compile pull-cache"] script: - mv public/ .public/ - mkdir public/ diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index a73edd3f65f..1194948a76f 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -71,4 +71,4 @@ schedule:package-and-qa: - .package-and-qa-base - .only-code-qa-changes - .only-canonical-schedules - needs: ["build-qa-image", "gitlab:assets:compile"] + needs: ["build-qa-image", "gitlab:assets:compile pull-cache"] diff --git a/.gitlab/ci/rails.gitlab-ci.yml b/.gitlab/ci/rails.gitlab-ci.yml index 73b649b4d14..bf478b68765 100644 --- a/.gitlab/ci/rails.gitlab-ci.yml +++ b/.gitlab/ci/rails.gitlab-ci.yml @@ -53,6 +53,8 @@ setup-test-env: .rspec-base: extends: .only-code-rails-job-base stage: test + needs: ["setup-test-env", "retrieve-tests-metadata", "compile-assets pull-cache"] + dependencies: ["setup-test-env", "retrieve-tests-metadata", "compile-assets pull-cache"] script: - source scripts/rspec_helpers.sh - rspec_paralellized_job "--tag ~quarantine --tag ~geo" @@ -69,6 +71,11 @@ setup-test-env: reports: junit: junit_rspec.xml +.rspec-base-foss: + extends: [".rspec-base", ".only-ee-as-if-foss"] + needs: ["setup-test-env", "retrieve-tests-metadata", "compile-assets pull-cache foss"] + dependencies: ["setup-test-env", "retrieve-tests-metadata", "compile-assets pull-cache foss"] + .rspec-base-pg9: extends: - .rspec-base @@ -76,9 +83,8 @@ setup-test-env: .rspec-base-pg9-foss: extends: - - .rspec-base + - .rspec-base-foss - .use-pg9 - - .only-ee-as-if-foss .rspec-base-pg10: extends: @@ -106,10 +112,9 @@ rspec system pg9: extends: .rspec-base-pg9 parallel: 24 -# TODO: This requires FOSS assets -# rspec system pg9-foss: -# extends: .rspec-base-pg9-foss -# parallel: 24 +rspec system pg9-foss: + extends: .rspec-base-pg9-foss + parallel: 24 rspec unit pg10: extends: .rspec-base-pg10 @@ -229,7 +234,9 @@ rspec fast_spec_helper: static-analysis: extends: .only-code-qa-rails-job-base - dependencies: ["setup-test-env", "compile-assets", "compile-assets pull-cache"] + stage: test + needs: ["setup-test-env", "compile-assets pull-cache"] + dependencies: ["setup-test-env", "compile-assets pull-cache"] variables: SETUP_DB: "false" script: @@ -252,16 +259,16 @@ downtime_check: variables: - $CI_COMMIT_REF_NAME =~ /^[\d-]+-stable(-ee)?$/ stage: test - dependencies: ["setup-test-env"] needs: ["setup-test-env"] + dependencies: ["setup-test-env"] .db-job-base: extends: - .only-code-rails-job-base - .use-pg9 stage: test - dependencies: ["setup-test-env"] needs: ["setup-test-env"] + dependencies: ["setup-test-env"] # DB migration, rollback, and seed jobs db:migrate:reset: diff --git a/.gitlab/ci/review.gitlab-ci.yml b/.gitlab/ci/review.gitlab-ci.yml index 7c4ba3878f1..ad516aba7c3 100644 --- a/.gitlab/ci/review.gitlab-ci.yml +++ b/.gitlab/ci/review.gitlab-ci.yml @@ -81,7 +81,7 @@ schedule:review-build-cng: extends: - .review-build-cng-base - .only-review-schedules - needs: ["gitlab:assets:compile"] + needs: ["gitlab:assets:compile pull-cache"] .review-deploy-base: extends: @@ -97,7 +97,7 @@ schedule:review-build-cng: variables: HOST_SUFFIX: "${CI_ENVIRONMENT_SLUG}" DOMAIN: "-${CI_ENVIRONMENT_SLUG}.${REVIEW_APPS_DOMAIN}" - GITLAB_HELM_CHART_REF: "master" + GITLAB_HELM_CHART_REF: "v2.3.7" GITLAB_EDITION: "ce" environment: name: review/${CI_COMMIT_REF_NAME} diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js index d57be10f472..908dc730aa4 100644 --- a/app/assets/javascripts/api.js +++ b/app/assets/javascripts/api.js @@ -36,6 +36,7 @@ const Api = { branchSinglePath: '/api/:version/projects/:id/repository/branches/:branch', createBranchPath: '/api/:version/projects/:id/repository/branches', releasesPath: '/api/:version/projects/:id/releases', + releasePath: '/api/:version/projects/:id/releases/:tag_name', mergeRequestsPipeline: '/api/:version/projects/:id/merge_requests/:merge_request_iid/pipelines', adminStatisticsPath: 'api/:version/application/statistics', @@ -391,6 +392,22 @@ const Api = { return axios.get(url); }, + release(projectPath, tagName) { + const url = Api.buildUrl(this.releasePath) + .replace(':id', encodeURIComponent(projectPath)) + .replace(':tag_name', encodeURIComponent(tagName)); + + return axios.get(url); + }, + + updateRelease(projectPath, tagName, release) { + const url = Api.buildUrl(this.releasePath) + .replace(':id', encodeURIComponent(projectPath)) + .replace(':tag_name', encodeURIComponent(tagName)); + + return axios.put(url, release); + }, + adminStatistics() { const url = Api.buildUrl(this.adminStatisticsPath); return axios.get(url); diff --git a/app/assets/javascripts/pages/projects/releases/edit/index.js b/app/assets/javascripts/pages/projects/releases/edit/index.js new file mode 100644 index 00000000000..98ec196fc37 --- /dev/null +++ b/app/assets/javascripts/pages/projects/releases/edit/index.js @@ -0,0 +1,7 @@ +import ZenMode from '~/zen_mode'; +import initEditRelease from '~/releases/detail'; + +document.addEventListener('DOMContentLoaded', () => { + new ZenMode(); // eslint-disable-line no-new + initEditRelease(); +}); diff --git a/app/assets/javascripts/releases/detail/components/app.vue b/app/assets/javascripts/releases/detail/components/app.vue new file mode 100644 index 00000000000..54a441de886 --- /dev/null +++ b/app/assets/javascripts/releases/detail/components/app.vue @@ -0,0 +1,156 @@ + + diff --git a/app/assets/javascripts/releases/detail/index.js b/app/assets/javascripts/releases/detail/index.js new file mode 100644 index 00000000000..3da971e6d90 --- /dev/null +++ b/app/assets/javascripts/releases/detail/index.js @@ -0,0 +1,19 @@ +import Vue from 'vue'; +import ReleaseDetailApp from './components/app.vue'; +import createStore from './store'; + +export default () => { + const el = document.getElementById('js-edit-release-page'); + + const store = createStore(el.dataset); + store.dispatch('setInitialState', el.dataset); + + return new Vue({ + el, + store, + components: { ReleaseDetailApp }, + render(createElement) { + return createElement('release-detail-app'); + }, + }); +}; diff --git a/app/assets/javascripts/releases/detail/store/actions.js b/app/assets/javascripts/releases/detail/store/actions.js new file mode 100644 index 00000000000..c9749582f5c --- /dev/null +++ b/app/assets/javascripts/releases/detail/store/actions.js @@ -0,0 +1,62 @@ +import * as types from './mutation_types'; +import api from '~/api'; +import createFlash from '~/flash'; +import { s__ } from '~/locale'; +import { redirectTo } from '~/lib/utils/url_utility'; +import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; + +export const setInitialState = ({ commit }, initialState) => + commit(types.SET_INITIAL_STATE, initialState); + +export const requestRelease = ({ commit }) => commit(types.REQUEST_RELEASE); +export const receiveReleaseSuccess = ({ commit }, data) => + commit(types.RECEIVE_RELEASE_SUCCESS, data); +export const receiveReleaseError = ({ commit }, error) => { + commit(types.RECEIVE_RELEASE_ERROR, error); + createFlash(s__('Release|Something went wrong while getting the release details')); +}; + +export const fetchRelease = ({ dispatch, state }) => { + dispatch('requestRelease'); + + return api + .release(state.projectId, state.tagName) + .then(({ data: release }) => { + const camelCasedRelease = convertObjectPropsToCamelCase(release, { deep: true }); + dispatch('receiveReleaseSuccess', camelCasedRelease); + }) + .catch(error => { + dispatch('receiveReleaseError', error); + }); +}; + +export const updateReleaseTitle = ({ commit }, title) => commit(types.UPDATE_RELEASE_TITLE, title); +export const updateReleaseNotes = ({ commit }, notes) => commit(types.UPDATE_RELEASE_NOTES, notes); + +export const requestUpdateRelease = ({ commit }) => commit(types.REQUEST_UPDATE_RELEASE); +export const receiveUpdateReleaseSuccess = ({ commit, dispatch }) => { + commit(types.RECEIVE_UPDATE_RELEASE_SUCCESS); + dispatch('navigateToReleasesPage'); +}; +export const receiveUpdateReleaseError = ({ commit }, error) => { + commit(types.RECEIVE_UPDATE_RELEASE_ERROR, error); + createFlash(s__('Release|Something went wrong while saving the release details')); +}; + +export const updateRelease = ({ dispatch, state }) => { + dispatch('requestUpdateRelease'); + + return api + .updateRelease(state.projectId, state.tagName, { + name: state.release.name, + description: state.release.description, + }) + .then(() => dispatch('receiveUpdateReleaseSuccess')) + .catch(error => { + dispatch('receiveUpdateReleaseError', error); + }); +}; + +export const navigateToReleasesPage = ({ state }) => { + redirectTo(state.releasesPagePath); +}; diff --git a/app/assets/javascripts/releases/detail/store/index.js b/app/assets/javascripts/releases/detail/store/index.js new file mode 100644 index 00000000000..e8623a49356 --- /dev/null +++ b/app/assets/javascripts/releases/detail/store/index.js @@ -0,0 +1,14 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import * as actions from './actions'; +import mutations from './mutations'; +import state from './state'; + +Vue.use(Vuex); + +export default () => + new Vuex.Store({ + actions, + mutations, + state, + }); diff --git a/app/assets/javascripts/releases/detail/store/mutation_types.js b/app/assets/javascripts/releases/detail/store/mutation_types.js new file mode 100644 index 00000000000..75e1d78a645 --- /dev/null +++ b/app/assets/javascripts/releases/detail/store/mutation_types.js @@ -0,0 +1,12 @@ +export const SET_INITIAL_STATE = 'SET_INITIAL_STATE'; + +export const REQUEST_RELEASE = 'REQUEST_RELEASE'; +export const RECEIVE_RELEASE_SUCCESS = 'RECEIVE_RELEASE_SUCCESS'; +export const RECEIVE_RELEASE_ERROR = 'RECEIVE_RELEASE_ERROR'; + +export const UPDATE_RELEASE_TITLE = 'UPDATE_RELEASE_TITLE'; +export const UPDATE_RELEASE_NOTES = 'UPDATE_RELEASE_NOTES'; + +export const REQUEST_UPDATE_RELEASE = 'REQUEST_UPDATE_RELEASE'; +export const RECEIVE_UPDATE_RELEASE_SUCCESS = 'RECEIVE_UPDATE_RELEASE_SUCCESS'; +export const RECEIVE_UPDATE_RELEASE_ERROR = 'RECEIVE_UPDATE_RELEASE_ERROR'; diff --git a/app/assets/javascripts/releases/detail/store/mutations.js b/app/assets/javascripts/releases/detail/store/mutations.js new file mode 100644 index 00000000000..d739978d755 --- /dev/null +++ b/app/assets/javascripts/releases/detail/store/mutations.js @@ -0,0 +1,42 @@ +import * as types from './mutation_types'; + +export default { + [types.SET_INITIAL_STATE](state, initialState) { + Object.keys(state).forEach(key => { + state[key] = initialState[key]; + }); + }, + + [types.REQUEST_RELEASE](state) { + state.isFetchingRelease = true; + }, + [types.RECEIVE_RELEASE_SUCCESS](state, data) { + state.fetchError = undefined; + state.isFetchingRelease = false; + state.release = data; + }, + [types.RECEIVE_RELEASE_ERROR](state, error) { + state.fetchError = error; + state.isFetchingRelease = false; + state.release = undefined; + }, + + [types.UPDATE_RELEASE_TITLE](state, title) { + state.release.name = title; + }, + [types.UPDATE_RELEASE_NOTES](state, notes) { + state.release.description = notes; + }, + + [types.REQUEST_UPDATE_RELEASE](state) { + state.isUpdatingRelease = true; + }, + [types.RECEIVE_UPDATE_RELEASE_SUCCESS](state) { + state.updateError = undefined; + state.isUpdatingRelease = false; + }, + [types.RECEIVE_UPDATE_RELEASE_ERROR](state, error) { + state.updateError = error; + state.isUpdatingRelease = false; + }, +}; diff --git a/app/assets/javascripts/releases/detail/store/state.js b/app/assets/javascripts/releases/detail/store/state.js new file mode 100644 index 00000000000..ff98e2bed78 --- /dev/null +++ b/app/assets/javascripts/releases/detail/store/state.js @@ -0,0 +1,15 @@ +export default () => ({ + projectId: null, + tagName: null, + releasesPagePath: null, + markdownDocsPath: null, + markdownPreviewPath: null, + + release: null, + + isFetchingRelease: false, + fetchError: null, + + isUpdatingRelease: false, + updateError: null, +}); diff --git a/app/assets/stylesheets/framework/lists.scss b/app/assets/stylesheets/framework/lists.scss index c73db2668ec..ecd32dcd0ce 100644 --- a/app/assets/stylesheets/framework/lists.scss +++ b/app/assets/stylesheets/framework/lists.scss @@ -123,7 +123,7 @@ ul.content-list { font-weight: $gl-font-weight-bold; } - a:not(.default-link-color) { + a { color: $gl-text-color; } diff --git a/app/assets/stylesheets/pages/tags.scss b/app/assets/stylesheets/pages/tags.scss new file mode 100644 index 00000000000..a6d30522ff7 --- /dev/null +++ b/app/assets/stylesheets/pages/tags.scss @@ -0,0 +1,3 @@ +.tag-release-link { + color: $blue-600 !important; +} diff --git a/app/controllers/health_controller.rb b/app/controllers/health_controller.rb index d88ec06a18b..efd5f0fc607 100644 --- a/app/controllers/health_controller.rb +++ b/app/controllers/health_controller.rb @@ -4,18 +4,31 @@ class HealthController < ActionController::Base protect_from_forgery with: :exception, prepend: true include RequiresWhitelistedMonitoringClient + CHECKS = [ + Gitlab::HealthChecks::DbCheck, + Gitlab::HealthChecks::Redis::RedisCheck, + Gitlab::HealthChecks::Redis::CacheCheck, + Gitlab::HealthChecks::Redis::QueuesCheck, + Gitlab::HealthChecks::Redis::SharedStateCheck, + Gitlab::HealthChecks::GitalyCheck + ].freeze + def readiness - render_probe(::Gitlab::HealthChecks::Probes::Readiness) + # readiness check is a collection with all above application-level checks + render_checks(*CHECKS) end def liveness - render_probe(::Gitlab::HealthChecks::Probes::Liveness) + # liveness check is a collection without additional checks + render_checks end private - def render_probe(probe_class) - result = probe_class.new.execute + def render_checks(*checks) + result = Gitlab::HealthChecks::Probes::Collection + .new(*checks) + .execute # disable static error pages at the gitlab-workhorse level, we want to see this error response even in production headers["X-GitLab-Custom-Error"] = 1 unless result.success? diff --git a/app/controllers/projects/deployments_controller.rb b/app/controllers/projects/deployments_controller.rb index 32111b07a0b..766e2f86ea2 100644 --- a/app/controllers/projects/deployments_controller.rb +++ b/app/controllers/projects/deployments_controller.rb @@ -47,11 +47,9 @@ class Projects::DeploymentsController < Projects::ApplicationController @deployment_metrics ||= DeploymentMetrics.new(deployment.project, deployment) end - # rubocop: disable CodeReuse/ActiveRecord def deployment - @deployment ||= environment.deployments.find_by(iid: params[:id]) + @deployment ||= environment.deployments.find_successful_deployment!(params[:id]) end - # rubocop: enable CodeReuse/ActiveRecord def environment @environment ||= project.environments.find(params[:environment_id]) diff --git a/app/controllers/projects/merge_requests/diffs_controller.rb b/app/controllers/projects/merge_requests/diffs_controller.rb index 1913d7cd580..4a37dfe5c19 100644 --- a/app/controllers/projects/merge_requests/diffs_controller.rb +++ b/app/controllers/projects/merge_requests/diffs_controller.rb @@ -51,9 +51,7 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic def render_diffs @environment = @merge_request.environments_for(current_user).last - note_positions = renderable_notes.map(&:position).compact - @diffs.unfold_diff_files(note_positions) - + @diffs.unfold_diff_files(note_positions.unfoldable) @diffs.write_cache request = { @@ -140,6 +138,10 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic @notes = prepare_notes_for_rendering(@grouped_diff_discussions.values.flatten.flat_map(&:notes), @merge_request) end + def note_positions + @note_positions ||= Gitlab::Diff::PositionCollection.new(renderable_notes.map(&:position)) + end + def renderable_notes define_diff_comment_vars unless @notes diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb index 42fe42398f1..3c70ff3b59f 100644 --- a/app/helpers/application_settings_helper.rb +++ b/app/helpers/application_settings_helper.rb @@ -289,7 +289,8 @@ module ApplicationSettingsHelper :snowplow_collector_hostname, :snowplow_cookie_domain, :snowplow_enabled, - :snowplow_site_id + :snowplow_site_id, + :push_event_hooks_limit ] end diff --git a/app/helpers/environment_helper.rb b/app/helpers/environment_helper.rb index 2b7320817ed..52f189b122f 100644 --- a/app/helpers/environment_helper.rb +++ b/app/helpers/environment_helper.rb @@ -18,12 +18,16 @@ module EnvironmentHelper end end + def deployment_path(deployment) + [deployment.project.namespace.becomes(Namespace), deployment.project, deployment.deployable] + end + def deployment_link(deployment, text: nil) return unless deployment link_label = text ? text : "##{deployment.iid}" - link_to link_label, [deployment.project.namespace.becomes(Namespace), deployment.project, deployment.deployable] + link_to link_label, deployment_path(deployment) end def last_deployment_link_for_environment_build(project, build) @@ -32,4 +36,31 @@ module EnvironmentHelper deployment_link(environment.last_deployment) end + + def render_deployment_status(deployment) + status = deployment.status + + status_text = + case status + when 'created' + s_('Deployment|created') + when 'running' + s_('Deployment|running') + when 'success' + s_('Deployment|success') + when 'failed' + s_('Deployment|failed') + when 'canceled' + s_('Deployment|canceled') + end + + klass = "ci-status ci-#{status.dasherize}" + text = "#{ci_icon_for_status(status)} #{status_text}".html_safe + + if deployment.deployable + link_to(text, deployment_path(deployment), class: klass) + else + content_tag(:span, text, class: klass) + end + end end diff --git a/app/helpers/releases_helper.rb b/app/helpers/releases_helper.rb index 3186bbd9322..68a19152d8f 100644 --- a/app/helpers/releases_helper.rb +++ b/app/helpers/releases_helper.rb @@ -19,4 +19,14 @@ module ReleasesHelper documentation_path: help_page } end + + def data_for_edit_release_page + { + project_id: @project.id, + tag_name: @release.tag, + markdown_preview_path: preview_markdown_path(@project), + markdown_docs_path: help_page_path('user/markdown'), + releases_page_path: project_releases_path(@project, anchor: @release.tag) + } + end end diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb index 02f214341fb..0724ee8f39d 100644 --- a/app/models/application_setting.rb +++ b/app/models/application_setting.rb @@ -214,6 +214,9 @@ class ApplicationSetting < ApplicationRecord length: { maximum: 100, message: N_('is too long (maximum is 100 entries)') }, allow_nil: false + validates :push_event_hooks_limit, + numericality: { greater_than_or_equal_to: 0 } + SUPPORTED_KEY_TYPES.each do |type| validates :"#{type}_key_restriction", presence: true, key_restriction: { type: type } end diff --git a/app/models/application_setting_implementation.rb b/app/models/application_setting_implementation.rb index e2579316fdd..e9aab4a3d05 100644 --- a/app/models/application_setting_implementation.rb +++ b/app/models/application_setting_implementation.rb @@ -82,6 +82,7 @@ module ApplicationSettingImplementation polling_interval_multiplier: 1, project_export_enabled: true, protected_ci_variables: false, + push_event_hooks_limit: 3, raw_blob_request_limit: 300, recaptcha_enabled: false, login_recaptcha_protection_enabled: false, diff --git a/app/models/deployment.rb b/app/models/deployment.rb index 30694313f7a..7ccd5e98360 100644 --- a/app/models/deployment.rb +++ b/app/models/deployment.rb @@ -9,7 +9,7 @@ class Deployment < ApplicationRecord belongs_to :environment, required: true belongs_to :cluster, class_name: 'Clusters::Cluster', optional: true belongs_to :user - belongs_to :deployable, polymorphic: true # rubocop:disable Cop/PolymorphicAssociations + belongs_to :deployable, polymorphic: true, optional: true # rubocop:disable Cop/PolymorphicAssociations has_internal_id :iid, scope: :project, init: ->(s) do Deployment.where(project: s.project).maximum(:iid) if s&.project @@ -22,6 +22,8 @@ class Deployment < ApplicationRecord scope :for_environment, -> (environment) { where(environment_id: environment) } + scope :visible, -> { where(status: %i[running success failed canceled]) } + state_machine :status, initial: :created do event :run do transition created: :running @@ -73,6 +75,10 @@ class Deployment < ApplicationRecord find(ids) end + def self.find_successful_deployment!(iid) + success.find_by!(iid: iid) + end + def commit project.commit(sha) end diff --git a/app/models/environment.rb b/app/models/environment.rb index fe438b142b2..af0c219d9a0 100644 --- a/app/models/environment.rb +++ b/app/models/environment.rb @@ -6,7 +6,8 @@ class Environment < ApplicationRecord belongs_to :project, required: true - has_many :deployments, -> { success }, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent + has_many :deployments, -> { visible }, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent + has_many :successful_deployments, -> { success }, class_name: 'Deployment' has_one :last_deployment, -> { success.order('deployments.id DESC') }, class_name: 'Deployment' @@ -81,6 +82,10 @@ class Environment < ApplicationRecord pluck(:name) end + def self.find_or_create_by_name(name) + find_or_create_by(name: name) + end + def predefined_variables Gitlab::Ci::Variables::Collection.new .append(key: 'CI_ENVIRONMENT_NAME', value: name) diff --git a/app/models/project.rb b/app/models/project.rb index 4d518862146..f1e232e95f8 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -281,7 +281,7 @@ class Project < ApplicationRecord has_many :variables, class_name: 'Ci::Variable' has_many :triggers, class_name: 'Ci::Trigger' has_many :environments - has_many :deployments, -> { success } + has_many :deployments has_many :pipeline_schedules, class_name: 'Ci::PipelineSchedule' has_many :project_deploy_tokens has_many :deploy_tokens, through: :project_deploy_tokens diff --git a/app/policies/deployment_policy.rb b/app/policies/deployment_policy.rb index d4f2f3c52b1..1a92b735e36 100644 --- a/app/policies/deployment_policy.rb +++ b/app/policies/deployment_policy.rb @@ -7,8 +7,20 @@ class DeploymentPolicy < BasePolicy can?(:update_build, @subject.deployable) end - rule { ~can_retry_deployable }.policy do + condition(:has_deployable) do + @subject.deployable.present? + end + + condition(:can_update_deployment) do + can?(:update_deployment, @subject.environment) + end + + rule { has_deployable & ~can_retry_deployable }.policy do prevent :create_deployment prevent :update_deployment end + + rule { ~can_update_deployment }.policy do + prevent :update_deployment + end end diff --git a/app/policies/project_policy.rb b/app/policies/project_policy.rb index a3540f31077..ea2be37d7e6 100644 --- a/app/policies/project_policy.rb +++ b/app/policies/project_policy.rb @@ -262,6 +262,7 @@ class ProjectPolicy < BasePolicy enable :destroy_container_image enable :create_environment enable :create_deployment + enable :update_deployment enable :create_release enable :update_release end diff --git a/app/services/deployments/after_create_service.rb b/app/services/deployments/after_create_service.rb new file mode 100644 index 00000000000..2572802e6a1 --- /dev/null +++ b/app/services/deployments/after_create_service.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +module Deployments + class AfterCreateService + attr_reader :deployment + attr_reader :deployable + + delegate :environment, to: :deployment + delegate :variables, to: :deployable + delegate :options, to: :deployable, allow_nil: true + + def initialize(deployment) + @deployment = deployment + @deployable = deployment.deployable + end + + def execute + deployment.create_ref + deployment.invalidate_cache + + update_environment(deployment) + + deployment + end + + def update_environment(deployment) + ActiveRecord::Base.transaction do + if (url = expanded_environment_url) + environment.external_url = url + end + + environment.fire_state_event(action) + + if environment.save && !environment.stopped? + deployment.update_merge_request_metrics! + end + end + end + + private + + def environment_options + options&.dig(:environment) || {} + end + + def expanded_environment_url + ExpandVariables.expand(environment_url, -> { variables }) if environment_url + end + + def environment_url + environment_options[:url] + end + + def action + environment_options[:action] || 'start' + end + end +end + +Deployments::AfterCreateService.prepend_if_ee('EE::Deployments::AfterCreateService') diff --git a/app/services/deployments/create_service.rb b/app/services/deployments/create_service.rb new file mode 100644 index 00000000000..89e3f7c8b83 --- /dev/null +++ b/app/services/deployments/create_service.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module Deployments + class CreateService + attr_reader :environment, :current_user, :params + + def initialize(environment, current_user, params) + @environment = environment + @current_user = current_user + @params = params + end + + def execute + create_deployment.tap do |deployment| + AfterCreateService.new(deployment).execute if deployment.persisted? + end + end + + def create_deployment + environment.deployments.create(deployment_attributes) + end + + def deployment_attributes + # We use explicit parameters here so we never by accident allow parameters + # to be set that one should not be able to set (e.g. the row ID). + { + cluster_id: environment.deployment_platform&.cluster_id, + project_id: environment.project_id, + environment_id: environment.id, + ref: params[:ref], + tag: params[:tag], + sha: params[:sha], + user: current_user, + on_stop: params[:on_stop], + status: params[:status] + } + end + end +end diff --git a/app/services/deployments/update_service.rb b/app/services/deployments/update_service.rb new file mode 100644 index 00000000000..7c8215d28f2 --- /dev/null +++ b/app/services/deployments/update_service.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module Deployments + class UpdateService + attr_reader :deployment, :params + + def initialize(deployment, params) + @deployment = deployment + @params = params + end + + def execute + deployment.update(status: params[:status]) + end + end +end diff --git a/app/services/git/base_hooks_service.rb b/app/services/git/base_hooks_service.rb index 97047d96de1..b1faef58e33 100644 --- a/app/services/git/base_hooks_service.rb +++ b/app/services/git/base_hooks_service.rb @@ -62,6 +62,8 @@ module Git end def execute_project_hooks + return unless params.fetch(:execute_project_hooks, true) + # Creating push_data invokes one CommitDelta RPC per commit. Only # build this data if we actually need it. project.execute_hooks(push_data, hook_name) if project.has_active_hooks?(hook_name) diff --git a/app/services/git/process_ref_changes_service.rb b/app/services/git/process_ref_changes_service.rb index 33925147750..62159d4e7e5 100644 --- a/app/services/git/process_ref_changes_service.rb +++ b/app/services/git/process_ref_changes_service.rb @@ -17,7 +17,7 @@ module Git changes_by_action = group_changes_by_action(changes) changes_by_action.each do |_, changes| - process_changes(ref_type, changes) if changes.any? + process_changes(ref_type, changes, execute_project_hooks: execute_project_hooks?(changes)) if changes.any? end end @@ -34,7 +34,11 @@ module Git :pushed end - def process_changes(ref_type, changes) + def execute_project_hooks?(changes) + (changes.size <= Gitlab::CurrentSettings.push_event_hooks_limit) || Feature.enabled?(:git_push_execute_all_project_hooks, project) + end + + def process_changes(ref_type, changes, execute_project_hooks:) push_service_class = push_service_class_for(ref_type) changes.each do |change| @@ -43,7 +47,8 @@ module Git current_user, change: change, push_options: params[:push_options], - create_pipelines: change[:index] < PIPELINE_PROCESS_LIMIT || Feature.enabled?(:git_push_create_all_pipelines, project) + create_pipelines: change[:index] < PIPELINE_PROCESS_LIMIT || Feature.enabled?(:git_push_create_all_pipelines, project), + execute_project_hooks: execute_project_hooks ).execute end end diff --git a/app/services/update_deployment_service.rb b/app/services/update_deployment_service.rb deleted file mode 100644 index 730210c611a..00000000000 --- a/app/services/update_deployment_service.rb +++ /dev/null @@ -1,57 +0,0 @@ -# frozen_string_literal: true - -class UpdateDeploymentService - attr_reader :deployment - attr_reader :deployable - - delegate :environment, to: :deployment - delegate :variables, to: :deployable - - def initialize(deployment) - @deployment = deployment - @deployable = deployment.deployable - end - - def execute - deployment.create_ref - deployment.invalidate_cache - - ActiveRecord::Base.transaction do - environment.external_url = expanded_environment_url if - expanded_environment_url - - environment.fire_state_event(action) - - break unless environment.save - break if environment.stopped? - - deployment.tap(&:update_merge_request_metrics!) - end - - deployment - end - - private - - def environment_options - @environment_options ||= deployable.options&.dig(:environment) || {} - end - - def expanded_environment_url - return @expanded_environment_url if defined?(@expanded_environment_url) - return unless environment_url - - @expanded_environment_url = - ExpandVariables.expand(environment_url, -> { variables }) - end - - def environment_url - environment_options[:url] - end - - def action - environment_options[:action] || 'start' - end -end - -UpdateDeploymentService.prepend_if_ee('EE::UpdateDeploymentService') diff --git a/app/views/admin/application_settings/_performance.html.haml b/app/views/admin/application_settings/_performance.html.haml index b52171afc69..22458223b93 100644 --- a/app/views/admin/application_settings/_performance.html.haml +++ b/app/views/admin/application_settings/_performance.html.haml @@ -20,5 +20,10 @@ = f.number_field :raw_blob_request_limit, class: 'form-control' .form-text.text-muted = _('Highest number of requests per minute for each raw path, default to 300. To disable throttling set to 0.') + .form-group + = f.label :push_event_hooks_limit, class: 'label-bold' + = f.number_field :push_event_hooks_limit, class: 'form-control' + .form-text.text-muted + = _("Number of changes (branches or tags) in a single push to determine whether webhooks and services will be fired or not. Webhooks and services won't be submitted if it surpasses that value.") = f.submit 'Save changes', class: "btn btn-success" diff --git a/app/views/projects/blob/show.html.haml b/app/views/projects/blob/show.html.haml index 688b8f001c3..7c73bbc7479 100644 --- a/app/views/projects/blob/show.html.haml +++ b/app/views/projects/blob/show.html.haml @@ -1,6 +1,6 @@ - breadcrumb_title "Repository" - page_title @blob.path, @ref -- signatures_path = namespace_project_signatures_path(namespace_id: @project.namespace.full_path, project_id: @project.path, id: @last_commit) +- signatures_path = namespace_project_signatures_path(namespace_id: @project.namespace.full_path, project_id: @project.path, id: @last_commit, limit: 1) .js-signature-container{ data: { 'signatures-path': signatures_path } } diff --git a/app/views/projects/deployments/_deployment.html.haml b/app/views/projects/deployments/_deployment.html.haml index ef2ab4c698e..8270477ed3f 100644 --- a/app/views/projects/deployments/_deployment.html.haml +++ b/app/views/projects/deployments/_deployment.html.haml @@ -1,31 +1,49 @@ .gl-responsive-table-row.deployment{ role: 'row' } + .table-section.section-15{ role: 'gridcell' } + .table-mobile-header{ role: 'rowheader' }= _("Status") + .table-mobile-content + = render_deployment_status(deployment) + .table-section.section-10{ role: 'gridcell' } .table-mobile-header{ role: 'rowheader' }= _("ID") %strong.table-mobile-content ##{deployment.iid} - .table-section.section-30{ role: 'gridcell' } + .table-section.section-10{ role: 'gridcell' } + .table-mobile-header{ role: 'rowheader' }= _("Triggerer") + .table-mobile-content + - if deployment.deployed_by + = user_avatar(user: deployment.deployed_by, size: 26, css_class: "mr-0 float-none") + + .table-section.section-25{ role: 'gridcell' } .table-mobile-header{ role: 'rowheader' }= _("Commit") = render 'projects/deployments/commit', deployment: deployment - .table-section.section-25.build-column{ role: 'gridcell' } + .table-section.section-10.build-column{ role: 'gridcell' } .table-mobile-header{ role: 'rowheader' }= _("Job") - if deployment.deployable .table-mobile-content .flex-truncate-parent .flex-truncate-child - = link_to [@project.namespace.becomes(Namespace), @project, deployment.deployable], class: 'build-link' do + = link_to deployment_path(deployment), class: 'build-link' do #{deployment.deployable.name} (##{deployment.deployable.id}) - - if deployment.deployed_by - %div - by - = user_avatar(user: deployment.deployed_by, size: 20, css_class: "mr-0 float-none") + - else + .badge.badge-info.suggestion-help-hover{ title: s_('Deployment|This deployment was created using the API') } + = s_('Deployment|API') - .table-section.section-15{ role: 'gridcell' } + .table-section.section-10{ role: 'gridcell' } .table-mobile-header{ role: 'rowheader' }= _("Created") - - if deployment.deployed_at - %span.table-mobile-content= time_ago_with_tooltip(deployment.deployed_at) + %span.table-mobile-content.flex-truncate-parent + %span.flex-truncate-child + = time_ago_with_tooltip(deployment.created_at) - .table-section.section-20.table-button-footer{ role: 'gridcell' } + .table-section.section-10{ role: 'gridcell' } + .table-mobile-header{ role: 'rowheader' }= _("Deployed") + - if deployment.deployed_at + %span.table-mobile-content.flex-truncate-parent + %span.flex-truncate-child + = time_ago_with_tooltip(deployment.deployed_at) + + .table-section.section-10.table-button-footer{ role: 'gridcell' } .btn-group.table-action-buttons = render 'projects/deployments/actions', deployment: deployment = render 'projects/deployments/rollback', deployment: deployment diff --git a/app/views/projects/deployments/_rollback.haml b/app/views/projects/deployments/_rollback.haml index d6bf8d564de..dffa5e4ba40 100644 --- a/app/views/projects/deployments/_rollback.haml +++ b/app/views/projects/deployments/_rollback.haml @@ -1,4 +1,4 @@ -- if can?(current_user, :create_deployment, deployment) +- if deployment.deployable && can?(current_user, :create_deployment, deployment) - tooltip = deployment.last? ? s_('Environments|Re-deploy to environment') : s_('Environments|Rollback environment') = button_tag class: 'btn btn-default btn-build has-tooltip', type: 'button', data: { toggle: 'modal', target: "#confirm-rollback-modal-#{deployment.id}" }, title: tooltip do - if deployment.last? diff --git a/app/views/projects/environments/show.html.haml b/app/views/projects/environments/show.html.haml index 75da151f329..c4c39c227c6 100644 --- a/app/views/projects/environments/show.html.haml +++ b/app/views/projects/environments/show.html.haml @@ -60,10 +60,13 @@ .table-holder .ci-table.environments{ role: 'grid' } .gl-responsive-table-row.table-row-header{ role: 'row' } + .table-section.section-15{ role: 'columnheader' }= _('Status') .table-section.section-10{ role: 'columnheader' }= _('ID') - .table-section.section-30{ role: 'columnheader' }= _('Commit') - .table-section.section-25{ role: 'columnheader' }= _('Job') - .table-section.section-15{ role: 'columnheader' }= _('Created') + .table-section.section-10{ role: 'columnheader' }= _('Triggerer') + .table-section.section-25{ role: 'columnheader' }= _('Commit') + .table-section.section-10{ role: 'columnheader' }= _('Job') + .table-section.section-10{ role: 'columnheader' }= _('Created') + .table-section.section-10{ role: 'columnheader' }= _('Deployed') = render @deployments diff --git a/app/views/projects/issues/import_csv/_button.html.haml b/app/views/projects/issues/import_csv/_button.html.haml index acc2c50294f..fe89d2fb748 100644 --- a/app/views/projects/issues/import_csv/_button.html.haml +++ b/app/views/projects/issues/import_csv/_button.html.haml @@ -3,7 +3,7 @@ %button.csv-import-button.btn{ title: _('Import CSV'), class: ('has-tooltip' if type == :icon), data: { toggle: 'modal', target: '.issues-import-modal' } } - if type == :icon - = sprite_icon('upload') + = sprite_icon('import') - else = _('Import CSV') diff --git a/app/views/projects/releases/edit.html.haml b/app/views/projects/releases/edit.html.haml new file mode 100644 index 00000000000..88ca64f2af0 --- /dev/null +++ b/app/views/projects/releases/edit.html.haml @@ -0,0 +1,3 @@ +- page_title _('Edit Release') + +#js-edit-release-page{ data: data_for_edit_release_page } diff --git a/app/views/projects/tags/_tag.html.haml b/app/views/projects/tags/_tag.html.haml index 3f6cd628d64..c7bd0262c54 100644 --- a/app/views/projects/tags/_tag.html.haml +++ b/app/views/projects/tags/_tag.html.haml @@ -24,7 +24,7 @@ .text-secondary = icon('rocket') = _("Release") - = link_to release.name, project_releases_path(@project, anchor: release.tag), class: 'default-link-color' + = link_to release.name, project_releases_path(@project, anchor: release.tag), class: 'tag-release-link' - if release.description.present? .description.md.prepend-top-default = markdown_field(release, :description) diff --git a/app/views/shared/issuable/_feed_buttons.html.haml b/app/views/shared/issuable/_feed_buttons.html.haml index 83f60fa6fe2..4fed95e2607 100644 --- a/app/views/shared/issuable/_feed_buttons.html.haml +++ b/app/views/shared/issuable/_feed_buttons.html.haml @@ -1,4 +1,4 @@ -= link_to safe_params.merge(rss_url_options), class: 'btn has-tooltip', data: { container: 'body' }, title: _('Subscribe to RSS feed') do - = icon('rss') += link_to safe_params.merge(rss_url_options), class: 'btn has-tooltip js-rss-button', data: { container: 'body' }, title: _('Subscribe to RSS feed') do + = sprite_icon('rss') = link_to safe_params.merge(calendar_url_options), class: 'btn has-tooltip', data: { container: 'body' }, title: _('Subscribe to calendar') do - = custom_icon('icon_calendar') + = sprite_icon('calendar') diff --git a/app/workers/deployments/success_worker.rb b/app/workers/deployments/success_worker.rb index da517f3fb26..3c7e384365a 100644 --- a/app/workers/deployments/success_worker.rb +++ b/app/workers/deployments/success_worker.rb @@ -10,7 +10,7 @@ module Deployments Deployment.find_by_id(deployment_id).try do |deployment| break unless deployment.success? - UpdateDeploymentService.new(deployment).execute + Deployments::AfterCreateService.new(deployment).execute end end end diff --git a/changelogs/unreleased/27715-fix-unrenderable-notes.yml b/changelogs/unreleased/27715-fix-unrenderable-notes.yml new file mode 100644 index 00000000000..329f9cbb30c --- /dev/null +++ b/changelogs/unreleased/27715-fix-unrenderable-notes.yml @@ -0,0 +1,5 @@ +--- +title: Fix showing diff when it has legacy diff notes +merge_request: 18510 +author: +type: fixed diff --git a/changelogs/unreleased/31009-limit-project-hooks-services.yml b/changelogs/unreleased/31009-limit-project-hooks-services.yml new file mode 100644 index 00000000000..dc1e0461567 --- /dev/null +++ b/changelogs/unreleased/31009-limit-project-hooks-services.yml @@ -0,0 +1,5 @@ +--- +title: Don't execute webhooks/services when above limit +merge_request: 17874 +author: +type: performance diff --git a/changelogs/unreleased/32380-update-issue-list-icons.yml b/changelogs/unreleased/32380-update-issue-list-icons.yml new file mode 100644 index 00000000000..42ad9b1eb99 --- /dev/null +++ b/changelogs/unreleased/32380-update-issue-list-icons.yml @@ -0,0 +1,5 @@ +--- +title: Use correct icons for issue actions +merge_request: +author: +type: other diff --git a/changelogs/unreleased/add-ansi2json-log-parser.yml b/changelogs/unreleased/add-ansi2json-log-parser.yml new file mode 100644 index 00000000000..1aec5d36fbe --- /dev/null +++ b/changelogs/unreleased/add-ansi2json-log-parser.yml @@ -0,0 +1,5 @@ +--- +title: Introduce new Ansi2json parser to convert job logs to JSON +merge_request: 18133 +author: +type: added diff --git a/changelogs/unreleased/allow-api-lookup-of-inherited-member-by-id.yml b/changelogs/unreleased/allow-api-lookup-of-inherited-member-by-id.yml new file mode 100644 index 00000000000..f266d197c6c --- /dev/null +++ b/changelogs/unreleased/allow-api-lookup-of-inherited-member-by-id.yml @@ -0,0 +1,5 @@ +--- +title: Add individual inherited member lookup API +merge_request: 17744 +author: +type: added diff --git a/changelogs/unreleased/deployments-api.yml b/changelogs/unreleased/deployments-api.yml new file mode 100644 index 00000000000..dce1763bdf1 --- /dev/null +++ b/changelogs/unreleased/deployments-api.yml @@ -0,0 +1,5 @@ +--- +title: Add API for manually creating and updating deployments +merge_request: 17620 +author: +type: added diff --git a/changelogs/unreleased/nfriend-add-edit-release-page.yml b/changelogs/unreleased/nfriend-add-edit-release-page.yml new file mode 100644 index 00000000000..5369ab6b19c --- /dev/null +++ b/changelogs/unreleased/nfriend-add-edit-release-page.yml @@ -0,0 +1,5 @@ +--- +title: Add "Edit Release" page +merge_request: 18033 +author: +type: added diff --git a/changelogs/unreleased/nfriend-fix-lin.yml b/changelogs/unreleased/nfriend-fix-lin.yml new file mode 100644 index 00000000000..0b16eb9c1f4 --- /dev/null +++ b/changelogs/unreleased/nfriend-fix-lin.yml @@ -0,0 +1,5 @@ +--- +title: Fix button link foreground color +merge_request: 18669 +author: +type: fixed diff --git a/config/helpers/is_ee_env.js b/config/helpers/is_ee_env.js index 801cf6abc81..78f0bd65528 100644 --- a/config/helpers/is_ee_env.js +++ b/config/helpers/is_ee_env.js @@ -3,12 +3,12 @@ const path = require('path'); const ROOT_PATH = path.resolve(__dirname, '../..'); -// The `IS_GITLAB_EE` is always `string` or `nil` +// The `FOSS_ONLY` is always `string` or `nil` // Thus the nil or empty string will result -// in using default value: true +// in using default value: false // // The behavior needs to be synchronised with // lib/gitlab.rb: Gitlab.ee? +const isFossOnly = JSON.parse(process.env.FOSS_ONLY || 'false'); module.exports = - fs.existsSync(path.join(ROOT_PATH, 'ee', 'app', 'models', 'license.rb')) && - (!process.env.IS_GITLAB_EE || JSON.parse(process.env.IS_GITLAB_EE)); + fs.existsSync(path.join(ROOT_PATH, 'ee', 'app', 'models', 'license.rb')) && !isFossOnly; diff --git a/config/webpack.config.js b/config/webpack.config.js index b5656040da2..25fb6cc5f5a 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -380,7 +380,7 @@ module.exports = { new webpack.DefinePlugin({ // This one is used to define window.gon.ee and other things properly in tests: - 'process.env.IS_GITLAB_EE': JSON.stringify(IS_EE), + 'process.env.IS_EE': JSON.stringify(IS_EE), // This one is used to check against "EE" properly in application code IS_EE: IS_EE ? 'window.gon && window.gon.ee' : JSON.stringify(false), }), diff --git a/db/migrate/20191003060227_add_push_event_hooks_limit_to_application_settings.rb b/db/migrate/20191003060227_add_push_event_hooks_limit_to_application_settings.rb new file mode 100644 index 00000000000..f107181bbde --- /dev/null +++ b/db/migrate/20191003060227_add_push_event_hooks_limit_to_application_settings.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class AddPushEventHooksLimitToApplicationSettings < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + add_column_with_default(:application_settings, :push_event_hooks_limit, :integer, default: 3) + end + + def down + remove_column(:application_settings, :push_event_hooks_limit) + end +end diff --git a/db/schema.rb b/db/schema.rb index f3ec5658f33..ab01ba21ee0 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -338,6 +338,7 @@ ActiveRecord::Schema.define(version: 2019_10_16_072826) do t.boolean "throttle_incident_management_notification_enabled", default: false, null: false t.integer "throttle_incident_management_notification_period_in_seconds", default: 3600 t.integer "throttle_incident_management_notification_per_period", default: 3600 + t.integer "push_event_hooks_limit", default: 3, null: false t.index ["custom_project_templates_group_id"], name: "index_application_settings_on_custom_project_templates_group_id" t.index ["file_template_project_id"], name: "index_application_settings_on_file_template_project_id" t.index ["instance_administration_project_id"], name: "index_applicationsettings_on_instance_administration_project_id" diff --git a/doc/administration/high_availability/README.md b/doc/administration/high_availability/README.md index fc2986380f3..de8c3336335 100644 --- a/doc/administration/high_availability/README.md +++ b/doc/administration/high_availability/README.md @@ -217,14 +217,19 @@ workload. Your workload is influenced by factors such as - but not limited to - how active your users are, how much automation you use, mirroring, and repo/change size. -- 3 PostgreSQL - 4 CPU, 16GiB memory per node -- 1 PgBouncer - 2 CPU, 4GiB memory -- 2 Redis - 2 CPU, 8GiB memory per node -- 3 Consul/Sentinel - 2 CPU, 2GiB memory per node -- 4 Sidekiq - 4 CPU, 16GiB memory per node -- 5 GitLab application nodes - 16 CPU, 64GiB memory per node -- 1 Gitaly - 16 CPU, 64GiB memory -- 1 Monitoring node - 2 CPU, 8GiB memory, 100GiB local storage +| Service | Configuration | GCP type | +| ------------------------------|-------------------------|----------------| +| 3 GitLab Rails
- Puma workers on each node set to 90% of available CPUs with 16 threads | 32 vCPU, 28.8GB Memory | n1-highcpu-32 | +| 3 PostgreSQL | 4 vCPU, 15GB Memory | n1-standard-4 | +| 1 PgBouncer | 2 vCPU, 1.8GB Memory | n1-highcpu-2 | +| X Gitaly[^1]
- Gitaly Ruby workers on each node set to 90% of available CPUs with 16 threads | 16 vCPU, 60GB Memory | n1-standard-16 | +| 3 Redis Cache + Sentinel
- Cache maxmemory set to 90% of available memory | 4 vCPU, 15GB Memory | n1-standard-4 | +| 3 Redis Persistent + Sentinel | 4 vCPU, 15GB Memory | n1-standard-4 | +| 4 Sidekiq | 4 vCPU, 15GB Memory | n1-standard-4 | +| 3 Consul | 2 vCPU, 1.8GB Memory | n1-highcpu-2 | +| 1 NFS Server | 16 vCPU, 14.4GB Memory | n1-highcpu-16 | +| 1 Monitoring node | 4 CPU, 3.6GB Memory | n1-highcpu-4 | +| 1 Load Balancing node[^2] . | 2 vCPU, 1.8GB Memory | n1-highcpu-2 | ### 25,000 User Configuration @@ -249,7 +254,7 @@ adjusted prior to certification based on performance testing. | 3 Redis Persistent + Sentinel | 4 vCPU, 15GB Memory | n1-standard-4 | | 4 Sidekiq | 4 vCPU, 15GB Memory | n1-standard-4 | | 3 Consul | 2 vCPU, 1.8GB Memory | n1-highcpu-2 | -| 1 NFS Server | 2 vCPU, 1.8GB Memory | n1-highcpu-2 | +| 1 NFS Server | 16 vCPU, 14.4GB Memory | n1-highcpu-16 | | 1 Monitoring node | 4 CPU, 3.6GB Memory | n1-highcpu-4 | | 1 Load Balancing node[^2] . | 2 vCPU, 1.8GB Memory | n1-highcpu-2 | @@ -277,15 +282,15 @@ testing. | 3 Redis Persistent + Sentinel | 4 vCPU, 15GB Memory | n1-standard-4 | | 4 Sidekiq | 4 vCPU, 15GB Memory | n1-standard-4 | | 3 Consul | 2 vCPU, 1.8GB Memory | n1-highcpu-2 | -| 1 NFS Server | 2 vCPU, 1.8GB Memory | n1-highcpu-2 | +| 1 NFS Server | 16 vCPU, 14.4GB Memory | n1-highcpu-16 | | 1 Monitoring node | 4 CPU, 3.6GB Memory | n1-highcpu-4 | | 1 Load Balancing node[^2] . | 2 vCPU, 1.8GB Memory | n1-highcpu-2 | [^1]: Gitaly node requirements are dependent on customer data. We recommend 2 - nodes as an absolute minimum for performance at the 25,000 user scale and - 4 nodes as an absolute minimum at the 50,000 user scale, but additional - nodes should be considered in conjunction with a review of project counts - and sizes. + nodes as an absolute minimum for performance at the 10,000 and 25,000 user + scale and 4 nodes as an absolute minimum at the 50,000 user scale, but + additional nodes should be considered in conjunction with a review of + project counts and sizes. [^2]: HAProxy is the only tested and recommended load balancer. Additional options may be supported in the future. diff --git a/doc/api/deployments.md b/doc/api/deployments.md index df3a98b1dc8..27254c42e3a 100644 --- a/doc/api/deployments.md +++ b/doc/api/deployments.md @@ -223,3 +223,100 @@ Example of response } } ``` + +## Create a deployment + +``` +POST /projects/:id/deployments +``` + +| Attribute | Type | Required | Description | +|------------------|----------------|----------|---------------------| +| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user | +| `environment` | string | yes | The name of the environment to create the deployment for | +| `sha` | string | yes | The SHA of the commit that is deployed | +| `ref` | string | yes | The name of the branch or tag that is deployed | +| `tag` | boolean | yes | A boolean that indicates if the deployed ref is a tag (true) or not (false) | +| `status` | string | yes | The status of the deployment | + +The status can be one of the following values: + +- created +- running +- success +- failed +- canceled + +```bash +curl --data "environment=production&sha=a91957a858320c0e17f3a0eca7cfacbff50ea29a&ref=master&tag=false&status=success" --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/1/deployments" +``` + +Example of a response: + +```json +{ + "id": 42, + "iid": 2, + "ref": "master", + "sha": "a91957a858320c0e17f3a0eca7cfacbff50ea29a", + "created_at": "2016-08-11T11:32:35.444Z", + "status": "success", + "user": { + "name": "Administrator", + "username": "root", + "id": 1, + "state": "active", + "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon", + "web_url": "http://localhost:3000/root" + }, + "environment": { + "id": 9, + "name": "production", + "external_url": "https://about.gitlab.com" + }, + "deployable": null +} +``` + +## Updating a deployment + +``` +PUT /projects/:id/deployments/:deployment_id +``` + +| Attribute | Type | Required | Description | +|------------------|----------------|----------|---------------------| +| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user | +| `deployment_id` | integer | yes | The ID of the deployment to update | +| `status` | string | yes | The new status of the deployment | + +```bash +curl --request PUT --data "status=success" --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/1/deployments/42" +``` + +Example of a response: + +```json +{ + "id": 42, + "iid": 2, + "ref": "master", + "sha": "a91957a858320c0e17f3a0eca7cfacbff50ea29a", + "created_at": "2016-08-11T11:32:35.444Z", + "status": "success", + "user": { + "name": "Administrator", + "username": "root", + "id": 1, + "state": "active", + "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon", + "web_url": "http://localhost:3000/root" + }, + "environment": { + "id": 9, + "name": "production", + "external_url": "https://about.gitlab.com" + }, + "deployable": null +} +``` diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md index 1efda2f07eb..b21fc9bfb18 100644 --- a/doc/api/graphql/reference/index.md +++ b/doc/api/graphql/reference/index.md @@ -54,9 +54,87 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | `message` | String | | | `authoredDate` | Time | | | `webUrl` | String! | | +| `signatureHtml` | String | Rendered html for the commit signature | | `author` | User | | | `latestPipeline` | Pipeline | Latest pipeline for this commit | +### CreateDiffNotePayload + +| Name | Type | Description | +| --- | ---- | ---------- | +| `clientMutationId` | String | A unique identifier for the client performing the mutation. | +| `errors` | String! => Array | Reasons why the mutation failed. | +| `note` | Note | The note after mutation | + +### CreateImageDiffNotePayload + +| Name | Type | Description | +| --- | ---- | ---------- | +| `clientMutationId` | String | A unique identifier for the client performing the mutation. | +| `errors` | String! => Array | Reasons why the mutation failed. | +| `note` | Note | The note after mutation | + +### CreateNotePayload + +| Name | Type | Description | +| --- | ---- | ---------- | +| `clientMutationId` | String | A unique identifier for the client performing the mutation. | +| `errors` | String! => Array | Reasons why the mutation failed. | +| `note` | Note | The note after mutation | + +### Design + +| Name | Type | Description | +| --- | ---- | ---------- | +| `id` | ID! | | +| `project` | Project! | | +| `issue` | Issue! | | +| `notesCount` | Int! | The total count of user-created notes for this design | +| `filename` | String! | | +| `fullPath` | String! | | +| `event` | DesignVersionEvent! | The change that happened to the design at this version | +| `image` | String! | | +| `diffRefs` | DiffRefs! | | + +### DesignCollection + +| Name | Type | Description | +| --- | ---- | ---------- | +| `project` | Project! | | +| `issue` | Issue! | | + +### DesignManagementDeletePayload + +| Name | Type | Description | +| --- | ---- | ---------- | +| `clientMutationId` | String | A unique identifier for the client performing the mutation. | +| `errors` | String! => Array | Reasons why the mutation failed. | +| `version` | DesignVersion | The new version in which the designs are deleted | + +### DesignManagementUploadPayload + +| Name | Type | Description | +| --- | ---- | ---------- | +| `clientMutationId` | String | A unique identifier for the client performing the mutation. | +| `errors` | String! => Array | Reasons why the mutation failed. | +| `designs` | Design! => Array | The designs that were uploaded by the mutation | +| `skippedDesigns` | Design! => Array | Any designs that were skipped from the upload due to there being no change to their content since their last version | + +### DesignVersion + +| Name | Type | Description | +| --- | ---- | ---------- | +| `id` | ID! | | +| `sha` | ID! | | + +### DestroyNotePayload + +| Name | Type | Description | +| --- | ---- | ---------- | +| `clientMutationId` | String | A unique identifier for the client performing the mutation. | +| `errors` | String! => Array | Reasons why the mutation failed. | +| `note` | Note | The note after mutation | + ### DetailedStatus | Name | Type | Description | @@ -74,9 +152,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | Name | Type | Description | | --- | ---- | ---------- | -| `headSha` | String! | The sha of the head at the time the comment was made | -| `baseSha` | String | The merge base of the branch the comment was made on | -| `startSha` | String! | The sha of the branch being compared against | +| `diffRefs` | DiffRefs! | | | `filePath` | String! | The path of the file that was changed | | `oldPath` | String | The path of the file on the start sha. | | `newPath` | String | The path of the file on the head sha. | @@ -88,13 +164,146 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | `width` | Int | The total width of the image | | `height` | Int | The total height of the image | +### DiffRefs + +| Name | Type | Description | +| --- | ---- | ---------- | +| `headSha` | String! | The sha of the head at the time the comment was made | +| `baseSha` | String! | The merge base of the branch the comment was made on | +| `startSha` | String! | The sha of the branch being compared against | + ### Discussion | Name | Type | Description | | --- | ---- | ---------- | | `id` | ID! | | +| `replyId` | ID! | The ID used to reply to this discussion | | `createdAt` | Time! | | +### Epic + +| Name | Type | Description | +| --- | ---- | ---------- | +| `userPermissions` | EpicPermissions! | Permissions for the current user on the resource | +| `id` | ID! | | +| `iid` | ID! | | +| `title` | String | | +| `description` | String | | +| `state` | EpicState! | | +| `group` | Group! | | +| `parent` | Epic | | +| `author` | User! | | +| `startDate` | Time | | +| `startDateIsFixed` | Boolean | | +| `startDateFixed` | Time | | +| `startDateFromMilestones` | Time | | +| `dueDate` | Time | | +| `dueDateIsFixed` | Boolean | | +| `dueDateFixed` | Time | | +| `dueDateFromMilestones` | Time | | +| `closedAt` | Time | | +| `createdAt` | Time | | +| `updatedAt` | Time | | +| `hasChildren` | Boolean! | | +| `hasIssues` | Boolean! | | +| `webPath` | String! | | +| `webUrl` | String! | | +| `relativePosition` | Int | The relative position of the epic in the Epic tree | +| `relationPath` | String | | +| `reference` | String! | | + +### EpicIssue + +| Name | Type | Description | +| --- | ---- | ---------- | +| `userPermissions` | IssuePermissions! | Permissions for the current user on the resource | +| `iid` | ID! | | +| `title` | String! | | +| `titleHtml` | String | The GitLab Flavored Markdown rendering of `title` | +| `description` | String | | +| `descriptionHtml` | String | The GitLab Flavored Markdown rendering of `description` | +| `state` | IssueState! | | +| `reference` | String! | | +| `author` | User! | | +| `milestone` | Milestone | | +| `dueDate` | Time | | +| `confidential` | Boolean! | | +| `discussionLocked` | Boolean! | | +| `upvotes` | Int! | | +| `downvotes` | Int! | | +| `userNotesCount` | Int! | | +| `webPath` | String! | | +| `webUrl` | String! | | +| `relativePosition` | Int | | +| `timeEstimate` | Int! | The time estimate on the issue | +| `totalTimeSpent` | Int! | Total time reported as spent on the issue | +| `closedAt` | Time | | +| `createdAt` | Time! | | +| `updatedAt` | Time! | | +| `taskCompletionStatus` | TaskCompletionStatus! | | +| `epic` | Epic | The epic to which issue belongs | +| `weight` | Int | | +| `designs` | DesignCollection | | +| `designCollection` | DesignCollection | | +| `epicIssueId` | ID! | | +| `relationPath` | String | | +| `id` | ID | The global id of the epic-issue relation | + +### EpicPermissions + +| Name | Type | Description | +| --- | ---- | ---------- | +| `readEpic` | Boolean! | Whether or not a user can perform `read_epic` on this resource | +| `readEpicIid` | Boolean! | Whether or not a user can perform `read_epic_iid` on this resource | +| `updateEpic` | Boolean! | Whether or not a user can perform `update_epic` on this resource | +| `destroyEpic` | Boolean! | Whether or not a user can perform `destroy_epic` on this resource | +| `adminEpic` | Boolean! | Whether or not a user can perform `admin_epic` on this resource | +| `createEpic` | Boolean! | Whether or not a user can perform `create_epic` on this resource | +| `createNote` | Boolean! | Whether or not a user can perform `create_note` on this resource | +| `awardEmoji` | Boolean! | Whether or not a user can perform `award_emoji` on this resource | + +### EpicTreeReorderPayload + +| Name | Type | Description | +| --- | ---- | ---------- | +| `clientMutationId` | String | A unique identifier for the client performing the mutation. | +| `errors` | String! => Array | Reasons why the mutation failed. | + +### ExtendedIssue + +| Name | Type | Description | +| --- | ---- | ---------- | +| `userPermissions` | IssuePermissions! | Permissions for the current user on the resource | +| `iid` | ID! | | +| `title` | String! | | +| `titleHtml` | String | The GitLab Flavored Markdown rendering of `title` | +| `description` | String | | +| `descriptionHtml` | String | The GitLab Flavored Markdown rendering of `description` | +| `state` | IssueState! | | +| `reference` | String! | | +| `author` | User! | | +| `milestone` | Milestone | | +| `dueDate` | Time | | +| `confidential` | Boolean! | | +| `discussionLocked` | Boolean! | | +| `upvotes` | Int! | | +| `downvotes` | Int! | | +| `userNotesCount` | Int! | | +| `webPath` | String! | | +| `webUrl` | String! | | +| `relativePosition` | Int | | +| `timeEstimate` | Int! | The time estimate on the issue | +| `totalTimeSpent` | Int! | Total time reported as spent on the issue | +| `closedAt` | Time | | +| `createdAt` | Time! | | +| `updatedAt` | Time! | | +| `taskCompletionStatus` | TaskCompletionStatus! | | +| `epic` | Epic | The epic to which issue belongs | +| `weight` | Int | | +| `designs` | DesignCollection | | +| `designCollection` | DesignCollection | | +| `subscribed` | Boolean! | Boolean flag for whether the currently logged in user is subscribed to this issue | + ### Group | Name | Type | Description | @@ -109,11 +318,13 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | `visibility` | String | | | `lfsEnabled` | Boolean | | | `requestAccessEnabled` | Boolean | | -| `rootStorageStatistics` | RootStorageStatistics | The aggregated storage statistics. Only available if the namespace has no parent | +| `rootStorageStatistics` | RootStorageStatistics | The aggregated storage statistics. Only available for root namespaces | | `userPermissions` | GroupPermissions! | Permissions for the current user on the resource | | `webUrl` | String! | | | `avatarUrl` | String | | | `parent` | Group | | +| `epicsEnabled` | Boolean | | +| `epic` | Epic | | ### GroupPermissions @@ -144,10 +355,16 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | `webPath` | String! | | | `webUrl` | String! | | | `relativePosition` | Int | | +| `timeEstimate` | Int! | The time estimate on the issue | +| `totalTimeSpent` | Int! | Total time reported as spent on the issue | | `closedAt` | Time | | | `createdAt` | Time! | | | `updatedAt` | Time! | | | `taskCompletionStatus` | TaskCompletionStatus! | | +| `epic` | Epic | The epic to which issue belongs | +| `weight` | Int | | +| `designs` | DesignCollection | | +| `designCollection` | DesignCollection | | ### IssuePermissions @@ -158,6 +375,9 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | `updateIssue` | Boolean! | Whether or not a user can perform `update_issue` on this resource | | `createNote` | Boolean! | Whether or not a user can perform `create_note` on this resource | | `reopenIssue` | Boolean! | Whether or not a user can perform `reopen_issue` on this resource | +| `readDesign` | Boolean! | Whether or not a user can perform `read_design` on this resource | +| `createDesign` | Boolean! | Whether or not a user can perform `create_design` on this resource | +| `destroyDesign` | Boolean! | Whether or not a user can perform `destroy_design` on this resource | ### Label @@ -185,6 +405,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | `updatedAt` | Time! | | | `sourceProject` | Project | | | `targetProject` | Project! | | +| `diffRefs` | DiffRefs | | | `project` | Project! | | | `projectId` | Int! | | | `sourceProjectId` | Int | | @@ -271,6 +492,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | `visibility` | String | | | `lfsEnabled` | Boolean | | | `requestAccessEnabled` | Boolean | | +| `rootStorageStatistics` | RootStorageStatistics | The aggregated storage statistics. Only available for root namespaces | ### Note @@ -381,7 +603,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | `statistics` | ProjectStatistics | | | `repository` | Repository | | | `mergeRequest` | MergeRequest | | -| `issue` | Issue | | +| `issue` | ExtendedIssue | | ### ProjectPermissions @@ -424,6 +646,10 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | `createPages` | Boolean! | Whether or not a user can perform `create_pages` on this resource | | `destroyPages` | Boolean! | Whether or not a user can perform `destroy_pages` on this resource | | `readPagesContent` | Boolean! | Whether or not a user can perform `read_pages_content` on this resource | +| `adminOperations` | Boolean! | Whether or not a user can perform `admin_operations` on this resource | +| `readDesign` | Boolean! | Whether or not a user can perform `read_design` on this resource | +| `createDesign` | Boolean! | Whether or not a user can perform `create_design` on this resource | +| `destroyDesign` | Boolean! | Whether or not a user can perform `destroy_design` on this resource | ### ProjectStatistics @@ -458,12 +684,12 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | Name | Type | Description | | --- | ---- | ---------- | -| `storageSize` | Int! | The total storage in Bytes | -| `repositorySize` | Int! | The Git repository size in Bytes | -| `lfsObjectsSize` | Int! | The LFS objects size in Bytes | -| `buildArtifactsSize` | Int! | The CI artifacts size in Bytes | -| `packagesSize` | Int! | The packages size in Bytes | -| `wikiSize` | Int! | The wiki size in Bytes | +| `storageSize` | Int! | The total storage in bytes | +| `repositorySize` | Int! | The git repository size in bytes | +| `lfsObjectsSize` | Int! | The LFS objects size in bytes | +| `buildArtifactsSize` | Int! | The CI artifacts size in bytes | +| `packagesSize` | Int! | The packages size in bytes | +| `wikiSize` | Int! | The wiki size in bytes | ### Submodule @@ -474,6 +700,8 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | `type` | EntryType! | | | `path` | String! | | | `flatPath` | String! | | +| `webUrl` | String | | +| `treeUrl` | String | | ### TaskCompletionStatus @@ -495,7 +723,7 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | Name | Type | Description | | --- | ---- | ---------- | -| `lastCommit` | Commit | | +| `lastCommit` | Commit | Last commit for the tree | ### TreeEntry @@ -508,6 +736,14 @@ The API can be explored interactively using the [GraphiQL IDE](../index.md#graph | `flatPath` | String! | | | `webUrl` | String | | +### UpdateNotePayload + +| Name | Type | Description | +| --- | ---- | ---------- | +| `clientMutationId` | String | A unique identifier for the client performing the mutation. | +| `errors` | String! => Array | Reasons why the mutation failed. | +| `note` | Note | The note after mutation | + ### User | Name | Type | Description | diff --git a/doc/api/members.md b/doc/api/members.md index da62dc53659..50dcf86c972 100644 --- a/doc/api/members.md +++ b/doc/api/members.md @@ -26,6 +26,7 @@ GET /projects/:id/members | --------- | ---- | -------- | ----------- | | `id` | integer/string | yes | The ID or [URL-encoded path of the project or group](README.md#namespaced-path-encoding) owned by the authenticated user | | `query` | string | no | A query string to search for members | +| `user_ids` | array of integers | no | Filter the results on the given user IDs | ```bash curl --header "PRIVATE-TOKEN: " https://gitlab.example.com/api/v4/groups/:id/members @@ -62,9 +63,8 @@ Example response: ## List all members of a group or project including inherited members Gets a list of group or project members viewable by the authenticated user, including inherited members through ancestor groups. -When a user is a member of the project/group and of one or more ancestor groups the user is returned only once with the project access_level (if exists) -or the access_level for the user in the first group which he belongs to in the project groups ancestors chain. -**Note:** We plan to [change](https://gitlab.com/gitlab-org/gitlab-foss/issues/62284) this behavior to return highest access_level instead. +When a user is a member of the project/group and of one or more ancestor groups the user is returned only once with the project `access_level` (if exists) +or the `access_level` for the user in the first group which he belongs to in the project groups ancestors chain. ``` GET /groups/:id/members/all @@ -75,6 +75,7 @@ GET /projects/:id/members/all | --------- | ---- | -------- | ----------- | | `id` | integer/string | yes | The ID or [URL-encoded path of the project or group](README.md#namespaced-path-encoding) owned by the authenticated user | | `query` | string | no | A query string to search for members | +| `user_ids` | array of integers | no | Filter the results on the given user IDs | ```bash curl --header "PRIVATE-TOKEN: " https://gitlab.example.com/api/v4/groups/:id/members/all @@ -120,7 +121,7 @@ Example response: ## Get a member of a group or project -Gets a member of a group or project. +Gets a member of a group or project. Returns only direct members and not inherited members through ancestor groups. ``` GET /groups/:id/members/:user_id @@ -152,6 +153,42 @@ Example response: } ``` +## Get a member of a group or project, including inherited members + +> [Introduced](https://gitlab.com/gitlab-org/gitlab/merge_requests/17744) in GitLab 12.4. + +Gets a member of a group or project, including members inherited through ancestor groups. See the corresponding [endpoint to list all inherited members](#list-all-members-of-a-group-or-project-including-inherited-members) for details. + +``` +GET /groups/:id/members/all/:user_id +GET /projects/:id/members/all/:user_id +``` + +| Attribute | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `id` | integer/string | yes | The ID or [URL-encoded path of the project or group](README.md#namespaced-path-encoding) owned by the authenticated user | +| `user_id` | integer | yes | The user ID of the member | + +```bash +curl --header "PRIVATE-TOKEN: " https://gitlab.example.com/api/v4/groups/:id/members/all/:user_id +curl --header "PRIVATE-TOKEN: " https://gitlab.example.com/api/v4/projects/:id/members/all/:user_id +``` + +Example response: + +```json +{ + "id": 1, + "username": "raymond_smith", + "name": "Raymond Smith", + "state": "active", + "avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon", + "web_url": "http://192.168.1.8:3000/root", + "access_level": 30, + "expires_at": null +} +``` + ## Add a member to a group or project Adds a member to a group or project. diff --git a/doc/api/settings.md b/doc/api/settings.md index efb6809794f..24e6f90e844 100644 --- a/doc/api/settings.md +++ b/doc/api/settings.md @@ -289,6 +289,7 @@ are listed in the descriptions of the relevant settings. | `prometheus_metrics_enabled` | boolean | no | Enable Prometheus metrics. | | `protected_ci_variables` | boolean | no | Environment variables are protected by default. | | `pseudonymizer_enabled` | boolean | no | **(PREMIUM)** When enabled, GitLab will run a background job that will produce pseudonymized CSVs of the GitLab database that will be uploaded to your configured object storage directory. +| `push_event_hooks_limit` | integer | no | Number of changes (branches or tags) in a single push to determine whether webhooks and services will be fired or not. Webhooks and services won't be submitted if it surpasses that value. | | `recaptcha_enabled` | boolean | no | (**If enabled, requires:** `recaptcha_private_key` and `recaptcha_site_key`) Enable reCAPTCHA. | | `recaptcha_private_key` | string | required by: `recaptcha_enabled` | Private key for reCAPTCHA. | | `recaptcha_site_key` | string | required by: `recaptcha_enabled` | Site key for reCAPTCHA. | diff --git a/doc/development/chatops_on_gitlabcom.md b/doc/development/chatops_on_gitlabcom.md index a1c07ee2a1e..8a313a120f1 100644 --- a/doc/development/chatops_on_gitlabcom.md +++ b/doc/development/chatops_on_gitlabcom.md @@ -14,7 +14,7 @@ tasks such as: To request access to Chatops on GitLab.com: 1. Log into **using the same username** as for GitLab.com (you may have to rename it). -1. Ask [anyone in the `chatops` project](https://gitlab.com/gitlab-com/chatops/-/project_members) to add you by running `/chatops run member add gitlab-com/chatops --ops`. +1. Ask [an owner/maintainer in the `chatops` project](https://gitlab.com/gitlab-com/chatops/-/project_members?search=&sort=access_level_desc) to add you by running `/chatops run member add gitlab-com/chatops --ops`. ## See also diff --git a/doc/development/documentation/styleguide.md b/doc/development/documentation/styleguide.md index 988f82118cb..efff477eff6 100644 --- a/doc/development/documentation/styleguide.md +++ b/doc/development/documentation/styleguide.md @@ -492,19 +492,50 @@ For other punctuation rules, please refer to the - Use inline link markdown markup `[Text](https://example.com)`. It's easier to read, review, and maintain. **Do not** use `[Text][identifier]`. -- To link to internal documentation, use relative links, not full URLs. Use `../` to - navigate to high-level directories, and always add the file name `file.md` at the - end of the link with the `.md` extension, not `.html`. - Example: instead of `[text](../../merge_requests/)`, use - `[text](../../merge_requests/index.md)` or, `[text](../../ci/README.md)`, or, - for anchor links, `[text](../../ci/README.md#examples)`. - Using the markdown extension is necessary for the [`/help`](index.md#gitlab-help) - section of GitLab. -- To link from CE to EE-only documentation, use the EE-only doc full URL. + - Use [meaningful anchor texts](https://www.futurehosting.com/blog/links-should-have-meaningful-anchor-text-heres-why/). E.g., instead of writing something like `Read more about GitLab Issue Boards [here](LINK)`, write `Read more about [GitLab Issue Boards](LINK)`. +### Links to internal documentation + +- To link to internal documentation, use relative links, not full URLs. + Use `../` to navigate to high-level directories. Links should not refer to root. + + Don't: + + ```md + [Geo Troubleshooting](https://docs.gitlab.com/ee/administration/geo/replication/troubleshooting.html) + [Geo Troubleshooting](/ee/administration/geo/replication/troubleshooting.md) + ``` + + Do: + + ```md + [Geo Troubleshooting](../../geo/replication/troubleshooting.md) + ``` + +- Always add the file name `file.md` at the end of the link with the `.md` extension, not `.html`. + + Don't: + + ```md + [merge requests](../../merge_requests/) + [issues](../../issues/tags.html) + [issue tags](../../issues/tags.html#stages) + ``` + + Do: + + ```md + [merge requests](../../merge_requests/index.md) + [issues](../../issues/tags.md) + [issue tags](../../issues/tags.md#stages) + ``` + +- Using the markdown extension is necessary for the [`/help`](index.md#gitlab-help) + section of GitLab. + ### Links requiring permissions Don't link directly to: diff --git a/doc/development/ee_features.md b/doc/development/ee_features.md index f89371f38ce..cc9df479492 100644 --- a/doc/development/ee_features.md +++ b/doc/development/ee_features.md @@ -20,9 +20,9 @@ should be added for EE. Licensed features can be stubbed using the spec helper `stub_licensed_features` in `EE::LicenseHelpers`. You can force GitLab to act as CE by either deleting the `ee/` directory or by -setting the [`IS_GITLAB_EE` environment variable](https://gitlab.com/gitlab-org/gitlab/blob/master/config/helpers/is_ee_env.js) -to something that evaluates as `false`. The same works for running tests -(for example `IS_GITLAB_EE=0 yarn jest`). +setting the [`FOSS_ONLY` environment variable](https://gitlab.com/gitlab-org/gitlab/blob/master/config/helpers/is_ee_env.js) +to something that evaluates as `true`. The same works for running tests +(for example `FOSS_ONLY=1 yarn jest`). [ee-as-ce]: https://gitlab.com/gitlab-org/gitlab/issues/2500 diff --git a/doc/development/pipelines.md b/doc/development/pipelines.md index 6520c7dbbcf..5954de03db4 100644 --- a/doc/development/pipelines.md +++ b/doc/development/pipelines.md @@ -102,7 +102,7 @@ These common definitions are: `docker.elastic.co/elasticsearch/elasticsearch:5.6.12` services. - `.only-ee`: Only creates a job for the `gitlab` project. - `.only-ee-as-if-foss`: Same as `.only-ee` but simulate the FOSS project by - setting the `IS_GITLAB_EE='0'` environment variable. + setting the `FOSS_ONLY='1'` environment variable. ## Changes detection @@ -115,6 +115,7 @@ from a commit or MR by extending from the following CI definitions: - `.only-qa-changes`: Allows a job to only be created upon QA-related changes. - `.only-docs-changes`: Allows a job to only be created upon docs-related changes. - `.only-code-qa-changes`: Allows a job to only be created upon code-related or QA-related changes. +- `.only-graphql-changes`: Allows a job to only be created upon graphql-related changes. **See for the list of exact patterns.** @@ -127,7 +128,7 @@ execute jobs out of order for the following jobs: ```mermaid graph RL; A[setup-test-env]; - B["gitlab:assets:compile
(master only)"]; + B["gitlab:assets:compile pull-push-cache
(master only)"]; C[gitlab:assets:compile pull-cache]; D["cache gems
(master and tags only)"]; E[review-build-cng]; @@ -136,7 +137,7 @@ graph RL; G2["schedule:review-deploy
(master only)"]; H[karma]; I[jest]; - J["compile-assets
(master only)"]; + J["compile-assets pull-push-cache
(master only)"]; K[compile-assets pull-cache]; L[webpack-dev-server]; M[coverage]; @@ -145,39 +146,42 @@ graph RL; P["schedule:package-and-qa
(master schedule only)"]; Q[package-and-qa]; R[package-and-qa-manual]; + S["RSpec
(e.g. rspec unit pg9)"] + T[retrieve-tests-metadata]; subgraph "`prepare` stage" A F - J K + J + T end subgraph "`test` stage" B --> |needs| A; C --> |needs| A; D --> |needs| A; - H -.-> |depends on| A; - H -.-> |depends on| J; - H -.-> |depends on| K; - I -.-> |depends on| A; - I -.-> |depends on| J; - I -.-> |depends on| K; - L -.-> |depends on| A; - L -.-> |depends on| J; - L -.-> |depends on| K; + H -.-> |needs and depends on| A; + H -.-> |needs and depends on| K; + I -.-> |needs and depends on| A; + I -.-> |needs and depends on| K; + L -.-> |needs and depends on| A; + L -.-> |needs and depends on| K; + O -.-> |needs and depends on| A; + O -.-> |needs and depends on| K; + S -.-> |needs and depends on| A; + S -.-> |needs and depends on| K; + S -.-> |needs and depends on| T; downtime_check --> |needs and depends on| A; db:* --> |needs| A; gitlab:setup --> |needs| A; - O -.-> |depends on| A; - O -.-> |depends on| B; - O -.-> |depends on| C; downtime_check --> |needs and depends on| A; + graphql-docs-verify --> |needs| A; end subgraph "`review-prepare` stage" E --> |needs| C; - X["schedule:review-build-cng
(master schedule only)"] --> |needs| B; + X["schedule:review-build-cng
(master schedule only)"] --> |needs| C; end subgraph "`review` stage" @@ -190,7 +194,7 @@ subgraph "`qa` stage" Q --> |needs| F; R --> |needs| C; R --> |needs| F; - P --> |needs| B; + P --> |needs| C; P --> |needs| F; review-qa-smoke -.-> |needs and depends on| G; review-qa-all -.-> |needs and depends on| G; @@ -209,7 +213,7 @@ subgraph "`post-test` stage" end subgraph "`pages` stage" - N -.-> |depends on| B; + N -.-> |depends on| C; N -.-> |depends on| H; N -.-> |depends on| M; end diff --git a/doc/user/group/epics/img/child_epics_roadmap.png b/doc/user/group/epics/img/child_epics_roadmap.png deleted file mode 100644 index 819fed5898934b3bdb5adff4c2d4e200e3f95300..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30149 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�O!BRB6(u!!NPQ1}aLAj=e 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 diff --git a/doc/user/group/epics/img/epic_view.png b/doc/user/group/epics/img/epic_view.png deleted file mode 100644 index c55d302ec291f8d2b8c0a9be46da4c1ecfe0dc6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176740 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 z 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�Xmu2yaIv8c{Q>~+4Icp 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,~_*Rm3q1fRCC>7bMv% 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 Q-%K#iy}sX7eiL%xZ)k}W$p8QV diff --git a/doc/user/group/epics/img/epic_view_roadmap_v12.3.png b/doc/user/group/epics/img/epic_view_roadmap_v12.3.png new file mode 100755 index 0000000000000000000000000000000000000000..a17c56c618bc865e40dbc71de209df96bbe4d308 GIT binary patch literal 50491 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%0A!zQw@JsQ-%U+)IVvv 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≪=Bc3pOA_FVPtisM& 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Ðps3FeH*)qAdtXRAh$R51qIHth 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 diff --git a/doc/user/group/epics/img/epics_list_view_v12.3.png b/doc/user/group/epics/img/epics_list_view_v12.3.png new file mode 100755 index 0000000000000000000000000000000000000000..c6817a503e7a914a923ba8e19ea022112eade955 GIT binary patch literal 39450 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 Fe*+Jk(`^6% literal 0 HcmV?d00001 diff --git a/doc/user/group/epics/index.md b/doc/user/group/epics/index.md index 51e779cce6a..f9690d4edfe 100644 --- a/doc/user/group/epics/index.md +++ b/doc/user/group/epics/index.md @@ -10,13 +10,13 @@ Epics let you manage your portfolio of projects more efficiently and with less effort by tracking groups of issues that share a theme, across projects and milestones. -![epics list view](img/epics_list_view.png) +![epics list view](img/epics_list_view_v12.3.png) ## Use cases - Suppose your team is working on a large feature that involves multiple discussions throughout different issues created in distinct projects within a [Group](../index.md). With Epics, you can track all the related activities that together contribute to that single feature. - Track when the work for the group of issues is targeted to begin, and when it is targeted to end. -- Discuss and collaborate on feature ideas and scope at a high-level. +- Discuss and collaborate on feature ideas and scope at a high level. ## Creating an epic @@ -24,78 +24,114 @@ A paginated list of epics is available in each group from where you can create a new epic. The list of epics includes also epics from all subgroups of the selected group. From your group page: -1. Go to **Epics** -1. Click the **New epic** button at the top right -1. Enter a descriptive title and hit **Create epic** +1. Go to **Epics**. +1. Click **New epic**. +1. Enter a descriptive title and click **Create epic**. -Once created, you will be taken to the view for that newly-created epic where -you can change its title, description, start date, and due date. +You will be taken to the new epic where can edit the following details: -![epic view](img/epic_view.png) +- Title +- Description +- Start date +- Due date +- Labels + +An epic's page contains the following tabs: + +- **Epics and Issues**: epics and issues added to this epic. Child epics, and their issues, are shown in a tree view. + - Click on the > beside a parent epic to reveal the child epics and issues. +- **Roadmap**: a roadmap view of child epics which have start and due dates. + +![epic view](img/epic_view_v12.3.png) ## Adding an issue to an epic -An epic contains a list of issues and an issue can be associated with at most -one epic. When on an epic, you can add its associated issues: +Any issue that belongs to a project in the epic's group, or any of the epic's +subgroups, are eligible to be added. New issues appear at the top of the list of issues in the **Epics and Issues** tab. -1. Click the plus icon (+) under the epic description. -1. Paste the link of the issue (you can hit Spacebar to add more than - one issues at a time). +An epic contains a list of issues and an issue can be associated with at most +one epic. When you add an issue to an epic that is already associated with another epic, +the issue is automatically removed from the previous epic. + +To add an issue to an epic: + +1. Click **Add an issue**. +1. Paste the link of the issue. + - Press Spacebar and repeat this step if there are multiple issues. 1. Click **Add**. -Any issue belonging to a project in the epic's group or any of the epic's -subgroups are eligible to be added. To remove an issue from an epic, click -on the x button in the epic's issue list. +To remove an issue from an epic: -NOTE: **Note:** -When you add an issue or an epic to an epic that's already associated with another epic, -the issue or the epic is automatically removed from the previous epic. +1. Click on the x button in the epic's issue list. +1. Click **Remove** in the **Remove issue** warning message. ## Multi-level child epics > [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/8333) in GitLab Ultimate 11.7. -Much like adding issues to an epic, an epic can have multiple child epics with -the maximum depth being 5. To add a child epic: +Any epic that belongs to a group, or subgroup of the parent epic's group, is +eligible to be added. New child epics appear at the top of the list of epics in the **Epics and Issues** tab. -1. Click the plus icon (+) under the epic description. +When you add a child epic that is already associated with another epic, +that epic is automatically removed from the previous epic. + +An epic can have multiple child epics with +the maximum depth being 5. + +To add a child epic: + +1. Click **Add an epic**. 1. Paste the link of the epic. + - Press Spacebar and repeat this step if there are multiple issues. 1. Click **Add**. -Any epic that belongs to a group or subgroup of the parent epic's group is -eligible to be added. To remove a child epic from a parent epic, -click on the x button in the parent epic's epic list. +To remove a child epic from a parent epic: + +1. Click on the x button in the parent epic's list of epics. +1. Click **Remove** in the **Remove epic** warning message. ## Start date and due date -For each of the dates in the sidebar of an epic, you can choose to either: +To set a **Start date** and **Due date** for an epic, you can choose either of the following: -- Enter a fixed value. -- Inherit a dynamic value called "From milestones". +- **Fixed**: Enter a fixed value. +- **From milestones:** Inherit a dynamic value from the issues added to the epic. -If you select "From milestones" for the start date, GitLab will automatically set the +If you select **From milestones** for the start date, GitLab will automatically set the date to be earliest start date across all milestones that are currently assigned -to the issues that are attached to the epic. Similarly, if you select "From milestones" +to the issues that are added to the epic. Similarly, if you select "From milestones" for the due date, GitLab will set it to be the latest due date across all milestones that are currently assigned to those issues. -These are dynamic dates in that if milestones are re-assigned to the issues, if the -milestone dates change, or if issues are added or removed from the epic, then -the re-calculation will happen immediately to set a new dynamic date. +These are dynamic dates which are recalculated immediately if any of the following occur: -## Roadmap in epics +- Milestones are re-assigned to the issues. +- Milestone dates change. +- Issues are added or removed from the epic. + +## Roadmap > [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/7327) in [GitLab Ultimate](https://about.gitlab.com/pricing/) 11.10. If your epic contains one or more [child epics](#multi-level-child-epics) which -have a [start or due date](#start-date-and-due-date), then you can see a -[roadmap](../roadmap/index.md) view of the child epics under the parent epic itself. +have a [start or due date](#start-date-and-due-date), a +[roadmap](../roadmap/index.md) view of the child epics is listed under the parent epic. -![Child epics roadmap](img/child_epics_roadmap.png) +![Child epics roadmap](img/epic_view_roadmap_v12.3.png) ## Reordering issues and child epics -Drag and drop to reorder issues and child epics. New issues and child epics added to an epic appear at the top of the list. +New issues and child epics are added to the top of their respective lists in the **Epics and Issues** tab. You can reorder the list of issues and the list of child epics. Issues and child epics cannot be intermingled. + +To reorder issues assigned to an epic: + +1. Go to the **Epics and Issues** tab. +1. Drag and drop issues into the desired order. + +To reorder child epics assigned to an epic: + +1. Go to the **Epics and Issues** tab. +1. Drag and drop epics into the desired order. ## Updating epics diff --git a/doc/user/group/roadmap/index.md b/doc/user/group/roadmap/index.md index a72cd990706..bcd79bd04bf 100644 --- a/doc/user/group/roadmap/index.md +++ b/doc/user/group/roadmap/index.md @@ -26,7 +26,7 @@ Epics in the view can be sorted by: Each option contains a button that toggles the sort order between **ascending** and **descending**. The sort option and order will be persisted when browsing Epics, including the [epics list view](../epics/index.md). -Roadmaps can also be [visualized inside an epic](../epics/index.md#roadmap-in-epics). +Roadmaps can also be [visualized inside an epic](../epics/index.md#roadmap). ## Timeline duration diff --git a/doc/user/packages/maven_repository/index.md b/doc/user/packages/maven_repository/index.md index 0c0b44b3cd8..8ed10c09891 100644 --- a/doc/user/packages/maven_repository/index.md +++ b/doc/user/packages/maven_repository/index.md @@ -170,7 +170,7 @@ the `distributionManagement` section: gitlab-maven - https://gitlab.com/api/v4/groups/my-group/-/packages/maven + https://gitlab.com/api/v4/groups/GROUP_ID/-/packages/maven diff --git a/doc/user/project/integrations/project_services.md b/doc/user/project/integrations/project_services.md index 168ec1b15ea..e385ee53636 100644 --- a/doc/user/project/integrations/project_services.md +++ b/doc/user/project/integrations/project_services.md @@ -56,6 +56,16 @@ Click on the service links to see further configuration instructions and details | [Redmine](redmine.md) | Redmine issue tracker | | [YouTrack](youtrack.md) | YouTrack issue tracker | +## Push hooks limit + +> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/31009) in GitLab 12.4. + +If a single push includes changes to more than three branches or tags, services +supported by `push_hooks` and `tag_push_hooks` events won't be executed. + +The number of branches or tags supported can be changed via +[`push_event_hooks_limit` application setting](../../../api/settings.md#list-of-settings-that-can-be-accessed-via-api-calls). + ## Services templates Services templates is a way to set some predefined values in the Service of diff --git a/doc/user/project/integrations/webhooks.md b/doc/user/project/integrations/webhooks.md index 3daf94702e7..d0f538a4b52 100644 --- a/doc/user/project/integrations/webhooks.md +++ b/doc/user/project/integrations/webhooks.md @@ -107,6 +107,9 @@ detailed commit data is expensive. Note that despite only 20 commits being present in the `commits` attribute, the `total_commits_count` attribute will contain the actual total. +Also, if a single push includes changes for more than three (by default, depending on +[`push_event_hooks_limit` setting](../../../api/settings.md#list-of-settings-that-can-be-accessed-via-api-calls)) branches, this hook won't be executed. + **Request header**: ``` @@ -190,6 +193,10 @@ X-Gitlab-Event: Push Hook Triggered when you create (or delete) tags to the repository. +NOTE: **Note:** +If a single push includes changes for more than three (by default, depending on +[`push_event_hooks_limit` setting](../../../api/settings.md#list-of-settings-that-can-be-accessed-via-api-calls)) tags, this hook won't be executed. + **Request header**: ``` diff --git a/lib/api/deployments.rb b/lib/api/deployments.rb index eb45df31ff9..da882547071 100644 --- a/lib/api/deployments.rb +++ b/lib/api/deployments.rb @@ -42,6 +42,88 @@ module API present deployment, with: Entities::Deployment end + + desc 'Creates a new deployment' do + detail 'This feature was introduced in GitLab 12.4' + success Entities::Deployment + end + params do + requires :environment, + type: String, + desc: 'The name of the environment to deploy to' + + requires :sha, + type: String, + desc: 'The SHA of the commit that was deployed' + + requires :ref, + type: String, + desc: 'The name of the branch or tag that was deployed' + + requires :tag, + type: Boolean, + desc: 'A boolean indicating if the deployment ran for a tag' + + requires :status, + type: String, + desc: 'The status of the deployment', + values: %w[running success failed canceled] + end + post ':id/deployments' do + authorize!(:create_deployment, user_project) + authorize!(:create_environment, user_project) + + environment = user_project + .environments + .find_or_create_by_name(params[:environment]) + + unless environment.persisted? + render_validation_error!(deployment) + end + + authorize!(:create_deployment, environment) + + service = ::Deployments::CreateService + .new(environment, current_user, declared_params) + + deployment = service.execute + + if deployment.persisted? + present(deployment, with: Entities::Deployment, current_user: current_user) + else + render_validation_error!(deployment) + end + end + + desc 'Updates an existing deployment' do + detail 'This feature was introduced in GitLab 12.4' + success Entities::Deployment + end + params do + requires :status, + type: String, + desc: 'The new status of the deployment', + values: %w[running success failed canceled] + end + put ':id/deployments/:deployment_id' do + authorize!(:read_deployment, user_project) + + deployment = user_project.deployments.find(params[:deployment_id]) + + authorize!(:update_deployment, deployment) + + if deployment.deployable + forbidden!('Deployments created using GitLab CI can not be updated using the API') + end + + service = ::Deployments::UpdateService.new(deployment, declared_params) + + if service.execute + present(deployment, with: Entities::Deployment, current_user: current_user) + else + render_validation_error!(deployment) + end + end end end end diff --git a/lib/api/members.rb b/lib/api/members.rb index 461ffe71a62..1d4616fed52 100644 --- a/lib/api/members.rb +++ b/lib/api/members.rb @@ -18,6 +18,7 @@ module API end params do optional :query, type: String, desc: 'A query string to search for members' + optional :user_ids, type: Array[Integer], desc: 'Array of user ids to look up for membership' use :pagination end # rubocop: disable CodeReuse/ActiveRecord @@ -26,6 +27,7 @@ module API members = source.members.where.not(user_id: nil).includes(:user) members = members.joins(:user).merge(User.search(params[:query])) if params[:query].present? + members = members.where(user_id: params[:user_ids]) if params[:user_ids].present? members = paginate(members) present members, with: Entities::Member @@ -37,6 +39,7 @@ module API end params do optional :query, type: String, desc: 'A query string to search for members' + optional :user_ids, type: Array[Integer], desc: 'Array of user ids to look up for membership' use :pagination end # rubocop: disable CodeReuse/ActiveRecord @@ -45,6 +48,7 @@ module API members = find_all_members(source_type, source) members = members.includes(:user).references(:user).merge(User.search(params[:query])) if params[:query].present? + members = members.where(user_id: params[:user_ids]) if params[:user_ids].present? members = paginate(members) present members, with: Entities::Member @@ -68,6 +72,23 @@ module API end # rubocop: enable CodeReuse/ActiveRecord + desc 'Gets a member of a group or project, including those who gained membership through ancestor group' do + success Entities::Member + end + params do + requires :user_id, type: Integer, desc: 'The user ID of the member' + end + # rubocop: disable CodeReuse/ActiveRecord + get ":id/members/all/:user_id" do + source = find_source(source_type, params[:id]) + + members = find_all_members(source_type, source) + member = members.find_by!(user_id: params[:user_id]) + + present member, with: Entities::Member + end + # rubocop: enable CodeReuse/ActiveRecord + desc 'Adds a member to a group or project.' do success Entities::Member end diff --git a/lib/api/settings.rb b/lib/api/settings.rb index e4ef507228b..b7a471f14fe 100644 --- a/lib/api/settings.rb +++ b/lib/api/settings.rb @@ -101,6 +101,7 @@ module API optional :polling_interval_multiplier, type: BigDecimal, desc: 'Interval multiplier used by endpoints that perform polling. Set to 0 to disable polling.' optional :project_export_enabled, type: Boolean, desc: 'Enable project export' optional :prometheus_metrics_enabled, type: Boolean, desc: 'Enable Prometheus metrics' + optional :push_event_hooks_limit, type: Integer, desc: "Number of changes (branches or tags) in a single push to determine whether webhooks and services will be fired or not. Webhooks and services won't be submitted if it surpasses that value." optional :recaptcha_enabled, type: Boolean, desc: 'Helps prevent bots from creating accounts' given recaptcha_enabled: ->(val) { val } do requires :recaptcha_site_key, type: String, desc: 'Generate site key at http://www.google.com/recaptcha' diff --git a/lib/gitlab.rb b/lib/gitlab.rb index 0cc9a6a5fb1..ad8e693ccbc 100644 --- a/lib/gitlab.rb +++ b/lib/gitlab.rb @@ -69,14 +69,14 @@ module Gitlab # means that checking the presence of the License class could result in # this method returning `false`, even for an EE installation. # - # The `IS_GITLAB_EE` is always `string` or `nil` + # The `FOSS_ONLY` is always `string` or `nil` # Thus the nil or empty string will result - # in using default value: true + # in using default value: false # # The behavior needs to be synchronised with # config/helpers/is_ee_env.js root.join('ee/app/models/license.rb').exist? && - (ENV['IS_GITLAB_EE'].to_s.empty? || Gitlab::Utils.to_boolean(ENV['IS_GITLAB_EE'])) + !%w[true 1].include?(ENV['FOSS_ONLY'].to_s) end def self.ee diff --git a/lib/gitlab/ci/ansi2json.rb b/lib/gitlab/ci/ansi2json.rb new file mode 100644 index 00000000000..79114d35916 --- /dev/null +++ b/lib/gitlab/ci/ansi2json.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +# Convert terminal stream to JSON +module Gitlab + module Ci + module Ansi2json + def self.convert(ansi, state = nil) + Converter.new.convert(ansi, state) + end + end + end +end diff --git a/lib/gitlab/ci/ansi2json/converter.rb b/lib/gitlab/ci/ansi2json/converter.rb new file mode 100644 index 00000000000..53adaf38b87 --- /dev/null +++ b/lib/gitlab/ci/ansi2json/converter.rb @@ -0,0 +1,131 @@ +# frozen_string_literal: true + +module Gitlab + module Ci + module Ansi2json + class Converter + def convert(stream, new_state) + @lines = [] + @state = State.new(new_state, stream.size) + + append = false + truncated = false + + cur_offset = stream.tell + if cur_offset > @state.offset + @state.offset = cur_offset + truncated = true + else + stream.seek(@state.offset) + append = @state.offset > 0 + end + + start_offset = @state.offset + + @state.set_current_line!(style: Style.new(@state.inherited_style)) + + stream.each_line do |line| + s = StringScanner.new(line) + convert_line(s) + end + + # This must be assigned before flushing the current line + # or the @current_line.offset will advance to the very end + # of the trace. Instead we want @last_line_offset to always + # point to the beginning of last line. + @state.set_last_line_offset + + flush_current_line + + OpenStruct.new( + lines: @lines, + state: @state.encode, + append: append, + truncated: truncated, + offset: start_offset, + size: stream.tell - start_offset, + total: stream.size + ) + end + + private + + def convert_line(scanner) + until scanner.eos? + + if scanner.scan(Gitlab::Regex.build_trace_section_regex) + handle_section(scanner) + elsif scanner.scan(/\e([@-_])(.*?)([@-~])/) + handle_sequence(scanner) + elsif scanner.scan(/\e(([@-_])(.*?)?)?$/) + break + elsif scanner.scan(/ 'black', # not that this is gray in the intense color table + 1 => 'red', + 2 => 'green', + 3 => 'yellow', + 4 => 'blue', + 5 => 'magenta', + 6 => 'cyan', + 7 => 'white' # not that this is gray in the dark (aka default) color table + }.freeze + + STYLE_SWITCHES = { + bold: 0x01, + italic: 0x02, + underline: 0x04, + conceal: 0x08, + cross: 0x10 + }.freeze + + def self.bold?(mask) + mask & STYLE_SWITCHES[:bold] != 0 + end + + def self.matching_formats(mask) + formats = [] + STYLE_SWITCHES.each do |text_format, flag| + formats << "term-#{text_format}" if mask & flag != 0 + end + + formats + end + + def initialize(command, ansi_stack = nil) + @command = command + @ansi_stack = ansi_stack + end + + def changes + if self.respond_to?("on_#{@command}") + send("on_#{@command}", @ansi_stack) # rubocop:disable GitlabSecurity/PublicSend + end + end + + # rubocop:disable Style/SingleLineMethods + def on_0(_) { reset: true } end + + def on_1(_) { enable: STYLE_SWITCHES[:bold] } end + + def on_3(_) { enable: STYLE_SWITCHES[:italic] } end + + def on_4(_) { enable: STYLE_SWITCHES[:underline] } end + + def on_8(_) { enable: STYLE_SWITCHES[:conceal] } end + + def on_9(_) { enable: STYLE_SWITCHES[:cross] } end + + def on_21(_) { disable: STYLE_SWITCHES[:bold] } end + + def on_22(_) { disable: STYLE_SWITCHES[:bold] } end + + def on_23(_) { disable: STYLE_SWITCHES[:italic] } end + + def on_24(_) { disable: STYLE_SWITCHES[:underline] } end + + def on_28(_) { disable: STYLE_SWITCHES[:conceal] } end + + def on_29(_) { disable: STYLE_SWITCHES[:cross] } end + + def on_30(_) { fg: fg_color(0) } end + + def on_31(_) { fg: fg_color(1) } end + + def on_32(_) { fg: fg_color(2) } end + + def on_33(_) { fg: fg_color(3) } end + + def on_34(_) { fg: fg_color(4) } end + + def on_35(_) { fg: fg_color(5) } end + + def on_36(_) { fg: fg_color(6) } end + + def on_37(_) { fg: fg_color(7) } end + + def on_38(stack) { fg: fg_color_256(stack) } end + + def on_39(_) { fg: fg_color(9) } end + + def on_40(_) { bg: bg_color(0) } end + + def on_41(_) { bg: bg_color(1) } end + + def on_42(_) { bg: bg_color(2) } end + + def on_43(_) { bg: bg_color(3) } end + + def on_44(_) { bg: bg_color(4) } end + + def on_45(_) { bg: bg_color(5) } end + + def on_46(_) { bg: bg_color(6) } end + + def on_47(_) { bg: bg_color(7) } end + + def on_48(stack) { bg: bg_color_256(stack) } end + + # TODO: all the x9 never get called? + def on_49(_) { fg: fg_color(9) } end + + def on_90(_) { fg: fg_color(0, 'l') } end + + def on_91(_) { fg: fg_color(1, 'l') } end + + def on_92(_) { fg: fg_color(2, 'l') } end + + def on_93(_) { fg: fg_color(3, 'l') } end + + def on_94(_) { fg: fg_color(4, 'l') } end + + def on_95(_) { fg: fg_color(5, 'l') } end + + def on_96(_) { fg: fg_color(6, 'l') } end + + def on_97(_) { fg: fg_color(7, 'l') } end + + def on_99(_) { fg: fg_color(9, 'l') } end + + def on_100(_) { fg: bg_color(0, 'l') } end + + def on_101(_) { fg: bg_color(1, 'l') } end + + def on_102(_) { fg: bg_color(2, 'l') } end + + def on_103(_) { fg: bg_color(3, 'l') } end + + def on_104(_) { fg: bg_color(4, 'l') } end + + def on_105(_) { fg: bg_color(5, 'l') } end + + def on_106(_) { fg: bg_color(6, 'l') } end + + def on_107(_) { fg: bg_color(7, 'l') } end + + def on_109(_) { fg: bg_color(9, 'l') } end + # rubocop:enable Style/SingleLineMethods + + def fg_color(color_index, prefix = nil) + term_color_class(color_index, ['fg', prefix]) + end + + def fg_color_256(command_stack) + xterm_color_class(command_stack, 'fg') + end + + def bg_color(color_index, prefix = nil) + term_color_class(color_index, ['bg', prefix]) + end + + def bg_color_256(command_stack) + xterm_color_class(command_stack, 'bg') + end + + def term_color_class(color_index, prefix) + color_name = COLOR[color_index] + return if color_name.nil? + + color_class(['term', prefix, color_name]) + end + + def xterm_color_class(command_stack, prefix) + # the 38 and 48 commands have to be followed by "5" and the color index + return unless command_stack.length >= 2 + return unless command_stack[0] == "5" + + command_stack.shift # ignore the "5" command + color_index = command_stack.shift.to_i + + return unless color_index >= 0 + return unless color_index <= 255 + + color_class(["xterm", prefix, color_index]) + end + + def color_class(segments) + [segments].flatten.compact.join('-') + end + end + end + end +end diff --git a/lib/gitlab/ci/ansi2json/state.rb b/lib/gitlab/ci/ansi2json/state.rb new file mode 100644 index 00000000000..db7a9035b8b --- /dev/null +++ b/lib/gitlab/ci/ansi2json/state.rb @@ -0,0 +1,98 @@ +# frozen_string_literal: true + +# In this class we keep track of the state changes that the +# Converter makes as it scans through the log stream. +module Gitlab + module Ci + module Ansi2json + class State + attr_accessor :offset, :current_line, :inherited_style, :open_sections, :last_line_offset + + def initialize(new_state, stream_size) + @offset = 0 + @inherited_style = {} + @open_sections = {} + @stream_size = stream_size + + restore_state!(new_state) + end + + def encode + state = { + offset: @last_line_offset, + style: @current_line.style.to_h, + open_sections: @open_sections + } + Base64.urlsafe_encode64(state.to_json) + end + + def open_section(section, timestamp) + @open_sections[section] = timestamp + + @current_line.add_section(section) + @current_line.set_as_section_header + end + + def close_section(section, timestamp) + return unless section_open?(section) + + duration = timestamp.to_i - @open_sections[section].to_i + @current_line.set_section_duration(duration) + + @open_sections.delete(section) + end + + def section_open?(section) + @open_sections.key?(section) + end + + def set_current_line!(style: nil, advance_offset: 0) + new_line = Line.new( + offset: @offset + advance_offset, + style: style || @current_line.style, + sections: @open_sections.keys + ) + @current_line = new_line + end + + def set_last_line_offset + @last_line_offset = @current_line.offset + end + + def update_style(commands) + @current_line.flush_current_segment! + @current_line.update_style(commands) + end + + private + + def restore_state!(encoded_state) + state = decode_state(encoded_state) + + return unless state + return if state['offset'].to_i > @stream_size + + @offset = state['offset'].to_i if state['offset'] + @open_sections = state['open_sections'] if state['open_sections'] + + if state['style'] + @inherited_style = { + fg: state.dig('style', 'fg'), + bg: state.dig('style', 'bg'), + mask: state.dig('style', 'mask') + } + end + end + + def decode_state(state) + return unless state.present? + + decoded_state = Base64.urlsafe_decode64(state) + return unless decoded_state.present? + + JSON.parse(decoded_state) + end + end + end + end +end diff --git a/lib/gitlab/ci/ansi2json/style.rb b/lib/gitlab/ci/ansi2json/style.rb new file mode 100644 index 00000000000..2739ffdfa5d --- /dev/null +++ b/lib/gitlab/ci/ansi2json/style.rb @@ -0,0 +1,84 @@ +# frozen_string_literal: true + +module Gitlab + module Ci + module Ansi2json + class Style + attr_reader :fg, :bg, :mask + + def initialize(fg: nil, bg: nil, mask: 0) + @fg = fg + @bg = bg + @mask = mask + + update_formats + end + + def update(ansi_commands) + command = ansi_commands.shift + return unless command + + if changes = Gitlab::Ci::Ansi2json::Parser.new(command, ansi_commands).changes + apply_changes(changes) + end + + update(ansi_commands) + end + + def set? + @fg || @bg || @formats.any? + end + + def reset! + @fg = nil + @bg = nil + @mask = 0 + @formats = [] + end + + def ==(other) + self.to_h == other.to_h + end + + def to_s + [@fg, @bg, @formats].flatten.compact.join(' ') + end + + def to_h + { fg: @fg, bg: @bg, mask: @mask } + end + + private + + def apply_changes(changes) + case + when changes[:reset] + reset! + when changes[:fg] + @fg = changes[:fg] + when changes[:bg] + @bg = changes[:bg] + when changes[:enable] + @mask |= changes[:enable] + when changes[:disable] + @mask &= ~changes[:disable] + else + return + end + + update_formats + end + + def update_formats + # Most terminals show bold colored text in the light color variant + # Let's mimic that here + if @fg.present? && Gitlab::Ci::Ansi2json::Parser.bold?(@mask) + @fg = @fg.sub(/fg-([a-z]{2,}+)/, 'fg-l-\1') + end + + @formats = Gitlab::Ci::Ansi2json::Parser.matching_formats(@mask) + end + end + end + end +end diff --git a/lib/gitlab/cycle_analytics/summary/deploy.rb b/lib/gitlab/cycle_analytics/summary/deploy.rb index 0691f3cd131..5ff8d881143 100644 --- a/lib/gitlab/cycle_analytics/summary/deploy.rb +++ b/lib/gitlab/cycle_analytics/summary/deploy.rb @@ -12,7 +12,7 @@ module Gitlab def value strong_memoize(:value) do - query = @project.deployments.where("created_at >= ?", @from) + query = @project.deployments.success.where("created_at >= ?", @from) query = query.where("created_at <= ?", @to) if @to query.count end diff --git a/lib/gitlab/diff/position_collection.rb b/lib/gitlab/diff/position_collection.rb index 59c60f77aaa..2112d347678 100644 --- a/lib/gitlab/diff/position_collection.rb +++ b/lib/gitlab/diff/position_collection.rb @@ -6,13 +6,13 @@ module Gitlab include Enumerable # collection - An array of Gitlab::Diff::Position - def initialize(collection, diff_head_sha) + def initialize(collection, diff_head_sha = nil) @collection = collection @diff_head_sha = diff_head_sha end def each(&block) - @collection.each(&block) + filtered_positions.each(&block) end def concat(positions) @@ -23,9 +23,21 @@ module Gitlab # positions (https://gitlab.com/gitlab-org/gitlab/issues/33271). def unfoldable select do |position| - position.unfoldable? && position.head_sha == @diff_head_sha + position.unfoldable? && valid_head_sha?(position) end end + + private + + def filtered_positions + @collection.select { |item| item.is_a?(Position) } + end + + def valid_head_sha?(position) + return true unless @diff_head_sha + + position.head_sha == @diff_head_sha + end end end end diff --git a/lib/gitlab/graphql/docs/renderer.rb b/lib/gitlab/graphql/docs/renderer.rb index f47a372aa19..41aef64f683 100644 --- a/lib/gitlab/graphql/docs/renderer.rb +++ b/lib/gitlab/graphql/docs/renderer.rb @@ -23,15 +23,12 @@ module Gitlab @parsed_schema = GraphQLDocs::Parser.new(schema, {}).parse end - def render - contents = @layout.render(self) - - write_file(contents) + def contents + # Render and remove an extra trailing new line + @contents ||= @layout.render(self).sub!(/\n(?=\Z)/, '') end - private - - def write_file(contents) + def write filename = File.join(@output_dir, 'index.md') FileUtils.mkdir_p(@output_dir) diff --git a/lib/gitlab/graphql/docs/templates/default.md.haml b/lib/gitlab/graphql/docs/templates/default.md.haml index cc22d43ab4f..33acff38ef4 100644 --- a/lib/gitlab/graphql/docs/templates/default.md.haml +++ b/lib/gitlab/graphql/docs/templates/default.md.haml @@ -20,6 +20,3 @@ - type[:fields].each do |field| = "| `#{field[:name]}` | #{render_field_type(field[:type][:info])} | #{field[:description]} |" \ - - - diff --git a/lib/gitlab/health_checks/checks.rb b/lib/gitlab/health_checks/checks.rb deleted file mode 100644 index c4016c5fffd..00000000000 --- a/lib/gitlab/health_checks/checks.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module HealthChecks - CHECKS = [ - Gitlab::HealthChecks::DbCheck, - Gitlab::HealthChecks::Redis::RedisCheck, - Gitlab::HealthChecks::Redis::CacheCheck, - Gitlab::HealthChecks::Redis::QueuesCheck, - Gitlab::HealthChecks::Redis::SharedStateCheck, - Gitlab::HealthChecks::GitalyCheck - ].freeze - end -end diff --git a/lib/gitlab/health_checks/probes/readiness.rb b/lib/gitlab/health_checks/probes/collection.rb similarity index 87% rename from lib/gitlab/health_checks/probes/readiness.rb rename to lib/gitlab/health_checks/probes/collection.rb index 28abf490ffc..db3ef4834c2 100644 --- a/lib/gitlab/health_checks/probes/readiness.rb +++ b/lib/gitlab/health_checks/probes/collection.rb @@ -3,14 +3,13 @@ module Gitlab module HealthChecks module Probes - class Readiness + class Collection attr_reader :checks # This accepts an array of objects implementing `:readiness` # that returns `::Gitlab::HealthChecks::Result` - def initialize(*additional_checks) - @checks = ::Gitlab::HealthChecks::CHECKS - @checks += additional_checks + def initialize(*checks) + @checks = checks end def execute diff --git a/lib/gitlab/health_checks/probes/liveness.rb b/lib/gitlab/health_checks/probes/liveness.rb deleted file mode 100644 index b4d346e945e..00000000000 --- a/lib/gitlab/health_checks/probes/liveness.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module HealthChecks - module Probes - class Liveness - def execute - Probes::Status.new(200, status: 'ok') - end - end - end - end -end diff --git a/lib/gitlab/metrics/exporter/base_exporter.rb b/lib/gitlab/metrics/exporter/base_exporter.rb index 01d1ec9305e..7111835c85a 100644 --- a/lib/gitlab/metrics/exporter/base_exporter.rb +++ b/lib/gitlab/metrics/exporter/base_exporter.rb @@ -6,7 +6,7 @@ module Gitlab class BaseExporter < Daemon attr_reader :server - attr_accessor :additional_checks + attr_accessor :readiness_checks def enabled? settings.enabled @@ -73,11 +73,11 @@ module Gitlab end def readiness_probe - ::Gitlab::HealthChecks::Probes::Readiness.new(*additional_checks) + ::Gitlab::HealthChecks::Probes::Collection.new(*readiness_checks) end def liveness_probe - ::Gitlab::HealthChecks::Probes::Liveness.new + ::Gitlab::HealthChecks::Probes::Collection.new end def render_probe(probe, req, res) diff --git a/lib/gitlab/metrics/exporter/web_exporter.rb b/lib/gitlab/metrics/exporter/web_exporter.rb index 597ac289193..3940f6fa155 100644 --- a/lib/gitlab/metrics/exporter/web_exporter.rb +++ b/lib/gitlab/metrics/exporter/web_exporter.rb @@ -20,7 +20,7 @@ module Gitlab def initialize super - self.additional_checks = [ + self.readiness_checks = [ WebExporter::ExporterCheck.new(self), Gitlab::HealthChecks::PumaCheck, Gitlab::HealthChecks::UnicornCheck diff --git a/lib/tasks/gitlab/graphql.rake b/lib/tasks/gitlab/graphql.rake index fd8df015903..902f22684ee 100644 --- a/lib/tasks/gitlab/graphql.rake +++ b/lib/tasks/gitlab/graphql.rake @@ -11,10 +11,28 @@ namespace :gitlab do task compile_docs: :environment do renderer = Gitlab::Graphql::Docs::Renderer.new(GitlabSchema.graphql_definition, render_options) - renderer.render + renderer.write puts "Documentation compiled." end + + desc 'GitLab | Check if GraphQL docs are up to date' + task check_docs: :environment do + renderer = Gitlab::Graphql::Docs::Renderer.new(GitlabSchema.graphql_definition, render_options) + + doc = File.read(Rails.root.join(OUTPUT_DIR, 'index.md')) + + if doc == renderer.contents + puts "GraphQL documentation is up to date" + else + puts '#' * 10 + puts '#' + puts '# GraphQL documentation is outdated! Please update it by running `bundle exec rake gitlab:graphql:compile_docs`.' + puts '#' + puts '#' * 10 + abort + end + end end end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 40fb2194a14..01b42eddb28 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -3066,6 +3066,9 @@ msgstr "" msgid "Choose a type..." msgstr "" +msgid "Choose an existing tag, or create a new one" +msgstr "" + msgid "Choose any color." msgstr "" @@ -5409,6 +5412,27 @@ msgstr "" msgid "Deploying to" msgstr "" +msgid "Deployment|API" +msgstr "" + +msgid "Deployment|This deployment was created using the API" +msgstr "" + +msgid "Deployment|canceled" +msgstr "" + +msgid "Deployment|created" +msgstr "" + +msgid "Deployment|failed" +msgstr "" + +msgid "Deployment|running" +msgstr "" + +msgid "Deployment|success" +msgstr "" + msgid "Deprioritize label" msgstr "" @@ -5766,6 +5790,9 @@ msgstr "" msgid "Edit Pipeline Schedule %{id}" msgstr "" +msgid "Edit Release" +msgstr "" + msgid "Edit Snippet" msgstr "" @@ -11172,6 +11199,9 @@ msgstr "" msgid "Number of LOCs per commit" msgstr "" +msgid "Number of changes (branches or tags) in a single push to determine whether webhooks and services will be fired or not. Webhooks and services won't be submitted if it surpasses that value." +msgstr "" + msgid "Number of commits per MR" msgstr "" @@ -13456,12 +13486,27 @@ msgstr "" msgid "Release" msgstr "" +msgid "Release notes" +msgstr "" + +msgid "Release title" +msgstr "" + msgid "Releases" msgstr "" +msgid "Releases are based on Git tags. We recommend naming tags that fit within semantic versioning, for example %{codeStart}v1.0%{codeEnd}, %{codeStart}v2.0-pre%{codeEnd}." +msgstr "" + msgid "Releases mark specific points in a project's development history, communicate information about the type of change, and deliver on prepared, often compiled, versions of the software to be reused elsewhere. Currently, releases can only be created through the API." msgstr "" +msgid "Release|Something went wrong while getting the release details" +msgstr "" + +msgid "Release|Something went wrong while saving the release details" +msgstr "" + msgid "Remember me" msgstr "" @@ -15943,6 +15988,9 @@ msgstr "" msgid "Tag list:" msgstr "" +msgid "Tag name" +msgstr "" + msgid "Tag this commit." msgstr "" @@ -18683,6 +18731,9 @@ msgstr "" msgid "Write milestone description..." msgstr "" +msgid "Write your release notes or drag your files hereā€¦" +msgstr "" + msgid "Wrong extern UID provided. Make sure Auth0 is configured correctly." msgstr "" diff --git a/spec/controllers/projects/deployments_controller_spec.rb b/spec/controllers/projects/deployments_controller_spec.rb index b9ee69a617b..66112c95742 100644 --- a/spec/controllers/projects/deployments_controller_spec.rb +++ b/spec/controllers/projects/deployments_controller_spec.rb @@ -75,15 +75,13 @@ describe Projects::DeploymentsController do } end - before do + it 'returns a metrics JSON document' do expect_next_instance_of(DeploymentMetrics) do |deployment_metrics| allow(deployment_metrics).to receive(:has_metrics?).and_return(true) expect(deployment_metrics).to receive(:metrics).and_return(empty_metrics) end - end - it 'returns a metrics JSON document' do get :metrics, params: deployment_params(id: deployment.to_param) expect(response).to be_ok @@ -91,6 +89,19 @@ describe Projects::DeploymentsController do expect(json_response['metrics']).to eq({}) expect(json_response['last_update']).to eq(42) end + + it 'returns a 404 if the deployment failed' do + failed_deployment = create( + :deployment, + :failed, + project: project, + environment: environment + ) + + get :metrics, params: deployment_params(id: failed_deployment.to_param) + + expect(response).to have_gitlab_http_status(404) + end end end end diff --git a/spec/controllers/projects/merge_requests/diffs_controller_spec.rb b/spec/controllers/projects/merge_requests/diffs_controller_spec.rb index e677e836145..5c02e8d6461 100644 --- a/spec/controllers/projects/merge_requests/diffs_controller_spec.rb +++ b/spec/controllers/projects/merge_requests/diffs_controller_spec.rb @@ -82,9 +82,9 @@ describe Projects::MergeRequests::DiffsController do end end - context 'when note has no position' do + context 'when note is a legacy diff note' do before do - create(:legacy_diff_note_on_merge_request, project: project, noteable: merge_request, position: nil) + create(:legacy_diff_note_on_merge_request, project: project, noteable: merge_request) end it 'serializes merge request diff collection' do diff --git a/spec/features/projects/environments/environment_spec.rb b/spec/features/projects/environments/environment_spec.rb index 25823b75d18..dd690699ff6 100644 --- a/spec/features/projects/environments/environment_spec.rb +++ b/spec/features/projects/environments/environment_spec.rb @@ -66,8 +66,8 @@ describe 'Environment' do create(:deployment, :running, environment: environment, deployable: build) end - it 'does not show deployments' do - expect(page).to have_content('You don\'t have any deployments right now.') + it 'does show deployments' do + expect(page).to have_link("#{build.name} (##{build.id})") end end @@ -79,8 +79,8 @@ describe 'Environment' do create(:deployment, :failed, environment: environment, deployable: build) end - it 'does not show deployments' do - expect(page).to have_content('You don\'t have any deployments right now.') + it 'does show deployments' do + expect(page).to have_link("#{build.name} (##{build.id})") end end @@ -175,7 +175,7 @@ describe 'Environment' do # # In EE we have to stub EE::Environment since it overwrites # the "terminals" method. - allow_any_instance_of(defined?(EE) ? EE::Environment : Environment) + allow_any_instance_of(Gitlab.ee? ? EE::Environment : Environment) .to receive(:terminals) { nil } visit terminal_project_environment_path(project, environment) diff --git a/spec/fixtures/api/schemas/deployment.json b/spec/fixtures/api/schemas/deployment.json index b1e3c000ddf..0cfeadfe548 100644 --- a/spec/fixtures/api/schemas/deployment.json +++ b/spec/fixtures/api/schemas/deployment.json @@ -61,7 +61,7 @@ "type": "array", "items": { "$ref": "job/job.json" } }, - "status": { "type": "string" } + "status": { "type": "string" } }, "additionalProperties": false } diff --git a/spec/frontend/releases/detail/components/app_spec.js b/spec/frontend/releases/detail/components/app_spec.js new file mode 100644 index 00000000000..f8eb33a69a8 --- /dev/null +++ b/spec/frontend/releases/detail/components/app_spec.js @@ -0,0 +1,70 @@ +import Vuex from 'vuex'; +import { mount } from '@vue/test-utils'; +import ReleaseDetailApp from '~/releases/detail/components/app'; +import { release } from '../../mock_data'; +import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; + +describe('Release detail component', () => { + let wrapper; + let releaseClone; + let actions; + + beforeEach(() => { + gon.api_version = 'v4'; + + releaseClone = JSON.parse(JSON.stringify(convertObjectPropsToCamelCase(release))); + + const state = { + release: releaseClone, + markdownDocsPath: 'path/to/markdown/docs', + }; + + actions = { + fetchRelease: jest.fn(), + updateRelease: jest.fn(), + navigateToReleasesPage: jest.fn(), + }; + + const store = new Vuex.Store({ actions, state }); + + wrapper = mount(ReleaseDetailApp, { store }); + + return wrapper.vm.$nextTick(); + }); + + it('calls fetchRelease when the component is created', () => { + expect(actions.fetchRelease).toHaveBeenCalledTimes(1); + }); + + it('renders the description text at the top of the page', () => { + expect(wrapper.find('.js-subtitle-text').text()).toBe( + 'Releases are based on Git tags. We recommend naming tags that fit within semantic versioning, for example v1.0, v2.0-pre.', + ); + }); + + it('renders the correct tag name in the "Tag name" field', () => { + expect(wrapper.find('#git-ref').element.value).toBe(releaseClone.tagName); + }); + + it('renders the correct release title in the "Release title" field', () => { + expect(wrapper.find('#release-title').element.value).toBe(releaseClone.name); + }); + + it('renders the release notes in the "Release notes" textarea', () => { + expect(wrapper.find('#release-notes').element.value).toBe(releaseClone.description); + }); + + it('renders the "Save changes" button as type="submit"', () => { + expect(wrapper.find('.js-submit-button').attributes('type')).toBe('submit'); + }); + + it('calls updateRelease when the form is submitted', () => { + wrapper.find('form').trigger('submit'); + expect(actions.updateRelease).toHaveBeenCalledTimes(1); + }); + + it('calls navigateToReleasesPage when the "Cancel" button is clicked', () => { + wrapper.find('.js-cancel-button').vm.$emit('click'); + expect(actions.navigateToReleasesPage).toHaveBeenCalledTimes(1); + }); +}); diff --git a/spec/frontend/releases/detail/store/actions_spec.js b/spec/frontend/releases/detail/store/actions_spec.js new file mode 100644 index 00000000000..f1c7f3c1048 --- /dev/null +++ b/spec/frontend/releases/detail/store/actions_spec.js @@ -0,0 +1,217 @@ +import axios from 'axios'; +import MockAdapter from 'axios-mock-adapter'; +import * as actions from '~/releases/detail/store/actions'; +import testAction from 'helpers/vuex_action_helper'; +import * as types from '~/releases/detail/store/mutation_types'; +import { release } from '../../mock_data'; +import state from '~/releases/detail/store/state'; +import createFlash from '~/flash'; +import { redirectTo } from '~/lib/utils/url_utility'; +import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; + +jest.mock('~/flash', () => jest.fn()); + +jest.mock('~/lib/utils/url_utility', () => ({ + redirectTo: jest.fn(), + joinPaths: jest.requireActual('~/lib/utils/url_utility').joinPaths, +})); + +describe('Release detail actions', () => { + let stateClone; + let releaseClone; + let mock; + let error; + + beforeEach(() => { + stateClone = state(); + releaseClone = JSON.parse(JSON.stringify(release)); + mock = new MockAdapter(axios); + gon.api_version = 'v4'; + error = { message: 'An error occurred' }; + createFlash.mockClear(); + }); + + afterEach(() => { + mock.restore(); + }); + + describe('setInitialState', () => { + it(`commits ${types.SET_INITIAL_STATE} with the provided object`, () => { + const initialState = {}; + + return testAction(actions.setInitialState, initialState, stateClone, [ + { type: types.SET_INITIAL_STATE, payload: initialState }, + ]); + }); + }); + + describe('requestRelease', () => { + it(`commits ${types.REQUEST_RELEASE}`, () => + testAction(actions.requestRelease, undefined, stateClone, [{ type: types.REQUEST_RELEASE }])); + }); + + describe('receiveReleaseSuccess', () => { + it(`commits ${types.RECEIVE_RELEASE_SUCCESS}`, () => + testAction(actions.receiveReleaseSuccess, releaseClone, stateClone, [ + { type: types.RECEIVE_RELEASE_SUCCESS, payload: releaseClone }, + ])); + }); + + describe('receiveReleaseError', () => { + it(`commits ${types.RECEIVE_RELEASE_ERROR}`, () => + testAction(actions.receiveReleaseError, error, stateClone, [ + { type: types.RECEIVE_RELEASE_ERROR, payload: error }, + ])); + + it('shows a flash with an error message', () => { + actions.receiveReleaseError({ commit: jest.fn() }, error); + + expect(createFlash).toHaveBeenCalledTimes(1); + expect(createFlash).toHaveBeenCalledWith( + 'Something went wrong while getting the release details', + ); + }); + }); + + describe('fetchRelease', () => { + let getReleaseUrl; + + beforeEach(() => { + stateClone.projectId = '18'; + stateClone.tagName = 'v1.3'; + getReleaseUrl = `/api/v4/projects/${stateClone.projectId}/releases/${stateClone.tagName}`; + }); + + it(`dispatches requestRelease and receiveReleaseSuccess with the camel-case'd release object`, () => { + mock.onGet(getReleaseUrl).replyOnce(200, releaseClone); + + return testAction( + actions.fetchRelease, + undefined, + stateClone, + [], + [ + { type: 'requestRelease' }, + { + type: 'receiveReleaseSuccess', + payload: convertObjectPropsToCamelCase(releaseClone, { deep: true }), + }, + ], + ); + }); + + it(`dispatches requestRelease and receiveReleaseError with an error object`, () => { + mock.onGet(getReleaseUrl).replyOnce(500); + + return testAction( + actions.fetchRelease, + undefined, + stateClone, + [], + [{ type: 'requestRelease' }, { type: 'receiveReleaseError', payload: expect.anything() }], + ); + }); + }); + + describe('updateReleaseTitle', () => { + it(`commits ${types.UPDATE_RELEASE_TITLE} with the updated release title`, () => { + const newTitle = 'The new release title'; + return testAction(actions.updateReleaseTitle, newTitle, stateClone, [ + { type: types.UPDATE_RELEASE_TITLE, payload: newTitle }, + ]); + }); + }); + + describe('updateReleaseNotes', () => { + it(`commits ${types.UPDATE_RELEASE_NOTES} with the updated release notes`, () => { + const newReleaseNotes = 'The new release notes'; + return testAction(actions.updateReleaseNotes, newReleaseNotes, stateClone, [ + { type: types.UPDATE_RELEASE_NOTES, payload: newReleaseNotes }, + ]); + }); + }); + + describe('requestUpdateRelease', () => { + it(`commits ${types.REQUEST_UPDATE_RELEASE}`, () => + testAction(actions.requestUpdateRelease, undefined, stateClone, [ + { type: types.REQUEST_UPDATE_RELEASE }, + ])); + }); + + describe('receiveUpdateReleaseSuccess', () => { + it(`commits ${types.RECEIVE_UPDATE_RELEASE_SUCCESS}`, () => + testAction( + actions.receiveUpdateReleaseSuccess, + undefined, + stateClone, + [{ type: types.RECEIVE_UPDATE_RELEASE_SUCCESS }], + [{ type: 'navigateToReleasesPage' }], + )); + }); + + describe('receiveUpdateReleaseError', () => { + it(`commits ${types.RECEIVE_UPDATE_RELEASE_ERROR}`, () => + testAction(actions.receiveUpdateReleaseError, error, stateClone, [ + { type: types.RECEIVE_UPDATE_RELEASE_ERROR, payload: error }, + ])); + + it('shows a flash with an error message', () => { + actions.receiveUpdateReleaseError({ commit: jest.fn() }, error); + + expect(createFlash).toHaveBeenCalledTimes(1); + expect(createFlash).toHaveBeenCalledWith( + 'Something went wrong while saving the release details', + ); + }); + }); + + describe('updateRelease', () => { + let getReleaseUrl; + + beforeEach(() => { + stateClone.release = releaseClone; + stateClone.projectId = '18'; + stateClone.tagName = 'v1.3'; + getReleaseUrl = `/api/v4/projects/${stateClone.projectId}/releases/${stateClone.tagName}`; + }); + + it(`dispatches requestUpdateRelease and receiveUpdateReleaseSuccess`, () => { + mock.onPut(getReleaseUrl).replyOnce(200); + + return testAction( + actions.updateRelease, + undefined, + stateClone, + [], + [{ type: 'requestUpdateRelease' }, { type: 'receiveUpdateReleaseSuccess' }], + ); + }); + + it(`dispatches requestUpdateRelease and receiveUpdateReleaseError with an error object`, () => { + mock.onPut(getReleaseUrl).replyOnce(500); + + return testAction( + actions.updateRelease, + undefined, + stateClone, + [], + [ + { type: 'requestUpdateRelease' }, + { type: 'receiveUpdateReleaseError', payload: expect.anything() }, + ], + ); + }); + }); + + describe('navigateToReleasesPage', () => { + it(`calls redirectTo() with the URL to the releases page`, () => { + const releasesPagePath = 'path/to/releases/page'; + stateClone.releasesPagePath = releasesPagePath; + + actions.navigateToReleasesPage({ state: stateClone }); + + expect(redirectTo).toHaveBeenCalledTimes(1); + expect(redirectTo).toHaveBeenCalledWith(releasesPagePath); + }); + }); +}); diff --git a/spec/frontend/releases/detail/store/mutations_spec.js b/spec/frontend/releases/detail/store/mutations_spec.js new file mode 100644 index 00000000000..106a40c812e --- /dev/null +++ b/spec/frontend/releases/detail/store/mutations_spec.js @@ -0,0 +1,119 @@ +/* eslint-disable jest/valid-describe */ +/* + * ESLint disable directive ā†‘ can be removed once + * https://github.com/jest-community/eslint-plugin-jest/issues/203 + * is resolved + */ + +import state from '~/releases/detail/store/state'; +import mutations from '~/releases/detail/store/mutations'; +import * as types from '~/releases/detail/store/mutation_types'; +import { release } from '../../mock_data'; + +describe('Release detail mutations', () => { + let stateClone; + let releaseClone; + + beforeEach(() => { + stateClone = state(); + releaseClone = JSON.parse(JSON.stringify(release)); + }); + + describe(types.SET_INITIAL_STATE, () => { + it('populates the state with initial values', () => { + const initialState = { + projectId: '18', + tagName: 'v1.3', + releasesPagePath: 'path/to/releases/page', + markdownDocsPath: 'path/to/markdown/docs', + markdownPreviewPath: 'path/to/markdown/preview', + }; + + mutations[types.SET_INITIAL_STATE](stateClone, initialState); + + expect(stateClone).toEqual(expect.objectContaining(initialState)); + }); + }); + + describe(types.REQUEST_RELEASE, () => { + it('set state.isFetchingRelease to true', () => { + mutations[types.REQUEST_RELEASE](stateClone); + + expect(stateClone.isFetchingRelease).toEqual(true); + }); + }); + + describe(types.RECEIVE_RELEASE_SUCCESS, () => { + it('handles a successful response from the server', () => { + mutations[types.RECEIVE_RELEASE_SUCCESS](stateClone, releaseClone); + + expect(stateClone.fetchError).toEqual(undefined); + + expect(stateClone.isFetchingRelease).toEqual(false); + + expect(stateClone.release).toEqual(releaseClone); + }); + }); + + describe(types.RECEIVE_RELEASE_ERROR, () => { + it('handles an unsuccessful response from the server', () => { + const error = { message: 'An error occurred!' }; + mutations[types.RECEIVE_RELEASE_ERROR](stateClone, error); + + expect(stateClone.isFetchingRelease).toEqual(false); + + expect(stateClone.release).toBeUndefined(); + + expect(stateClone.fetchError).toEqual(error); + }); + }); + + describe(types.UPDATE_RELEASE_TITLE, () => { + it("updates the release's title", () => { + stateClone.release = releaseClone; + const newTitle = 'The new release title'; + mutations[types.UPDATE_RELEASE_TITLE](stateClone, newTitle); + + expect(stateClone.release.name).toEqual(newTitle); + }); + }); + + describe(types.UPDATE_RELEASE_NOTES, () => { + it("updates the release's notes", () => { + stateClone.release = releaseClone; + const newNotes = 'The new release notes'; + mutations[types.UPDATE_RELEASE_NOTES](stateClone, newNotes); + + expect(stateClone.release.description).toEqual(newNotes); + }); + }); + + describe(types.REQUEST_UPDATE_RELEASE, () => { + it('set state.isUpdatingRelease to true', () => { + mutations[types.REQUEST_UPDATE_RELEASE](stateClone); + + expect(stateClone.isUpdatingRelease).toEqual(true); + }); + }); + + describe(types.RECEIVE_UPDATE_RELEASE_SUCCESS, () => { + it('handles a successful response from the server', () => { + mutations[types.RECEIVE_UPDATE_RELEASE_SUCCESS](stateClone, releaseClone); + + expect(stateClone.updateError).toEqual(undefined); + + expect(stateClone.isUpdatingRelease).toEqual(false); + }); + }); + + describe(types.RECEIVE_UPDATE_RELEASE_ERROR, () => { + it('handles an unsuccessful response from the server', () => { + const error = { message: 'An error occurred!' }; + mutations[types.RECEIVE_UPDATE_RELEASE_ERROR](stateClone, error); + + expect(stateClone.isUpdatingRelease).toEqual(false); + + expect(stateClone.updateError).toEqual(error); + }); + }); +}); diff --git a/spec/helpers/environment_helper_spec.rb b/spec/helpers/environment_helper_spec.rb new file mode 100644 index 00000000000..53953d72b06 --- /dev/null +++ b/spec/helpers/environment_helper_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe EnvironmentHelper do + describe '#render_deployment_status' do + context 'when using a manual deployment' do + it 'renders a span tag' do + deploy = build(:deployment, deployable: nil, status: :success) + html = helper.render_deployment_status(deploy) + + expect(html).to have_css('span.ci-status.ci-success') + end + end + + context 'when using a deployment from a build' do + it 'renders a link tag' do + deploy = build(:deployment, status: :success) + html = helper.render_deployment_status(deploy) + + expect(html).to have_css('a.ci-status.ci-success') + end + end + end +end diff --git a/spec/javascripts/test_bundle.js b/spec/javascripts/test_bundle.js index 191df3cc709..cb6b158f01c 100644 --- a/spec/javascripts/test_bundle.js +++ b/spec/javascripts/test_bundle.js @@ -70,7 +70,7 @@ window.gl = window.gl || {}; window.gl.TEST_HOST = TEST_HOST; window.gon = window.gon || {}; window.gon.test_env = true; -window.gon.ee = process.env.IS_GITLAB_EE; +window.gon.ee = process.env.IS_EE; gon.relative_url_root = ''; let hasUnhandledPromiseRejections = false; @@ -118,7 +118,7 @@ const axiosDefaultAdapter = getDefaultAdapter(); // render all of our tests const testContexts = [require.context('spec', true, /_spec$/)]; -if (process.env.IS_GITLAB_EE) { +if (process.env.IS_EE) { testContexts.push(require.context('ee_spec', true, /_spec$/)); } @@ -207,7 +207,7 @@ if (process.env.BABEL_ENV === 'coverage') { describe('Uncovered files', function() { const sourceFilesContexts = [require.context('~', true, /\.(js|vue)$/)]; - if (process.env.IS_GITLAB_EE) { + if (process.env.IS_EE) { sourceFilesContexts.push(require.context('ee', true, /\.(js|vue)$/)); } diff --git a/spec/lib/gitlab/ci/ansi2json/line_spec.rb b/spec/lib/gitlab/ci/ansi2json/line_spec.rb new file mode 100644 index 00000000000..4b5c3f9489e --- /dev/null +++ b/spec/lib/gitlab/ci/ansi2json/line_spec.rb @@ -0,0 +1,168 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::Ci::Ansi2json::Line do + let(:offset) { 0 } + let(:style) { Gitlab::Ci::Ansi2json::Style.new } + + subject { described_class.new(offset: offset, style: style) } + + describe '#<<' do + it 'appends new data to the current segment' do + expect { subject << 'test 1' }.to change { subject.current_segment.text } + expect(subject.current_segment.text).to eq('test 1') + + expect { subject << ', test 2' }.to change { subject.current_segment.text } + expect(subject.current_segment.text).to eq('test 1, test 2') + end + end + + describe '#style' do + context 'when style is passed to the initializer' do + let(:style) { double } + + it 'returns the same style' do + expect(subject.style).to eq(style) + end + end + + context 'when style is not passed to the initializer' do + it 'returns the default style' do + expect(subject.style.set?).to be_falsey + end + end + end + + describe '#update_style' do + let(:expected_style) do + Gitlab::Ci::Ansi2json::Style.new( + fg: 'term-fg-l-yellow', + bg: 'term-bg-blue', + mask: 1) + end + + it 'sets the style' do + subject.update_style(%w[1 33 44]) + + expect(subject.style).to eq(expected_style) + end + end + + describe '#add_section' do + it 'appends a new section to the list' do + subject.add_section('section_1') + subject.add_section('section_2') + + expect(subject.sections).to eq(%w[section_1 section_2]) + end + end + + describe '#set_as_section_header' do + it 'change the section_header to true' do + expect { subject.set_as_section_header } + .to change { subject.section_header } + .to be_truthy + end + end + + describe '#set_section_duration' do + it 'sets and formats the section_duration' do + subject.set_section_duration(75) + + expect(subject.section_duration).to eq('01:15') + end + end + + describe '#flush_current_segment!' do + context 'when current segment is not empty' do + before do + subject << 'some data' + end + + it 'adds the segment to the list' do + expect { subject.flush_current_segment! }.to change { subject.segments.count }.by(1) + + expect(subject.segments.map { |s| s[:text] }).to eq(['some data']) + end + + it 'updates the current segment pointer propagating the style' do + previous_segment = subject.current_segment + + subject.flush_current_segment! + + expect(subject.current_segment).not_to eq(previous_segment) + expect(subject.current_segment.style).to eq(previous_segment.style) + end + end + + context 'when current segment is empty' do + it 'does not add any segments to the list' do + expect { subject.flush_current_segment! }.not_to change { subject.segments.count } + end + + it 'does not change the current segment' do + expect { subject.flush_current_segment! }.not_to change { subject.current_segment } + end + end + end + + describe '#to_h' do + before do + subject << 'some data' + subject.update_style(['1']) + end + + context 'when sections are present' do + before do + subject.add_section('section_1') + subject.add_section('section_2') + end + + context 'when section header is set' do + before do + subject.set_as_section_header + end + + it 'serializes the attributes set' do + result = { + offset: 0, + content: [{ text: 'some data', style: 'term-bold' }], + section: 'section_2', + section_header: true + } + + expect(subject.to_h).to eq(result) + end + end + + context 'when section duration is set' do + before do + subject.set_section_duration(75) + end + + it 'serializes the attributes set' do + result = { + offset: 0, + content: [{ text: 'some data', style: 'term-bold' }], + section: 'section_2', + section_duration: '01:15' + } + + expect(subject.to_h).to eq(result) + end + end + end + + context 'when there are no sections' do + it 'serializes the attributes set' do + result = { + offset: 0, + content: [{ text: 'some data', style: 'term-bold' }] + } + + expect(subject.to_h).to eq(result) + end + end + end +end diff --git a/spec/lib/gitlab/ci/ansi2json/parser_spec.rb b/spec/lib/gitlab/ci/ansi2json/parser_spec.rb new file mode 100644 index 00000000000..e161e74c1ff --- /dev/null +++ b/spec/lib/gitlab/ci/ansi2json/parser_spec.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +require 'spec_helper' + +# The rest of the specs for this class are covered in style_spec.rb +describe Gitlab::Ci::Ansi2json::Parser do + subject { described_class } + + describe 'bold?' do + it 'returns true if style mask matches bold format' do + expect(subject.bold?(0x01)).to be_truthy + end + + it 'returns false if style mask does not match bold format' do + expect(subject.bold?(0x02)).to be_falsey + end + end + + describe 'matching_formats' do + it 'returns matching formats given a style mask' do + expect(subject.matching_formats(0x01)).to eq(%w[term-bold]) + expect(subject.matching_formats(0x03)).to eq(%w[term-bold term-italic]) + expect(subject.matching_formats(0x07)).to eq(%w[term-bold term-italic term-underline]) + end + + it 'returns an empty array if no formats match the style mask' do + expect(subject.matching_formats(0)).to eq([]) + end + end +end diff --git a/spec/lib/gitlab/ci/ansi2json/style_spec.rb b/spec/lib/gitlab/ci/ansi2json/style_spec.rb new file mode 100644 index 00000000000..88a0ca35859 --- /dev/null +++ b/spec/lib/gitlab/ci/ansi2json/style_spec.rb @@ -0,0 +1,166 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::Ci::Ansi2json::Style do + describe '#set?' do + subject { described_class.new(params).set? } + + context 'when fg color is set' do + let(:params) { { fg: 'term-fg-black' } } + + it { is_expected.to be_truthy } + end + + context 'when bg color is set' do + let(:params) { { bg: 'term-bg-black' } } + + it { is_expected.to be_truthy } + end + + context 'when mask is set' do + let(:params) { { mask: 0x01 } } + + it { is_expected.to be_truthy } + end + + context 'nothing is set' do + let(:params) { {} } + + it { is_expected.to be_falsey } + end + end + + describe '#reset!' do + let(:style) { described_class.new(fg: 'term-fg-black', bg: 'term-bg-yellow', mask: 0x01) } + + it 'set the style params to default' do + style.reset! + + expect(style.fg).to be_nil + expect(style.bg).to be_nil + expect(style.mask).to be_zero + end + end + + describe 'update formats to mimic terminals' do + subject { described_class.new(params) } + + context 'when fg color present' do + let(:params) { { fg: 'term-fg-black', mask: mask } } + + context 'when mask is set to bold' do + let(:mask) { 0x01 } + + it 'changes the fg color to a lighter version' do + expect(subject.fg).to eq('term-fg-l-black') + end + end + + context 'when mask set to another format' do + let(:mask) { 0x02 } + + it 'does not change the fg color' do + expect(subject.fg).to eq('term-fg-black') + end + end + + context 'when mask is not set' do + let(:mask) { 0 } + + it 'does not change the fg color' do + expect(subject.fg).to eq('term-fg-black') + end + end + end + end + + describe '#update' do + where(:initial_state, :ansi_commands, :result, :description) do + [ + # add format + [[], %w[0], '', 'does not set any style'], + [[], %w[1], 'term-bold', 'enables format bold'], + [[], %w[3], 'term-italic', 'enables format italic'], + [[], %w[4], 'term-underline', 'enables format underline'], + [[], %w[8], 'term-conceal', 'enables format conceal'], + [[], %w[9], 'term-cross', 'enables format cross'], + # remove format + [%w[1], %w[21], '', 'disables format bold'], + [%w[1 3], %w[21], 'term-italic', 'disables format bold and leaves italic'], + [%w[1], %w[22], '', 'disables format bold using command 22'], + [%w[1 3], %w[22], 'term-italic', 'disables format bold and leaves italic using command 22'], + [%w[3], %w[23], '', 'disables format italic'], + [%w[1 3], %w[23], 'term-bold', 'disables format italic and leaves bold'], + [%w[4], %w[24], '', 'disables format underline'], + [%w[1 4], %w[24], 'term-bold', 'disables format underline and leaves bold'], + [%w[8], %w[28], '', 'disables format conceal'], + [%w[1 8], %w[28], 'term-bold', 'disables format conceal and leaves bold'], + [%w[9], %w[29], '', 'disables format cross'], + [%w[1 9], %w[29], 'term-bold', 'disables format cross and leaves bold'], + # set fg color + [[], %w[30], 'term-fg-black', 'sets fg color black'], + [[], %w[31], 'term-fg-red', 'sets fg color red'], + [[], %w[32], 'term-fg-green', 'sets fg color green'], + [[], %w[33], 'term-fg-yellow', 'sets fg color yellow'], + [[], %w[34], 'term-fg-blue', 'sets fg color blue'], + [[], %w[35], 'term-fg-magenta', 'sets fg color magenta'], + [[], %w[36], 'term-fg-cyan', 'sets fg color cyan'], + [[], %w[37], 'term-fg-white', 'sets fg color white'], + # sets xterm fg color + [[], %w[38 5 1], 'xterm-fg-1', 'sets xterm fg color 1'], + [[], %w[38 5 2], 'xterm-fg-2', 'sets xterm fg color 2'], + [[], %w[38 1], 'term-bold', 'ignores 38 command if not followed by 5 and sets format bold'], + # set bg color + [[], %w[40], 'term-bg-black', 'sets bg color black'], + [[], %w[41], 'term-bg-red', 'sets bg color red'], + [[], %w[42], 'term-bg-green', 'sets bg color green'], + [[], %w[43], 'term-bg-yellow', 'sets bg color yellow'], + [[], %w[44], 'term-bg-blue', 'sets bg color blue'], + [[], %w[45], 'term-bg-magenta', 'sets bg color magenta'], + [[], %w[46], 'term-bg-cyan', 'sets bg color cyan'], + [[], %w[47], 'term-bg-white', 'sets bg color white'], + # set xterm bg color + [[], %w[48 5 1], 'xterm-bg-1', 'sets xterm bg color 1'], + [[], %w[48 5 2], 'xterm-bg-2', 'sets xterm bg color 2'], + [[], %w[48 1], 'term-bold', 'ignores 48 command if not followed by 5 and sets format bold'], + # set light fg color + [[], %w[90], 'term-fg-l-black', 'sets fg color light black'], + [[], %w[91], 'term-fg-l-red', 'sets fg color light red'], + [[], %w[92], 'term-fg-l-green', 'sets fg color light green'], + [[], %w[93], 'term-fg-l-yellow', 'sets fg color light yellow'], + [[], %w[94], 'term-fg-l-blue', 'sets fg color light blue'], + [[], %w[95], 'term-fg-l-magenta', 'sets fg color light magenta'], + [[], %w[96], 'term-fg-l-cyan', 'sets fg color light cyan'], + [[], %w[97], 'term-fg-l-white', 'sets fg color light white'], + # set light bg color + [[], %w[100], 'term-bg-l-black', 'sets bg color light black'], + [[], %w[101], 'term-bg-l-red', 'sets bg color light red'], + [[], %w[102], 'term-bg-l-green', 'sets bg color light green'], + [[], %w[103], 'term-bg-l-yellow', 'sets bg color light yellow'], + [[], %w[104], 'term-bg-l-blue', 'sets bg color light blue'], + [[], %w[105], 'term-bg-l-magenta', 'sets bg color light magenta'], + [[], %w[106], 'term-bg-l-cyan', 'sets bg color light cyan'], + [[], %w[107], 'term-bg-l-white', 'sets bg color light white'], + # reset + [%w[1], %w[0], '', 'resets style from format bold'], + [%w[1 3], %w[0], '', 'resets style from format bold and italic'], + [%w[1 3 term-fg-l-red term-bg-yellow], %w[0], '', 'resets all formats and colors'], + # misc + [[], %w[1 30 42 3], 'term-fg-l-black term-bg-green term-bold term-italic', 'adds fg color, bg color and formats from no style'], + [%w[3 31], %w[23 1 43], 'term-fg-l-red term-bg-yellow term-bold', 'replaces format italic with bold and adds a yellow background'] + ] + end + + with_them do + it 'change the style' do + style = described_class.new + style.update(initial_state) + + style.update(ansi_commands) + + expect(style.to_s).to eq(result) + end + end + end +end diff --git a/spec/lib/gitlab/ci/ansi2json_spec.rb b/spec/lib/gitlab/ci/ansi2json_spec.rb new file mode 100644 index 00000000000..3c6bc46436b --- /dev/null +++ b/spec/lib/gitlab/ci/ansi2json_spec.rb @@ -0,0 +1,544 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::Ci::Ansi2json do + subject { described_class } + + describe 'lines' do + it 'prints non-ansi as-is' do + expect(convert_json('Hello')).to eq([ + { offset: 0, content: [{ text: 'Hello' }] } + ]) + end + + it 'adds new line in a separate element' do + expect(convert_json("Hello\nworld")).to eq([ + { offset: 0, content: [{ text: 'Hello' }] }, + { offset: 6, content: [{ text: 'world' }] } + ]) + end + + it 'recognizes color changing ANSI sequences' do + expect(convert_json("\e[31mHello\e[0m")).to eq([ + { offset: 0, content: [{ text: 'Hello', style: 'term-fg-red' }] } + ]) + end + + it 'recognizes color changing ANSI sequences across multiple lines' do + expect(convert_json("\e[31mHello\nWorld\e[0m")).to eq([ + { offset: 0, content: [{ text: 'Hello', style: 'term-fg-red' }] }, + { offset: 11, content: [{ text: 'World', style: 'term-fg-red' }] } + ]) + end + + it 'recognizes background and foreground colors' do + expect(convert_json("\e[31;44mHello")).to eq([ + { offset: 0, content: [{ text: 'Hello', style: 'term-fg-red term-bg-blue' }] } + ]) + end + + it 'recognizes style changes within the same line' do + expect(convert_json("\e[31;44mHello\e[0m world")).to eq([ + { offset: 0, content: [ + { text: 'Hello', style: 'term-fg-red term-bg-blue' }, + { text: ' world' } + ] } + ]) + end + + context 'with section markers' do + let(:section_name) { 'prepare-script' } + let(:section_duration) { 63.seconds } + let(:section_start_time) { Time.new(2019, 9, 17).utc } + let(:section_end_time) { section_start_time + section_duration } + let(:section_start) { "section_start:#{section_start_time.to_i}:#{section_name}\r\033[0K"} + let(:section_end) { "section_end:#{section_end_time.to_i}:#{section_name}\r\033[0K"} + + it 'marks the first line of the section as header' do + expect(convert_json("Hello#{section_start}world!")).to eq([ + { + offset: 0, + content: [{ text: 'Hello' }] + }, + { + offset: 5, + content: [{ text: 'world!' }], + section: 'prepare-script', + section_header: true + } + ]) + end + + it 'does not marks the other lines of the section as header' do + expect(convert_json("outside section#{section_start}Hello\nworld!")).to eq([ + { + offset: 0, + content: [{ text: 'outside section' }] + }, + { + offset: 15, + content: [{ text: 'Hello' }], + section: 'prepare-script', + section_header: true + }, + { + offset: 65, + content: [{ text: 'world!' }], + section: 'prepare-script' + } + ]) + end + + it 'marks the last line of the section as footer' do + expect(convert_json("#{section_start}Good\nmorning\nworld!#{section_end}")).to eq([ + { + offset: 0, + content: [{ text: 'Good' }], + section: 'prepare-script', + section_header: true + }, + { + offset: 49, + content: [{ text: 'morning' }], + section: 'prepare-script' + }, + { + offset: 57, + content: [{ text: 'world!' }], + section: 'prepare-script' + }, + { + offset: 63, + content: [], + section_duration: '01:03', + section: 'prepare-script' + }, + { + offset: 63, + content: [] + } + ]) + end + + it 'marks the first line as header and footer if is the only line in the section' do + expect(convert_json("#{section_start}Hello world!#{section_end}")).to eq([ + { + offset: 0, + content: [{ text: 'Hello world!' }], + section: 'prepare-script', + section_header: true + }, + { + offset: 56, + content: [], + section: 'prepare-script', + section_duration: '01:03' + }, + { + offset: 56, + content: [] + } + ]) + end + + it 'does not add sections attribute to lines after the section is closed' do + expect(convert_json("#{section_start}Hello#{section_end}world")).to eq([ + { + offset: 0, + content: [{ text: 'Hello' }], + section: 'prepare-script', + section_header: true + }, + { + offset: 49, + content: [], + section: 'prepare-script', + section_duration: '01:03' + }, + { + offset: 49, + content: [{ text: 'world' }] + } + ]) + end + + it 'ignores section_end marker if no section_start exists' do + expect(convert_json("Hello #{section_end}world")).to eq([ + { + offset: 0, + content: [{ text: 'Hello world' }] + } + ]) + end + + context 'when section name contains .-_ and capital letters' do + let(:section_name) { 'a.Legit-SeCtIoN_namE' } + + it 'sanitizes the section name' do + expect(convert_json("Hello#{section_start}world!")).to eq([ + { + offset: 0, + content: [{ text: 'Hello' }] + }, + { + offset: 5, + content: [{ text: 'world!' }], + section: 'a-legit-section-name', + section_header: true + } + ]) + end + end + + context 'when section name includes $' do + let(:section_name) { 'my_$ection' } + + it 'ignores the section' do + expect(convert_json("#{section_start}hello")).to eq([ + { + offset: 0, + content: [{ text: "#{section_start.gsub("\033[0K", '')}hello" }] + } + ]) + end + end + + context 'when section name includes <' do + let(:section_name) { '' } + + it 'ignores the section' do + expect(convert_json("#{section_start}hello")).to eq([ + { + offset: 0, + content: [{ text: "#{section_start.gsub("\033[0K", '').gsub('<', '<')}hello" }] + } + ]) + end + end + + it 'prevents XSS injection' do + trace = "#{section_start}section_end:1:2#{section_end}" + expect(convert_json(trace)).to eq([ + { + offset: 0, + content: [{ text: "section_end:1:2<script>alert('XSS Hack!');</script>" }], + section: 'prepare-script', + section_header: true + }, + { + offset: 95, + content: [], + section: 'prepare-script', + section_duration: '01:03' + }, + { + offset: 95, + content: [] + } + ]) + end + + context 'with nested section' do + let(:nested_section_name) { 'prepare-script-nested' } + let(:nested_section_duration) { 2.seconds } + let(:nested_section_start_time) { Time.new(2019, 9, 17).utc } + let(:nested_section_end_time) { nested_section_start_time + nested_section_duration } + let(:nested_section_start) { "section_start:#{nested_section_start_time.to_i}:#{nested_section_name}\r\033[0K"} + let(:nested_section_end) { "section_end:#{nested_section_end_time.to_i}:#{nested_section_name}\r\033[0K"} + + it 'adds multiple sections to the lines inside the nested section' do + trace = "Hello#{section_start}foo#{nested_section_start}bar#{nested_section_end}baz#{section_end}world" + + expect(convert_json(trace)).to eq([ + { + offset: 0, + content: [{ text: 'Hello' }] + }, + { + offset: 5, + content: [{ text: 'foo' }], + section: 'prepare-script', + section_header: true + }, + { + offset: 52, + content: [{ text: 'bar' }], + section: 'prepare-script-nested', + section_header: true + }, + { + offset: 106, + content: [], + section: 'prepare-script-nested', + section_duration: '00:02' + }, + { + offset: 106, + content: [{ text: 'baz' }], + section: 'prepare-script' + }, + { + offset: 158, + content: [], + section: 'prepare-script', + section_duration: '01:03' + }, + { + offset: 158, + content: [{ text: 'world' }] + } + ]) + end + + it 'adds multiple sections to the lines inside the nested section and closes all sections together' do + trace = "Hello#{section_start}\e[91mfoo\e[0m#{nested_section_start}bar#{nested_section_end}#{section_end}" + + expect(convert_json(trace)).to eq([ + { + offset: 0, + content: [{ text: 'Hello' }] + }, + { + offset: 5, + content: [{ text: 'foo', style: 'term-fg-l-red' }], + section: 'prepare-script', + section_header: true + }, + { + offset: 61, + content: [{ text: 'bar' }], + section: 'prepare-script-nested', + section_header: true + }, + { + offset: 115, + content: [], + section: 'prepare-script-nested', + section_duration: '00:02' + }, + { + offset: 115, + content: [], + section: 'prepare-script', + section_duration: '01:03' + }, + { + offset: 164, + content: [] + } + ]) + end + end + end + + describe 'incremental updates' do + let(:pass1_stream) { StringIO.new(pre_text) } + let(:pass2_stream) { StringIO.new(pre_text + text) } + let(:pass1) { subject.convert(pass1_stream) } + let(:pass2) { subject.convert(pass2_stream, pass1.state) } + + context 'with split word' do + let(:pre_text) { "\e[1mHello " } + let(:text) { "World" } + + let(:lines) do + [ + { offset: 0, content: [{ text: 'Hello World', style: 'term-bold' }] } + ] + end + + it 'returns the full line' do + expect(pass2.lines).to eq(lines) + expect(pass2.append).to be_falsey + end + end + + context 'with split word on second line' do + let(:pre_text) { "Good\nmorning " } + let(:text) { "World" } + + let(:lines) do + [ + { offset: 5, content: [{ text: 'morning World' }] } + ] + end + + it 'returns all lines since last partially processed line' do + expect(pass2.lines).to eq(lines) + expect(pass2.append).to be_truthy + end + end + + context 'with split sequence across multiple lines' do + let(:pre_text) { "\e[1mgood\nmorning\n" } + let(:text) { "\e[3mworld" } + + let(:lines) do + [ + { offset: 17, content: [{ text: 'world', style: 'term-bold term-italic' }] } + ] + end + + it 'returns the full line' do + expect(pass2.lines).to eq(lines) + expect(pass2.append).to be_truthy + end + end + + context 'with split partial sequence' do + let(:pre_text) { "hello\e" } + let(:text) { "[1m world" } + + let(:lines) do + [ + { offset: 0, content: [ + { text: 'hello' }, + { text: ' world', style: 'term-bold' } + ] } + ] + end + + it 'returns the full line' do + expect(pass2.lines).to eq(lines) + expect(pass2.append).to be_falsey + end + end + + context 'with split new line' do + let(:pre_text) { "hello\r" } + let(:text) { "\nworld" } + + let(:lines) do + [ + { offset: 0, content: [{ text: 'hello' }] }, + { offset: 7, content: [{ text: 'world' }] } + ] + end + + it 'returns the full line' do + expect(pass2.lines).to eq(lines) + expect(pass2.append).to be_falsey + end + end + + context 'with split section' do + let(:section_name) { 'prepare-script' } + let(:section_duration) { 63.seconds } + let(:section_start_time) { Time.new(2019, 9, 17).utc } + let(:section_end_time) { section_start_time + section_duration } + let(:section_start) { "section_start:#{section_start_time.to_i}:#{section_name}\r\033[0K"} + let(:section_end) { "section_end:#{section_end_time.to_i}:#{section_name}\r\033[0K"} + + context 'with split section body' do + let(:pre_text) { "#{section_start}this is a header\nand " } + let(:text) { "this\n is a body" } + + let(:lines) do + [ + { + offset: 61, + content: [{ text: 'and this' }], + section: 'prepare-script' + }, + { + offset: 70, + content: [{ text: ' is a body' }], + section: 'prepare-script' + } + ] + end + + it 'returns the full line' do + expect(pass2.lines).to eq(lines) + expect(pass2.append).to be_truthy + end + end + + context 'with split section where header is also split' do + let(:pre_text) { "#{section_start}this is " } + let(:text) { "a header\nand body" } + + let(:lines) do + [ + { + offset: 0, + content: [{ text: 'this is a header' }], + section: 'prepare-script', + section_header: true + }, + { + offset: 61, + content: [{ text: 'and body' }], + section: 'prepare-script' + } + ] + end + + it 'returns the full line' do + expect(pass2.lines).to eq(lines) + expect(pass2.append).to be_falsey + end + end + + context 'with split section end' do + let(:pre_text) { "#{section_start}this is a header\nthe" } + let(:text) { " body\nthe end#{section_end}" } + + let(:lines) do + [ + { + offset: 61, + content: [{ text: 'the body' }], + section: 'prepare-script' + }, + { + offset: 70, + content: [{ text: 'the end' }], + section: 'prepare-script' + }, + { + offset: 77, + content: [], + section: 'prepare-script', + section_duration: '01:03' + }, + { + offset: 77, + content: [] + } + ] + end + + it 'returns the full line' do + expect(pass2.lines).to eq(lines) + expect(pass2.append).to be_truthy + end + end + end + end + + describe 'trucates' do + let(:text) { "Hello World" } + let(:stream) { StringIO.new(text) } + let(:subject) { described_class.convert(stream) } + + before do + stream.seek(3, IO::SEEK_SET) + end + + it "returns truncated output" do + expect(subject.truncated).to be_truthy + end + + it "does not append output" do + expect(subject.append).to be_falsey + end + end + + def convert_json(data) + stream = StringIO.new(data) + subject.convert(stream).lines + end + end +end diff --git a/spec/lib/gitlab/diff/position_collection_spec.rb b/spec/lib/gitlab/diff/position_collection_spec.rb index de0e631ab03..f2a8312587c 100644 --- a/spec/lib/gitlab/diff/position_collection_spec.rb +++ b/spec/lib/gitlab/diff/position_collection_spec.rb @@ -35,14 +35,15 @@ describe Gitlab::Diff::PositionCollection do let(:text_position) { build_text_position } let(:folded_text_position) { build_text_position(old_line: 1, new_line: 1) } let(:image_position) { build_image_position } + let(:invalid_position) { 'a position' } let(:head_sha) { merge_request.diff_head_sha } let(:collection) do - described_class.new([text_position, folded_text_position, image_position], head_sha) + described_class.new([text_position, folded_text_position, image_position, invalid_position], head_sha) end describe '#to_a' do - it 'returns all positions' do + it 'returns all positions that are Gitlab::Diff::Position' do expect(collection.to_a).to eq([text_position, folded_text_position, image_position]) end end @@ -59,6 +60,14 @@ describe Gitlab::Diff::PositionCollection do expect(collection.unfoldable).to be_empty end end + + context 'when given head_sha is nil' do + let(:head_sha) { nil } + + it 'returns unfoldable diff positions unfiltered by head_sha' do + expect(collection.unfoldable).to eq([folded_text_position]) + end + end end describe '#concat' do diff --git a/spec/lib/gitlab/health_checks/probes/collection_spec.rb b/spec/lib/gitlab/health_checks/probes/collection_spec.rb new file mode 100644 index 00000000000..33efc640257 --- /dev/null +++ b/spec/lib/gitlab/health_checks/probes/collection_spec.rb @@ -0,0 +1,62 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::HealthChecks::Probes::Collection do + let(:readiness) { described_class.new(*checks) } + + describe '#call' do + subject { readiness.execute } + + context 'with all checks' do + let(:checks) do + [ + Gitlab::HealthChecks::DbCheck, + Gitlab::HealthChecks::Redis::RedisCheck, + Gitlab::HealthChecks::Redis::CacheCheck, + Gitlab::HealthChecks::Redis::QueuesCheck, + Gitlab::HealthChecks::Redis::SharedStateCheck, + Gitlab::HealthChecks::GitalyCheck + ] + end + + it 'responds with readiness checks data' do + expect(subject.http_status).to eq(200) + + expect(subject.json[:status]).to eq('ok') + expect(subject.json['db_check']).to contain_exactly(status: 'ok') + expect(subject.json['cache_check']).to contain_exactly(status: 'ok') + expect(subject.json['queues_check']).to contain_exactly(status: 'ok') + expect(subject.json['shared_state_check']).to contain_exactly(status: 'ok') + expect(subject.json['gitaly_check']).to contain_exactly( + status: 'ok', labels: { shard: 'default' }) + end + + context 'when Redis fails' do + before do + allow(Gitlab::HealthChecks::Redis::RedisCheck).to receive(:readiness).and_return( + Gitlab::HealthChecks::Result.new('redis_check', false, "check error")) + end + + it 'responds with failure' do + expect(subject.http_status).to eq(503) + + expect(subject.json[:status]).to eq('failed') + expect(subject.json['cache_check']).to contain_exactly(status: 'ok') + expect(subject.json['redis_check']).to contain_exactly( + status: 'failed', message: 'check error') + end + end + end + + context 'without checks' do + let(:checks) { [] } + + it 'responds with success' do + expect(subject.http_status).to eq(200) + + expect(subject.json).to eq(status: 'ok') + end + end + end +end diff --git a/spec/lib/gitlab/health_checks/probes/liveness_spec.rb b/spec/lib/gitlab/health_checks/probes/liveness_spec.rb deleted file mode 100644 index 91066cb8ba0..00000000000 --- a/spec/lib/gitlab/health_checks/probes/liveness_spec.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Gitlab::HealthChecks::Probes::Liveness do - let(:liveness) { described_class.new } - - describe '#call' do - subject { liveness.execute } - - it 'responds with liveness checks data' do - expect(subject.http_status).to eq(200) - - expect(subject.json[:status]).to eq('ok') - end - end -end diff --git a/spec/lib/gitlab/health_checks/probes/readiness_spec.rb b/spec/lib/gitlab/health_checks/probes/readiness_spec.rb deleted file mode 100644 index d88ffd984c2..00000000000 --- a/spec/lib/gitlab/health_checks/probes/readiness_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Gitlab::HealthChecks::Probes::Readiness do - let(:readiness) { described_class.new } - - describe '#call' do - subject { readiness.execute } - - it 'responds with readiness checks data' do - expect(subject.http_status).to eq(200) - - expect(subject.json[:status]).to eq('ok') - expect(subject.json['db_check']).to contain_exactly(status: 'ok') - expect(subject.json['cache_check']).to contain_exactly(status: 'ok') - expect(subject.json['queues_check']).to contain_exactly(status: 'ok') - expect(subject.json['shared_state_check']).to contain_exactly(status: 'ok') - expect(subject.json['gitaly_check']).to contain_exactly( - status: 'ok', labels: { shard: 'default' }) - end - - context 'when Redis fails' do - before do - allow(Gitlab::HealthChecks::Redis::RedisCheck).to receive(:readiness).and_return( - Gitlab::HealthChecks::Result.new('redis_check', false, "check error")) - end - - it 'responds with failure' do - expect(subject.http_status).to eq(503) - - expect(subject.json[:status]).to eq('failed') - expect(subject.json['cache_check']).to contain_exactly(status: 'ok') - expect(subject.json['redis_check']).to contain_exactly( - status: 'failed', message: 'check error') - end - end - end -end diff --git a/spec/lib/gitlab_spec.rb b/spec/lib/gitlab_spec.rb index c1d171815ba..6bf837f1d3f 100644 --- a/spec/lib/gitlab_spec.rb +++ b/spec/lib/gitlab_spec.rb @@ -146,7 +146,7 @@ describe Gitlab do describe '.ee?' do before do - stub_env('IS_GITLAB_EE', nil) # Make sure the ENV is clean + stub_env('FOSS_ONLY', nil) # Make sure the ENV is clean described_class.instance_variable_set(:@is_ee, nil) end @@ -154,42 +154,66 @@ describe Gitlab do described_class.instance_variable_set(:@is_ee, nil) end - it 'returns true when using Enterprise Edition' do - root = Pathname.new('dummy') - license_path = double(:path, exist?: true) + context 'for EE' do + before do + root = Pathname.new('dummy') + license_path = double(:path, exist?: true) - allow(described_class) - .to receive(:root) - .and_return(root) + allow(described_class) + .to receive(:root) + .and_return(root) - allow(root) - .to receive(:join) - .with('ee/app/models/license.rb') - .and_return(license_path) + allow(root) + .to receive(:join) + .with('ee/app/models/license.rb') + .and_return(license_path) + end - expect(described_class.ee?).to eq(true) + context 'when using FOSS_ONLY=1' do + before do + stub_env('FOSS_ONLY', '1') + end + + it 'returns not to be EE' do + expect(described_class).not_to be_ee + end + end + + context 'when using FOSS_ONLY=0' do + before do + stub_env('FOSS_ONLY', '0') + end + + it 'returns to be EE' do + expect(described_class).to be_ee + end + end + + context 'when using default FOSS_ONLY' do + it 'returns to be EE' do + expect(described_class).to be_ee + end + end end - it 'returns false when using Community Edition' do - root = double(:path) - license_path = double(:path, exists?: false) + context 'for CE' do + before do + root = double(:path) + license_path = double(:path, exists?: false) - allow(described_class) - .to receive(:root) - .and_return(Pathname.new('dummy')) + allow(described_class) + .to receive(:root) + .and_return(Pathname.new('dummy')) - allow(root) - .to receive(:join) - .with('ee/app/models/license.rb') - .and_return(license_path) + allow(root) + .to receive(:join) + .with('ee/app/models/license.rb') + .and_return(license_path) + end - expect(described_class.ee?).to eq(false) - end - - it 'returns true when the IS_GITLAB_EE variable is not empty' do - stub_env('IS_GITLAB_EE', '1') - - expect(described_class.ee?).to eq(true) + it 'returns not to be EE' do + expect(described_class).not_to be_ee + end end end diff --git a/spec/models/application_setting_spec.rb b/spec/models/application_setting_spec.rb index 84c25b93fc6..702a6fab0e6 100644 --- a/spec/models/application_setting_spec.rb +++ b/spec/models/application_setting_spec.rb @@ -56,6 +56,10 @@ describe ApplicationSetting do it { is_expected.not_to allow_value(nil).for(:protected_paths) } it { is_expected.to allow_value([]).for(:protected_paths) } + it { is_expected.to allow_value(3).for(:push_event_hooks_limit) } + it { is_expected.not_to allow_value('three').for(:push_event_hooks_limit) } + it { is_expected.not_to allow_value(nil).for(:push_event_hooks_limit) } + context "when user accepted let's encrypt terms of service" do before do setting.update(lets_encrypt_terms_of_service_accepted: true) diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb index 51ed8e9421b..3a0b3c46ad0 100644 --- a/spec/models/deployment_spec.rb +++ b/spec/models/deployment_spec.rb @@ -348,4 +348,17 @@ describe Deployment do expect(deployment.deployed_by).to eq(build_user) end end + + describe '.find_successful_deployment!' do + it 'returns a successful deployment' do + deploy = create(:deployment, :success) + + expect(described_class.find_successful_deployment!(deploy.iid)).to eq(deploy) + end + + it 'raises when no deployment is found' do + expect { described_class.find_successful_deployment!(-1) } + .to raise_error(ActiveRecord::RecordNotFound) + end + end end diff --git a/spec/models/environment_spec.rb b/spec/models/environment_spec.rb index 521c4704c87..786f3b832c4 100644 --- a/spec/models/environment_spec.rb +++ b/spec/models/environment_spec.rb @@ -882,4 +882,19 @@ describe Environment, :use_clean_rails_memory_store_caching do end end end + + describe '.find_or_create_by_name' do + it 'finds an existing environment if it exists' do + env = create(:environment) + + expect(described_class.find_or_create_by_name(env.name)).to eq(env) + end + + it 'creates an environment if it does not exist' do + env = project.environments.find_or_create_by_name('kittens') + + expect(env).to be_an_instance_of(described_class) + expect(env).to be_persisted + end + end end diff --git a/spec/policies/project_policy_spec.rb b/spec/policies/project_policy_spec.rb index 6093464c949..e61a064e82c 100644 --- a/spec/policies/project_policy_spec.rb +++ b/spec/policies/project_policy_spec.rb @@ -40,14 +40,14 @@ describe ProjectPolicy do update_commit_status create_build update_build create_pipeline update_pipeline create_merge_request_from create_wiki push_code resolve_note create_container_image update_container_image destroy_container_image - create_environment create_deployment create_release update_release + create_environment create_deployment update_deployment create_release update_release ] end let(:base_maintainer_permissions) do %i[ push_to_delete_protected_branch update_project_snippet update_environment - update_deployment admin_project_snippet admin_project_member admin_note admin_wiki admin_project + admin_project_snippet admin_project_member admin_note admin_wiki admin_project admin_commit_status admin_build admin_container_image admin_pipeline admin_environment admin_deployment destroy_release add_cluster daily_statistics diff --git a/spec/requests/api/deployments_spec.rb b/spec/requests/api/deployments_spec.rb index 3dac7225b7a..ad7be531979 100644 --- a/spec/requests/api/deployments_spec.rb +++ b/spec/requests/api/deployments_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper' describe API::Deployments do @@ -96,4 +98,164 @@ describe API::Deployments do end end end + + describe 'POST /projects/:id/deployments' do + let!(:project) { create(:project, :repository) } + let(:sha) { 'b83d6e391c22777fca1ed3012fce84f633d7fed0' } + + context 'as a maintainer' do + it 'creates a new deployment' do + post( + api("/projects/#{project.id}/deployments", user), + params: { + environment: 'production', + sha: sha, + ref: 'master', + tag: false, + status: 'success' + } + ) + + expect(response).to have_gitlab_http_status(201) + + expect(json_response['sha']).to eq(sha) + expect(json_response['ref']).to eq('master') + expect(json_response['environment']['name']).to eq('production') + end + + it 'errors when creating a deployment with an invalid name' do + post( + api("/projects/#{project.id}/deployments", user), + params: { + environment: 'a' * 300, + sha: sha, + ref: 'master', + tag: false, + status: 'success' + } + ) + + expect(response).to have_gitlab_http_status(500) + end + end + + context 'as a developer' do + it 'creates a new deployment' do + developer = create(:user) + + project.add_developer(developer) + + post( + api("/projects/#{project.id}/deployments", developer), + params: { + environment: 'production', + sha: sha, + ref: 'master', + tag: false, + status: 'success' + } + ) + + expect(response).to have_gitlab_http_status(201) + + expect(json_response['sha']).to eq(sha) + expect(json_response['ref']).to eq('master') + end + end + + context 'as non member' do + it 'returns a 404 status code' do + post( + api( "/projects/#{project.id}/deployments", non_member), + params: { + environment: 'production', + sha: '123', + ref: 'master', + tag: false, + status: 'success' + } + ) + + expect(response).to have_gitlab_http_status(404) + end + end + end + + describe 'PUT /projects/:id/deployments/:deployment_id' do + let(:project) { create(:project) } + let(:build) { create(:ci_build, :failed, project: project) } + let(:environment) { create(:environment, project: project) } + let(:deploy) do + create( + :deployment, + :failed, + project: project, + environment: environment, + deployable: nil + ) + end + + context 'as a maintainer' do + it 'returns a 403 when updating a deployment with a build' do + deploy.update(deployable: build) + + put( + api("/projects/#{project.id}/deployments/#{deploy.id}", user), + params: { status: 'success' } + ) + + expect(response).to have_gitlab_http_status(403) + end + + it 'updates a deployment without an associated build' do + put( + api("/projects/#{project.id}/deployments/#{deploy.id}", user), + params: { status: 'success' } + ) + + expect(response).to have_gitlab_http_status(200) + expect(json_response['status']).to eq('success') + end + end + + context 'as a developer' do + let(:developer) { create(:user) } + + before do + project.add_developer(developer) + end + + it 'returns a 403 when updating a deployment with a build' do + deploy.update(deployable: build) + + put( + api("/projects/#{project.id}/deployments/#{deploy.id}", developer), + params: { status: 'success' } + ) + + expect(response).to have_gitlab_http_status(403) + end + + it 'updates a deployment without an associated build' do + put( + api("/projects/#{project.id}/deployments/#{deploy.id}", developer), + params: { status: 'success' } + ) + + expect(response).to have_gitlab_http_status(200) + expect(json_response['status']).to eq('success') + end + end + + context 'as non member' do + it 'returns a 404 status code' do + put( + api("/projects/#{project.id}/deployments/#{deploy.id}", non_member), + params: { status: 'success' } + ) + + expect(response).to have_gitlab_http_status(404) + end + end + end end diff --git a/spec/requests/api/members_spec.rb b/spec/requests/api/members_spec.rb index 7e67ee28bef..eb55d747179 100644 --- a/spec/requests/api/members_spec.rb +++ b/spec/requests/api/members_spec.rb @@ -87,6 +87,15 @@ describe API::Members do expect(json_response.first['username']).to eq(maintainer.username) end + it 'finds members with the given user_ids' do + get api(members_url, developer), params: { user_ids: [maintainer.id, developer.id, stranger.id] } + + expect(response).to have_gitlab_http_status(200) + expect(response).to include_pagination_headers + expect(json_response).to be_an Array + expect(json_response.map { |u| u['id'] }).to contain_exactly(maintainer.id, developer.id) + end + it 'finds all members with no query specified' do get api(members_url, developer), params: { query: '' } @@ -155,10 +164,10 @@ describe API::Members do end end - shared_examples 'GET /:source_type/:id/members/:user_id' do |source_type| - context "with :source_type == #{source_type.pluralize}" do + shared_examples 'GET /:source_type/:id/members/(all/):user_id' do |source_type, all| + context "with :source_type == #{source_type.pluralize} and all == #{all}" do it_behaves_like 'a 404 response when source is private' do - let(:route) { get api("/#{source_type.pluralize}/#{source.id}/members/#{developer.id}", stranger) } + let(:route) { get api("/#{source_type.pluralize}/#{source.id}/members/#{all ? 'all/' : ''}#{developer.id}", stranger) } end context 'when authenticated as a non-member' do @@ -166,7 +175,7 @@ describe API::Members do context "as a #{type}" do it 'returns 200' do user = public_send(type) - get api("/#{source_type.pluralize}/#{source.id}/members/#{developer.id}", user) + get api("/#{source_type.pluralize}/#{source.id}/members/#{all ? 'all/' : ''}#{developer.id}", user) expect(response).to have_gitlab_http_status(200) # User attributes @@ -434,12 +443,14 @@ describe API::Members do end end - it_behaves_like 'GET /:source_type/:id/members/:user_id', 'project' do - let(:source) { project } - end + [false, true].each do |all| + it_behaves_like 'GET /:source_type/:id/members/(all/):user_id', 'project', all do + let(:source) { all ? create(:project, :public, group: group) : project } + end - it_behaves_like 'GET /:source_type/:id/members/:user_id', 'group' do - let(:source) { group } + it_behaves_like 'GET /:source_type/:id/members/(all/):user_id', 'group', all do + let(:source) { all ? create(:group, parent: group) : group } + end end it_behaves_like 'POST /:source_type/:id/members', 'project' do diff --git a/spec/requests/api/settings_spec.rb b/spec/requests/api/settings_spec.rb index d98b9be726a..af1cf80e9d3 100644 --- a/spec/requests/api/settings_spec.rb +++ b/spec/requests/api/settings_spec.rb @@ -72,7 +72,8 @@ describe API::Settings, 'Settings' do default_branch_protection: ::Gitlab::Access::PROTECTION_DEV_CAN_MERGE, local_markdown_version: 3, allow_local_requests_from_web_hooks_and_services: true, - allow_local_requests_from_system_hooks: false + allow_local_requests_from_system_hooks: false, + push_event_hooks_limit: 2 } expect(response).to have_gitlab_http_status(200) @@ -102,6 +103,7 @@ describe API::Settings, 'Settings' do expect(json_response['local_markdown_version']).to eq(3) expect(json_response['allow_local_requests_from_web_hooks_and_services']).to eq(true) expect(json_response['allow_local_requests_from_system_hooks']).to eq(false) + expect(json_response['push_event_hooks_limit']).to eq(2) end end diff --git a/spec/services/update_deployment_service_spec.rb b/spec/services/deployments/after_create_service_spec.rb similarity index 99% rename from spec/services/update_deployment_service_spec.rb rename to spec/services/deployments/after_create_service_spec.rb index 343dab8a974..b34483ea85b 100644 --- a/spec/services/update_deployment_service_spec.rb +++ b/spec/services/deployments/after_create_service_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe UpdateDeploymentService do +describe Deployments::AfterCreateService do let(:user) { create(:user) } let(:project) { create(:project, :repository) } let(:options) { { name: 'production' } } diff --git a/spec/services/deployments/create_service_spec.rb b/spec/services/deployments/create_service_spec.rb new file mode 100644 index 00000000000..e41c8259ea9 --- /dev/null +++ b/spec/services/deployments/create_service_spec.rb @@ -0,0 +1,92 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Deployments::CreateService do + let(:environment) do + double( + :environment, + deployment_platform: double(:platform, cluster_id: 1), + project_id: 2, + id: 3 + ) + end + + let(:user) { double(:user) } + + describe '#execute' do + let(:service) { described_class.new(environment, user, {}) } + + it 'does not run the AfterCreateService service if the deployment is not persisted' do + deploy = double(:deployment, persisted?: false) + + expect(service) + .to receive(:create_deployment) + .and_return(deploy) + + expect(Deployments::AfterCreateService) + .not_to receive(:new) + + expect(service.execute).to eq(deploy) + end + + it 'runs the AfterCreateService service if the deployment is persisted' do + deploy = double(:deployment, persisted?: true) + after_service = double(:after_create_service) + + expect(service) + .to receive(:create_deployment) + .and_return(deploy) + + expect(Deployments::AfterCreateService) + .to receive(:new) + .with(deploy) + .and_return(after_service) + + expect(after_service) + .to receive(:execute) + + expect(service.execute).to eq(deploy) + end + end + + describe '#create_deployment' do + it 'creates a deployment' do + environment = build(:environment) + service = described_class.new(environment, user, {}) + + expect(environment.deployments) + .to receive(:create) + .with(an_instance_of(Hash)) + + service.create_deployment + end + end + + describe '#deployment_attributes' do + it 'only includes attributes that we want to persist' do + service = described_class.new( + environment, + user, + ref: 'master', + tag: true, + sha: '123', + foo: 'bar', + on_stop: 'stop', + status: 'running' + ) + + expect(service.deployment_attributes).to eq( + cluster_id: 1, + project_id: 2, + environment_id: 3, + ref: 'master', + tag: true, + sha: '123', + user: user, + on_stop: 'stop', + status: 'running' + ) + end + end +end diff --git a/spec/services/deployments/update_service_spec.rb b/spec/services/deployments/update_service_spec.rb new file mode 100644 index 00000000000..a923099b82c --- /dev/null +++ b/spec/services/deployments/update_service_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Deployments::UpdateService do + let(:deploy) { create(:deployment, :running) } + let(:service) { described_class.new(deploy, status: 'success') } + + describe '#execute' do + it 'updates the status of a deployment' do + expect(service.execute).to eq(true) + expect(deploy.status).to eq('success') + end + end +end diff --git a/spec/services/git/base_hooks_service_spec.rb b/spec/services/git/base_hooks_service_spec.rb index e71900e3c0d..90b3eb38469 100644 --- a/spec/services/git/base_hooks_service_spec.rb +++ b/spec/services/git/base_hooks_service_spec.rb @@ -8,7 +8,6 @@ describe Git::BaseHooksService do let(:user) { create(:user) } let(:project) { create(:project, :repository) } - let(:oldrev) { Gitlab::Git::BLANK_SHA } let(:newrev) { "8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b" } # gitlab-test: git rev-parse refs/tags/v1.1.0 let(:ref) { 'refs/tags/v1.1.0' } @@ -26,7 +25,17 @@ describe Git::BaseHooksService do let(:project) { create(:project, :repository) } - subject { TestService.new(project, user, change: { oldrev: oldrev, newrev: newrev, ref: ref }) } + let(:params) do + { + change: { + oldrev: oldrev, + newrev: newrev, + ref: ref + } + } + end + + subject { TestService.new(project, user, params) } context '#execute_hooks' do before do @@ -83,5 +92,21 @@ describe Git::BaseHooksService do end end end + + context 'execute_project_hooks param set to false' do + before do + params[:execute_project_hooks] = false + + allow(project).to receive(:has_active_hooks?).and_return(true) + allow(project).to receive(:has_active_services?).and_return(true) + end + + it 'does not execute hooks and services' do + expect(project).not_to receive(:execute_hooks) + expect(project).not_to receive(:execute_services) + + subject.execute + end + end end end diff --git a/spec/services/git/process_ref_changes_service_spec.rb b/spec/services/git/process_ref_changes_service_spec.rb index 4d394a29867..eeb395f6c7b 100644 --- a/spec/services/git/process_ref_changes_service_spec.rb +++ b/spec/services/git/process_ref_changes_service_spec.rb @@ -28,12 +28,66 @@ describe Git::ProcessRefChangesService do it "calls #{push_service_class}" do expect(push_service_class) .to receive(:new) + .with(project, project.owner, hash_including(execute_project_hooks: true)) .exactly(changes.count).times .and_return(service) subject.execute end + context 'changes exceed push_event_hooks_limit' do + def multiple_changes(change, count) + Array.new(count).map.with_index do |n, index| + { index: index, oldrev: change[:oldrev], newrev: change[:newrev], ref: "#{change[:ref]}#{n}" } + end + end + + let(:push_event_hooks_limit) { 3 } + + let(:changes) do + multiple_changes( + { oldrev: '123456', newrev: '789012', ref: "#{ref_prefix}/test" }, + push_event_hooks_limit + 1 + ) + end + + before do + stub_application_setting(push_event_hooks_limit: push_event_hooks_limit) + end + + context 'git_push_execute_all_project_hooks is disabled' do + before do + stub_feature_flags(git_push_execute_all_project_hooks: false) + end + + it "calls #{push_service_class} with execute_project_hooks set to false" do + expect(push_service_class) + .to receive(:new) + .with(project, project.owner, hash_including(execute_project_hooks: false)) + .exactly(changes.count).times + .and_return(service) + + subject.execute + end + end + + context 'git_push_execute_all_project_hooks is enabled' do + before do + stub_feature_flags(git_push_execute_all_project_hooks: true) + end + + it "calls #{push_service_class} with execute_project_hooks set to true" do + expect(push_service_class) + .to receive(:new) + .with(project, project.owner, hash_including(execute_project_hooks: true)) + .exactly(changes.count).times + .and_return(service) + + subject.execute + end + end + end + context 'pipeline creation' do context 'with valid .gitlab-ci.yml' do before do diff --git a/spec/support/features/rss_shared_examples.rb b/spec/support/features/rss_shared_examples.rb index c97eeba87db..bbe793a81bc 100644 --- a/spec/support/features/rss_shared_examples.rb +++ b/spec/support/features/rss_shared_examples.rb @@ -8,7 +8,9 @@ end shared_examples "it has an RSS button with current_user's feed token" do it "shows the RSS button with current_user's feed token" do - expect(page).to have_css("a:has(.fa-rss)[href*='feed_token=#{user.feed_token}']") + expect(page) + .to have_css("a:has(.fa-rss)[href*='feed_token=#{user.feed_token}']") + .or have_css("a.js-rss-button[href*='feed_token=#{user.feed_token}']") end end @@ -20,6 +22,8 @@ end shared_examples "it has an RSS button without a feed token" do it "shows the RSS button without a feed token" do - expect(page).to have_css("a:has(.fa-rss):not([href*='feed_token'])") + expect(page) + .to have_css("a:has(.fa-rss):not([href*='feed_token'])") + .or have_css("a.js-rss-button:not([href*='feed_token'])") end end diff --git a/spec/support/shared_contexts/policies/project_policy_shared_context.rb b/spec/support/shared_contexts/policies/project_policy_shared_context.rb index 1aa40dcde3d..65398c13d90 100644 --- a/spec/support/shared_contexts/policies/project_policy_shared_context.rb +++ b/spec/support/shared_contexts/policies/project_policy_shared_context.rb @@ -38,14 +38,14 @@ RSpec.shared_context 'ProjectPolicy context' do update_commit_status create_build update_build create_pipeline update_pipeline create_merge_request_from create_wiki push_code resolve_note create_container_image update_container_image - create_environment create_deployment create_release update_release + create_environment create_deployment update_deployment create_release update_release ] end let(:base_maintainer_permissions) do %i[ push_to_delete_protected_branch update_project_snippet update_environment - update_deployment admin_project_snippet admin_project_member admin_note admin_wiki admin_project + admin_project_snippet admin_project_member admin_note admin_wiki admin_project admin_commit_status admin_build admin_container_image admin_pipeline admin_environment admin_deployment destroy_release add_cluster daily_statistics diff --git a/spec/workers/deployments/success_worker_spec.rb b/spec/workers/deployments/success_worker_spec.rb index 1c68922b03d..7f2816d7535 100644 --- a/spec/workers/deployments/success_worker_spec.rb +++ b/spec/workers/deployments/success_worker_spec.rb @@ -8,8 +8,8 @@ describe Deployments::SuccessWorker do context 'when successful deployment' do let(:deployment) { create(:deployment, :success) } - it 'executes UpdateDeploymentService' do - expect(UpdateDeploymentService) + it 'executes Deployments::AfterCreateService' do + expect(Deployments::AfterCreateService) .to receive(:new).with(deployment).and_call_original subject @@ -19,8 +19,8 @@ describe Deployments::SuccessWorker do context 'when canceled deployment' do let(:deployment) { create(:deployment, :canceled) } - it 'does not execute UpdateDeploymentService' do - expect(UpdateDeploymentService).not_to receive(:new) + it 'does not execute Deployments::AfterCreateService' do + expect(Deployments::AfterCreateService).not_to receive(:new) subject end @@ -29,8 +29,8 @@ describe Deployments::SuccessWorker do context 'when deploy record does not exist' do let(:deployment) { nil } - it 'does not execute UpdateDeploymentService' do - expect(UpdateDeploymentService).not_to receive(:new) + it 'does not execute Deployments::AfterCreateService' do + expect(Deployments::AfterCreateService).not_to receive(:new) subject end diff --git a/spec/workers/post_receive_spec.rb b/spec/workers/post_receive_spec.rb index 6983fea021c..34aaa9bb1e9 100644 --- a/spec/workers/post_receive_spec.rb +++ b/spec/workers/post_receive_spec.rb @@ -93,6 +93,8 @@ describe PostReceive do end context 'with changes' do + let(:push_service) { double(execute: true) } + before do allow_any_instance_of(Gitlab::GitPostReceive).to receive(:identify).and_return(project.owner) allow(Gitlab::GlRepository).to receive(:parse).and_return([project, Gitlab::GlRepository::PROJECT])