mongoid 7.1.7 → 7.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +1 -1
- data/Rakefile +31 -0
- data/lib/config/locales/en.yml +13 -0
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
- data/lib/mongoid/association/proxy.rb +1 -1
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +1 -1
- data/lib/mongoid/association/referenced/has_many/proxy.rb +1 -1
- data/lib/mongoid/attributes.rb +8 -1
- data/lib/mongoid/config/environment.rb +9 -1
- data/lib/mongoid/contextual/atomic.rb +7 -2
- data/lib/mongoid/contextual/none.rb +3 -0
- data/lib/mongoid/criteria/queryable/selectable.rb +2 -2
- data/lib/mongoid/criteria/queryable/storable.rb +4 -4
- data/lib/mongoid/criteria.rb +1 -1
- data/lib/mongoid/document.rb +3 -2
- data/lib/mongoid/errors/empty_config_file.rb +26 -0
- data/lib/mongoid/errors/invalid_config_file.rb +26 -0
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/errors.rb +2 -0
- data/lib/mongoid/interceptable.rb +1 -1
- data/lib/mongoid/persistence_context.rb +3 -1
- data/lib/mongoid/reloadable.rb +5 -0
- data/lib/mongoid/tasks/database.rb +1 -1
- data/lib/mongoid/validatable/associated.rb +1 -1
- data/lib/mongoid/validatable/presence.rb +3 -3
- data/lib/mongoid/validatable/uniqueness.rb +1 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid.rb +1 -0
- data/lib/rails/generators/mongoid/config/config_generator.rb +8 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +1 -1
- data/spec/app/models/address.rb +4 -0
- data/spec/app/models/mop.rb +26 -0
- data/spec/app/models/person.rb +9 -0
- data/spec/integration/app_spec.rb +144 -87
- data/spec/integration/contextual/empty_spec.rb +142 -0
- data/spec/integration/document_spec.rb +21 -0
- data/spec/lite_spec_helper.rb +5 -5
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +17 -4
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +17 -0
- data/spec/mongoid/attributes_spec.rb +241 -0
- data/spec/mongoid/clients/factory_spec.rb +11 -0
- data/spec/mongoid/clients/options_spec.rb +11 -3
- data/spec/mongoid/config/environment_spec.rb +86 -8
- data/spec/mongoid/contextual/atomic_spec.rb +81 -29
- data/spec/mongoid/contextual/geo_near_spec.rb +1 -1
- data/spec/mongoid/criteria_spec.rb +4 -0
- data/spec/mongoid/document_query_spec.rb +51 -0
- data/spec/mongoid/document_spec.rb +21 -1
- data/spec/mongoid/errors/invalid_config_file_spec.rb +32 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +20 -8
- data/spec/mongoid/factory_spec.rb +2 -2
- data/spec/mongoid/persistable/savable_spec.rb +4 -4
- data/spec/mongoid/persistable/settable_spec.rb +30 -0
- data/spec/mongoid/persistable/updatable_spec.rb +2 -0
- data/spec/mongoid/persistable_spec.rb +2 -2
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/cluster_config.rb +19 -4
- data/spec/shared/lib/mrss/constraints.rb +67 -12
- data/spec/shared/lib/mrss/docker_runner.rb +10 -1
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +16 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +84 -33
- data/spec/shared/lib/mrss/spec_organizer.rb +32 -2
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +126 -32
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/server.sh +123 -26
- data/spec/shared/shlib/set_env.sh +4 -1
- data/spec/spec_helper.rb +3 -1
- data/spec/support/constraints.rb +0 -226
- data/spec/support/spec_config.rb +8 -0
- data.tar.gz.sig +0 -0
- metadata +555 -503
- metadata.gz.sig +0 -0
- data/spec/support/child_process_helper.rb +0 -76
- data/spec/support/lite_constraints.rb +0 -22
@@ -171,5 +171,21 @@ module Mrss
|
|
171
171
|
end
|
172
172
|
end
|
173
173
|
end
|
174
|
+
|
175
|
+
def require_active_support
|
176
|
+
before(:all) do
|
177
|
+
if !SpecConfig.instance.active_support?
|
178
|
+
skip 'This test requires ActiveSupport; set WITH_ACTIVE_SUPPORT=1 in environment'
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
def no_active_support
|
184
|
+
before(:all) do
|
185
|
+
if SpecConfig.instance.active_support?
|
186
|
+
skip 'This test requires no ActiveSupport; unset WITH_ACTIVE_SUPPORT in environment'
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
174
190
|
end
|
175
191
|
end
|
@@ -1,8 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
1
4
|
autoload :JSON, 'json'
|
2
5
|
require 'open-uri'
|
3
6
|
|
4
7
|
module Mrss
|
5
8
|
class ServerVersionRegistry
|
9
|
+
class Error < StandardError
|
10
|
+
end
|
11
|
+
|
12
|
+
class UnknownVersion < Error
|
13
|
+
end
|
14
|
+
|
15
|
+
class MissingDownloadUrl < Error
|
16
|
+
end
|
17
|
+
|
18
|
+
class BrokenDownloadUrl < Error
|
19
|
+
end
|
20
|
+
|
6
21
|
def initialize(desired_version, arch)
|
7
22
|
@desired_version, @arch = desired_version, arch
|
8
23
|
end
|
@@ -11,39 +26,16 @@ module Mrss
|
|
11
26
|
|
12
27
|
def download_url
|
13
28
|
@download_url ||= begin
|
14
|
-
|
15
|
-
version
|
16
|
-
version
|
17
|
-
|
18
|
-
# Sometimes the download situation is borked and there is a release
|
19
|
-
# with no downloads... skip those.
|
20
|
-
!version['downloads'].empty?
|
21
|
-
end
|
22
|
-
# Allow RC releases if there isn't a GA release.
|
23
|
-
version ||= info['versions'].detect do |version|
|
24
|
-
version['version'].start_with?(desired_version) &&
|
25
|
-
# Sometimes the download situation is borked and there is a release
|
26
|
-
# with no downloads... skip those.
|
27
|
-
!version['downloads'].empty?
|
29
|
+
version, version_ok = detect_version(current_catalog)
|
30
|
+
if version.nil?
|
31
|
+
version, full_version_ok = detect_version(full_catalog)
|
32
|
+
version_ok ||= full_version_ok
|
28
33
|
end
|
29
34
|
if version.nil?
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
35
|
-
# Get rid of rc, beta etc. versions if there is a GA release.
|
36
|
-
if versions.any? { |version| !version.include?('-') }
|
37
|
-
versions.delete_if do |version|
|
38
|
-
version['version'].include?('-')
|
39
|
-
end
|
40
|
-
end
|
41
|
-
# Versions are ordered with newest first, take the first one i.e. the most
|
42
|
-
# recent one.
|
43
|
-
version = versions.first
|
44
|
-
if version.nil?
|
45
|
-
STDERR.puts "Error: no version #{desired_version}"
|
46
|
-
exit 2
|
35
|
+
if version_ok
|
36
|
+
raise MissingDownloadUrl, "No downloads for version #{desired_version}"
|
37
|
+
else
|
38
|
+
raise UnknownVersion, "No version #{desired_version}"
|
47
39
|
end
|
48
40
|
end
|
49
41
|
dl = version['downloads'].detect do |dl|
|
@@ -51,13 +43,36 @@ module Mrss
|
|
51
43
|
dl['arch'] == 'x86_64'
|
52
44
|
end
|
53
45
|
unless dl
|
54
|
-
|
55
|
-
exit 2
|
46
|
+
raise MissingDownloadUrl, "No download for #{arch} for #{version['version']}"
|
56
47
|
end
|
57
48
|
url = dl['archive']['url']
|
58
49
|
end
|
50
|
+
rescue MissingDownloadUrl
|
51
|
+
if %w(2.6 3.0).include?(desired_version) && arch == 'ubuntu1604'
|
52
|
+
# 2.6 and 3.0 are only available for ubuntu1204 and ubuntu1404.
|
53
|
+
# Those ubuntus have ancient Pythons that don't work due to not
|
54
|
+
# implementing recent TLS protocols.
|
55
|
+
# Because of this we test on ubuntu1604 which has a newer Python.
|
56
|
+
# But we still need to retrieve ubuntu1404-targeting builds.
|
57
|
+
url = self.class.new('3.2', arch).download_url
|
58
|
+
unless url.include?('3.2.')
|
59
|
+
raise 'URL not in expected format'
|
60
|
+
end
|
61
|
+
url = case desired_version
|
62
|
+
when '2.6'
|
63
|
+
url.sub(/\b3\.2\.\d+/, '2.6.12')
|
64
|
+
when '3.0'
|
65
|
+
url.sub(/\b3\.2\.\d+/, '3.0.15')
|
66
|
+
else
|
67
|
+
raise NotImplementedError
|
68
|
+
end.sub('ubuntu1604', 'ubuntu1404')
|
69
|
+
else
|
70
|
+
raise
|
71
|
+
end
|
59
72
|
end
|
60
73
|
|
74
|
+
private
|
75
|
+
|
61
76
|
def uri_open(*args)
|
62
77
|
if RUBY_VERSION < '2.5'
|
63
78
|
open(*args)
|
@@ -65,5 +80,41 @@ module Mrss
|
|
65
80
|
URI.open(*args)
|
66
81
|
end
|
67
82
|
end
|
83
|
+
|
84
|
+
def detect_version(catalog)
|
85
|
+
candidate_versions = catalog['versions'].select do |version|
|
86
|
+
version['version'].start_with?(desired_version) &&
|
87
|
+
!version['version'].include?('-')
|
88
|
+
end
|
89
|
+
version_ok = !candidate_versions.empty?
|
90
|
+
# Sometimes the download situation is borked and there is a release
|
91
|
+
# with no downloads... skip those.
|
92
|
+
version = candidate_versions.detect do |version|
|
93
|
+
!version['downloads'].empty?
|
94
|
+
end
|
95
|
+
# Allow RC releases if there isn't a GA release.
|
96
|
+
if version.nil?
|
97
|
+
candidate_versions = catalog['versions'].select do |version|
|
98
|
+
version['version'].start_with?(desired_version)
|
99
|
+
end
|
100
|
+
version_ok ||= !candidate_versions.empty?
|
101
|
+
version = candidate_versions.detect do |version|
|
102
|
+
!version['downloads'].empty?
|
103
|
+
end
|
104
|
+
end
|
105
|
+
[version, version_ok]
|
106
|
+
end
|
107
|
+
|
108
|
+
def current_catalog
|
109
|
+
@current_catalog ||= begin
|
110
|
+
JSON.load(uri_open('http://downloads.mongodb.org/current.json').read)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def full_catalog
|
115
|
+
@full_catalog ||= begin
|
116
|
+
JSON.load(uri_open('http://downloads.mongodb.org/full.json').read)
|
117
|
+
end
|
118
|
+
end
|
68
119
|
end
|
69
120
|
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: utf-8
|
3
|
+
|
1
4
|
autoload :JSON, 'json'
|
2
5
|
autoload :FileUtils, 'fileutils'
|
3
6
|
autoload :Find, 'find'
|
@@ -22,18 +25,28 @@ module Mrss
|
|
22
25
|
end
|
23
26
|
|
24
27
|
def initialize(root: nil, classifiers:, priority_order:,
|
25
|
-
spec_root: nil, rspec_json_path: nil, rspec_all_json_path: nil
|
28
|
+
spec_root: nil, rspec_json_path: nil, rspec_all_json_path: nil,
|
29
|
+
randomize: false
|
26
30
|
)
|
27
31
|
@spec_root = spec_root || File.join(root, 'spec')
|
28
32
|
@classifiers = classifiers
|
29
33
|
@priority_order = priority_order
|
30
34
|
@rspec_json_path = rspec_json_path || File.join(root, 'tmp/rspec.json')
|
31
35
|
@rspec_all_json_path = rspec_all_json_path || File.join(root, 'tmp/rspec-all.json')
|
36
|
+
@randomize = !!randomize
|
32
37
|
end
|
33
38
|
|
34
39
|
attr_reader :spec_root, :classifiers, :priority_order
|
35
40
|
attr_reader :rspec_json_path, :rspec_all_json_path
|
36
41
|
|
42
|
+
def randomize?
|
43
|
+
@randomize
|
44
|
+
end
|
45
|
+
|
46
|
+
def seed
|
47
|
+
@seed ||= (rand * 100_000).to_i
|
48
|
+
end
|
49
|
+
|
37
50
|
def buckets
|
38
51
|
@buckets ||= {}.tap do |buckets|
|
39
52
|
Find.find(spec_root) do |path|
|
@@ -78,10 +91,20 @@ module Mrss
|
|
78
91
|
end
|
79
92
|
|
80
93
|
def run
|
94
|
+
run_buckets(*buckets.keys)
|
95
|
+
end
|
96
|
+
|
97
|
+
def run_buckets(*buckets)
|
81
98
|
FileUtils.rm_f(rspec_all_json_path)
|
82
99
|
|
100
|
+
buckets.each do |bucket|
|
101
|
+
if bucket && !self.buckets[bucket]
|
102
|
+
raise "Unknown bucket #{bucket}"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
buckets = Hash[self.buckets.select { |k, v| buckets.include?(k) }]
|
106
|
+
|
83
107
|
failed = []
|
84
|
-
buckets = self.buckets.dup
|
85
108
|
|
86
109
|
priority_order.each do |category|
|
87
110
|
if files = buckets.delete(category)
|
@@ -109,8 +132,12 @@ module Mrss
|
|
109
132
|
puts "Running #{category.to_s.gsub('_', ' ')} tests"
|
110
133
|
FileUtils.rm_f(rspec_json_path)
|
111
134
|
cmd = %w(rspec) + paths
|
135
|
+
if randomize?
|
136
|
+
cmd += %W(--order rand:#{seed})
|
137
|
+
end
|
112
138
|
|
113
139
|
begin
|
140
|
+
puts "Running #{cmd.join(' ')}"
|
114
141
|
ChildProcessHelper.check_call(cmd)
|
115
142
|
ensure
|
116
143
|
if File.exist?(rspec_json_path)
|
@@ -136,6 +163,9 @@ module Mrss
|
|
136
163
|
end
|
137
164
|
new.delete('version')
|
138
165
|
new.delete('summary_line')
|
166
|
+
# The spec organizer runs all buckets with the same seed, hence
|
167
|
+
# we can drop the seed from new results.
|
168
|
+
new.delete('seed')
|
139
169
|
unless new.empty?
|
140
170
|
raise "Unhandled rspec results keys: #{new.keys.join(', ')}"
|
141
171
|
end
|
@@ -55,9 +55,10 @@ FROM <%= base_image %>
|
|
55
55
|
# Ruby runtime dependencies: libyaml-0-2
|
56
56
|
# Compiling ruby libraries: gcc make
|
57
57
|
# Compiling pyhton packages: python2.7-dev
|
58
|
-
# JRuby: openjdk-8-
|
58
|
+
# JRuby: openjdk-8-jdk-headless
|
59
59
|
# Server dependencies: libsnmp30 libcurl3/libcurl4
|
60
60
|
# Determining OS we are running on: lsb-release
|
61
|
+
# Load balancer testing: haproxy
|
61
62
|
# Kerberos testing: krb5-user
|
62
63
|
# Local Kerberos server: krb5-kdc krb5-admin-server
|
63
64
|
# Installing mlaunch from git: git
|
@@ -65,8 +66,9 @@ FROM <%= base_image %>
|
|
65
66
|
# nio4r on JRuby: libgmp-dev
|
66
67
|
# Snappy compression: libsnappy-dev
|
67
68
|
# nokogiri: zlib1g-dev
|
68
|
-
# Mongoid testing: tzdata
|
69
|
+
# Mongoid testing: tzdata shared-mime-info
|
69
70
|
# Mongoid application testing: nodejs (8.x or newer)
|
71
|
+
# Test suite: procps for ps (to kill JRubies)
|
70
72
|
#
|
71
73
|
# We currently use Python 2-compatible version of mtools, which
|
72
74
|
# is installable via pip (which uses Python 2). All of the MongoDB
|
@@ -74,22 +76,44 @@ FROM <%= base_image %>
|
|
74
76
|
# therefore install python-pip in all configurations here.
|
75
77
|
|
76
78
|
<% packages = %w(
|
77
|
-
lsb-release bzip2 curl zsh
|
79
|
+
procps lsb-release bzip2 curl zsh
|
78
80
|
git make gcc libyaml-0-2 libgmp-dev zlib1g-dev libsnappy-dev
|
79
|
-
libsnmp30
|
80
81
|
krb5-user krb5-kdc krb5-admin-server libsasl2-dev libsasl2-modules-gssapi-mit
|
81
|
-
|
82
|
-
|
82
|
+
haproxy
|
83
|
+
python3-pip
|
84
|
+
tzdata shared-mime-info
|
83
85
|
) %>
|
84
86
|
|
85
|
-
|
86
|
-
|
87
|
-
<% packages
|
87
|
+
<% if distro =~ /ubuntu1404/ %>
|
88
|
+
# For building python & setuptools
|
89
|
+
<% packages += %w(libssl-dev unzip) %>
|
90
|
+
<% end %>
|
91
|
+
|
92
|
+
<% if distro !~ /ubuntu2004/ %>
|
93
|
+
<% packages += %w(python2.7-dev) %>
|
94
|
+
<% end %>
|
95
|
+
|
96
|
+
<% if distro =~ /ubuntu2004/ %>
|
97
|
+
<% packages << 'libsnmp35' %>
|
98
|
+
<% else %>
|
99
|
+
<% packages << 'libsnmp30' %>
|
100
|
+
<% end %>
|
101
|
+
|
102
|
+
<% if distro !~ /ubuntu2004/ %>
|
103
|
+
<% packages << 'python-pip' %>
|
104
|
+
<% end %>
|
105
|
+
|
106
|
+
<% if distro =~ /debian10/ %>
|
107
|
+
<% packages << 'openjdk-11-jdk-headless' %>
|
108
|
+
<% elsif distro =~ /ubuntu1404/ %>
|
109
|
+
# Ubuntu 14.04 only has openjdk 7, this is too old to be useful
|
110
|
+
<% else %>
|
111
|
+
<% packages << 'openjdk-8-jdk-headless' %>
|
88
112
|
<% end %>
|
89
113
|
|
90
114
|
# ubuntu1404, ubuntu1604: libcurl3
|
91
|
-
# ubuntu1804: libcurl4
|
92
|
-
<% if distro =~ /ubuntu1804/ %>
|
115
|
+
# ubuntu1804, ubuntu2004, debian10: libcurl4
|
116
|
+
<% if distro =~ /ubuntu1804|ubuntu2004|debian10/ %>
|
93
117
|
<% packages << 'libcurl4' %>
|
94
118
|
<% else %>
|
95
119
|
<% packages << 'libcurl3' %>
|
@@ -99,9 +123,36 @@ FROM <%= base_image %>
|
|
99
123
|
<% packages << 'nodejs' %>
|
100
124
|
<% end %>
|
101
125
|
|
126
|
+
<% if distro =~ /ubuntu2004/ %>
|
127
|
+
<% packages += %w(ruby ruby2.7 bundler python2 python2-dev) %>
|
128
|
+
<% end %>
|
129
|
+
|
102
130
|
RUN apt-get update && apt-get install -y <%= packages.join(' ') %>
|
103
131
|
<% else %>
|
104
132
|
|
133
|
+
<% if distro =~ /rhel6/ %>
|
134
|
+
|
135
|
+
# CentOS 6 is dead - to use it retrieve the packages from vault:
|
136
|
+
# https://stackoverflow.com/questions/53562691/error-cannot-retrieve-repository-metadata-repomd-xml-for-repository-base-pl
|
137
|
+
|
138
|
+
<%
|
139
|
+
|
140
|
+
cfg = <<-CFG
|
141
|
+
[base]
|
142
|
+
name=CentOS-$releasever - Base
|
143
|
+
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
|
144
|
+
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
|
145
|
+
baseurl=http://vault.centos.org/6.10/os/x86_64/
|
146
|
+
gpgcheck=1
|
147
|
+
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
|
148
|
+
CFG
|
149
|
+
|
150
|
+
%>
|
151
|
+
|
152
|
+
RUN printf "<%= cfg.gsub("\n", "\\n") %>" >/etc/yum.repos.d/CentOS-Base.repo
|
153
|
+
|
154
|
+
<% end %>
|
155
|
+
|
105
156
|
# Enterprise server: net-snmp
|
106
157
|
# lsb_release: redhat-lsb-core
|
107
158
|
# our runner scripts: which
|
@@ -118,7 +169,7 @@ FROM <%= base_image %>
|
|
118
169
|
|
119
170
|
RUN yum install -y redhat-lsb-core which git gcc libyaml krb5-server \
|
120
171
|
krb5-workstation cyrus-sasl-devel cyrus-sasl-gssapi java-1.8.0-openjdk \
|
121
|
-
net-snmp
|
172
|
+
net-snmp python3
|
122
173
|
|
123
174
|
<% if distro =~ /rhel6/ %>
|
124
175
|
|
@@ -134,27 +185,34 @@ FROM <%= base_image %>
|
|
134
185
|
RUN yum install -y python-devel
|
135
186
|
|
136
187
|
<% end %>
|
137
|
-
|
188
|
+
|
138
189
|
<% end %>
|
139
190
|
|
140
191
|
<% if preload? %>
|
141
192
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
193
|
+
<% if distro =~ /ubuntu1404/ %>
|
194
|
+
|
195
|
+
# I couldn't find a prebuilt package of anything more recent than 2.7.6
|
196
|
+
# for 14.04.
|
197
|
+
RUN curl --retry 3 -fL https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tar.xz | \
|
198
|
+
tar xfJ - && \
|
199
|
+
cd Python-2.7.16 && \
|
200
|
+
./configure && \
|
201
|
+
nice make -j4 && \
|
202
|
+
make install && \
|
203
|
+
cd .. && rm -rf Python-2.7.16
|
204
|
+
|
205
|
+
ENV PATH=/usr/local/bin:$PATH
|
206
|
+
|
207
|
+
RUN curl --retry 3 -fL -o setuptools-44.1.1.zip https://files.pythonhosted.org/packages/b2/40/4e00501c204b457f10fe410da0c97537214b2265247bc9a5bc6edd55b9e4/setuptools-44.1.1.zip && \
|
208
|
+
unzip setuptools-44.1.1.zip && \
|
209
|
+
cd setuptools-44.1.1 && \
|
210
|
+
python setup.py install && \
|
211
|
+
cd .. && rm -rf setuptools-44.1.1
|
212
|
+
|
213
|
+
<% end%>
|
214
|
+
|
215
|
+
<% if true || distro =~ /rhel|ubuntu1604/ %>
|
158
216
|
|
159
217
|
# Ubuntu 12.04 ships pip 1.0 which is ancient and does not work.
|
160
218
|
#
|
@@ -168,17 +226,48 @@ FROM <%= base_image %>
|
|
168
226
|
# therefore install it the manual way.
|
169
227
|
#
|
170
228
|
# https://pip.pypa.io/en/stable/installing/
|
171
|
-
RUN curl --retry 3 -fL https://
|
229
|
+
RUN curl --retry 3 -fL https://bootstrap.pypa.io/pip/2.7/get-pip.py | python2
|
230
|
+
|
231
|
+
<% end %>
|
172
232
|
|
233
|
+
# Current virtualenv fails with
|
234
|
+
# https://github.com/pypa/virtualenv/issues/1630
|
235
|
+
<% if distro =~ /ubuntu2004/ %>
|
236
|
+
RUN python3 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]'
|
237
|
+
<% else %>
|
238
|
+
RUN python2 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]'
|
173
239
|
<% end %>
|
174
240
|
|
175
241
|
RUN pip --version && \
|
176
242
|
pip install mtools-legacy[mlaunch]
|
177
243
|
|
178
244
|
<% if @env.fetch('MONGODB_VERSION') >= '4.4' %>
|
179
|
-
|
245
|
+
# ubuntu1604 installs MarkupSafe 0.0.0 here instead of 2.0.0+
|
246
|
+
# as specified by dependencies, causing OCSP mock to not work.
|
247
|
+
RUN python3 -mpip install asn1crypto oscrypto flask --upgrade
|
180
248
|
<% end %>
|
181
249
|
|
250
|
+
<% unless ruby_head? || system_ruby? %>
|
251
|
+
|
252
|
+
RUN curl --retry 3 -fL <%= ruby_toolchain_url %> |tar -xC /opt -Jf -
|
253
|
+
ENV PATH=/opt/rubies/<%= ruby %>/bin:$PATH \
|
254
|
+
USE_OPT_TOOLCHAIN=1
|
255
|
+
#ENV PATH=/opt/rubies/python/3/bin:$PATH
|
256
|
+
|
257
|
+
<% end %>
|
258
|
+
|
259
|
+
RUN curl --retry 3 -fL <%= server_download_url %> |tar xzf - && \
|
260
|
+
mv mongo*/ /opt/mongodb
|
261
|
+
ENV USE_OPT_MONGODB=1 USE_SYSTEM_PYTHON_PACKAGES=1
|
262
|
+
|
263
|
+
<% end %>
|
264
|
+
|
265
|
+
<% if distro =~ /debian|ubuntu/ %>
|
266
|
+
# mkdir was moved from /usr/bin to /bin and MongoDB's distros
|
267
|
+
# apparently keep using the old location.
|
268
|
+
# This definitely affects debian10.
|
269
|
+
# https://stackoverflow.com/questions/64653051/make-usr-bin-mkdir-command-not-found-during-gem-install-nokogiri-in-ubuntu
|
270
|
+
RUN test -f /usr/bin/mkdir || ln -s /bin/mkdir /usr/bin/mkdir
|
182
271
|
<% end %>
|
183
272
|
|
184
273
|
WORKDIR /app
|
@@ -191,7 +280,12 @@ WORKDIR /app
|
|
191
280
|
COPY lib/<%= project_lib_subdir %>/version.rb lib/<%= project_lib_subdir %>/version.rb
|
192
281
|
RUN bundle install
|
193
282
|
COPY .evergreen/patch-debuggers .evergreen/patch-debuggers
|
194
|
-
|
283
|
+
<% if system_ruby? %>
|
284
|
+
# Running under docker with root access
|
285
|
+
RUN .evergreen/patch-debuggers /var/lib/gems
|
286
|
+
<% else %>
|
287
|
+
RUN .evergreen/patch-debuggers /opt/rubies
|
288
|
+
<% end %>
|
195
289
|
|
196
290
|
<% end %>
|
197
291
|
|