Skip to content
---
# yamllint disable rule:line-length
name: fake-bge-module CI
on: # yamllint disable-line rule:truthy
push:
branches:
- main
- 'run-ci/**'
pull_request:
release:
types:
- released
jobs:
set_versions:
name: Set build versions
runs-on: ubuntu-latest
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 the tag name for a release
- name: Override release module version
if: github.event_name == 'release'
run: echo "MODULE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
# Add addtional git sha ref
- name: Override PR module version
if: github.event_name == 'pull_request'
run: echo "MODULE_VERSION=${MODULE_VERSION}+${GITHUB_SHA::8}" >> $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-latest
needs: [set_versions]
strategy:
fail-fast: false
matrix:
upbge_version:
[
"0.2.5"
]
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: "pip"
cache-dependency-path: 'src/requirements.txt'
- name: Install python dependencies
run: |
pip install -r src/requirements.txt
- name: UPBGE downloads cache
uses: actions/cache@v3
id: upbge-bin-cache
with:
path: upbge-bin
key: upbge-binaries-${{ runner.os }}-${{ matrix.upbge_version }}-${{ hashFiles('**/tools/utils/download_upbge.sh') }}
- 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 libjack0 libopenimageio-dev
- name: Install fake-bge-module tools
run: sudo apt install --no-install-recommends -y pandoc
- name: Download UPBGE files
if: steps.upbge-bin-cache.outputs.cache-hit != 'true'
run: bash tools/utils/download_upbge.sh ${{ matrix.upbge_version }} upbge-bin
- 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 ${{ matrix.upbge_version }} ./upbge ./upbge-bin/upbge-v${{ matrix.upbge_version }}-bin ${{ matrix.upbge_version }}
- 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: "warn"
ENABLE_PYTHON_PROFILER: false
run: bash tools/pip_package/build_pip_package.sh upbge ${{ matrix.upbge_version }} ./upbge ./upbge-bin/upbge-v${{ matrix.upbge_version }}-bin ${{ matrix.upbge_version }}
- name: Archive pip packages
uses: actions/upload-artifact@v3
with:
name: fake_bge_modules_${{ matrix.upbge_version}}_pip_${{ needs.set_versions.outputs.file_version }}
path: release
- name: Archive raw modules
uses: actions/upload-artifact@v3
with:
name: fake_bge_modules_${{ matrix.upbge_version}}_raw_${{ needs.set_versions.outputs.file_version }}
path: "raw_modules/fake_bge_module*"
- name: Test Generated Modules
run: bash tests/run_tests.sh raw_modules
- name: Test generated pip module against Cycles addon
# Using a wildcard instead of
# ${{ needs.set_versions.outputs.module_version }} below, because the
# pip filenames do not respect leading zeros:
#
# For example: 00:29:45 UTC will create a file version
# "...dev2945-py3-none..." and not use {{ module_version }}
# "...dev002945-py3-none..."
run: bash tests/pylint_cycles.sh upbge ${{ matrix.upbge_version }} ./upbge/ ./release/${{ matrix.upbge_version }}/fake_bge_module_${{ matrix.upbge_version }}-*-py3-none-any.whl
- name: Collect failure state
if: failure()
run: bash tools/collect_failure_state/collect_failure_state.sh /tmp/failure_state_${{ matrix.upbge_version}}
- name: Store failure state
if: failure()
uses: actions/upload-artifact@v3
with:
name: failure_state_${{ matrix.upbge_version}}
path: /tmp/failure_state_${{ matrix.upbge_version}}
pypi_release_test:
name: PyPI Release test
needs: [build_modules]
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
upbge_version:
[
"0.2.5"
]
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
uses: pypa/gh-action-pypi-publish@v1.3.1
with:
password: ${{ secrets.test_pypi_token }}
repository_url: https://test.pypi.org/legacy/
packages_dir: "dist/fake_bge_modules_${{ matrix.upbge_version }}_pip_*/*/"
pypi_release:
name: PyPI Release fake-bge-module
needs: [pypi_release_test]
if: github.event_name == 'release'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
upbge_version:
[
"0.2.5"
]
steps:
- name: Fetch Artifacts
uses: actions/download-artifact@v3
with:
path: dist
- name: Publish distribution 📦 to PyPI
uses: pypa/gh-action-pypi-publish@v1.3.1
with:
password: ${{ secrets.pypi_token }}
packages_dir: "dist/fake_bge_modules_${{ matrix.upbge_version }}_pip_*/*/"
upload_github_release_assets:
name: Upload Artifacts to GitHub Release
needs: [pypi_release_test]
if: github.event_name == 'release'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
upbge_version:
[
"0.2.5"
]
steps:
- name: Fetch Artifacts
uses: actions/download-artifact@v3
with:
path: dist
- name: Store Asset Information
run: |
export FAKE_BGE_MODULE_FILEPATH=$(ls -1 dist/fake_bge_modules_${{ matrix.upbge_version }}_raw_*/*.zip | head -n 1) && echo ${FAKE_BGE_MODULE_FILEPATH}
echo "FAKE_BGE_MODULE_FILEPATH=${FAKE_BGE_MODULE_FILEPATH}" >> $GITHUB_ENV
echo "FAKE_BGE_MODULE_FILENAME=$(basename "${FAKE_BGE_MODULE_FILEPATH}")" >> $GITHUB_ENV
echo "MIME_TYPE=$(file --mime-type -b "${FAKE_BGE_MODULE_FILEPATH}")" >> $GITHUB_ENV
- name: Upload ${{ matrix.upbge_version }}
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.TOKEN_FOR_ACTIONS }}
with:
upload_url: ${{ github.event.release.upload_url }}
asset_path: ${{ env.FAKE_BGE_MODULE_FILEPATH }}
asset_name: ${{ env.FAKE_BGE_MODULE_FILENAME }}
asset_content_type: ${{ env.MIME_TYPE }}