Commit 3ef01cca authored by William Wadsworth's avatar William Wadsworth
Browse files

split render steps in the ci

The render and GLTF steps take a long time to complete. Split them up in sections to run in parallel.
parent 7e21460e
Loading
Loading
Loading
Loading
Loading
+74 −7
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_1:
    extends:
      - .scad-job
      - .rules_common
@@ -266,7 +267,7 @@ render:
    needs: ["prebuild-for-render", "version"]

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

    artifacts:
      expire_in: 1 week
@@ -275,7 +276,45 @@ render:
      paths:
        - docs/renders/*.png

gltf:
render_2:
    extends:
      - .scad-job
      - .rules_common
    stage: build
    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-2-only

    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/renders/*.png

render_3:
    extends:
      - .scad-job
      - .rules_common
    stage: build
    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-3-only

    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/renders/*.png

# compose GLB 3D models of complete microscopes
# split into two groups running in parallel
gltf_1:
    extends:
      - .scad-job
      - .rules_common
@@ -289,6 +328,27 @@ gltf:
      - cd rendering
      - scad2gltf complete_microscope_rms.scad
      - scad2gltf complete_microscope_low_cost.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:
      - .scad-job
      - .rules_common
    stage: build
    dependencies: ["prebuild-for-render", "version"]
    needs: ["prebuild-for-render", "version"]

    script:
      - mkdir -p docs/gltf
      - pip install scad2gltf
      - cd rendering
      - scad2gltf complete_microscope_upright.scad
      - scad2gltf complete_microscope_manual.scad
      - cp complete_microscope_*.glb ../docs/gltf/
@@ -306,11 +366,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 +415,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)
@@ -859,6 +869,8 @@ def main():
        register_optics_assembled(rendersystem)
        register_band(rendersystem)
        register_actuator_visualisation(rendersystem)
    if run_all or args.png_2_only:
        #Register openscad renders (and associated post processing)
        register_brim_and_ties(rendersystem)
        register_brim_and_ties_separate_z_actuator(rendersystem)
        register_prepare_separate_z_actuator(rendersystem)
@@ -868,6 +880,8 @@ def main():
        register_prepare_stand(rendersystem)
        register_actuator_assembly(rendersystem)
        register_band_tool_assembly(rendersystem)
    if run_all or args.png_3_only:
        #Register openscad renders (and associated post processing)
        register_picam(rendersystem)
        register_mount_optics(rendersystem)
        register_mount_upright_optics(rendersystem)