* ci: fixup * ci: temporarily redirect to fixed base workflows the purpose of this is to pass checks and get this fixed base workflows into develop asap
171 lines
5.3 KiB
YAML
171 lines
5.3 KiB
YAML
name: Tests Base
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
fake-success:
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
python-version:
|
|
required: false
|
|
type: string
|
|
default: '3.12'
|
|
node-version:
|
|
required: false
|
|
type: number
|
|
default: 20
|
|
parallel-runs:
|
|
required: false
|
|
type: number
|
|
default: 2
|
|
enable-postgres:
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
enable-coverage:
|
|
required: false
|
|
type: boolean
|
|
default: false
|
|
|
|
|
|
jobs:
|
|
unit-test:
|
|
name: Unit
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- id: placeholder
|
|
run: |
|
|
echo "Evolution towards a set of (fast) unit tests which run without a DB connection is being planned"
|
|
gen-idx-integration:
|
|
needs: unit-test
|
|
name: Gen Integration Test Matrix
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
indices: ${{ steps.set-indices.outputs.indices }}
|
|
steps:
|
|
- id: set-indices
|
|
run: |
|
|
indices=$(seq -s ',' 1 ${{ inputs.parallel-runs }}); echo "indices=[${indices}]" >> $GITHUB_OUTPUT
|
|
|
|
integration-test:
|
|
needs: gen-idx-integration
|
|
name: Integration
|
|
runs-on: ubuntu-latest
|
|
if: ${{ inputs.fake-success == false }}
|
|
timeout-minutes: 30
|
|
env:
|
|
NODE_ENV: "production"
|
|
PYTHONOPTIMIZE: 2
|
|
# noisy 3rd party library warnings
|
|
PYTHONWARNINGS: "module,ignore:::babel.messages.extract"
|
|
DB_ROOT_PASSWORD: db_root
|
|
COVERAGE_RCFILE: ~/frappe-bench/apps/frappe/.coveragerc
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
db: ${{ fromJson(inputs.enable-postgres && '["mariadb", "postgres"]' || '["mariadb"]') }}
|
|
index: ${{ fromJson(needs.gen-idx-integration.outputs.indices) }}
|
|
services:
|
|
mariadb:
|
|
image: mariadb:11.3
|
|
ports:
|
|
- 3306:3306
|
|
options: --health-cmd="healthcheck.sh --connect --innodb_initialized" --health-interval=5s --health-timeout=2s --health-retries=3
|
|
env:
|
|
MARIADB_ROOT_PASSWORD: ${{ env.DB_ROOT_PASSWORD }}
|
|
postgres:
|
|
image: postgres:12.4
|
|
options: >-
|
|
--health-cmd pg_isready
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 5
|
|
ports:
|
|
- 5432:5432
|
|
env:
|
|
POSTGRES_PASSWORD: ${{ env.DB_ROOT_PASSWORD }}
|
|
smtp_server:
|
|
image: rnwood/smtp4dev
|
|
ports:
|
|
- 2525:25
|
|
- 3000:80
|
|
steps:
|
|
- uses: frappe/frappe/.github/actions/setup@develop
|
|
name: Environment Setup
|
|
with:
|
|
python-version: ${{ inputs.python-version }}
|
|
node-version: ${{ inputs.node-version }}
|
|
disable-socketio: true
|
|
disable-redis-socketio: true
|
|
db-root-password: ${{ env.DB_ROOT_PASSWORD }}
|
|
db: ${{ matrix.db }}
|
|
env:
|
|
PYTHONWARNINGS: "ignore:Unimplemented abstract methods {'locate_file'}:DeprecationWarning"
|
|
|
|
- name: Run Tests
|
|
run: |
|
|
cd ~/frappe-bench || exit
|
|
bench --site test_site \
|
|
run-parallel-tests \
|
|
--app "${{ github.event.repository.name }}" \
|
|
--total-builds ${{ inputs.parallel-runs }} \
|
|
--build-number ${{ matrix.index }} 2> >(tee -a stderr.log >&2)
|
|
|
|
# Process warnings and create annotations
|
|
if [ -s stderr.log ] && [ "$DB" == "mariadb" ]; then
|
|
echo "Processing deprecation warnings..."
|
|
grep -E "DeprecationWarning" stderr.log | sort -u | while read -r warning; do
|
|
# Extract file path, line number, and warning type
|
|
file_info=$(echo "$warning" | grep -oP '^.*?:\d+:')
|
|
file_path=$(echo "$file_info" | cut -d':' -f1)
|
|
line_number=$(echo "$file_info" | cut -d':' -f2)
|
|
warning_type=$(echo "$warning" | grep -oP '\w+Warning')
|
|
|
|
# Extract the actual warning message
|
|
message=$(echo "$warning" | sed -E "s/^.*$warning_type: //")
|
|
|
|
# Create the annotation
|
|
echo "::warning file=${file_path},line=${line_number}::${warning_type}: ${message}"
|
|
done
|
|
else
|
|
echo "No deprecation warnings found."
|
|
fi
|
|
env:
|
|
DB: ${{ matrix.db }}
|
|
# consumed by bench run-parallel-tests
|
|
CAPTURE_COVERAGE: ${{ inputs.enable-coverage }}
|
|
FRAPPE_SENTRY_DSN: ${{ secrets.SENTRY_DSN || '' }}
|
|
|
|
- name: Upload coverage data
|
|
uses: actions/upload-artifact@v3
|
|
if: inputs.enable-coverage
|
|
with:
|
|
name: coverage-${{ matrix.db }}-${{ matrix.index }}
|
|
path: ~/frappe-bench/sites/*-coverage*.xml
|
|
|
|
- name: Setup tmate session
|
|
uses: mxschmitt/action-tmate@v3
|
|
if: ${{ failure() && contains( github.event.pull_request.labels.*.name, 'debug-gha') }}
|
|
|
|
- name: Show bench output
|
|
if: ${{ always() }}
|
|
run: |
|
|
cd ~/frappe-bench || exit
|
|
cat bench_start.log || true
|
|
cd logs
|
|
for f in ./*.log*; do
|
|
echo "Printing log: $f";
|
|
cat $f
|
|
done
|
|
|
|
|
|
# TIP: Use these for checks, e.g. Server / Tests / Success
|
|
success:
|
|
name: Success
|
|
needs: [unit-test, integration-test]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Passed
|
|
run: "echo Skipped"
|
|
|