mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
cb7f1b1f0b
Summary:
When updating the Ruby version, 2 files are always needed to be updated (`.ruby-version` and `Gemfile`). When not in sync it can lead to an error like `Your Ruby version is 2.7.6, but your Gemfile specified 2.7.5`.
This lessens the files that need to be updated when upgrading the Ruby version and makes it in sync always. It makes the `.ruby-version` the source of truth.
### Example 1:
<img width="481" alt="Screenshot 2022-11-20 at 13 56 08" src="https://user-images.githubusercontent.com/36528176/202888191-450ab6d0-32a4-4d37-ad82-0beb2b22fa82.png">
When upgrading from `0.70.0` to `0.71.0-rc.0`. 2 files needs to be updated when it could have been just 1.
Source: https://react-native-community.github.io/upgrade-helper/?from=0.70.0&to=0.71.0-rc.0
### Example 2:
21c8837c12 updates 4 files (`.ruby-version`, `Gemfile`, `template/Gemfile`, `template/_ruby-version`) when it could have been just 2.
### Other Sources:
* https://andycroll.com/ruby/read-ruby-version-in-your-gemfile/
* https://render.com/docs/ruby-version (Heroku alternative)
* https://stackoverflow.com/a/35823132/9375533
## Changelog
[General] [Changed] - Read `.ruby-version` file in `Gemfile`
Pull Request resolved: https://github.com/facebook/react-native/pull/35410
Test Plan: Only `.ruby-version` and `template/_ruby-version` needs to be updated when upgrading Ruby version.
Reviewed By: christophpurrer, cipolleschi
Differential Revision: D41429147
Pulled By: rshest
fbshipit-source-id: 9e541a1d84aed5dca1e6f465c61bb0ba15574211
72 lines
1.9 KiB
Bash
Executable File
72 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
#
|
|
# This source code is licensed under the MIT license found in the
|
|
# LICENSE file in the root directory of this source tree.
|
|
|
|
set -e
|
|
|
|
if [ "$VERBOSE" = 1 ]; then
|
|
set -x
|
|
fi
|
|
|
|
case $(sed --help 2>&1) in
|
|
*GNU*) sed_i () { sed -i "$@"; };;
|
|
*) sed_i () { sed -i '' "$@"; };;
|
|
esac
|
|
|
|
SCRIPTS="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ROOT="$(dirname "$SCRIPTS")"
|
|
|
|
die() {
|
|
echo "ERROR: $*" >&2
|
|
exit 1
|
|
}
|
|
|
|
if [ $# -eq 1 ]; then
|
|
VERSION=$1
|
|
else
|
|
VERSION=$(ruby --version | cut -d' ' -f2 | cut -dp -f1)
|
|
fi
|
|
|
|
if [ -z "$VERSION" ]; then
|
|
die "Please provide an installed/usable Ruby version"
|
|
fi
|
|
echo "Setting Ruby version to: $VERSION"
|
|
|
|
cd "$ROOT" || die "Failed to change to $ROOT"
|
|
|
|
# do this first, so rbenv/rvm will automatically pick the desired version
|
|
echo "$VERSION" > .ruby-version
|
|
|
|
# make sure we're using it
|
|
CURRENT_VERSION=$(ruby --version | cut -d' ' -f2 | cut -dp -f1)
|
|
if [ -z "$CURRENT_VERSION" ]; then
|
|
# rbenv/rvm uses shims, the commands do exist, but do not return a version if misconfigured
|
|
die "Missing usable ruby, check your installation"
|
|
elif [ "$VERSION" != "$CURRENT_VERSION" ]; then
|
|
die "Plese use the ruby version you are trying to set: $VERSION ('$CURRENT_VERSION' in use)"
|
|
fi
|
|
|
|
echo "$VERSION" > template/_ruby-version
|
|
|
|
rm -f Gemfile.lock
|
|
|
|
export BUNDLE_APP_CONFIG="$ROOT/.bundle"
|
|
cp "$BUNDLE_APP_CONFIG/"* template/_bundle # sync!
|
|
|
|
bundle lock
|
|
|
|
# Disabling getting a potential fatal exit with for crossing filesystem boundary
|
|
export GIT_DISCOVERY_ACROSS_FILESYSTEM=1;
|
|
IS_GIT_REPO=$(git rev-parse --is-inside-work-tree 2> /dev/null || true)
|
|
export GIT_DISCOVERY_ACROSS_FILESYSTEM=0;
|
|
if [ "$IS_GIT_REPO" = "true" ]; then
|
|
git add \
|
|
.ruby-version \
|
|
Gemfile.lock \
|
|
template/_ruby-version
|
|
else
|
|
echo "Detected that you're not in Git. If on another SCM, don't forget to commit the edited files."
|
|
fi
|