summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Gemfile2
-rw-r--r--Gemfile.lock19
-rw-r--r--Gemfile.rails5.lock19
-rw-r--r--app/assets/javascripts/ide/components/new_dropdown/upload.vue8
-rw-r--r--app/views/projects/milestones/_deprecation_message.html.haml7
-rw-r--r--app/views/projects/milestones/show.html.haml1
-rw-r--r--changelogs/unreleased/47943-project-milestone-page-deprecation-message.yml5
-rw-r--r--changelogs/unreleased/ide-multiple-file-uploads.yml5
-rw-r--r--changelogs/unreleased/schema-changed-ee-backport.yml5
-rw-r--r--doc/administration/compliance.md18
-rw-r--r--doc/administration/index.md1
-rw-r--r--doc/user/group/img/groups.pngbin62070 -> 61507 bytes
-rw-r--r--doc/user/project/integrations/microsoft_teams.md2
-rw-r--r--locale/gitlab.pot12
-rw-r--r--scripts/schema_changed.sh13
-rw-r--r--spec/javascripts/ide/components/new_dropdown/upload_spec.js17
-rw-r--r--spec/javascripts/pdf/page_spec.js62
17 files changed, 127 insertions, 69 deletions
diff --git a/Gemfile b/Gemfile
index 8fbdb1917c7..7d9d7a99c71 100644
--- a/Gemfile
+++ b/Gemfile
@@ -368,7 +368,7 @@ group :development, :test do
gem 'benchmark-ips', '~> 2.3.0', require: false
- gem 'license_finder', '~> 3.1', require: false
+ gem 'license_finder', '~> 5.4', require: false
gem 'knapsack', '~> 1.16'
gem 'activerecord_sane_schema_dumper', gem_versions['activerecord_sane_schema_dumper']
diff --git a/Gemfile.lock b/Gemfile.lock
index 754b2e56de1..11921a64900 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -86,7 +86,6 @@ GEM
bindata (2.4.3)
binding_of_caller (0.7.2)
debug_inspector (>= 0.0.1)
- blankslate (2.1.2.4)
bootsnap (1.3.1)
msgpack (~> 1.0)
bootstrap_form (2.7.0)
@@ -465,13 +464,12 @@ GEM
actionmailer (>= 3.2)
letter_opener (~> 1.0)
railties (>= 3.2)
- license_finder (3.1.1)
+ license_finder (5.4.0)
bundler
- httparty
rubyzip
thor
- toml (= 0.1.2)
- with_env (> 1.0)
+ toml (= 0.2.0)
+ with_env (= 1.1.0)
xml-simple
licensee (8.9.2)
rugged (~> 0.24)
@@ -589,8 +587,7 @@ GEM
parallel (1.12.1)
parser (2.5.1.0)
ast (~> 2.4.0)
- parslet (1.5.0)
- blankslate (~> 2.0)
+ parslet (1.8.2)
path_expander (1.0.2)
peek (1.0.1)
concurrent-ruby (>= 0.9.0)
@@ -910,8 +907,8 @@ GEM
tilt (2.0.8)
timecop (0.8.1)
timfel-krb5-auth (0.8.3)
- toml (0.1.2)
- parslet (~> 1.5.0)
+ toml (0.2.0)
+ parslet (~> 1.8.0)
toml-rb (1.0.0)
citrus (~> 3.0, > 3.0)
trollop (2.1.3)
@@ -1084,7 +1081,7 @@ DEPENDENCIES
knapsack (~> 1.16)
kubeclient (~> 3.1.0)
letter_opener_web (~> 1.3.0)
- license_finder (~> 3.1)
+ license_finder (~> 5.4)
licensee (~> 8.9)
lograge (~> 0.5)
loofah (~> 2.2)
@@ -1205,4 +1202,4 @@ DEPENDENCIES
wikicloth (= 0.8.1)
BUNDLED WITH
- 1.16.3
+ 1.16.4
diff --git a/Gemfile.rails5.lock b/Gemfile.rails5.lock
index 5091c671b8b..02f9e112300 100644
--- a/Gemfile.rails5.lock
+++ b/Gemfile.rails5.lock
@@ -89,7 +89,6 @@ GEM
bindata (2.4.3)
binding_of_caller (0.7.2)
debug_inspector (>= 0.0.1)
- blankslate (2.1.2.4)
bootsnap (1.3.1)
msgpack (~> 1.0)
bootstrap_form (2.7.0)
@@ -468,13 +467,12 @@ GEM
actionmailer (>= 3.2)
letter_opener (~> 1.0)
railties (>= 3.2)
- license_finder (3.1.1)
+ license_finder (5.4.0)
bundler
- httparty
rubyzip
thor
- toml (= 0.1.2)
- with_env (> 1.0)
+ toml (= 0.2.0)
+ with_env (= 1.1.0)
xml-simple
licensee (8.9.2)
rugged (~> 0.24)
@@ -593,8 +591,7 @@ GEM
parallel (1.12.1)
parser (2.5.1.0)
ast (~> 2.4.0)
- parslet (1.5.0)
- blankslate (~> 2.0)
+ parslet (1.8.2)
path_expander (1.0.2)
peek (1.0.1)
concurrent-ruby (>= 0.9.0)
@@ -917,8 +914,8 @@ GEM
tilt (2.0.8)
timecop (0.8.1)
timfel-krb5-auth (0.8.3)
- toml (0.1.2)
- parslet (~> 1.5.0)
+ toml (0.2.0)
+ parslet (~> 1.8.0)
toml-rb (1.0.0)
citrus (~> 3.0, > 3.0)
trollop (2.1.3)
@@ -1094,7 +1091,7 @@ DEPENDENCIES
knapsack (~> 1.16)
kubeclient (~> 3.1.0)
letter_opener_web (~> 1.3.0)
- license_finder (~> 3.1)
+ license_finder (~> 5.4)
licensee (~> 8.9)
lograge (~> 0.5)
loofah (~> 2.2)
@@ -1215,4 +1212,4 @@ DEPENDENCIES
wikicloth (= 0.8.1)
BUNDLED WITH
- 1.16.3
+ 1.16.4
diff --git a/app/assets/javascripts/ide/components/new_dropdown/upload.vue b/app/assets/javascripts/ide/components/new_dropdown/upload.vue
index 5b1743bb30e..e2be805ed22 100644
--- a/app/assets/javascripts/ide/components/new_dropdown/upload.vue
+++ b/app/assets/javascripts/ide/components/new_dropdown/upload.vue
@@ -24,12 +24,6 @@ export default {
default: null,
},
},
- mounted() {
- this.$refs.fileUpload.addEventListener('change', this.openFile);
- },
- beforeDestroy() {
- this.$refs.fileUpload.removeEventListener('change', this.openFile);
- },
methods: {
createFile(target, file, isText) {
const { name } = file;
@@ -85,6 +79,8 @@ export default {
ref="fileUpload"
type="file"
class="hidden"
+ multiple
+ @change="openFile"
/>
</div>
</template>
diff --git a/app/views/projects/milestones/_deprecation_message.html.haml b/app/views/projects/milestones/_deprecation_message.html.haml
new file mode 100644
index 00000000000..b2cca3690d6
--- /dev/null
+++ b/app/views/projects/milestones/_deprecation_message.html.haml
@@ -0,0 +1,7 @@
+.banner-callout.compact.milestone-deprecation-message.prepend-top-20
+ .banner-graphic= image_tag 'illustrations/milestone_removing-page.svg'
+ .banner-body.prepend-left-10.append-right-10
+ %h5.banner-title.prepend-top-0
+ = _('The tabs below will be removed in a future version')
+ %p.milestone-banner-text
+ = _('Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}.').html_safe % { issue_boards_url: link_to(_('issue boards'), help_page_url('user/project/issue_board'), target: '_blank', rel: 'noopener noreferrer'), gitlab_issues_url: link_to(_('GitLab’s issue tracker'), 'https://gitlab.com/gitlab-org/gitlab-ce/issues', target: '_blank', rel: 'noopener noreferrer') }
diff --git a/app/views/projects/milestones/show.html.haml b/app/views/projects/milestones/show.html.haml
index 0a684f9016a..5859de61d71 100644
--- a/app/views/projects/milestones/show.html.haml
+++ b/app/views/projects/milestones/show.html.haml
@@ -67,5 +67,6 @@
.alert.alert-success.prepend-top-default
%span All issues for this milestone are closed. You may close this milestone now.
+ = render 'deprecation_message'
= render 'shared/milestones/tabs', milestone: @milestone
= render 'shared/milestones/sidebar', milestone: @milestone, project: @project, affix_offset: 153
diff --git a/changelogs/unreleased/47943-project-milestone-page-deprecation-message.yml b/changelogs/unreleased/47943-project-milestone-page-deprecation-message.yml
new file mode 100644
index 00000000000..b9f68e1c46c
--- /dev/null
+++ b/changelogs/unreleased/47943-project-milestone-page-deprecation-message.yml
@@ -0,0 +1,5 @@
+---
+title: Show deprecation message on project milestone page for category tabs
+merge_request: 21236
+author:
+type: changed
diff --git a/changelogs/unreleased/ide-multiple-file-uploads.yml b/changelogs/unreleased/ide-multiple-file-uploads.yml
new file mode 100644
index 00000000000..6bb73739864
--- /dev/null
+++ b/changelogs/unreleased/ide-multiple-file-uploads.yml
@@ -0,0 +1,5 @@
+---
+title: Enabled multiple file uploads in the Web IDE
+merge_request:
+author:
+type: added
diff --git a/changelogs/unreleased/schema-changed-ee-backport.yml b/changelogs/unreleased/schema-changed-ee-backport.yml
new file mode 100644
index 00000000000..f3b16fc0c27
--- /dev/null
+++ b/changelogs/unreleased/schema-changed-ee-backport.yml
@@ -0,0 +1,5 @@
+---
+title: Backport schema_changed.sh from EE which prints the diff if the schema is different
+merge_request: 21422
+author: Jasper Maes
+type: other
diff --git a/doc/administration/compliance.md b/doc/administration/compliance.md
new file mode 100644
index 00000000000..0414b3ec12e
--- /dev/null
+++ b/doc/administration/compliance.md
@@ -0,0 +1,18 @@
+# Compliance features
+
+You can configure the following GitLab features to help ensure that your GitLab instance meets common compliance standards. Click a feature name for further documentation.
+
+GitLab’s [security features](../security/README.md) may also help you meet relevant compliance standards.
+
+|Feature |GitLab tier |GitLab.com |
+| ---------| :--------: | :-------: |
+|**[Restrict SSH Keys](../README.html#administrator-documentation)**<br>Control the technology and key length of SSH keys used to access GitLab|Core+||
+|**[Granular user roles and flexible permissions](../user/permissions.html)**<br>Manage access and permissions with five different user roles and settings for external users. Set permissions according to people's role, rather than either read or write access to a repository. Don't share the source code with people that only need access to the issue tracker.|Core+|✓|
+|**[Enforce TOS acceptance](../user/admin_area/settings/terms.html)**<br>Enforce your users accepting new terms of service by blocking GitLab traffic.|Core+||
+|**[Email all users of a project, group, or entire server](../user/admin_area/settings/terms.html)**<br>An admin can email groups of users based on project or group membership, or email everyone using the GitLab instance. This is great for scheduled maintenance or upgrades.|Starter+||
+|**[Omnibus package supports log forwarding](https://docs.gitlab.com/omnibus/settings/logs.html#udp-log-forwarding)**<br>Forward your logs to a central system.|Starter+||
+|**[Lock project membership to group](../workflow/groups.html#lock-project-membership-to-members-of-this-group)**<br>Group owners can prevent new members from being added to projects within a group.|Starter+|✓|
+|**[LDAP group sync](https://docs.gitlab.com/ee/administration/auth/ldap-ee.html#group-sync)**<br>GitLab Enterprise Edition gives admins the ability to automatically sync groups and manage SSH keys, permissions, and authentication, so you can focus on building your product, not configuring your tools.|Starter+||
+|**[LDAP group sync filters](https://docs.gitlab.com/ee/administration/auth/ldap-ee.html#group-sync)**<br>GitLab Enterprise Edition Premium gives more flexibility to synchronize with LDAP based on filters, meaning you can leverage LDAP attributes to map GitLab permissions.|Premium+||
+|**[Audit logs](https://docs.gitlab.com/ee/administration/audit_events.html)**<br>To maintain the integrity of your code, GitLab Enterprise Edition Premium gives admins the ability to view any modifications made within the GitLab server in an advanced audit log system, so you can control, analyze and track every change.|Premium+||
+|**[Auditor users](https://docs.gitlab.com/ee/administration/auditor_users.html)**<br>Auditor users are users who are given read-only access to all projects, groups, and other resources on the GitLab instance.|Premium+|| \ No newline at end of file
diff --git a/doc/administration/index.md b/doc/administration/index.md
index 030a2f95e23..837a04f3e88 100644
--- a/doc/administration/index.md
+++ b/doc/administration/index.md
@@ -46,6 +46,7 @@ Learn how to install, configure, update, and maintain your GitLab instance.
- [Plugins](plugins.md): With custom plugins, GitLab administrators can introduce custom integrations without modifying GitLab's source code.
- [Enforcing Terms of Service](../user/admin_area/settings/terms.md)
- [Third party offers](../user/admin_area/settings/third_party_offers.md)
+- [Compliance](compliance.md): A collection of features from across the application that you may configure to help ensure that your GitLab instance and DevOps workflow meet compliance standards.
#### Customizing GitLab's appearance
diff --git a/doc/user/group/img/groups.png b/doc/user/group/img/groups.png
index efdfd5f82cd..2e27d46b370 100644
--- a/doc/user/group/img/groups.png
+++ b/doc/user/group/img/groups.png
Binary files differ
diff --git a/doc/user/project/integrations/microsoft_teams.md b/doc/user/project/integrations/microsoft_teams.md
index 5cf80a298ad..140c6738a49 100644
--- a/doc/user/project/integrations/microsoft_teams.md
+++ b/doc/user/project/integrations/microsoft_teams.md
@@ -2,7 +2,7 @@
## On Microsoft Teams
-To enable Microsoft Teams integration you must create an incoming webhook integration on Microsoft Teams by following the steps described in this [document](https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/connectors#setting-up-a-custom-incoming-webhook).
+To enable Microsoft Teams integration you must create an incoming webhook integration on Microsoft Teams by following the steps described in this [document](https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/connectors/connectors-using#setting-up-a-custom-incoming-webhook).
## On GitLab
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index b5778289b50..936b85146d4 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -2804,6 +2804,9 @@ msgstr ""
msgid "GitLab.com import"
msgstr ""
+msgid "GitLab’s issue tracker"
+msgstr ""
+
msgid "Gitaly"
msgstr ""
@@ -3393,6 +3396,9 @@ msgstr ""
msgid "Learn more"
msgstr ""
+msgid "Learn more about %{issue_boards_url}, to keep track of issues in multiple lists, using labels, assignees, and milestones. If you’re missing something from issue boards, please create an issue on %{gitlab_issues_url}."
+msgstr ""
+
msgid "Learn more about Kubernetes"
msgstr ""
@@ -5567,6 +5573,9 @@ msgstr ""
msgid "The staging stage shows the time between merging the MR and deploying code to the production environment. The data will be automatically added once you deploy to production for the first time."
msgstr ""
+msgid "The tabs below will be removed in a future version"
+msgstr ""
+
msgid "The testing stage shows the time GitLab CI takes to run every pipeline for the related merge request. The data will automatically be added after your first pipeline finishes running."
msgstr ""
@@ -6605,6 +6614,9 @@ msgstr ""
msgid "importing"
msgstr ""
+msgid "issue boards"
+msgstr ""
+
msgid "latest version"
msgstr ""
diff --git a/scripts/schema_changed.sh b/scripts/schema_changed.sh
index 5de2b35571d..b5e510c2367 100644
--- a/scripts/schema_changed.sh
+++ b/scripts/schema_changed.sh
@@ -1,9 +1,14 @@
-function schema_changed() {
- if [[ ! -z `git diff --name-only -- db/schema.rb` ]]; then
- echo "db/schema.rb after rake db:migrate:reset is different from one in the repository"
+#!/bin/sh
+
+schema_changed() {
+ if [ ! -z "$(git diff --name-only -- db/schema.rb)" ]; then
+ printf "db/schema.rb after rake db:migrate:reset is different from one in the repository"
+ printf "The diff is as follows:\n"
+ diff=$(git diff -p --binary -- db/schema.rb)
+ printf "%s" "$diff"
exit 1
else
- echo "db/schema.rb after rake db:migrate:reset matches one in the repository"
+ printf "db/schema.rb after rake db:migrate:reset matches one in the repository"
fi
}
diff --git a/spec/javascripts/ide/components/new_dropdown/upload_spec.js b/spec/javascripts/ide/components/new_dropdown/upload_spec.js
index 9c76500cfe5..70b885ede26 100644
--- a/spec/javascripts/ide/components/new_dropdown/upload_spec.js
+++ b/spec/javascripts/ide/components/new_dropdown/upload_spec.js
@@ -21,6 +21,23 @@ describe('new dropdown upload', () => {
vm.$destroy();
});
+ describe('openFile', () => {
+ it('calls for each file', () => {
+ const files = ['test', 'test2', 'test3'];
+
+ spyOn(vm, 'readFile');
+ spyOnProperty(vm.$refs.fileUpload, 'files').and.returnValue(files);
+
+ vm.openFile();
+
+ expect(vm.readFile.calls.count()).toBe(3);
+
+ files.forEach((file, i) => {
+ expect(vm.readFile.calls.argsFor(i)).toEqual([file]);
+ });
+ });
+ });
+
describe('readFile', () => {
beforeEach(() => {
spyOn(FileReader.prototype, 'readAsText');
diff --git a/spec/javascripts/pdf/page_spec.js b/spec/javascripts/pdf/page_spec.js
index ff1bfd7f650..a207f2afce6 100644
--- a/spec/javascripts/pdf/page_spec.js
+++ b/spec/javascripts/pdf/page_spec.js
@@ -3,53 +3,45 @@ import pdfjsLib from 'vendor/pdf';
import workerSrc from 'vendor/pdf.worker.min';
import PageComponent from '~/pdf/page/index.vue';
-import testPDF from '../fixtures/blob/pdf/test.pdf';
-
-const Component = Vue.extend(PageComponent);
+import mountComponent from 'spec/helpers/vue_mount_component_helper';
+import testPDF from 'spec/fixtures/blob/pdf/test.pdf';
describe('Page component', () => {
+ const Component = Vue.extend(PageComponent);
let vm;
let testPage;
- pdfjsLib.PDFJS.workerSrc = workerSrc;
-
- const checkRendered = (done) => {
- if (vm.rendering) {
- setTimeout(() => {
- checkRendered(done);
- }, 100);
- } else {
- done();
- }
- };
- beforeEach((done) => {
- pdfjsLib.getDocument(testPDF)
+ beforeEach(done => {
+ pdfjsLib.PDFJS.workerSrc = workerSrc;
+ pdfjsLib
+ .getDocument(testPDF)
.then(pdf => pdf.getPage(1))
- .then((page) => {
+ .then(page => {
testPage = page;
- done();
})
- .catch((error) => {
- done.fail(error);
- });
+ .then(done)
+ .catch(done.fail);
});
- describe('render', () => {
- beforeEach((done) => {
- vm = new Component({
- propsData: {
- page: testPage,
- number: 1,
- },
- });
-
- vm.$mount();
+ afterEach(() => {
+ vm.$destroy();
+ });
- checkRendered(done);
+ it('renders the page when mounting', done => {
+ const promise = Promise.resolve();
+ spyOn(testPage, 'render').and.callFake(() => promise);
+ vm = mountComponent(Component, {
+ page: testPage,
+ number: 1,
});
+ expect(vm.rendering).toBe(true);
- it('renders first page', () => {
- expect(vm.$el.tagName).toBeDefined();
- });
+ promise
+ .then(() => {
+ expect(testPage.render).toHaveBeenCalledWith(vm.renderContext);
+ expect(vm.rendering).toBe(false);
+ })
+ .then(done)
+ .catch(done.fail);
});
});