diff --git a/.github/workflows/rails.yml b/.github/workflows/rails.yml new file mode 100644 index 0000000..6cb0618 --- /dev/null +++ b/.github/workflows/rails.yml @@ -0,0 +1,60 @@ +name: "Ruby on Rails CI" +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] +jobs: + test: + runs-on: ubuntu-latest + services: + mysql2: + image: mysql:5.7 + ports: + - "3306:3306" + env: + MYSQL_DATABASE: rails_test + MYSQL_USER: rails + MYSQL_PASSWORD: password + MYSQL_TCP_PORT: 3306 + MYSQL_RANDOM_ROOT_PASSWORD: true + MYSQL_ONETIME_PASSWORD: true + # Before continuing, verify the mysql container is reachable from the ubuntu host + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + + env: + RAILS_ENV: test + NODE_ENV: test + DATABASE_URL: "mysql2://rails:password@127.0.0.1:3306/rails_test" # localhost doesn't work because the application can't connect to the linux host socket + steps: + - name: Checkout code + uses: actions/checkout@v3 + - name: Install Ruby and gems + uses: ruby/setup-ruby@55283cc23133118229fd3f97f9336ee23a179fcf # v1.146.0 + with: + bundler-cache: true + - name: Set up database schema + run: bundle exec rails db:create db:migrate + - name: Install Node.js and packages + uses: actions/setup-node@v2 + with: + node-version: '18' + - name: Install Yarn and packages + run: npm install -g yarn@1.22.19 && yarn install + - name: Run webpacker + run: NODE_OPTIONS="--openssl-legacy-provider" bundle exec rails webpacker:compile # NODE_OPTIONS needs to be set inline to avoid a webpacker error with node 18 + - name: Run rspec + run: bundle exec rspec + + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + - name: Install Ruby and gems + uses: ruby/setup-ruby@55283cc23133118229fd3f97f9336ee23a179fcf # v1.146.0 + with: + bundler-cache: true + # Add or replace any other lints here + - name: Run rubocop + run: bundle exec rubocop diff --git a/Gemfile b/Gemfile index d4f5083..23dc72a 100644 --- a/Gemfile +++ b/Gemfile @@ -24,8 +24,8 @@ gem 'bootsnap', '>= 1.4.4', require: false group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: %i[mri mingw x64_mingw] - gem 'rspec-rails', '~> 6.0.0', groups: %i[development test] - gem 'factory_bot_rails', '~> 6.0.0', + gem 'factory_bot_rails', '~> 6.0.0', require: false + gem 'rspec-rails', '~> 6.0.0' gem 'rubocop', '~> 1.48', require: false gem 'rubocop-performance', '~> 1.16', require: false gem 'rubocop-rails', '~> 2.18', require: false diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 0000000..77bcf0f --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,15 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# This file is the source Rails uses to define your schema when running `bin/rails +# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to +# be faster and is potentially less error prone than running all of your +# migrations from scratch. Old migrations may fail to apply correctly if those +# migrations use external dependencies or application code. +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema.define(version: 0) do + +end