Skip to content

Merge branch 'production' into refactor/user-rdv-wizard #15650

Merge branch 'production' into refactor/user-rdv-wizard

Merge branch 'production' into refactor/user-rdv-wizard #15650

Workflow file for this run

name: CI
on:
push:
paths-ignore:
- 'docs/**'
jobs:
rubocop:
name: Ruby linter
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- run: bundle exec rubocop --parallel
lint_slim:
name: Slim Linter
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- run: bundle exec slim-lint app/views/
lint_prettier:
name: Lint SCSS with Prettier
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version-file: .node-version
cache: yarn
- name: Cache js dependencies
uses: actions/cache@v4
with:
key: node_modules-${{ hashFiles('yarn.lock') }}
path: node_modules
- run: yarn install
- run: yarn run prettier --check .
brakeman:
name: Security Checker
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- run: bundle exec brakeman
active_record_doctor:
name: active_record_doctor
runs-on: ubuntu-latest
services:
postgres:
image: postgres
env:
POSTGRES_USER: lapin_development
POSTGRES_PASSWORD: lapin_development
POSTGRES_DB: lapin_development
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports: ["5432:5432"]
steps:
- uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- name: Run active_record_doctor:missing_foreign_keys
run: bundle exec rails active_record_doctor:missing_foreign_keys
env:
HOST: http://example.com
POSTGRES_HOST: localhost
POSTGRES_PORT: 5432
POSTGRES_USER: lapin_development
POSTGRES_PASSWORD: lapin_development
POSTGRES_DB: lapin_development
- name: Run active_record_doctor:missing_non_null_constraint
run: bundle exec rails active_record_doctor:missing_non_null_constraint
env:
HOST: http://example.com
POSTGRES_HOST: localhost
POSTGRES_PORT: 5432
POSTGRES_USER: lapin_development
POSTGRES_PASSWORD: lapin_development
POSTGRES_DB: lapin_development
test_unit:
name: Unit Tests
runs-on: ubuntu-latest
services:
postgres:
image: postgres
env:
POSTGRES_USER: lapin_test
POSTGRES_PASSWORD: lapin_test
POSTGRES_DB: lapin_test
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports: ["5432:5432"]
steps:
- uses: actions/checkout@v4
- uses: WitherZuo/[email protected]
with:
timezoneLinux: "Europe/Paris"
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version-file: .node-version
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- name: Set up Redis
uses: zhulik/[email protected]
- name: Cache js dependencies
uses: actions/cache@v4
with:
key: node_modules-${{ hashFiles('yarn.lock') }}
path: node_modules
- name: Install JS dependencies
run: yarn install
- name: Precompile assets
run: yarn run build
- name: Prepare runtime log cache key
run: ls spec/**/*.rb > tmp/spec_files.txt
- name: Cache parallel test unit spec runtime log
uses: actions/cache@v4
with:
key: unit-spec-runtime-log-${{ hashFiles('tmp/spec_files.txt') }}
path: tmp/parallel_runtime_rspec.log
# By setting up and running in the same call, we save the app boot time
- name: Setup parallel tests and run spec
run: RAILS_ENV=test bundle exec rake parallel:drop parallel:create parallel:load_schema parallel:spec['spec\/(?!features)']
env:
HOST: http://example.com
POSTGRES_HOST: localhost
POSTGRES_PORT: 5432
POSTGRES_USER: lapin_test
POSTGRES_PASSWORD: lapin_test
POSTGRES_DB: lapin_test
test_features:
name: Feature Tests
runs-on: ubuntu-latest
strategy:
matrix:
# cette strategy permet de lancer deux jobs de feature specs en parallèle pour accélérer l’éxecution
dirname: [agents, "*"]
include:
- dirname: agents
command: "parallel:spec[spec/features/agents]"
- dirname: "*"
command: "parallel:spec['spec/features/(?!agents)']"
services:
postgres:
image: postgres
env:
POSTGRES_USER: lapin_test
POSTGRES_PASSWORD: lapin_test
POSTGRES_DB: lapin_test
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports: ["5432:5432"]
steps:
- uses: actions/checkout@v4
- uses: WitherZuo/[email protected]
with:
timezoneLinux: "Europe/Paris"
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version-file: .node-version
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- name: Set up Redis
uses: zhulik/[email protected]
- name: Cache js dependencies
uses: actions/cache@v4
with:
key: node_modules-${{ hashFiles('yarn.lock') }}
path: node_modules
- name: Install JS dependencies
run: yarn install
- name: Precompile assets
run: yarn run build
- name: Prepare runtime log cache key
run: "ls spec/features/${{ matrix.dirname }}/**/*.rb > tmp/feature_spec_${{ matrix.dirname }}_files.txt"
- name: Cache parallel test feature spec runtime log
uses: actions/cache@v4
with:
key: feature-spec-runtime-log-${{ hashFiles(format('tmp/feature_spec_{0}_files.txt', matrix.dirname)) }}
path: tmp/parallel_runtime_rspec.log
# By setting up and running in the same call, we save the app boot time
- name: Setup parallel tests and run feature specs
run: "RAILS_ENV=test bundle exec rake parallel:drop parallel:create parallel:load_schema ${{ matrix.command }}"
env:
HOST: http://example.com
POSTGRES_HOST: localhost
POSTGRES_PORT: 5432
POSTGRES_USER: lapin_test
POSTGRES_PASSWORD: lapin_test
POSTGRES_DB: lapin_test
- uses: actions/upload-artifact@v4
if: always()
with:
name: artifacts-capybara
path: tmp/capybara
test_boot_without_db:
name: Boot web server without database
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version-file: .node-version
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: .ruby-version
bundler-cache: true
- name: Cache js dependencies
uses: actions/cache@v4
with:
key: node_modules-${{ hashFiles('yarn.lock') }}
path: node_modules
- run: yarn install
- run: bin/test_boot
env:
HOST: http://www.rdv-test.fr
notify_mattermost_failure:
name: "Notify Mattermost on workflow failure on production"
runs-on: ubuntu-latest
needs: [rubocop, lint_slim, lint_prettier, brakeman, active_record_doctor, test_unit, test_features, test_boot_without_db]
if: ${{ always() && contains(needs.*.result, 'failure') && github.ref == 'refs/heads/production' }}
steps:
- uses: mattermost/action-mattermost-notify@master
with:
MATTERMOST_WEBHOOK_URL: ${{ secrets.MATTERMOST_WEBHOOK_URL }}
TEXT: |
Erreur dans le [workflow de CI](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) sur la branche production. Le déploiement a probablement été interrompu.