about summary refs log tree commit diff
path: root/.circleci/config.yml
blob: 3913a6b0f8071cc8db0531a0cc79bab71fb1f409 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
version: 2.1

orbs:
  ruby: circleci/ruby@2.0.0
  node: circleci/node@5.0.3

executors:
  default:
    parameters:
      ruby-version:
        type: string
    docker:
      - image: cimg/ruby:<< parameters.ruby-version >>
        environment:
          BUNDLE_JOBS: 3
          BUNDLE_RETRY: 3
          CONTINUOUS_INTEGRATION: true
          DB_HOST: localhost
          DB_USER: root
          DISABLE_SIMPLECOV: true
          RAILS_ENV: test
      - image: cimg/postgres:14.5
        environment:
          POSTGRES_USER: root
          POSTGRES_HOST_AUTH_METHOD: trust
      - image: cimg/redis:7.0

commands:
  install-system-dependencies:
    steps:
      - run:
          name: Install system dependencies
          command: |
            sudo apt-get update
            sudo apt-get install -y libicu-dev libidn11-dev
  install-ruby-dependencies:
    parameters:
      ruby-version:
        type: string
    steps:
      - run:
          command: |
            bundle config clean 'true'
            bundle config frozen 'true'
            bundle config without 'development production'
          name: Set bundler settings
      - ruby/install-deps:
          bundler-version: '2.3.26'
          key: ruby<< parameters.ruby-version >>-gems-v2
  wait-db:
    steps:
      - run:
          command: dockerize -wait tcp://localhost:5432 -wait tcp://localhost:6379 -timeout 1m
          name: Wait for PostgreSQL and Redis

jobs:
  build:
    docker:
      - image: cimg/ruby:3.2-node
        environment:
          RAILS_ENV: test
    steps:
      - checkout
      - install-system-dependencies
      - install-ruby-dependencies:
          ruby-version: '3.2'
      - node/install-packages:
          cache-version: v1
          pkg-manager: yarn
      - run:
          command: |
            export NODE_OPTIONS=--openssl-legacy-provider
            ./bin/rails assets:precompile
          name: Precompile assets
      - persist_to_workspace:
          paths:
            - public/assets
            - public/packs-test
          root: .

  test:
    parameters:
      ruby-version:
        type: string
    executor:
      name: default
      ruby-version: << parameters.ruby-version >>
    environment:
      ALLOW_NOPAM: true
      PAM_ENABLED: true
      PAM_DEFAULT_SERVICE: pam_test
      PAM_CONTROLLED_SERVICE: pam_test_controlled
    parallelism: 4
    steps:
      - checkout
      - install-system-dependencies
      - run:
          command: sudo apt-get install -y ffmpeg imagemagick libmagickcore-dev libmagickwand-dev libjpeg-dev libpng-dev libtiff-dev libwebp-dev libpam-dev
          name: Install additional system dependencies
      - run:
          command: bundle config with 'pam_authentication'
          name: Enable PAM authentication
      - install-ruby-dependencies:
          ruby-version: << parameters.ruby-version >>
      - attach_workspace:
          at: .
      - wait-db
      - run:
          command: ./bin/rails db:create db:schema:load db:seed
          name: Load database schema
      - ruby/rspec-test

workflows:
  version: 2
  build-and-test:
    jobs:
      - build
      - test:
          matrix:
            parameters:
              ruby-version:
                - '2.7'
                - '3.0'
                - '3.1'
                - '3.2'
          name: test-ruby<< matrix.ruby-version >>
          requires:
            - build