- Use bench commands directly - Drop some redundant checks Signed-off-by: Akhil Narang <me@akhilnarang.dev>
205 lines
6.5 KiB
YAML
205 lines
6.5 KiB
YAML
name: 'Setup Environment'
|
|
description: 'Sets up the environment for Frappe development'
|
|
inputs:
|
|
python-version:
|
|
description: 'Python version to use'
|
|
required: false
|
|
default: '3.14'
|
|
node-version:
|
|
description: 'Node.js version to use'
|
|
required: false
|
|
default: '24'
|
|
build-assets:
|
|
required: false
|
|
description: 'Whether to build assets'
|
|
default: true
|
|
enable-coverage:
|
|
required: false
|
|
default: false
|
|
disable-web:
|
|
required: false
|
|
default: false
|
|
disable-socketio:
|
|
required: false
|
|
default: false
|
|
db:
|
|
required: false
|
|
default: mariadb
|
|
db-root-password:
|
|
required: true
|
|
|
|
runs:
|
|
using: "composite"
|
|
steps:
|
|
- shell: bash -e {0}
|
|
run: |
|
|
# Add 'test_site' to /etc/hosts & setup git config
|
|
echo "127.0.0.1 test_site" | sudo tee -a /etc/hosts
|
|
git config --global init.defaultBranch main
|
|
git config --global advice.detachedHead false
|
|
|
|
- name: Clone
|
|
uses: actions/checkout@v6
|
|
with:
|
|
path: frappe-src
|
|
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: ${{ inputs.python-version }}
|
|
|
|
- shell: bash -e {0}
|
|
run: |
|
|
# Check for valid Python & Merge Conflicts
|
|
python -m compileall -q -f "${GITHUB_WORKSPACE}/frappe-src"
|
|
if grep -lr --exclude-dir=node_modules "^<<<<<<< " "${GITHUB_WORKSPACE}/frappe-src"
|
|
then echo "Found merge conflicts"
|
|
exit 1
|
|
fi
|
|
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version: ${{ inputs.node-version }}
|
|
check-latest: true
|
|
|
|
- uses: astral-sh/setup-uv@v6
|
|
|
|
- name: Cache pip
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.cache/pip
|
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/*requirements.txt', '**/pyproject.toml', '**/setup.py') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-pip-
|
|
${{ runner.os }}-
|
|
|
|
- id: yarn-cache-dir-path
|
|
shell: bash -e {0}
|
|
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
|
- uses: actions/cache@v4
|
|
id: yarn-cache
|
|
with:
|
|
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
|
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-yarn-
|
|
|
|
- shell: bash -e {0}
|
|
run: |
|
|
# Install System Dependencies
|
|
start_time=$(date +%s)
|
|
curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version="mariadb-11.8.5" --skip-maxscale
|
|
|
|
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
|
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
|
|
|
sudo apt -qq update
|
|
sudo apt -qq remove mysql-server mysql-client
|
|
sudo apt -qq remove -y postgresql-client postgresql-client-16 postgresql-client-common
|
|
sudo apt -qq install libcups2-dev redis-server mariadb-client libmariadb-dev postgresql-client-18 libpq-dev
|
|
echo "/usr/lib/postgresql/18/bin" >> $GITHUB_PATH
|
|
|
|
wget -q -O /tmp/wkhtmltox.deb https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb
|
|
sudo apt install /tmp/wkhtmltox.deb
|
|
|
|
end_time=$(date +%s)
|
|
echo -e "\033[33mInstall System Dependencies: $((end_time - start_time)) seconds\033[0m"
|
|
|
|
- shell: bash -e {0}
|
|
run: |
|
|
# Init Bench
|
|
start_time=$(date +%s)
|
|
uv tool install frappe-bench
|
|
bench init ${GITHUB_WORKSPACE} \
|
|
--ignore-exist \
|
|
--frappe-path "${GITHUB_WORKSPACE}/frappe-src" \
|
|
--skip-assets \
|
|
--no-backups \
|
|
--python "$(which python)"
|
|
|
|
# bench init sets origin to the local checkout path, fix it to point at GitHub
|
|
git -C apps/frappe remote set-url upstream "https://github.com/${{ github.repository }}"
|
|
|
|
# Trim Procfile for CI
|
|
sed -i '/^watch:/d' Procfile
|
|
sed -i '/^schedule:/d' Procfile
|
|
if [ "${{ inputs.disable-web }}" == "true" ]; then
|
|
sed -i '/^web:/d' Procfile
|
|
elif [ "${{ inputs.enable-coverage }}" == "true" ]; then
|
|
sed -i 's|^web: bench serve|web: bench serve --with-coverage|' Procfile
|
|
fi
|
|
if [ "${{ inputs.disable-socketio }}" == "true" ]; then
|
|
sed -i '/^socketio:/d' Procfile
|
|
fi
|
|
|
|
end_time=$(date +%s)
|
|
echo -e "\033[33mInit Bench: $((end_time - start_time)) seconds\033[0m"
|
|
|
|
- shell: bash -e {0}
|
|
run: |
|
|
# Install dev/test dependencies
|
|
start_time=$(date +%s)
|
|
bench setup requirements --dev
|
|
if [ "${{ inputs.build-assets }}" == "true" ]; then
|
|
bench setup requirements --node
|
|
fi
|
|
|
|
end_time=$(date +%s)
|
|
echo -e "\033[33mInstall dev/test deps: $((end_time - start_time)) seconds\033[0m"
|
|
|
|
- shell: bash -e {0}
|
|
env:
|
|
DB: ${{ inputs.db }}
|
|
run: |
|
|
# Create Site
|
|
start_time=$(date +%s)
|
|
if [ "$DB" == "postgres" ]; then
|
|
DB_ROOT_USER="postgres"
|
|
DB_ROOT_PWD="travis"
|
|
else
|
|
DB_ROOT_USER="root"
|
|
DB_ROOT_PWD="${{ inputs.db-root-password }}"
|
|
fi
|
|
|
|
bench set-config -g root_login "$DB_ROOT_USER"
|
|
bench set-config -g root_password "$DB_ROOT_PWD"
|
|
bench set-config -g admin_password admin
|
|
|
|
bench new-site test_site \
|
|
--db-type "$DB" \
|
|
--db-host 127.0.0.1 \
|
|
--db-name test_frappe \
|
|
--db-password test_frappe \
|
|
--verbose
|
|
bench --site test_site set-config allow_tests 1 --parse
|
|
bench --site test_site set-config server_script_enabled 1 --parse
|
|
bench --site test_site set-config host_name "http://test_site:8000"
|
|
bench --site test_site set-config auto_email_id "test@example.com"
|
|
bench --site test_site set-config mail_server localhost
|
|
bench --site test_site set-config mail_port 2525 --parse
|
|
bench --site test_site set-config mail_login "test@example.com"
|
|
bench --site test_site set-config mail_password test
|
|
bench --site test_site set-config disable_mail_smtp_authentication 1 --parse
|
|
|
|
if [ "$DB" == "mariadb" ]; then
|
|
bench --site test_site set-config monitor 1 --parse
|
|
bench --site test_site set-config use_mysqlclient 1 --parse
|
|
fi
|
|
|
|
end_time=$(date +%s)
|
|
echo -e "\033[33mCreate Site: $((end_time - start_time)) seconds\033[0m"
|
|
|
|
- shell: bash -e {0}
|
|
run: |
|
|
# Start Bench
|
|
bench start &> ${GITHUB_WORKSPACE}/bench_start.log &
|
|
|
|
- shell: bash -e {0}
|
|
if: ${{ inputs.build-assets == 'true' }}
|
|
run: |
|
|
# Build Assets
|
|
start_time=$(date +%s)
|
|
CI=Yes bench build --force --production
|
|
|
|
end_time=$(date +%s)
|
|
echo -e "\033[33mBuild Assets: $((end_time - start_time)) seconds\033[0m"
|