name: Server on: pull_request: paths-ignore: - "**.css" - "**.js" - "**.md" - "**.html" - "**.csv" - "**.po" - "**.pot" schedule: # Run everday at midnight UTC / 5:30 IST - cron: "0 0 * * *" env: CRM_BRANCH: ${{ github.base_ref || github.ref_name }} concurrency: group: develop-crm-${{ github.event.number }} cancel-in-progress: true jobs: setup: name: Resolve frappe matrix runs-on: ubuntu-latest outputs: frappe-branches: ${{ steps.resolve.outputs.branches }} steps: - name: Resolve frappe branches from target branch id: resolve run: | BASE="${{ github.base_ref || github.ref_name }}" # develop tracks frappe develop; the stable lane ships frappe 15 and 16. if [ "$BASE" = "develop" ]; then echo 'branches=["develop"]' >> "$GITHUB_OUTPUT" else echo 'branches=["version-15","version-16"]' >> "$GITHUB_OUTPUT" fi test: name: Tests (frappe ${{ matrix.frappe-branch }}) needs: setup runs-on: ubuntu-latest timeout-minutes: 60 strategy: fail-fast: false matrix: frappe-branch: ${{ fromJson(needs.setup.outputs.frappe-branches) }} services: mysql: image: mariadb:10.6 env: MYSQL_ROOT_PASSWORD: root ports: - 3306:3306 options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3 steps: - name: Clone uses: actions/checkout@v6 - name: Setup environment uses: ./.github/actions/setup-server-env with: python-version: "3.14" node-version: "24" type: "server" # erpnext: stable lane only, never v16 (v16 test bootstrap broken on bare bench) install-erpnext: ${{ (github.base_ref == 'main-hotfix' || github.base_ref == 'main') && matrix.frappe-branch != 'version-16' }} frappe-branch: ${{ matrix.frappe-branch }} - name: Run server tests uses: ./.github/actions/run-server-tests with: bench-path: "/home/runner/frappe-bench" site: "test_site" app: "crm" enable-coverage: "true" type: "server" ci-build-id: ${{ github.run_id }} - name: Persist coverage artifact if: github.base_ref == 'develop' || github.ref_name == 'develop' uses: ./.github/actions/upload-coverage with: artifact-name: coverage-${{ matrix.frappe-branch }} coverage-path: /home/runner/frappe-bench/sites/coverage.xml coverage: name: Coverage Wrap Up needs: test if: github.base_ref == 'develop' || github.ref_name == 'develop' runs-on: ubuntu-latest steps: - name: Clone uses: actions/checkout@v6 - name: Download artifacts uses: actions/download-artifact@v4 - name: Publish coverage uses: ./.github/actions/publish-codecov with: token: ${{ secrets.CODECOV_TOKEN }}