Merge branch 'production' into feature/immutable-cache-for-assets #15646
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |