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