Skip to content

Commit 2d4d924

Browse files
p-mongop
andauthoredDec 1, 2020
Copy release tooling from driver + extra dependencies + move rspec to development & test environments (#4930)
Co-authored-by: Oleg Pudeyev <oleg@bsdpower.com>
1 parent 802277e commit 2d4d924

18 files changed

+164
-20
lines changed
 

‎Gemfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@ group :development do
1111
gem 'yard'
1212
end
1313

14+
group :development, :test do
15+
gem 'rspec-core', '~> 3.7'
16+
end
17+
1418
group :test do
1519
gem 'timecop'
1620
gem 'rspec-retry'
1721
gem 'benchmark-ips'
18-
gem 'rspec-core', '~> 3.7'
1922
gem 'rspec-expectations', '~> 3.7', '>= 3.8.4'
2023
gem 'rspec-mocks-diag', '~> 3.0'
2124
gem 'fuubar'

‎Rakefile

+2-7
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,8 @@ task :install => :build do
2727
system "sudo gem install mongoid-#{Mongoid::VERSION}.gem"
2828
end
2929

30-
task :release => :build do
31-
system "git tag -a v#{Mongoid::VERSION} -m 'Tagging #{Mongoid::VERSION}'"
32-
system "git push --tags"
33-
system "gem push mongoid-#{Mongoid::VERSION}.gem"
34-
system "rm mongoid-#{Mongoid::VERSION}.gem"
30+
task :release do
31+
raise "Please use ./release.sh to release"
3532
end
3633

3734
RSpec::Core::RakeTask.new("spec") do |spec|
@@ -90,5 +87,3 @@ namespace :release do
9087
end
9188
end
9289
end
93-
94-
task :release => ['release:check_private_key', 'release:do']

‎gemfiles/driver_master.gemfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@ group :development do
1313
gem 'yard'
1414
end
1515

16+
group :development, :test do
17+
gem 'rspec-core', '~> 3.7'
18+
end
19+
1620
group :test do
1721
gem 'timecop'
1822
gem 'rspec-retry'
1923
gem 'benchmark-ips'
20-
gem 'rspec-core', '~> 3.7'
2124
gem 'rspec-expectations', '~> 3.7', '>= 3.8.4'
2225
gem 'rspec-mocks-diag', '~> 3.0'
2326
gem 'fuubar'

‎gemfiles/driver_master_jruby.gemfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,14 @@ group :development do
1717
gem 'yard'
1818
end
1919

20+
group :development, :test do
21+
gem 'rspec-core', '~> 3.7'
22+
end
23+
2024
group :test do
2125
gem 'timecop'
2226
gem 'rspec-retry'
2327
gem 'benchmark-ips'
24-
gem 'rspec-core', '~> 3.7'
2528
gem 'rspec-expectations', '~> 3.7', '>= 3.8.4'
2629
gem 'rspec-mocks-diag', '~> 3.0'
2730
gem 'fuubar'

‎gemfiles/driver_min.gemfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@ group :development do
1212
gem 'yard'
1313
end
1414

15+
group :development, :test do
16+
gem 'rspec-core', '~> 3.7'
17+
end
18+
1519
group :test do
1620
gem 'timecop'
1721
gem 'rspec-retry'
1822
gem 'benchmark-ips'
19-
gem 'rspec-core', '~> 3.7'
2023
gem 'rspec-expectations', '~> 3.7', '>= 3.8.4'
2124
gem 'rspec-mocks-diag', '~> 3.0'
2225
gem 'fuubar'

‎gemfiles/driver_min_jruby.gemfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,14 @@ group :development do
1515
gem 'yard'
1616
end
1717

18+
group :development, :test do
19+
gem 'rspec-core', '~> 3.7'
20+
end
21+
1822
group :test do
1923
gem 'timecop'
2024
gem 'rspec-retry'
2125
gem 'benchmark-ips'
22-
gem 'rspec-core', '~> 3.7'
2326
gem 'rspec-expectations', '~> 3.7', '>= 3.8.4'
2427
gem 'rspec-mocks-diag', '~> 3.0'
2528
gem 'fuubar'

‎gemfiles/driver_oldstable.gemfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@ group :development do
1313
gem 'yard'
1414
end
1515

16+
group :development, :test do
17+
gem 'rspec-core', '~> 3.7'
18+
end
19+
1620
group :test do
1721
gem 'timecop'
1822
gem 'rspec-retry'
1923
gem 'benchmark-ips'
20-
gem 'rspec-core', '~> 3.7'
2124
gem 'rspec-expectations', '~> 3.7', '>= 3.8.4'
2225
gem 'rspec-mocks-diag', '~> 3.0'
2326
gem 'fuubar'

‎gemfiles/driver_oldstable_jruby.gemfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,14 @@ group :development do
1515
gem 'yard'
1616
end
1717

18+
group :development, :test do
19+
gem 'rspec-core', '~> 3.7'
20+
end
21+
1822
group :test do
1923
gem 'timecop'
2024
gem 'rspec-retry'
2125
gem 'benchmark-ips'
22-
gem 'rspec-core', '~> 3.7'
2326
gem 'rspec-expectations', '~> 3.7', '>= 3.8.4'
2427
gem 'rspec-mocks-diag', '~> 3.0'
2528
gem 'fuubar'

‎gemfiles/driver_stable.gemfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@ group :development do
1313
gem 'yard'
1414
end
1515

16+
group :development, :test do
17+
gem 'rspec-core', '~> 3.7'
18+
end
19+
1620
group :test do
1721
gem 'timecop'
1822
gem 'rspec-retry'
1923
gem 'benchmark-ips'
20-
gem 'rspec-core', '~> 3.7'
2124
gem 'rspec-expectations', '~> 3.7', '>= 3.8.4'
2225
gem 'rspec-mocks-diag', '~> 3.0'
2326
gem 'fuubar'

‎gemfiles/driver_stable_jruby.gemfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,14 @@ group :development do
1515
gem 'yard'
1616
end
1717

18+
group :development, :test do
19+
gem 'rspec-core', '~> 3.7'
20+
end
21+
1822
group :test do
1923
gem 'timecop'
2024
gem 'rspec-retry'
2125
gem 'benchmark-ips'
22-
gem 'rspec-core', '~> 3.7'
2326
gem 'rspec-expectations', '~> 3.7', '>= 3.8.4'
2427
gem 'rspec-mocks-diag', '~> 3.0'
2528
gem 'fuubar'

‎gemfiles/i18n-1.0.gemfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,14 @@ group :development do
1111
gem 'yard'
1212
end
1313

14+
group :development, :test do
15+
gem 'rspec-core', '~> 3.7'
16+
end
17+
1418
group :test do
1519
gem 'timecop'
1620
gem 'rspec-retry'
1721
gem 'benchmark-ips'
18-
gem 'rspec-core', '~> 3.7'
1922
gem 'rspec-expectations', '~> 3.7', '>= 3.8.4'
2023
gem 'rspec-mocks-diag', '~> 3.0'
2124
gem 'fuubar'

‎gemfiles/rails_51.gemfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@ group :development do
1010
gem 'yard'
1111
end
1212

13+
group :development, :test do
14+
gem 'rspec-core', '~> 3.7'
15+
end
16+
1317
group :test do
1418
gem 'timecop'
1519
gem 'rspec-retry'
1620
gem 'benchmark-ips'
17-
gem 'rspec-core', '~> 3.7'
1821
gem 'rspec-expectations', '~> 3.7', '>= 3.8.4'
1922
gem 'rspec-mocks-diag', '~> 3.0'
2023
gem 'fuubar'

‎gemfiles/rails_52.gemfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@ group :development do
1010
gem 'yard'
1111
end
1212

13+
group :development, :test do
14+
gem 'rspec-core', '~> 3.7'
15+
end
16+
1317
group :test do
1418
gem 'timecop'
1519
gem 'rspec-retry'
1620
gem 'benchmark-ips'
17-
gem 'rspec-core', '~> 3.7'
1821
gem 'rspec-expectations', '~> 3.7', '>= 3.8.4'
1922
gem 'rspec-mocks-diag', '~> 3.0'
2023
gem 'fuubar'

‎gemfiles/rails_master.gemfile

+4-1
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@ group :development do
1010
gem 'yard'
1111
end
1212

13+
group :development, :test do
14+
gem 'rspec-core', '~> 3.7'
15+
end
16+
1317
group :test do
1418
gem 'timecop'
1519
gem 'rspec-retry'
1620
gem 'benchmark-ips'
17-
gem 'rspec-core', '~> 3.7'
1821
gem 'rspec-expectations', '~> 3.7', '>= 3.8.4'
1922
gem 'rspec-mocks-diag', '~> 3.0'
2023
gem 'fuubar'

‎release.sh

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
NAME=mongoid
6+
RELEASE_NAME=mongoid-release
7+
VERSION_REQUIRE=mongoid/version
8+
VERSION_CONSTANT_NAME=Mongoid::VERSION
9+
10+
if ! test -f gem-private_key.pem; then
11+
echo "gem-private_key.pem missing - cannot release" 1>&2
12+
exit 1
13+
fi
14+
15+
VERSION=`ruby -Ilib -r$VERSION_REQUIRE -e "puts $VERSION_CONSTANT_NAME"`
16+
17+
echo "Releasing $NAME $VERSION"
18+
echo
19+
20+
for variant in mri; do
21+
docker build -f release/$variant/Dockerfile -t $RELEASE_NAME-$variant .
22+
23+
docker kill $RELEASE_NAME-$variant || true
24+
docker container rm $RELEASE_NAME-$variant || true
25+
26+
docker run -d --name $RELEASE_NAME-$variant -it $RELEASE_NAME-$variant
27+
28+
docker exec $RELEASE_NAME-$variant /app/release/$variant/build.sh
29+
30+
if test $variant = jruby; then
31+
docker cp $RELEASE_NAME-$variant:/app/pkg/$NAME-$VERSION-java.gem .
32+
else
33+
docker cp $RELEASE_NAME-$variant:/app/pkg/$NAME-$VERSION.gem .
34+
fi
35+
36+
docker kill $RELEASE_NAME-$variant
37+
done
38+
39+
echo
40+
echo Built: $NAME-$VERSION.gem
41+
#echo Built: $NAME-$VERSION-java.gem
42+
echo
43+
44+
git tag -a v$VERSION -m "Tagging release: $VERSION"
45+
git push origin v$VERSION
46+
47+
gem push $NAME-$VERSION.gem
48+
#gem push $NAME-$VERSION-java.gem

‎release/mri/Dockerfile

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
FROM debian:10
2+
3+
ENV DEBIAN_FRONTEND=noninteractive
4+
5+
RUN apt-get update && \
6+
apt-get -y install git ruby-bundler make gcc ruby-dev \
7+
libxml2-dev zlib1g-dev
8+
9+
WORKDIR /app
10+
11+
COPY . .

‎release/mri/build.sh

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
rm -f *.lock
6+
rm -f *.gem pkg/*.gem
7+
bundle install --without=test
8+
# Uses bundler gem tasks, outputs the built gem file to pkg subdir.
9+
rake build
10+
/app/release/verify-signature.sh pkg/*.gem

‎release/verify-signature.sh

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/bin/bash
2+
3+
set -ex
4+
5+
gem="$1"
6+
if test -z "$gem"; then
7+
echo "Usage: `basename $0` /path/to/built.gem" 1>&2
8+
exit 1
9+
fi
10+
11+
gem cert --add gem-public_cert.pem
12+
gem install -P HighSecurity $gem
13+
14+
exit
15+
16+
# The verification below does not work.
17+
# https://github.com/rubygems/rubygems/issues/3680
18+
19+
# https://docs.ruby-lang.org/en/2.7.0/Gem/Security.html
20+
21+
tar xf $gem
22+
23+
# Grab the public key from the gemspec
24+
25+
gem spec $gem cert_chain | \
26+
ruby -ryaml -e 'puts YAML.load(STDIN)' > actual_public_key.crt
27+
28+
for file in data.tar.gz metadata.tar.gz; do
29+
# Generate a SHA1 hash of the data.tar.gz
30+
31+
openssl dgst -sha1 < $file > actual.hash
32+
33+
# Verify the signature
34+
35+
openssl rsautl -verify -inkey actual_public_key.crt -certin \
36+
-in $file.sig > signed.hash
37+
38+
# Compare your hash to the verified hash
39+
40+
diff -s actual.hash signed.hash
41+
done

0 commit comments

Comments
 (0)
Please sign in to comment.