Skip to content

Merge pull request #32 from govpf/feature/ci_rdp #2765

Merge pull request #32 from govpf/feature/ci_rdp

Merge pull request #32 from govpf/feature/ci_rdp #2765

Workflow file for this run

name: Continuous Integration
on:
push:
branches: ['main', 'devpf', 'masterpf', 'issue/*', 'feature/*', 'feature-ouidou/*', 'hotfix/*']
pull_request:
branches: ['main', 'devpf', 'masterpf', 'issue/*', 'feature/*', 'feature-ouidou/*']
merge_group:
branches: ['main', 'devpf']
jobs:
linters:
name: Linters
runs-on: ubuntu-latest
services:
postgres:
image: postgis/postgis:14-3.3
env:
POSTGRES_USER: tps_test
POSTGRES_DB: tps_test
POSTGRES_PASSWORD: tps_test
ports: [ "5432:5432" ]
steps:
- uses: actions/checkout@v4
- name: Setup the app code and dependancies
uses: ./.github/actions/ci-setup-rails
- name: Run linters
run: |
bundle exec rake lint
bundle exec rake zeitwerk:check
js_tests:
name: JavaScript tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v1
- name: Install Node modules
run: |
bun --version
bun install
shell: bash
- name: Run tests
run: |
bun run test
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
unit_tests:
name: Unit tests
runs-on: ubuntu-latest
timeout-minutes: 20
env:
RUBY_YJIT_ENABLE: "1"
API_BASEROW_URL: "https://api.baserow.io"
API_BASEROW_TOKEN: ${{ secrets.API_BASEROW_TOKEN }}
API_BASEROW_USER: ${{ secrets.API_BASEROW_USER }}
API_BASEROW_CONFIG_TABLE: "202600"
services:
postgres:
image: postgis/postgis:14-3.3
env:
POSTGRES_USER: tps_test
POSTGRES_DB: tps_test
POSTGRES_PASSWORD: tps_test
ports: ["5432:5432"]
strategy:
matrix:
instances: [0, 1, 2, 3, 4, 5]
steps:
- uses: actions/checkout@v4
- name: Install build dependancies
# - fonts pickable by ImageMagick
# - rust for YJIT support
run: sudo apt-get update && sudo apt-get install -y gsfonts rustc redis-server
- name: Setup the app runtime and dependencies
uses: ./.github/actions/ci-setup-rails
- name: Pre-compile assets
uses: ./.github/actions/ci-setup-assets
- name: Setup split tests
uses: ./.github/actions/ci-setup-split-tests
with:
results_path: tmp/*.junit.xml
- name: Run tests
run: |
SPEC_FILES=$(./split_tests -glob='spec/**/*_spec.rb' -exclude-glob='spec/system/**' -split-index=${{ strategy.job-index }} -split-total=${{ strategy.job-total }} -junit -junit-path=tmp/*.junit.xml)
echo "Running tests for bin/rspec $SPEC_FILES"
bin/rspec $SPEC_FILES --format progress --format RspecJunitFormatter --out tmp/rspec_${{ github.job }}_${{ strategy.job-index }}.junit.xml
- name: Upload screenshots if previous test failed
if: failure()
uses: actions/upload-artifact@v4
with:
name: screenshots
path: tmp/screenshots
- name: Upload test results for this instance
uses: actions/upload-artifact@v4
with:
name: rspec-results-${{ github.job }}-${{ strategy.job-index }}
path: tmp/rspec_${{ github.job }}_${{ strategy.job-index }}.junit.xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
system_tests:
name: System tests
runs-on: ubuntu-latest
timeout-minutes: 20
env:
RUBY_YJIT_ENABLE: "1"
API_BASEROW_URL: "https://api.baserow.io"
API_BASEROW_TOKEN: ${{ secrets.API_BASEROW_TOKEN }}
API_BASEROW_USER: ${{ secrets.API_BASEROW_USER }}
API_BASEROW_CONFIG_TABLE: "202600"
services:
postgres:
image: postgis/postgis:14-3.3
env:
POSTGRES_USER: tps_test
POSTGRES_DB: tps_test
POSTGRES_PASSWORD: tps_test
ports: ["5432:5432"]
strategy:
matrix:
instances: [0, 1]
steps:
- uses: actions/checkout@v4
- name: Setup the app runtime and dependencies
uses: ./.github/actions/ci-setup-rails
- name: Pre-compile assets
uses: ./.github/actions/ci-setup-assets
- name: Setup split tests
uses: ./.github/actions/ci-setup-split-tests
with:
results_path: tmp/*.junit.xml
- name: Run tests
env:
FC_PARTICULIER_ID: MyFCEnvId
GOOGLE_CLIENT_ID: MyGEnvId
run: |
SPEC_FILES=$(./split_tests -glob='spec/system/**/*_spec.rb' -split-index=${{ strategy.job-index }} -split-total=${{ strategy.job-total }} -junit -junit-path=tmp/*.junit.xml)
echo "Running tests for bin/rspec $SPEC_FILES"
RAILS_ENV=test bin/rspec $SPEC_FILES --format progress --format RspecJunitFormatter --out tmp/rspec_${{ github.job }}_${{ strategy.job-index }}.junit.xml
- name: Upload screenshots if previous tests failed
if: failure()
uses: actions/upload-artifact@v4
with:
name: screenshots-${{ strategy.job-index }}
path: tmp/screenshots
- name: Upload test results for this instance
uses: actions/upload-artifact@v4
with:
name: rspec-results-${{ github.job }}-${{ strategy.job-index }}
path: tmp/rspec_${{ github.job }}_${{ strategy.job-index }}.junit.xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
save_test_reports:
name: Save test reports
needs: [unit_tests, system_tests]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Collect test results from all instances
uses: actions/download-artifact@v4
with:
path: tmp
pattern: rspec-results-*
merge-multiple: true
- name: Save test results and timing data, to better split future tests
uses: ./.github/actions/ci-save-split-tests
with:
results_path: tmp/*.junit.xml
docker:
runs-on: ubuntu-latest
needs: [system_tests, unit_tests, linters]
env:
repo: "govpf/mes-demarches"
steps:
- uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
# list of Docker images to use as base name for tags
images: ${{ env.repo }}
# generate Docker tags based on the following events/attributes
tags: |
type=schedule
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
file: ./Dockerfile
platforms: linux/amd64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
cache-from: type=registry,ref=${{env.repo}}:buildcache
cache-to: type=registry,ref=${{env.repo}}:buildcache,mode=max
- name: Update repo description
uses: peter-evans/dockerhub-description@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
repository: "${{ env.repo }}"