Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
.idea
.bundle
gemfiles/*.lock
gemfiles/bin
gemfiles
Copy link
Member

@Nuzair46 Nuzair46 Jul 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this a good idea to ignore the whole gemfiles folder? should be just lockfiles only right?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a good question, but since all those files are anyway auto generated by appraisal install I think it does not really make sense to keep it in the repo?

log
pkg
spec/app/**/db/*.sqlite*
Expand Down
85 changes: 60 additions & 25 deletions Appraisals
Original file line number Diff line number Diff line change
@@ -1,58 +1,93 @@
# Rails 5.x, 6.0 requires Ruby < 3
if RUBY_ENGINE == 'ruby' && RUBY_VERSION <= '3.0'
max_ruby_version = ->(version) {
RUBY_ENGINE == 'ruby' && Gem::Version.new(RUBY_VERSION) <= Gem::Version.new(version)
}

min_ruby_version = ->(version) {
RUBY_ENGINE == 'ruby' && Gem::Version.new(RUBY_VERSION) >= Gem::Version.new(version)
}

# Rails 5.x, 6.0 require Ruby < 3
if max_ruby_version.call('3.0')
appraise 'rails-5.2' do
gem 'activerecord-jdbcsqlite3-adapter', '~> 52.5', platform: :jruby
gem 'bootsnap', '~> 1.4'
gem 'rails', '5.2.8.1'
gem 'rails', '~> 5.2.0'
gem 'rspec-rails', '~> 3.7'
gem 'sqlite3', '< 1.4.0', platform: :ruby
end

appraise 'rails-6.0' do
gem 'activerecord-jdbcsqlite3-adapter', '~> 60.1', platform: :jruby
gem 'bootsnap', '~> 1.4'
gem 'rails', '6.0.6.1'
gem 'rails', '~> 6.0.0'
gem 'rspec-rails', '~> 3.7'
gem 'sqlite3', '~> 1.4.0', platform: :ruby
gem 'sqlite3', '~> 1', platform: :ruby
end
end

# Test rails 6.1 with psych >= 4
appraise 'rails-6.1' do
gem 'activerecord-jdbcsqlite3-adapter', '~> 61.1', platform: :jruby
gem 'bootsnap', '>= 1.4.4'
gem 'drb', '~> 2.2' if RUBY_VERSION >= '3.4'
gem 'mutex_m', '~> 0.2.0' if RUBY_VERSION >= '3.4'
gem 'rails', '6.1.7.10'
gem 'rspec-rails', '~> 5.0'
gem 'sqlite3', '~> 1.4', platform: :ruby
gem 'drb', '~> 2.2' if min_ruby_version.call('3.4')
gem 'mutex_m', '~> 0.2.0' if min_ruby_version.call('3.4')
gem 'psych', '>= 4'
gem 'rails', '~> 6.1.0'
gem 'rspec-rails', '~> 5.0'
gem 'sqlite3', '~> 1', platform: :ruby
end

# Temporarily exclude Truffleruby and JRuby from testing in Rails 7.x until they fix the issues upstream.
# See https://github.com/rubyconfig/config/pull/344#issuecomment-1766209753
# if (RUBY_ENGINE == 'ruby' && RUBY_VERSION >= '2.7') || RUBY_ENGINE != 'ruby'
if RUBY_ENGINE == 'ruby' && RUBY_VERSION >= '2.7'
# Rails 7.0 require Ruby > 2.7
if min_ruby_version.call('2.7') || RUBY_ENGINE != 'ruby'
appraise 'rails-7.0' do
gem 'activerecord-jdbcsqlite3-adapter', '~> 70.1', platform: :jruby
gem 'sqlite3', '~> 1.6.4', platform: :ruby
gem 'bootsnap', '>= 1.4.4'
gem 'drb', '~> 2.2' if RUBY_VERSION >= '3.4'
gem 'mutex_m', '~> 0.2.0' if RUBY_VERSION >= '3.4'
gem 'rails', '7.0.8.7'
gem 'rspec-rails', '~> 6.0.3'
gem 'sprockets-rails', '~> 3.4.2'
gem 'drb', '~> 2.2' if min_ruby_version.call('3.4')
gem 'mutex_m', '~> 0.2.0' if min_ruby_version.call('3.4')
gem 'psych', '>= 4'
gem 'rails', '~> 7.0.0'
gem 'rspec-rails', '~> 7.0'
gem 'sprockets-rails', '~> 3.5.2'
gem 'sqlite3', '~> 1', platform: :ruby
end
end

# Rails 7.1 require Ruby > 2.7
if min_ruby_version.call('2.7') && RUBY_ENGINE != 'jruby'
appraise 'rails-7.1' do
gem 'activerecord-jdbcsqlite3-adapter', '~> 70.1', platform: :jruby
gem 'sqlite3', '~> 1.6.6', platform: :ruby
gem 'bootsnap', '>= 1.16.0'
gem 'rails', '7.1.5.1'
gem 'rspec-rails', '~> 6.0.3'
gem 'sprockets-rails', '~> 3.4.2'
gem 'psych', '>= 4'
gem 'rails', '~> 7.1.0'
gem 'rspec-rails', '~> 7.0'
gem 'sprockets-rails', '~> 3.5.2'
gem 'sqlite3', '~> 1', platform: :ruby
end

end

# Rails 7.2 requires Ruby > 3.1
if min_ruby_version.call('3.1.0') && RUBY_ENGINE != 'jruby'
appraise 'rails-7.2' do
gem 'activerecord-jdbcsqlite3-adapter', '~> 70.1', platform: :jruby
gem 'bootsnap', '>= 1.16.0'
gem 'psych', '>= 4'
gem 'rails', '~> 7.2.0'
gem 'rspec-rails', '~> 7.0'
gem 'sprockets-rails', '~> 3.5.2'
gem 'sqlite3', '~> 1', platform: :ruby
end
end

# Rails 8.0 requires Ruby > 3.2
if min_ruby_version.call('3.2.0') && RUBY_ENGINE != 'jruby'
appraise 'rails-8.0' do
gem 'activerecord-jdbcsqlite3-adapter', '~> 70.1', platform: :jruby
gem 'bootsnap', '>= 1.16.0'
gem 'kamal', '~> 2.7.0'
gem 'rails', '~> 8.0.0'
gem 'rspec-rails', '~> 8.0'
gem 'psych', '>= 4'
gem 'sqlite3', '>= 2.1', platform: :ruby
end
end

Expand Down
10 changes: 8 additions & 2 deletions config.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,14 @@ Gem::Specification.new do |s|
# Default RSpec run will test against latest Rails app
unless ENV['APPRAISAL_INITIALIZED'] || ENV['GITHUB_ACTIONS']
gems_to_install = /gem "(.*?)", "(.*?)"(?!, platform: (?!\[:ruby\]))/
File.read(Dir['gemfiles/rails*.gemfile'].sort.last).scan(gems_to_install) do |name, version|
s.add_development_dependency name, version

if Dir.exist?('gemfiles')
rails_gemfiles = Dir['gemfiles/rails*.gemfile'].sort
unless rails_gemfiles.empty?
File.read(rails_gemfiles.last).scan(gems_to_install) do |name, version|
s.add_development_dependency name, version
end
end
end
end

Expand Down
11 changes: 0 additions & 11 deletions gemfiles/rails_5.2.gemfile

This file was deleted.

11 changes: 0 additions & 11 deletions gemfiles/rails_6.0.gemfile

This file was deleted.

14 changes: 0 additions & 14 deletions gemfiles/rails_6.1.gemfile

This file was deleted.

15 changes: 0 additions & 15 deletions gemfiles/rails_7.0.gemfile

This file was deleted.

13 changes: 0 additions & 13 deletions gemfiles/rails_7.1.gemfile

This file was deleted.

7 changes: 0 additions & 7 deletions gemfiles/sinatra.gemfile

This file was deleted.

48 changes: 48 additions & 0 deletions spec/app/rails_7.2/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# See https://docs.docker.com/engine/reference/builder/#dockerignore-file for more about ignoring files.

# Ignore git directory.
/.git/
/.gitignore

# Ignore bundler config.
/.bundle

# Ignore all environment files (except templates).
/.env*
!/.env*.erb

# Ignore all default key files.
/config/master.key
/config/credentials/*.key

# Ignore all logfiles and tempfiles.
/log/*
/tmp/*
!/log/.keep
!/tmp/.keep

# Ignore pidfiles, but keep the directory.
/tmp/pids/*
!/tmp/pids/.keep

# Ignore storage (uploaded files in development and any SQLite databases).
/storage/*
!/storage/.keep
/tmp/storage/*
!/tmp/storage/.keep

# Ignore assets.
/node_modules/
/app/assets/builds/*
!/app/assets/builds/.keep
/public/assets

# Ignore CI service files.
/.github

# Ignore development files
/.devcontainer

# Ignore Docker-related files
/.dockerignore
/Dockerfile*
9 changes: 9 additions & 0 deletions spec/app/rails_7.2/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# See https://git-scm.com/docs/gitattributes for more about git attribute files.

# Mark the database schema as having been generated.
db/schema.rb linguist-generated

# Mark any vendored files as having been vendored.
vendor/* linguist-vendored
config/credentials/*.yml.enc diff=rails_credentials
config/credentials.yml.enc diff=rails_credentials
12 changes: 12 additions & 0 deletions spec/app/rails_7.2/.github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
version: 2
updates:
- package-ecosystem: bundler
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 10
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 10
90 changes: 90 additions & 0 deletions spec/app/rails_7.2/.github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
name: CI

on:
pull_request:
push:
branches: [ main ]

jobs:
scan_ruby:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true

- name: Scan for common Rails security vulnerabilities using static analysis
run: bin/brakeman --no-pager

scan_js:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true

- name: Scan for security vulnerabilities in JavaScript dependencies
run: bin/importmap audit

lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true

- name: Lint code for consistent style
run: bin/rubocop -f github

test:
runs-on: ubuntu-latest

# services:
# redis:
# image: redis
# ports:
# - 6379:6379
# options: --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5
steps:
- name: Install packages
run: sudo apt-get update && sudo apt-get install --no-install-recommends -y google-chrome-stable curl libjemalloc2 libvips sqlite3

- name: Checkout code
uses: actions/checkout@v4

- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true

- name: Run tests
env:
RAILS_ENV: test
# REDIS_URL: redis://localhost:6379/0
run: bin/rails db:test:prepare test test:system

- name: Keep screenshots from failed system tests
uses: actions/upload-artifact@v4
if: failure()
with:
name: screenshots
path: ${{ github.workspace }}/tmp/screenshots
if-no-files-found: ignore
Loading