name: Main Workflow

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - "*"

jobs:
  # lint-git:
  #   runs-on: ubuntu-latest
  #   if: github.event_name == 'pull_request' # Makes sense only for pull requests
  #   steps:
  #     - name: Checkout repository
  #       uses: actions/checkout@v2
  #       with:
  #         fetch-depth: 0
  #     - name: show
  #       run: git log
  #     - name: Enforce absence of print statements in code
  #       run: |
  #         ! git diff origin/${{ github.event.pull_request.base.ref }}..HEAD -- . ':(exclude)**/impress.yml' | grep "print("
  #     - name: Check absence of fixup commits
  #       run: |
  #         ! git log | grep 'fixup!'
  #     - name: Install gitlint
  #       run: pip install --user requests gitlint
  #     - name: Lint commit messages added to main
  #       run: ~/.local/bin/gitlint --commits origin/${{ github.event.pull_request.base.ref }}..HEAD

  # check-changelog:
  #   runs-on: ubuntu-latest
  #   if: |
  #     contains(github.event.pull_request.labels.*.name, 'noChangeLog') == false &&
  #     github.event_name == 'pull_request'
  #   steps:
  #     - name: Checkout repository
  #       uses: actions/checkout@v3
  #       with:
  #         fetch-depth: 50
  #     - name: Check that the CHANGELOG has been modified in the current branch
  #       run: git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.event.after }} | grep 'CHANGELOG.md'

  # lint-changelog:
  #   runs-on: ubuntu-latest
  #   steps:
  #     - name: Checkout repository
  #       uses: actions/checkout@v2
  #     - name: Check CHANGELOG max line length
  #       run: |
  #         max_line_length=$(cat CHANGELOG.md | grep -Ev "^\[.*\]: https://github.com" | wc -L)
  #         if [ $max_line_length -ge 80 ]; then
  #           echo "ERROR: CHANGELOG has lines longer than 80 characters."
  #           exit 1
  #         fi

  build-mails:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: src/mail
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Install Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "18"

      - name: Restore the mail templates
        uses: actions/cache@v4
        id: mail-templates
        with:
          path: "src/backend/core/templates/mail"
          key: mail-templates-${{ hashFiles('src/mail/mjml') }}

      - name: Install yarn
        if: steps.mail-templates.outputs.cache-hit != 'true'
        run: npm install -g yarn

      - name: Install node dependencies
        if: steps.mail-templates.outputs.cache-hit != 'true'
        run: yarn install --frozen-lockfile

      - name: Build mails
        if: steps.mail-templates.outputs.cache-hit != 'true'
        run: yarn build

      - name: Cache mail templates
        if: steps.mail-templates.outputs.cache-hit != 'true'
        uses: actions/cache@v4
        with:
          path: "src/backend/core/templates/mail"
          key: mail-templates-${{ hashFiles('src/mail/mjml') }}

  # lint-back:
  #   runs-on: ubuntu-latest
  #   defaults:
  #     run:
  #       working-directory: src/backend
  #   steps:
  #     - name: Checkout repository
  #       uses: actions/checkout@v2
  #     - name: Install Python
  #       uses: actions/setup-python@v3
  #       with:
  #         python-version: "3.10"
  #     - name: Install development dependencies
  #       run: pip install --user .[dev]
  #     - name: Check code formatting with ruff
  #       run: ~/.local/bin/ruff format . --diff
  #     - name: Lint code with ruff
  #       run: ~/.local/bin/ruff check .
  #     - name: Lint code with pylint
  #       run: ~/.local/bin/pylint .

  # test-back:
  #   runs-on: ubuntu-latest
  #   needs: build-mails

  #   defaults:
  #     run:
  #       working-directory: src/backend

  #   services:
  #     postgres:
  #       image: postgres:16
  #       env:
  #         POSTGRES_DB: impress
  #         POSTGRES_USER: dinum
  #         POSTGRES_PASSWORD: pass
  #       ports:
  #         - 5432:5432
  #       # needed because the postgres container does not provide a healthcheck
  #       options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

  #   env:
  #     DJANGO_CONFIGURATION: Test
  #     DJANGO_SETTINGS_MODULE: impress.settings
  #     DJANGO_SECRET_KEY: ThisIsAnExampleKeyForTestPurposeOnly
  #     OIDC_OP_JWKS_ENDPOINT: /endpoint-for-test-purpose-only
  #     DB_HOST: localhost
  #     DB_NAME: impress
  #     DB_USER: dinum
  #     DB_PASSWORD: pass
  #     DB_PORT: 5432
  #     STORAGES_STATICFILES_BACKEND: django.contrib.staticfiles.storage.StaticFilesStorage
  #     AWS_S3_ENDPOINT_URL: http://localhost:9000
  #     AWS_S3_ACCESS_KEY_ID: impress
  #     AWS_S3_SECRET_ACCESS_KEY: password

  #   steps:
  #     - name: Checkout repository
  #       uses: actions/checkout@v4

  #     - name: Create writable /data
  #       run: |
  #         sudo mkdir -p /data/media && \
  #         sudo mkdir -p /data/static

  #     - name: Restore the mail templates
  #       uses: actions/cache@v4
  #       id: mail-templates
  #       with:
  #         path: "src/backend/core/templates/mail"
  #         key: mail-templates-${{ hashFiles('src/mail/mjml') }}

  #     - name: Start Minio
  #       run: |
  #         docker pull minio/minio
  #         docker run -d --name minio \
  #           -p 9000:9000 \
  #           -e "MINIO_ACCESS_KEY=impress" \
  #           -e "MINIO_SECRET_KEY=password" \
  #           -v /data/media:/data \
  #           minio/minio server --console-address :9001 /data

  #     - name: Configure MinIO
  #       run: |
  #         MINIO=$(docker ps | grep minio/minio | sed -E 's/.*\s+([a-zA-Z0-9_-]+)$/\1/')
  #         docker exec ${MINIO} sh -c \
  #           "mc alias set impress http://localhost:9000 impress password && \
  #           mc alias ls && \
  #           mc mb impress/impress-media-storage && \
  #           mc version enable impress/impress-media-storage"

  #     - name: Install Python
  #       uses: actions/setup-python@v3
  #       with:
  #         python-version: "3.10"

  #     - name: Install development dependencies
  #       run: pip install --user .[dev]

  #     - name: Install gettext (required to compile messages)
  #       run: |
  #         sudo apt-get update
  #         sudo apt-get install -y gettext pandoc

  #     - name: Generate a MO file from strings extracted from the project
  #       run: python manage.py compilemessages

  #     - name: Run tests
  #       run: ~/.local/bin/pytest -n 2
