Add ruby release targets (#11468)
Add bazel targets to create ruby release artifacts.
Should be run with:
```
bazel run ruby:release
bazel run ruby:jruby_release
```
Closes #11468
COPYBARA_INTEGRATE_REVIEW=https://github.com/protocolbuffers/protobuf/pull/11468 from deannagarcia:rubyTargets b7b7eb6865
PiperOrigin-RevId: 503277136
pull/11600/head
parent
196193d65c
commit
5b27b4f300
9 changed files with 263 additions and 4 deletions
@ -0,0 +1,58 @@ |
|||||||
|
name: Ruby Install Tests |
||||||
|
|
||||||
|
on: |
||||||
|
push: |
||||||
|
branches: |
||||||
|
- main |
||||||
|
- '[0-9]+.x' |
||||||
|
pull_request: |
||||||
|
branches: |
||||||
|
- main |
||||||
|
- '[0-9]+.x' |
||||||
|
workflow_dispatch: |
||||||
|
|
||||||
|
jobs: |
||||||
|
test_ruby_gems: |
||||||
|
name: Test ruby gems |
||||||
|
runs-on: ubuntu-20.04 |
||||||
|
strategy: |
||||||
|
fail-fast: false |
||||||
|
matrix: |
||||||
|
ruby: [2.6, 2.7, 3.0, 3.1, 3.2, jruby-9.2, jruby-9.3] |
||||||
|
|
||||||
|
steps: |
||||||
|
- uses: actions/checkout@v2 |
||||||
|
- name: Install bazel |
||||||
|
run: | |
||||||
|
sudo apt-get install -qy wget |
||||||
|
mkdir $HOME/bin |
||||||
|
wget -O $HOME/bin/bazel https://github.com/bazelbuild/bazel/releases/download/6.0.0/bazel-6.0.0-linux-x86_64 |
||||||
|
chmod a+x $HOME/bin/bazel |
||||||
|
- name: Install git |
||||||
|
run: | |
||||||
|
sudo apt-get install -qy --no-install-recommends git |
||||||
|
- name: Install ruby |
||||||
|
uses: ruby/setup-ruby@v1 |
||||||
|
with: |
||||||
|
ruby-version: ${{ matrix.ruby }} |
||||||
|
- name: Checkout |
||||||
|
uses: actions/checkout@v3 |
||||||
|
with: |
||||||
|
submodules: recursive |
||||||
|
- name: Build cruby gem |
||||||
|
run: $HOME/bin/bazel run ruby:release |
||||||
|
if: ${{ !contains(matrix.ruby, 'jruby') }} |
||||||
|
- name: Install cruby gem |
||||||
|
run: gem install bazel-bin/ruby/release.runfiles/com_google_protobuf/tmp/google-protobuf-* |
||||||
|
if: ${{ !contains(matrix.ruby, 'jruby') }} |
||||||
|
- name: Build jruby gem |
||||||
|
run: $HOME/bin/bazel run ruby:jruby_release |
||||||
|
if: ${{ contains(matrix.ruby, 'jruby') }} |
||||||
|
- name: Install jruby gem |
||||||
|
run: gem install bazel-bin/ruby/jruby_release.runfiles/com_google_protobuf/tmp/google-protobuf-* |
||||||
|
if: ${{ contains(matrix.ruby, 'jruby') }} |
||||||
|
- name: Test installation |
||||||
|
run: | |
||||||
|
bazel run //:protoc -- --proto_path=$GITHUB_WORKSPACE/src --proto_path=$GITHUB_WORKSPACE/ruby/tests --proto_path=$GITHUB_WORKSPACE/ruby --ruby_out=$GITHUB_WORKSPACE/ruby tests/test_import_proto2.proto |
||||||
|
bazel run //:protoc -- --proto_path=$GITHUB_WORKSPACE/src --proto_path=$GITHUB_WORKSPACE/ruby/tests --proto_path=$GITHUB_WORKSPACE/ruby --ruby_out=$GITHUB_WORKSPACE/ruby tests/basic_test.proto |
||||||
|
ruby ruby/tests/basic.rb |
@ -0,0 +1,63 @@ |
|||||||
|
#!/bin/bash |
||||||
|
# This file should be executed with jruby |
||||||
|
|
||||||
|
set -ex |
||||||
|
|
||||||
|
# --- begin runfiles.bash initialization --- |
||||||
|
# Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash). |
||||||
|
set -euo pipefail |
||||||
|
if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then |
||||||
|
if [[ -f "$0.runfiles_manifest" ]]; then |
||||||
|
export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest" |
||||||
|
elif [[ -f "$0.runfiles/MANIFEST" ]]; then |
||||||
|
export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST" |
||||||
|
elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then |
||||||
|
export RUNFILES_DIR="$0.runfiles" |
||||||
|
fi |
||||||
|
fi |
||||||
|
if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then |
||||||
|
source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash" |
||||||
|
elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then |
||||||
|
source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \ |
||||||
|
"$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)" |
||||||
|
else |
||||||
|
echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
# --- end runfiles.bash initialization --- |
||||||
|
|
||||||
|
# Make a temporary directory and move to it to do all packaging work |
||||||
|
mkdir -p tmp |
||||||
|
cd tmp |
||||||
|
|
||||||
|
# Move all generated files to lib/google/protobuf |
||||||
|
mkdir -p lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/any_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/api_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/descriptor_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/duration_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/empty_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/field_mask_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/source_context_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/struct_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/timestamp_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/type_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/wrappers_pb.rb)" lib/google/protobuf |
||||||
|
|
||||||
|
cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf_java.jar)" lib/google |
||||||
|
|
||||||
|
# Move all source files to the correct location |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf.rb)" lib/google |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/descriptor_dsl.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/message_exts.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/repeated_field.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/well_known_types.rb)" lib/google/protobuf |
||||||
|
|
||||||
|
# Move gemspec file to current directory |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/google.protobuf.gemspec)" . |
||||||
|
|
||||||
|
# Make all files global readable/writable/executable |
||||||
|
chmod -R 777 ./ |
||||||
|
|
||||||
|
# Build gem |
||||||
|
gem build google-protobuf.gemspec |
@ -0,0 +1,88 @@ |
|||||||
|
#!/bin/bash |
||||||
|
# This file should be executed with ruby |
||||||
|
|
||||||
|
set -ex |
||||||
|
|
||||||
|
# --- begin runfiles.bash initialization --- |
||||||
|
# Copy-pasted from Bazel's Bash runfiles library (tools/bash/runfiles/runfiles.bash). |
||||||
|
set -euo pipefail |
||||||
|
if [[ ! -d "${RUNFILES_DIR:-/dev/null}" && ! -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then |
||||||
|
if [[ -f "$0.runfiles_manifest" ]]; then |
||||||
|
export RUNFILES_MANIFEST_FILE="$0.runfiles_manifest" |
||||||
|
elif [[ -f "$0.runfiles/MANIFEST" ]]; then |
||||||
|
export RUNFILES_MANIFEST_FILE="$0.runfiles/MANIFEST" |
||||||
|
elif [[ -f "$0.runfiles/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then |
||||||
|
export RUNFILES_DIR="$0.runfiles" |
||||||
|
fi |
||||||
|
fi |
||||||
|
if [[ -f "${RUNFILES_DIR:-/dev/null}/bazel_tools/tools/bash/runfiles/runfiles.bash" ]]; then |
||||||
|
source "${RUNFILES_DIR}/bazel_tools/tools/bash/runfiles/runfiles.bash" |
||||||
|
elif [[ -f "${RUNFILES_MANIFEST_FILE:-/dev/null}" ]]; then |
||||||
|
source "$(grep -m1 "^bazel_tools/tools/bash/runfiles/runfiles.bash " \ |
||||||
|
"$RUNFILES_MANIFEST_FILE" | cut -d ' ' -f 2-)" |
||||||
|
else |
||||||
|
echo >&2 "ERROR: cannot find @bazel_tools//tools/bash/runfiles:runfiles.bash" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
# --- end runfiles.bash initialization --- |
||||||
|
|
||||||
|
# rvm use ruby-3.0 |
||||||
|
|
||||||
|
# Make a temporary directory and move to it to do all packaging work |
||||||
|
mkdir -p tmp |
||||||
|
cd tmp |
||||||
|
|
||||||
|
# Move all generated files to lib/google/protobuf |
||||||
|
mkdir -p lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/any_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/api_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/descriptor_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/duration_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/empty_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/field_mask_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/source_context_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/struct_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/timestamp_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/type_pb.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/src/google/protobuf/wrappers_pb.rb)" lib/google/protobuf |
||||||
|
|
||||||
|
# Move all utf-8 files to ext/google/protobuf_c/third_party/utf8_range |
||||||
|
UTF8_DIR=ext/google/protobuf_c/third_party/utf8_range |
||||||
|
mkdir -p $UTF8_DIR |
||||||
|
cp "$(rlocation utf8_range/LICENSE)" $UTF8_DIR/LICENSE |
||||||
|
cp "$(rlocation utf8_range/naive.c)" $UTF8_DIR |
||||||
|
cp "$(rlocation utf8_range/range2-neon.c)" $UTF8_DIR |
||||||
|
cp "$(rlocation utf8_range/range2-sse.c)" $UTF8_DIR |
||||||
|
cp "$(rlocation utf8_range/utf8_range.h)" $UTF8_DIR |
||||||
|
|
||||||
|
# Move all source files to the correct location |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/convert.c)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/convert.h)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/defs.c)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/defs.h)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/extconf.rb)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/map.c)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/map.h)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/message.c)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/message.h)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/protobuf.c)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/protobuf.h)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/repeated_field.c)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/repeated_field.h)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/ruby-upb.c)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/ruby-upb.h)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/ext/google/protobuf_c/wrap_memcpy.c)" ext/google/protobuf_c |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf.rb)" lib/google |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/descriptor_dsl.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/message_exts.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/repeated_field.rb)" lib/google/protobuf |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/lib/google/protobuf/well_known_types.rb)" lib/google/protobuf |
||||||
|
|
||||||
|
# Move gemspec file to current directory |
||||||
|
cp "$(rlocation com_google_protobuf/ruby/google.protobuf.gemspec)" . |
||||||
|
|
||||||
|
# Make all files global readable/writable/executable |
||||||
|
chmod -R 777 ./ |
||||||
|
|
||||||
|
# Build gem |
||||||
|
gem build google-protobuf.gemspec |
Loading…
Reference in new issue