Skip to content

fix(Message): Improve file attachment handling by rejecting empty str… #499

fix(Message): Improve file attachment handling by rejecting empty str…

fix(Message): Improve file attachment handling by rejecting empty str… #499

Workflow file for this run

name: CI
on:
push:
branches: [ "main" ]
paths:
- 'lib/**'
- 'spec/**'
- 'Gemfile'
- 'Rakefile'
- 'ruby_llm.gemspec'
- '.github/workflows/cicd.yml'
pull_request:
branches: [ "main" ]
paths:
- 'lib/**'
- 'spec/**'
- 'Gemfile'
- 'Rakefile'
- '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']
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
- name: Check code format
run: bundle exec rubocop
- name: Run tests
run: bundle exec rspec
env:
OLLAMA_API_BASE: http://localhost:11434/v1 # dummy
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
files: ./coverage/coverage.xml
fail_ci_if_error: false
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.3'
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: Test with real APIs before publishing
if: steps.check_version.outputs.version_changed == 'true'
run: |
echo "Removing VCR cassettes except Ollama ones..."
find spec/fixtures/vcr_cassettes -type f ! -name '*ollama*' -delete
echo "Running tests with real API calls..."
env -u CI bundle exec rspec --fail-fast
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
OLLAMA_API_BASE: http://localhost:11434/v1 # dummy
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- 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}}"