diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ae1d746fa..286fbc6a1 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -2,53 +2,24 @@ name: CI on: push jobs: - test_and_lint: + lint: + uses: ".github/workflows/setup_application_environment" + - name: Linting - ShellCheck + run: bin/rake shellcheck + - name: Linting - Brakeman + run: bundle exec brakeman -c config/brakeman.ignore + - name: Linting - Standardrb + run: bin/rails standard + + test: + uses: ".github/workflows/setup_application_environment" strategy: fail-fast: false matrix: ci_node_total: [8] ci_node_index: [0, 1, 2, 3, 4, 5, 6, 7] - runs-on: ubuntu-latest - services: - postgres: - image: postgres:11-alpine - ports: - - '5432:5432' - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: password - POSTGRES_DB: dfe-teachers-payment-service_test - env: - RAILS_ENV: test - DFE_TEACHERS_PAYMENT_SERVICE_DATABASE_USERNAME: postgres - DFE_TEACHERS_PAYMENT_SERVICE_DATABASE_PASSWORD: password - DFE_TEACHERS_PAYMENT_SERVICE_DATABASE_HOST: localhost - CI_NODE_TOTAL: ${{ matrix.ci_node_total }} - CI_NODE_INDEX: ${{ matrix.ci_node_index }} - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Setup Node - uses: actions/setup-node@v4 - - name: Setup yarn - run: npm install -g yarn - - name: Install Node packages - run: yarn install - - name: Install Ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: 3.2.0 - bundler-cache: true - - name: Precompile assets - run: bundle exec rails assets:precompile - - name: Linting - ShellCheck - run: bin/rake shellcheck - - name: Linting - Brakeman - run: bundle exec brakeman -c config/brakeman.ignore - - name: Linting - Standardrb - run: bin/rails standard - name: Prepare DB - run: bin/rails db:schema:load + run: bin/rails db:prepare - name: Run unit tests env: SPEC_TYPE: unit diff --git a/.github/workflows/setup_application_environment.yaml b/.github/workflows/setup_application_environment.yaml new file mode 100644 index 000000000..a68a20df9 --- /dev/null +++ b/.github/workflows/setup_application_environment.yaml @@ -0,0 +1,58 @@ +name: Setup application environment + +jobs: + setup_application_environment: + runs-on: ubuntu-latest + services: + postgres: + image: postgres:11-alpine + ports: + - '5432:5432' + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: password + POSTGRES_DB: dfe-teachers-payment-service_test + env: + RAILS_ENV: test + DFE_TEACHERS_PAYMENT_SERVICE_DATABASE_USERNAME: postgres + DFE_TEACHERS_PAYMENT_SERVICE_DATABASE_PASSWORD: password + DFE_TEACHERS_PAYMENT_SERVICE_DATABASE_HOST: localhost + CI_NODE_TOTAL: ${{ matrix.ci_node_total }} + CI_NODE_INDEX: ${{ matrix.ci_node_index }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Setup Node + uses: actions/setup-node@v4 + with: + cache: yarn + - name: Setup yarn + run: npm install -g yarn + - name: Install Node packages + run: yarn install + - name: Install Ruby + uses: ruby/setup-ruby@v1 + with: + bundler-cache: true + - name: Restore assets cache + id: assets-cache + uses: actions/cache/restore@v4 + with: + path: | + public/assets + key: assets-${{ hashFiles('**/app/assets/**/*', '**/app/javascript/**/*') }} + restore-keys: | + ${{ runner.os }}-assets- + + - name: Prepare assets + if: ${{ steps.assets-cache.outputs.cache-hit != 'true' }} + run: bin/rails test:prepare + + - name: Save assets cache + if: ${{ steps.assets-cache.outputs.cache-hit != 'true' }} + uses: actions/cache/save@v4 + with: + path: | + public/assets + public/packs-test + key: ${{ steps.assets-cache.outputs.cache-primary-key }}