name: Push gem on: push: tags: - "v*" jobs: verify: runs-on: ubuntu-latest permissions: contents: read strategy: fail-fast: false matrix: ruby: ["3.2", "3.3", "3.4", "4.0"] steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false - name: Set up Ruby ${{ matrix.ruby }} uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0 with: ruby-version: ${{ matrix.ruby }} bundler-cache: true - name: Verify tag matches gem version env: RELEASE_TAG: ${{ github.ref_name }} run: >- ruby -Ilib -ropencode/rails_version -e 'expected = ENV.fetch("RELEASE_TAG").delete_prefix("v"); abort "tag #{expected.inspect} does not match gem #{Opencode::RAILS_VERSION.inspect}" unless Opencode::RAILS_VERSION == expected' - name: Run tests run: bundle exec rake test - name: Build gem run: gem build opencode-rails.gemspec - name: Verify gems load after install run: | client_dir="$(bundle show opencode-ruby)" (cd "$client_dir" && gem build opencode-ruby.gemspec) client_version="$(ruby -I"$client_dir/lib" -ropencode/version -e 'print Opencode::VERSION')" client_gem="$client_dir/opencode-ruby-${client_version}.gem" rails_gem="opencode-rails-$(ruby -Ilib -ropencode/rails_version -e 'print Opencode::RAILS_VERSION').gem" bundle_gem_path="$(bundle exec ruby -e 'puts Gem.path.join(":")')" export GEM_HOME="${RUNNER_TEMP}/opencode-rails-${{ matrix.ruby }}" export GEM_PATH="${GEM_HOME}:${bundle_gem_path}" mkdir -p "$GEM_HOME" gem install --local "$client_gem" --no-document gem install --local "$rails_gem" --no-document ruby -ropencode-rails -e ' root = File.realpath(ENV.fetch("GEM_HOME")) %w[opencode-ruby opencode-rails].each do |name| path = File.realpath(Gem.loaded_specs.fetch(name).full_gem_path) abort "#{name} loaded outside isolated GEM_HOME: #{path}" unless path.start_with?("#{root}/") end puts Opencode::RAILS_VERSION ' push: needs: verify if: ${{ github.server_url == 'https://github.com' }} runs-on: ubuntu-latest permissions: contents: write id-token: write environment: release steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false - uses: ruby/setup-ruby@003a5c4d8d6321bd302e38f6f0ec593f77f06600 # v1.319.0 with: ruby-version: "4.0" bundler-cache: true - uses: rubygems/release-gem@052cc82692552de3ef2b81fd670e41d13cba8092 # v1.4.0