Commit bc774e37 authored by Julian Stirling's avatar Julian Stirling 🐧
Browse files

Merge branch 'split-renders-in-ci' into 'master'

Split render steps in the CI

See merge request !541
parents 7e21460e 658088e0
Loading
Loading
Loading
Loading
Loading
+61 −17
Original line number Diff line number Diff line
@@ -257,7 +257,8 @@ prebuild-for-render:
        - rendering/librender/*.stl

# render assemblies - uses xvfb as a virtual x-server
render:
# Split into three groups running in parallel
.render-job:
    extends:
      - .scad-job
      - .rules_common
@@ -265,9 +266,6 @@ render:
    dependencies: ["prebuild-for-render", "version"]
    needs: ["prebuild-for-render", "version"]

    script:
      - xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" ./render.py --force-clean --png-only

    artifacts:
      expire_in: 1 week
      name: "${CI_PROJECT_NAME}-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}-renders"
@@ -275,7 +273,31 @@ render:
      paths:
        - docs/renders/*.png

gltf:
render_1:
    extends:
      - .render-job

    script:
      - xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" ./render.py --force-clean --png-1-only

render_2:
    extends:
      - .render-job

    script:
      - xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" ./render.py --force-clean --png-2-only

render_3:
    extends:
      - .render-job

    script:
      - xvfb-run --auto-servernum --server-args "-screen 0 1024x768x24" ./render.py --force-clean --png-3-only


# compose GLB 3D models of complete microscopes
# split into two groups running in parallel
.gltf-job:
    extends:
      - .scad-job
      - .rules_common
@@ -283,22 +305,37 @@ gltf:
    dependencies: ["prebuild-for-render", "version"]
    needs: ["prebuild-for-render", "version"]

    artifacts:
      expire_in: 1 week
      name: "${CI_PROJECT_NAME}-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}-renders"
      # saving any rendering csg files. Only remaining files should be when scad2gltf fails
      paths:
        - docs/gltf/*

gltf_1:
    extends:
      - .gltf-job

    script:
      - mkdir -p docs/gltf
      - pip install scad2gltf
      - cd rendering
      - scad2gltf complete_microscope_rms.scad
      - scad2gltf complete_microscope_low_cost.scad
      - scad2gltf complete_microscope_upright.scad
      - scad2gltf complete_microscope_manual.scad
      - cp complete_microscope_*.glb ../docs/gltf/

    artifacts:
      expire_in: 1 week
      name: "${CI_PROJECT_NAME}-${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}-renders"
      # saving any rendering csg files. Only remaining files should be when scad2gltf fails
      paths:
        - docs/gltf/*
gltf_2:
    extends:
      - .gltf-job

    script:
      - mkdir -p docs/gltf
      - pip install scad2gltf
      - cd rendering
      - scad2gltf complete_microscope_upright.scad
      - scad2gltf complete_microscope_low_cost.scad
      - cp complete_microscope_*.glb ../docs/gltf/


# Build docs- this is at a later stage so it has access to the models
build-docs:
@@ -306,11 +343,14 @@ build-docs:
    extends: .rules_common
    dependencies:
      - build
      - render
      - gltf
      - render_1
      - render_2
      - render_3
      - gltf_1
      - gltf_2
      - archive-source
      - sca2d
    needs: ["build", "render", "gltf", "archive-source", "sca2d"]
    needs: ["build", "render_1", "render_2", "render_3", "gltf_1", "gltf_2", "archive-source", "sca2d"]
    image: "python:3.12"

    before_script:
@@ -352,7 +392,11 @@ deploy:
  extends: .fewer_rules_common
  dependencies:
    - build
    - render
    - render_1
    - render_2
    - render_3
    - gltf_1
    - gltf_2
    - build-docs
  image: ubuntu:latest

+21 −7
Original line number Diff line number Diff line
@@ -830,16 +830,26 @@ def main():
        action="store_true",
    )
    parser.add_argument(
        "--png-only",
        help="Only renders the PNGs, STLs must already have been pre-built",
        "--png-1-only",
        help="Only renders the first set of PNGs, STLs must already have been pre-built",
        action="store_true",
    )
    parser.add_argument(
        "--png-2-only",
        help="Only renders the second set of PNGs, STLs must already have been pre-built",
        action="store_true",
    )
    parser.add_argument(
        "--png-3-only",
        help="Only renders the third set of PNGs, STLs must already have been pre-built",
        action="store_true",
    )
    args  = parser.parse_args()

    if args.png_only and args.stl_only:
        raise RuntimeError("Can't set both png-only and stl-only parameters.")
    if (args.png_1_only or args.png_2_only or args.png_3_only) and args.stl_only:
        raise RuntimeError("Can't set both png-*-only and stl-only parameters.")

    run_all = not args.png_only and not args.stl_only
    run_all = not args.png_1_only and not args.png_2_only and not args.png_3_only and not args.stl_only

    rendersystem = RenderSystem()
    if run_all or args.stl_only:
@@ -848,8 +858,8 @@ def main():
        register_rendered_microscope_manual_stl(rendersystem, force_clean=args.force_clean)
        register_rendered_separate_z_actuator_stl(rendersystem)
        register_rendered_separate_z_actuator_manual_stl(rendersystem)
    if run_all or args.png_only:
        #Register all openscad renders (and associated post processing)
    if run_all or args.png_1_only:
        #Register openscad renders (and associated post processing)
        register_rms_optics_assembly(rendersystem)
        register_low_cost_optics_assembly(rendersystem)
        register_extra_low_cost_optics_assembly(rendersystem)
@@ -865,6 +875,8 @@ def main():
        register_prepare_upright_z_mount(rendersystem)
        register_prepare_nut_trap_test(rendersystem)
        register_prepare_main_body(rendersystem)
    if run_all or args.png_2_only:
        #Register openscad renders (and associated post processing)
        register_prepare_stand(rendersystem)
        register_actuator_assembly(rendersystem)
        register_band_tool_assembly(rendersystem)
@@ -874,6 +886,8 @@ def main():
        register_mount_microscope(rendersystem)
        register_mount_illumination(rendersystem)
        register_check_actuator_centre(rendersystem)
    if run_all or args.png_3_only:
        #Register openscad renders (and associated post processing)
        register_motor_assembly(rendersystem)
        register_mount_motors(rendersystem)
        register_mount_sample_clips(rendersystem)