Skip to content

Commit 992b027

Browse files
committed
RUBY-2269 use docker for release builds
This commit works with the bundler rake tasks that output built gem to pkg subdir.
1 parent c9c34ea commit 992b027

File tree

4 files changed

+109
-0
lines changed

4 files changed

+109
-0
lines changed

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=mongo
6+
RELEASE_NAME=mongo-ruby-driver-release
7+
VERSION_REQUIRE=mongo/version
8+
VERSION_CONSTANT_NAME=Mongo::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

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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+
8+
WORKDIR /app
9+
10+
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)