Skip to content

Add Replicate provider #1163

Add Replicate provider

Add Replicate provider #1163

Workflow file for this run

name: CI
on:
push:
branches: [ "main" ]
paths:
- 'lib/**'
- 'spec/**'
- 'gemfiles/**'
- 'Gemfile'
- 'Rakefile'
- 'Appraisals'
- 'ruby_llm.gemspec'
- '.github/workflows/cicd.yml'
pull_request:
branches: [ "main" ]
paths:
- 'lib/**'
- 'spec/**'
- 'gemfiles/**'
- 'Gemfile'
- 'Rakefile'
- 'Appraisals'
- 'ruby_llm.gemspec'
- '.github/workflows/cicd.yml'
workflow_call:
# Define default permissions for this workflow
permissions:
contents: read
packages: write # Needed for publishing to GitHub Packages
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
ruby-version: ['3.1', '3.2', '3.3', '3.4', 'jruby-10.0.1.0']
rails-version: ['rails-7.1', 'rails-7.2', 'rails-8.0']
exclude:
# Rails 8 requires Ruby 3.2+
- ruby-version: '3.1'
rails-version: 'rails-8.0'
# JRuby only supports up to 7.1 right now
- ruby-version: 'jruby-10.0.1.0'
rails-version: 'rails-8.0'
- ruby-version: 'jruby-10.0.1.0'
rails-version: 'rails-7.2'
steps:
- uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby-version }}
bundler-cache: true
- name: Install dependencies
run: |
bundle install
bundle exec appraisal ${{ matrix.rails-version }} bundle install
- name: Check code format
run: bundle exec rubocop
- name: Run tests
if: matrix.ruby-version != '3.4' || matrix.rails-version != 'rails-8.0'
run: bundle exec appraisal ${{ matrix.rails-version }} rspec --tag '~generator'
env: # Dummy environment variables for local providers
OLLAMA_API_BASE: http://localhost:11434/v1
GPUSTACK_API_BASE: http://localhost:11444/v1
GPUSTACK_API_KEY: test
SKIP_COVERAGE: true
- name: Run full test suite with coverage (latest Ruby/Rails)
if: matrix.ruby-version == '3.4' && matrix.rails-version == 'rails-8.0'
run: bundle exec appraisal ${{ matrix.rails-version }} rspec
env: # Dummy environment variables for local providers
OLLAMA_API_BASE: http://localhost:11434/v1
GPUSTACK_API_BASE: http://localhost:11444/v1
GPUSTACK_API_KEY: test
- name: Upload coverage to Codecov
if: matrix.ruby-version == '3.4' && matrix.rails-version == 'rails-8.0'
uses: codecov/codecov-action@v5
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
files: ./coverage/coverage.xml
fail_ci_if_error: false
- name: Run the test suite with Faraday v1
run: |
FARADAY_VERSION=1.10.3 bundle install
bundle exec appraisal ${{ matrix.rails-version }} bundle install
bundle exec appraisal ${{ matrix.rails-version }} rspec --tag '~generator'
env: # Dummy environment variables for local providers
OLLAMA_API_BASE: http://localhost:11434/v1
GPUSTACK_API_BASE: http://localhost:11444/v1
GPUSTACK_API_KEY: test
SKIP_COVERAGE: true
publish:
name: Build + Publish
needs: test
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.4'
bundler-cache: true
- name: Check if version needs publishing
id: check_version
run: |
VERSION_FILE="./lib/ruby_llm/version.rb"
VERSION=$(ruby -r $VERSION_FILE -e "puts RubyLLM::VERSION" 2>/dev/null)
if [ -z "$VERSION" ]; then
echo "Error: Could not extract VERSION from $VERSION_FILE" >&2
exit 1
fi
echo "Local version: $VERSION"
GEM_NAME="ruby_llm"
echo "Fetching published versions for '$GEM_NAME'..."
# Combine results from --all and --prerelease, extract, clean, unique sort
ALL_PUBLISHED_VERSIONS=$(( \
gem list ^${GEM_NAME}$ -r --all 2>/dev/null || true; \
gem list ^${GEM_NAME}$ -r --prerelease 2>/dev/null || true; \
) | sed -n 's/.*(\(.*\)).*/\1/p' \
| tr ',' '\n' \
| sed 's/^[[:space:]]*//;s/[[:space:]]*$//' \
| grep . \
| sort -u )
echo "Checking against published versions:"
if [ -n "$ALL_PUBLISHED_VERSIONS" ]; then
echo "$ALL_PUBLISHED_VERSIONS" | sed 's/^/ /' # Log found versions nicely
else
echo " (none found)"
fi
if echo "$ALL_PUBLISHED_VERSIONS" | grep -Fxq "$VERSION"; then
echo "Verdict: Version $VERSION already published."
echo "version_changed=false" >> $GITHUB_OUTPUT
else
echo "Verdict: Version $VERSION is new."
echo "version_changed=true" >> $GITHUB_OUTPUT
fi
shell: bash
- name: Verify cassettes are fresh
if: steps.check_version.outputs.version_changed == 'true'
run: bundle exec rake release:verify_cassettes
- name: Publish to GPR
if: steps.check_version.outputs.version_changed == 'true'
run: |
mkdir -p $HOME/.gem
touch $HOME/.gem/credentials
chmod 0600 $HOME/.gem/credentials
printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
gem build *.gemspec
output=$(gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem 2>&1) || {
echo "$output"
if echo "$output" | grep -q "already been pushed"; then
echo "Version already exists, skipping"
exit 0
else
exit 1
fi
}
env:
GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
OWNER: ${{ github.repository_owner }}
- name: Publish to RubyGems
if: steps.check_version.outputs.version_changed == 'true'
run: |
mkdir -p $HOME/.gem
touch $HOME/.gem/credentials
chmod 0600 $HOME/.gem/credentials
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
gem build *.gemspec
output=$(gem push *.gem 2>&1) || {
echo "$output"
if echo "$output" | grep -q "Repushing of gem versions is not allowed"; then
echo "Version already exists, skipping"
exit 0
else
exit 1
fi
}
env:
GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"