Support Python 3.14, drop 3.9 #78
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Test | |
| # Run the main build and test for all branch pushes and pull requests, do not repeat the build for tags | |
| on: | |
| push: | |
| branches: | |
| - '**' | |
| pull_request: | |
| # Restrict workflow permissions | |
| permissions: | |
| contents: read | |
| env: | |
| JAVA_DISTRIBUTION: "zulu" | |
| PYTHON_VERSION: "3.13" | |
| NODE_VERSION: "22" | |
| jobs: | |
| platform_build: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| strategy: | |
| # Try to finish all jobs - it can be helpful to see if some succeed and others fail | |
| fail-fast: false | |
| matrix: | |
| JAVA_VERSION: | |
| - 11 | |
| - 17 | |
| - 21 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: ${{ env.JAVA_DISTRIBUTION }} | |
| java-version: ${{ matrix.JAVA_VERSION }} | |
| # Turn on Gradle dependency caching | |
| cache: gradle | |
| - name: Build | |
| run: ./gradlew classes testClasses --parallel | |
| - name: Unit tests | |
| run: ./gradlew test | |
| # If the tests fail, make the output available for download | |
| - name: Store failed test results | |
| uses: actions/upload-artifact@v4 | |
| if: failure() | |
| with: | |
| name: junit-test-results | |
| path: build/modules/*/reports/** | |
| retention-days: 7 | |
| python_runtime: | |
| # Testing targets for the Python model runtime | |
| # Include the latest stable release (3.9) | |
| # Oldest supported version is 3.6, this is required by Pandas 1.0 | |
| # (also note Python 3.5 is EOL, final release 3.5.10 was in September 2020) | |
| # Do not include 2.7 - that ship has sailed! | |
| strategy: | |
| # Try to finish all jobs - it can be helpful to see if some succeed and others fail | |
| fail-fast: false | |
| matrix: | |
| environment: | |
| # Latest supported versions on all 3 major platforms | |
| - { PLATFORM: "windows", | |
| PYTHON_VERSION: "3.14", | |
| PANDAS_DEPENDENCY: "'pandas ~= 2.3.0'", | |
| PYSPARK_DEPENDENCY: "'pyspark ~= 3.5.0'" } | |
| - { PLATFORM: "macos", | |
| PYTHON_VERSION: "3.14", | |
| PANDAS_DEPENDENCY: "'pandas ~= 2.3.0'", | |
| PYSPARK_DEPENDENCY: "'pyspark ~= 3.5.0'" } | |
| - { PLATFORM: "ubuntu", | |
| PYTHON_VERSION: "3.14", | |
| PANDAS_DEPENDENCY: "'pandas ~= 2.3.0'", | |
| PYSPARK_DEPENDENCY: "'pyspark ~= 3.5.0'" } | |
| - { PLATFORM: "ubuntu", | |
| PYTHON_VERSION: "3.13", | |
| PANDAS_DEPENDENCY: "'pandas ~= 2.2.0'", | |
| PYSPARK_DEPENDENCY: "'pyspark ~= 3.4.0'" } | |
| # Python 3.12 requires Pandas 2.2, first version with cp312 support | |
| - { PLATFORM: "ubuntu", | |
| PYTHON_VERSION: "3.12", | |
| PANDAS_DEPENDENCY: "'pandas == 2.2.0'", | |
| PYSPARK_DEPENDENCY: "'pyspark ~= 3.3.0'" } | |
| # Force testing on the first release of the Pandas 2 series, requires Python 3.11 | |
| # Note NumPy 2.0 only works with Pandas 2.1 and later | |
| - { PLATFORM: "ubuntu", | |
| PYTHON_VERSION: "3.11", | |
| PANDAS_DEPENDENCY: "'pandas == 2.0.0' 'numpy < 2.0.0'", | |
| PYSPARK_DEPENDENCY: "'pyspark ~= 3.1.0'" } | |
| # Oldest supported versions, if those don't working we need to update the supported versions | |
| # Pandas got 3.10 support halfway through the 1.3 series | |
| # Force testing .0 version for Spark 3 | |
| - { PLATFORM: "ubuntu", | |
| PYTHON_VERSION: "3.10", | |
| PANDAS_DEPENDENCY: "'pandas == 1.3.4' 'numpy == 1.22.0'", | |
| PYSPARK_DEPENDENCY: "'pyspark == 3.0.0'" } | |
| # E.g. platform = "windows" -> build image = "windows-latest" | |
| runs-on: ${{ matrix.environment.PLATFORM }}-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.environment.PYTHON_VERSION }} | |
| - name: PIP Upgrade | |
| run: python -m pip install --upgrade pip | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| cd tracdap-runtime/python | |
| pip install ${{ matrix.environment.PANDAS_DEPENDENCY }} | |
| pip install ${{ matrix.environment.PYSPARK_DEPENDENCY }} | |
| pip install -r requirements.txt | |
| - name: Protoc code generation | |
| run: python tracdap-runtime/python/build_runtime.py --target codegen | |
| - name: Unit tests | |
| run: python tracdap-runtime/python/build_runtime.py --target test | |
| - name: Python example models | |
| run: python tracdap-runtime/python/build_runtime.py --target examples | |
| web_api: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ env.NODE_VERSION }} | |
| cache: npm | |
| cache-dependency-path: tracdap-api/packages/web/package-lock.json | |
| - name: Install dependencies | |
| run: | | |
| cd tracdap-api/packages/web | |
| npm install | |
| - name: Build API | |
| run: | | |
| cd tracdap-api/packages/web | |
| npm run buildApi | |
| documentation: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ env.PYTHON_VERSION }} | |
| - name: PIP Upgrade | |
| run: python -m pip install --upgrade pip | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install dependencies for build tools | |
| run: | | |
| cd dev/ | |
| pip install -r requirements.txt | |
| - name: Run all docgen targets | |
| run: | | |
| cd dev/ | |
| python docgen/docgen-ctrl.py all |