Skip to content
---
# yamllint disable rule:line-length
name: fake-bge-module Latest Build
on: # yamllint disable-line rule:truthy
workflow_dispatch:
schedule:
- cron: "0 6 * * *"
push:
branches:
- main
- 'perf/**'
- 'run-ci/**'
pull_request:
jobs:
set_versions:
name: Set build versions
runs-on: ubuntu-latest
if: |
github.repository == 'nutti/fake-bge-module' ||
github.event_name != 'schedule'
outputs:
module_version: ${{ steps.set_module_version.outputs.module_version }}
file_version: ${{ steps.set_file_version.outputs.file_version }}
steps:
# Use ISO 8601 date (in UTC) + timestamp (in UTC)
- name: Create generic module version
run: echo "MODULE_VERSION=$(date -u +%Y%m%d).dev$(date -u +%H%M%S)" >> $GITHUB_ENV
# Use ISO 8601 date (in UTC) for a scheduled release
- name: Create generic module version
if: github.event_name == 'schedule'
run: echo "MODULE_VERSION=$(date -u +%Y%m%d)" >> $GITHUB_ENV
# Set module version output
- name: Set module version
id: set_module_version
run: echo ::set-output name=module_version::${MODULE_VERSION}
# Use ISO 8601 timestamps (in UTC) for output/file version
- name: Set file version
id: set_file_version
run: echo ::set-output name=file_version::$(date -u +%Y%m%dT%H%M%SZ)
build_modules:
name: Build modules
runs-on: ubuntu-22.04
if: |
github.repository == 'nutti/fake-bge-module' ||
github.event_name != 'schedule'
needs: [set_versions]
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: "pip"
cache-dependency-path: 'src/requirements.txt'
- name: Install python dependencies
run: |
pip install -r src/requirements.txt
- name: Test fake_bpy_module core module
run: bash tests/run_pre_tests.sh src
- name: Install UPBGE binary dependencies
run: |
sudo apt update
sudo apt install --no-install-recommends -y libglu1-mesa libegl1 libxxf86vm1 libxfixes3 libxi6 libxkbcommon0 libgl1
- name: Install fake-bge-module tools
run: sudo apt install --no-install-recommends -y pandoc
- name: Get UPBGE artifact URL
id: get_upbge_artifact_url
run: echo ::set-output name=artifact_url::$(bash tools/utils/get_latest_artifacts_url.sh nutti upbge-daily-build "UPBGE daily build")
- name: Cache UPBGE binary
id: cache-upbge-bin
uses: actions/cache@v3
with:
path: upbge-bin/upbge-latest-bin
key: ${{ runner.os }}-upbge-${{ steps.get_upbge_artifact_url.outputs.artifact_url }}
- name: Download latest UPBGE files from nutti/upbge-daily-build artifacts
if: steps.cache-upbge-bin.outputs.cache-hit != 'true'
run: bash tools/utils/download_latest_upbge.sh nutti upbge-daily-build "UPBGE daily build" ./upbge-bin ${{ secrets.TOKEN_FOR_ACTION_UPBGE_DAILY_BUILD }}
- name: Checkout UPBGE from Github
uses: actions/checkout@v4
with:
repository: "upbge/upbge"
path: upbge
- name: Generate pip Packages
if: contains(github.ref, 'run-ci/')
env:
RELEASE_VERSION: ${{ needs.set_versions.outputs.module_version }}
GEN_MODULE_CODE_FORMAT: "ruff"
GEN_MODULE_OUTPUT_LOG_LEVEL: "debug"
ENABLE_PYTHON_PROFILER: false
run: bash tools/pip_package/build_pip_package.sh upbge latest ./upbge ./upbge-bin/upbge-latest-bin
- name: Generate pip Packages
if: contains(github.ref, 'perf/')
env:
RELEASE_VERSION: ${{ needs.set_versions.outputs.module_version }}
GEN_MODULE_CODE_FORMAT: "ruff"
GEN_MODULE_OUTPUT_LOG_LEVEL: "warn"
ENABLE_PYTHON_PROFILER: true
run: bash tools/pip_package/build_pip_package.sh upbge latest ./upbge ./upbge-bin/upbge-latest-bin
- name: Generate pip Packages
if: "!contains(github.ref, 'run-ci/') && !contains(github.ref, 'perf/')"
env:
RELEASE_VERSION: ${{ needs.set_versions.outputs.module_version }}
GEN_MODULE_CODE_FORMAT: "ruff"
GEN_MODULE_OUTPUT_LOG_LEVEL: "warn"
ENABLE_PYTHON_PROFILER: false
run: bash tools/pip_package/build_pip_package.sh upbge latest ./upbge ./upbge-bin/upbge-latest-bin
- name: Archive pip packages
uses: actions/upload-artifact@v3
with:
name: fake_bge_modules_latest_pip_${{ needs.set_versions.outputs.file_version }}
path: release
- name: Archive raw modules
uses: actions/upload-artifact@v3
with:
name: fake_bge_modules_latest_raw_${{ needs.set_versions.outputs.file_version }}
path: "raw_modules/fake_bge_module*"
- name: Run Ruff flake8-pyi checks
run: bash tools/pip_package/run_ruff_flake8_pyi.sh upbge latest
- name: Test Generated Modules
run: bash tests/run_tests.sh raw_modules
- name: Test generated pip module against Cycles addon
run: bash tests/pylint_cycles.sh upbge latest ./upbge/ ./release/latest/fake_bge_module_latest-*-py3-none-any.whl
- name: Collect profiler result
if: contains(github.ref, 'perf/')
run: cp profiler_result.prof /tmp/profiler_result.prof
- name: Store profiler result
if: contains(github.ref, 'perf/')
uses: actions/upload-artifact@v3
with:
name: profiler_result
path: /tmp/profiler_result.prof
- name: Collect failure state
if: failure()
run: bash tools/collect_failure_state/collect_failure_state.sh /tmp/failure_state
- name: Store failure state
if: failure()
uses: actions/upload-artifact@v3
with:
name: failure_state
path: /tmp/failure_state
pypi_release_test:
name: PyPI Release test
needs: [build_modules]
if: |
github.repository == 'nutti/fake-bge-module' &&
github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Fetch artifacts
uses: actions/download-artifact@v3
with:
path: dist
# Publish to TestPyPi on each merge to main
- name: Publish distribution 📦 to Test PyPI (Versioned Package)
uses: pypa/[email protected]
with:
password: ${{ secrets.test_pypi_token }}
repository_url: https://test.pypi.org/legacy/
packages_dir: "dist/fake_bge_modules_latest_pip_*/latest/"
- name: Publish distribution 📦 to Test PyPI (Non-versioned Package)
uses: pypa/[email protected]
with:
password: ${{ secrets.test_pypi_token }}
repository_url: https://test.pypi.org/legacy/
packages_dir: "dist/fake_bge_modules_latest_pip_*/non-version/"
pypi_release:
name: PyPI Release fake-bge-module
needs: [pypi_release_test]
if: |
github.repository == 'nutti/fake-bge-module' &&
github.event_name == 'schedule'
runs-on: ubuntu-latest
steps:
- name: Fetch Artifacts
uses: actions/download-artifact@v3
with:
path: dist
- name: Publish distribution 📦 to PyPI (Versioned Package)
uses: pypa/[email protected]
with:
password: ${{ secrets.pypi_token }}
packages_dir: "dist/fake_bge_modules_latest_pip_*/latest/"
- name: Publish distribution 📦 to PyPI (Non-versioned Package)
uses: pypa/[email protected]
with:
password: ${{ secrets.pypi_token }}
packages_dir: "dist/fake_bge_modules_latest_pip_*/non-version/"