Skip to content

Rails Template CI #1551

Rails Template CI

Rails Template CI #1551

Workflow file for this run

name: Rails Template CI
on:
workflow_dispatch:
pull_request:
push:
branches:
- main
schedule:
# * is a special character in YAML so you have to quote this string
# * At 05:00 UTC every Monday, run the latest commit on the default or base branch
- cron: '0 5 * * MON'
concurrency:
# Pushing new changes to a branch will cancel any in-progress CI runs
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# Restrict jobs in this workflow to have no permissions by default; permissions
# should be granted per job as needed using a dedicated `permissions` block
permissions: {}
env:
# reduces noise from npm install
DISABLE_OPENCOLLECTIVE: true
OPEN_SOURCE_CONTRIBUTOR: true
NPM_CONFIG_FUND: false
NPM_CONFIG_AUDIT: false
jobs:
audit_dependencies:
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Audit dependencies for security vulnerabilities
uses: g-rath/check-with-osv-detector@main
with:
osv-detector-version: 0.13.0
test:
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-node@v4
with:
node-version-file: '.node-version'
cache: 'yarn'
- run: yarn install
- run: yarn run format-check
rubocop:
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install Ruby and Bundler
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
ruby-version: 'ruby'
- name: Run Rubocop
run: bundle exec rubocop
test_generated_apps:
permissions:
contents: read
runs-on: ubuntu-latest
strategy:
# don't stop all variants if one of them fails (we usually want to know
# how many fail)
fail-fast: false
matrix:
js_package_manager:
- name: npm
installer: npm
- name: yarn_berry
installer: yarn
linker: pnp
- name: yarn_berry
installer: yarn
linker: node-modules
- name: yarn_berry
installer: yarn
linker: pnpm
- name: yarn_classic
installer: yarn
- name: pnpm
installer: pnpm
- name: bun
installer: bun
variant:
- name: defaults
config_path: 'ackama_rails_template.config.yml'
install_actionlint: 'yes'
- name: all
config_path: 'ci/configs/all.yml'
install_actionlint: 'yes'
- name: all-typescript
config_path: 'ci/configs/all-typescript.yml'
install_actionlint: 'yes'
- name: basic
config_path: 'ci/configs/basic.yml'
- name: basic-typescript
config_path: 'ci/configs/basic-typescript.yml'
- name: github_actions
config_path: 'ci/configs/github_actions.yml'
install_actionlint: 'yes'
- name: react
config_path: 'ci/configs/react.yml'
- name: react-typescript
config_path: 'ci/configs/react-typescript.yml'
- name: sidekiq
config_path: 'ci/configs/sidekiq.yml'
- name: devise
config_path: 'ci/configs/devise.yml'
- name: basic_with_skips
config_path: 'ci/configs/basic.yml'
skips: --skip-spring --skip-javascript
- name: bootstrap
config_path: 'ci/configs/bootstrap.yml'
- name: bootstrap-typescript
config_path: 'ci/configs/bootstrap-typescript.yml'
- name: capistrano
config_path: 'ci/configs/deploy_with_capistrano.yml'
- name: ackama_ec2_capistrano
config_path: 'ci/configs/deploy_with_ackama_ec2_capistrano.yml'
services:
db:
image: postgres
env:
# The Postgres service fails its docker health check unless you
# specify these environment variables
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: anything # can be anything, is ignored by the tests
ports: ['5432:5432']
# prettier-ignore
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout this repo
uses: actions/checkout@v4
with:
persist-credentials: false
# this ensures that osv-detector is available for running bin/ci-run
- name: Check dependencies for vulnerabilities (and setup osv-detector)
uses: g-rath/check-with-osv-detector@main
with:
osv-detector-version: 0.13.0
# this ensures that actionlint is available for running bin/ci-run
- name: Setup ActionLint
if: matrix.variant.install_actionlint == 'yes'
run: |
bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)
sudo ln -s "$PWD/actionlint" /usr/local/bin/actionlint
- name: Install NodeJS
uses: actions/setup-node@v4
with:
node-version-file: '.node-version'
- name: install package manager
run: npm i -g ${{ matrix.js_package_manager.installer }}
# We don't cache gems or JS packages because we are actually testing how
# installation and setup works in this project so, while caching would
# make CI faster, it might hide problems.
- name: Install Ruby and Bundler
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
ruby-version: 'ruby'
- name: Setup git for committing
run: |
# We do some git commits during our testing so these need to be set
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
# prettier-ignore
- run: ./ci/bin/create-fake-js-package-managers ${{ matrix.js_package_manager.installer }}
- name: Run CI script
env:
# Remember that your app name becomes a top-level constant in the
# Rails app so you'll run into issues if that constant shares a name
# with a class provided by a gem. Basically, don't name your app
# "react", "sidekiq" etc.
APP_NAME: ${{ matrix.variant.name }}-demo
CONFIG_PATH: ${{ matrix.variant.config_path }}
SKIPS: '--skip-javascript --skip-docker ${{ matrix.variant.skips }}'
PGUSER: postgres
PGPASSWORD: postgres
PGHOST: localhost
PACKAGE_JSON_FALLBACK_MANAGER: ${{ matrix.js_package_manager.name }}
PACKAGE_JSON_YARN_BERRY_LINKER:
${{ matrix.js_package_manager.linker }}
run: ./ci/bin/build-and-test