From 451b1fd4c30189ce21214e4ccd00b0327dd67c6d Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Wed, 24 Jan 2024 06:58:22 +0000 Subject: [PATCH 1/2] Merge pull request #1731 from ruby/gem-rbs-load Allow loading RBS from different version of a gem --- lib/rbs/environment_loader.rb | 16 ++++++++++- test/rbs/environment_loader_test.rb | 42 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/lib/rbs/environment_loader.rb b/lib/rbs/environment_loader.rb index d40fffa0a..7692a0c5d 100644 --- a/lib/rbs/environment_loader.rb +++ b/lib/rbs/environment_loader.rb @@ -82,7 +82,21 @@ def add_collection(lockfile) repository.add(lockfile.fullpath) lockfile.gems.each_value do |gem| - add(library: gem[:name], version: gem[:version], resolve_dependencies: false) + name = gem[:name] + locked_version = gem[:version] + + if (source = gem[:source]).is_a?(Collection::Sources::Rubygems) + # allow loading different version of a gem + + unless source.has?(name, locked_version) + if (spec, _ = self.class.gem_sig_path(name, nil)) + RBS.logger.warn { "Loading type definition from gem `#{name}-#{spec.version}` because locked version `#{locked_version}` is unavailable. Try `rbs collection update` to fix the (potential) issue." } + locked_version = spec.version.to_s + end + end + end + + add(library: gem[:name], version: locked_version, resolve_dependencies: false) end end diff --git a/test/rbs/environment_loader_test.rb b/test/rbs/environment_loader_test.rb index e38b2a498..03dd8425d 100644 --- a/test/rbs/environment_loader_test.rb +++ b/test/rbs/environment_loader_test.rb @@ -240,6 +240,48 @@ def test_loading_from_rbs_collection end end + def test_loading_from_rbs_collection__gem_version_mismatch + mktmpdir do |path| + lockfile_path = path.join('rbs_collection.lock.yaml') + lockfile_path.write(<<~YAML) + sources: + - name: ruby/gem_rbs_collection + remote: https://github.com/ruby/gem_rbs_collection.git + revision: b4d3b346d9657543099a35a1fd20347e75b8c523 + repo_dir: gems + path: '.gem_rbs_collection' + gems: + - name: rbs-amber + version: "1.1" + source: + type: "rubygems" + YAML + RBS::Collection::Installer.new(lockfile_path: lockfile_path, stdout: StringIO.new).install_from_lockfile + lock = RBS::Collection::Config::Lockfile.from_lockfile(lockfile_path: lockfile_path, data: YAML.load_file(lockfile_path)) + + repo = RBS::Repository.new() + + loader = EnvironmentLoader.new(repository: repo) + + io = StringIO.new + old_output = RBS.logger_output + RBS.logger_output = io + begin + loader.add_collection(lock) + env = Environment.new + loader.load(env: env) + ensure + RBS.logger_output = old_output + end + + assert_operator( + io.string, + :include?, + "Loading type definition from gem `rbs-amber-1.0.0` because locked version `1.1` is unavailable. Try `rbs collection update` to fix the (potential) issue." + ) + end + end + def test_loading_from_rbs_collection_git_source_without_install mktmpdir do |path| lockfile_path = path.join('rbs_collection.lock.yaml') From 83d4008edb748a86faf1e71e84183d9502fdaa34 Mon Sep 17 00:00:00 2001 From: Soutaro Matsumoto Date: Tue, 9 Jan 2024 05:12:38 +0000 Subject: [PATCH 2/2] Merge pull request #1714 from ruby/update-github-workflows Use `ruby/setup-ruby` --- .github/workflows/comments.yml | 16 ++++++------ .github/workflows/ruby.yml | 43 ++++++++++++++------------------- .github/workflows/typecheck.yml | 15 ++++++------ 3 files changed, 34 insertions(+), 40 deletions(-) diff --git a/.github/workflows/comments.yml b/.github/workflows/comments.yml index d24d9dcd7..e572cfeb1 100644 --- a/.github/workflows/comments.yml +++ b/.github/workflows/comments.yml @@ -8,18 +8,20 @@ on: merge_group: {} jobs: - test: + comments: runs-on: "ubuntu-latest" - container: - image: rubylang/ruby:3.2-dev-focal - env: - RUBY_COMMIT: v3_3_0 + # env: + # RUBY_COMMIT: v3_3_0 steps: - uses: actions/checkout@v4 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: "3.3" + bundler: none - name: Install dependencies run: | - apt-get update - apt-get install -y libdb-dev curl + sudo apt-get update + sudo apt-get install -y libdb-dev curl - name: Update rubygems & bundler run: | ruby -v diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml index 162526703..9f2ad2c15 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ruby.yml @@ -13,38 +13,32 @@ jobs: strategy: fail-fast: false matrix: - container_tag: - - master-nightly-focal - - 3.2-dev-focal - - 3.1-dev-focal - - 3.0-dev-focal + ruby: ['3.0', '3.1', '3.2', '3.3', head] job: - test - - stdlib_test - - rubocop validate test_doc build test_generate_stdlib - - lexer confirm_lexer - - lexer compile - exclude: - - container_tag: master-nightly-focal - job: confirm_lexer - - container_tag: 3.0-dev-focal + include: + - ruby: head + job: stdlib_test rubocop + - ruby: "3.3" job: stdlib_test - - container_tag: 3.1-dev-focal - job: stdlib_test - - container_tag: 3.2-dev-focal - job: stdlib_test - container: - image: rubylang/ruby:${{ matrix.container_tag }} + - ruby: "3.3" + job: lexer compile confirm_lexer + - ruby: "3.3" + job: rubocop validate test_doc build test_generate_stdlib steps: - uses: actions/checkout@v4 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby }} + bundler: none - name: Set working directory as safe run: git config --global --add safe.directory $(pwd) - name: Install dependencies run: | - apt-get update - apt-get install -y libdb-dev curl autoconf automake m4 libtool python3 + sudo apt-get update + sudo apt-get install -y libdb-dev curl autoconf automake m4 libtool python3 - name: Install Re2c - if: contains(matrix.job, 'lexer') + if: ${{ contains(matrix.job, 'lexer') }} run: | cd /tmp curl -L https://github.com/skvadrik/re2c/archive/refs/tags/3.1.tar.gz > re2c-3.1.tar.gz @@ -53,7 +47,7 @@ jobs: autoreconf -i -W all ./configure make - make install + sudo make install - name: Update rubygems & bundler run: | ruby -v @@ -62,14 +56,13 @@ jobs: run: | echo "NO_MINITEST=true" >> $GITHUB_ENV bundle config set --local without 'minitest' - if: ${{ contains(matrix.container_tag, 'master-nightly') }} + if: ${{ contains(matrix.ruby, 'head') }} - name: bin/setup run: | bin/setup - name: Run test run: | bundle exec rake ${{ matrix.job }} - continue-on-error: ${{ matrix.allow_failures == 'true' && (github.event_name == 'push' || github.event_name == 'merge_group') }} windows: runs-on: ${{ matrix.os }} diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml index e2278e2f4..5f737028a 100644 --- a/.github/workflows/typecheck.yml +++ b/.github/workflows/typecheck.yml @@ -8,23 +8,22 @@ on: merge_group: {} jobs: - test: + steep: runs-on: "ubuntu-latest" strategy: fail-fast: false - matrix: - container_tag: - - 3.2-dev-focal - container: - image: rubylang/ruby:${{ matrix.container_tag }} steps: - uses: actions/checkout@v4 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: "3.3" + bundler: none - name: Set working directory as safe run: git config --global --add safe.directory $(pwd) - name: Install dependencies run: | - apt-get update - apt-get install -y libdb-dev curl autoconf automake m4 libtool + sudo apt-get update + sudo apt-get install -y libdb-dev curl - name: Update rubygems & bundler run: | ruby -v