All threads / GitHub Actions with Ruby on Rails: Setting up Continuous Integration Discussion

Ask A Question

Notifications

You’re not receiving notifications from this thread.

GitHub Actions with Ruby on Rails: Setting up Continuous Integration Discussion

Congratulations on the video was very good, I will try today

Reply

I guess part of Continuous Integration is pushing the chanegs to production once the tests succeed.

Any suggestions on how to push to Heroku from within GitHub actions?

It's of course possible to configure this in Heroku, but I'm curious how to this from GitHub as it would allow you to then also run commands like database migrations after deployment.

Can't you just do this with automatic deploys in Heroku?

There are probably ways to do it, but I'd be prefer my CI setup to be self contained. For example I'm using Codeship right now which runs the tests, deploys to Heroku, runs migrations, and checks whether the site is still up.

I'm sure the same is possible with GitHub Actions, but I'm not just not sure how to push to the Heroku git repository from within GitHub.

You'd just use the Heroku action as the last step I believe: https://github.com/actions/heroku

Thanks. Would love to see an episode on that, as I think most people aren't used to doing Docker Deploys on Heroku.

Reply

Anybody has gotten github actions to work on the latest versions of Ruby? (2.6.4, 2.6.5)? Looks like the setup-ruby action has been outdated for a cople of months now.

Still waiting on them to release those Ruby versions. You can use a Ruby Docker image instead or compile and cache Ruby as part of the steps. Other than that, we just have to wait for 2.6.5 support to use setup-ruby. :(

Yeah I was trying that too!! It works fine for running regular tests I think, but it looks like you'd have to do a bit of an extra setup for system tests and chromedriver-helper. Have you had any luck running system tests?

Reply

Looks really interesting, thank you so much!

Reply

Thank you for Sharing This.

Reply

I was having issues with that YML file. This is my working versions. I use Rails, Postgresq, Redis, RSpec.

name: Continuous integration
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
db:
image: postgres:[email protected]:85d79cba2d4942dad7c99f84ec389a5b9cc84fb07a3dcd3aff0fb06948cdc03b
ports: ['5432:5432']
env:
POSTGRES_DB: test
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
redis:
image: redis
ports: ['6379:6379']
options: --entrypoint redis-server

steps:
  - uses: actions/[email protected]
  - name: Setup Ruby
    uses: actions/[email protected]
    with:
      ruby-version: 2.7
  - name: Build and test with Rake
    env:
      RAILS_ENV: test
      RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }}
    run: |
      sudo apt-get -yqq install libpq-dev
      gem install bundler
      bundle install --jobs 4 --retry 3
  - name: Db create Migrate
    env:
      DATABASE_URL: postgres://postgres:@localhost:5432/test
      REDIS_URL: redis://localhost:6379/0
      RAILS_ENV: test
      RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }}
    run: | 
      bundle exec rails db:schema:load
      bundle exec rspec ./spec
Reply

Just to confirm, even though the test runs on Github CI, it still uses the test DATABASE instead of production DATABASE right? So the main purpose here is to confirm the rest of the project members' code under testing within the whole project? The reason I ask this question is that before pushing the code to GitHub, I will definitely test it locally, so if it just for my own benefit, it won't need to be tested again on GitHub CI. Or maybe there are some others reasons which make the GitHub CI test necessary.

I am sorry if I asked any low-level questions, I am a newbie of Ruby on Rails and GitHub CI, I am really curious about this question, thanks for your time.

Yes, it uses a database used only inside the CI.

And you want to always run the CI even if your local tests pass. The CI environment may catch something you missed and is most important when you have multiple people merging changes together as it can be easy to miss something. Think of it as double checking your work constantly. 👍

Got it, thank you so much for the explanation.

Reply
Join the discussion

Want to stay up-to-date with Ruby on Rails?

Join 45,516+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.

    logo Created with Sketch.

    Ruby on Rails tutorials, guides, and screencasts for web developers learning Ruby, Rails, Javascript, Turbolinks, Stimulus.js, Vue.js, and more. Icons by Icons8

    © 2021 GoRails, LLC. All rights reserved.