diff --git a/.github/workflows/rspec.yml b/.github/workflows/rspec.yml new file mode 100644 index 00000000..2f936abf --- /dev/null +++ b/.github/workflows/rspec.yml @@ -0,0 +1,84 @@ +# .github/workflows/main.yaml +name: "TicketBooth CI: rspec" + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + main: + name: CI + runs-on: ubuntu-latest + + # If you need DB like MySQL then define service below. + # Example for PostgreSQL and Redis can be found here: + # https://github.com/actions/example-services/tree/master/.github/workflows + services: + postgresql: + image: postgres + env: + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "" + POSTGRES_HOST_AUTH_METHOD: "trust" + ports: + - 5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + redis: + image: redis + ports: + - 6379/tcp + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - uses: niden/actions-memcached@v7 + + - run: sudo apt-get update -yqq + - run: sudo apt-get install -yqq nc libpg-dev + + - name: "Verify Memcached is running" + run: echo -e "stats\nquit" | nc localhost 11211 | grep -e "accepting_conns 1" -q + + - uses: actions/checkout@v4 + + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.2.3' + bundler-cache: true + + - name: "Create and migrate the DB" + run: | + bin/rails db:create + bin/rails db:migrate + bin/rails db:test:prepare + + - name: "Run Rspec" + run: bundle exec rspec --format documentation + + - name: "Run Rubocop" + run: bundle exec rubocop + + + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.2.3' + bundler-cache: true + + - name: RuboCop + run: bin/rubocop --parallel diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml new file mode 100644 index 00000000..cc7e8753 --- /dev/null +++ b/.github/workflows/ruby.yml @@ -0,0 +1,59 @@ +name: "TicketBooth CI: Ruby" +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + # Label of the container job + container-job: + # Containers must run in Linux based operating systems + runs-on: ubuntu-latest + # Docker Hub image that `container-job` executes in + container: ruby:3.2 + + # Service containers to run with `container-job` + services: + postgres: + # Docker Hub image + image: postgres:16 + # Provide the password for postgres + env: + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "" + POSTGRES_HOST_AUTH_METHOD: "trust" + + # Set health checks to wait until postgres has started + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + redis: + # Docker Hub image + image: redis + # Set health checks to wait until redis has started + options: >- + --health-cmd "redis-cli ping" + --health-interval 10sa + --health-timeout 5s + --health-retries 5 + + steps: + - uses: niden/actions-memcached@v7 + - uses: actions/checkout@v4 + - uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1 + with: + ruby-version: '3.2.3' # Not needed with a .ruby-version file + bundler-cache: true + + - run: bundle install -j 12 + - run: | + bin/rails db:create + bin/rails db:migrate + bin/rails db:test:prepare + - run: bundle exec rspec --format documentation + - run: bundle exec rubocop + diff --git a/.github/workflows/rubyonrails.yml b/.github/workflows/rubyonrails.yml index 2581ea94..04e8b352 100644 --- a/.github/workflows/rubyonrails.yml +++ b/.github/workflows/rubyonrails.yml @@ -4,7 +4,7 @@ # # This workflow will install a prebuilt Ruby version, install dependencies, and # run tests and linters. -name: "Ruby on Rails CI" +name: "TicketBooth CI: Ruby on Rails" on: push: branches: [ "main" ] @@ -15,28 +15,41 @@ jobs: runs-on: ubuntu-latest services: postgres: - image: postgres:15-alpine + image: postgres ports: - "5432:5432" env: - POSTGRES_DB: tickets_test - POSTGRES_USER: postgres - POSTGRES_PASSWORD: password + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "" + POSTGRES_HOST_AUTH_METHOD: "trust" + + redis: + # Docker Hub image + image: redis + # Set health checks to wait until redis has started + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 env: RAILS_ENV: test DATABASE_URL: "postgres://postgres:password@localhost:5432/tickets_test" steps: + - run: sudo apt-get -yqq install libpq-dev libmemcached-dev libredis + - uses: niden/actions-memcached@v7 + - name: Checkout code - uses: actions/checkout@v3 - # Add or replace dependency steps here - - name: Install Ruby and gems - uses: ruby/setup-ruby@55283cc23133118229fd3f97f9336ee23a179fcf # v1.146.0 + uses: actions/checkout@v4 + + - uses: ruby/setup-ruby@v1 with: + ruby-version: '3.2.3' bundler-cache: true - # Add or replace database setup steps here + - name: Set up database schema run: bin/rails db:schema:load - # Add or replace test runners here + - name: Run tests run: bundle exec rspec @@ -44,10 +57,12 @@ jobs: 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 + uses: actions/checkout@v4 + + - uses: ruby/setup-ruby@v1 with: + ruby-version: '3.2.3' bundler-cache: true - - name: Lint Ruby files + + - name: RuboCop run: bin/rubocop --parallel diff --git a/.ruby-version b/.ruby-version index be94e6f5..b347b11e 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.2.2 +3.2.3