Add a pure and non-pure raw scan put, where the non-pure will alpha blend.
[SquirrelJME.git] / .circleci / config.yml
blob4e96b4910952c9199b16d4f598b756eaad433d8d
1 # ---------------------------------------------------------------------------
2 # Multi-Phasic Applications: SquirrelJME
3 #     Copyright (C) Stephanie Gawroriski <xer@multiphasicapps.net>
4 #     Copyright (C) Multi-Phasic Applications <multiphasicapps.net>
5 # ---------------------------------------------------------------------------
6 # SquirrelJME is under the GNU General Public License v3, or later.
7 # See license.mkd for licensing and copyright information.
8 # ---------------------------------------------------------------------------
9 # DESCRIPTION: CircleCI Build Configuration
10 # SourceForge: squirreljme@frs.sourceforge.net
11 # SourceForge Root: /home/frs/project/squirreljme/AutoBuild/
12 # CircleCI Reference: https://circleci.com/docs/2.0/env-vars/
14 version: 2.1
16 executors:
17   build-on-linux-amd64:
18     #docker:
19     #  - image: debian:bookworm
20     machine:
21       image: ubuntu-2204:2024.01.1
22     resource_class: medium
23     environment:
24       # Allow Gradle to be fully cached
25       GRADLE_USER_HOME: ${CIRCLE_WORKING_DIRECTORY}/.gradle/home
27       # Fix Debian package install
28       DEBIAN_FRONTEND: noninteractive
29       NEEDRESTART_MODE: l
30       NEEDRESTART_SUSPEND: 1
32   build-on-linux-arm64:
33     #docker:
34     #  - image: debian:bookworm
35     machine:
36       image: ubuntu-2204:2024.01.1
37     resource_class: arm.medium
38     environment:
39       # Allow Gradle to be fully cached
40       GRADLE_USER_HOME: ${CIRCLE_WORKING_DIRECTORY}/.gradle/home
42       # Fix Debian package install
43       DEBIAN_FRONTEND: noninteractive
44       NEEDRESTART_MODE: l
45       NEEDRESTART_SUSPEND: 1
47   build-on-linux-riscv64:
48     machine: true
49     resource_class: squirreljme/squirreljme-linux-riscv64
51   # This is in the documentation but does not actually work, new feature?
52   #  build-on-windows:
53   #    windows:
54   #      name: win/default
55   #      shell: cmd.exe
56   #    resource_class: medium
57   #    environment:
58   #      # Use a reduced amount of memory to all the VMs so that it does not
59   #      # try grabbing all the memory that is available to the system.
60   #      JAVA_OPTS: -Xmx3g
62   build-on-macos:
63     machine: true
64     resource_class: squirreljme/squirreljme-macos-x86
66   build-on-macos-m1:
67     machine: true
68     resource_class: squirreljme/squirreljme-macos-m1
70 orbs:
71   win: circleci/windows@5.0
73 # Parameters to simplify commands
74 parameters:
75   # Options to be used for any Gradle command, is faster this way
76   standard-gradle-options:
77     type: string
78     default: --console plain --continue --parallel --no-daemon --stacktrace
80   # Standard build for systems
81   standard-build-options:
82     type: string
83     default: build testHosted -x testSpringCoat -x testSpringCoatRelease -x testSpringCoatDebug -x javadoc -x javadocJar -x sourcesJar -x markdownJavaDoc
85   # Windows JDK versions
86   windows-jdk-base-dir:
87     type: string
88     default: jdk-11.0.23
89   windows-jdk-i386:
90     type: string
91     default: https://download.bell-sw.com/java/11.0.23+12/bellsoft-jdk11.0.23+12-windows-i586.zip
92   windows-jdk-amd64:
93     type: string
94     default: https://download.bell-sw.com/java/11.0.23+12/bellsoft-jdk11.0.23+12-windows-amd64.zip
96 # Commands that are used by almost everything
97 commands:
98   # Save Gradle cache and such so subsequent builds are faster
99   persist-gradle:
100     steps:
101       - persist_to_workspace:
102           root: .
103           paths:
104             - '.gradle/*'
105             - 'build/*'
106             - '*/.gradle/*'
107             - '*/build/*'
108             - '*/*/build/*'
110   # Saving of test results, since this is duplicated for many OSes
111   save-test-results:
112     parameters:
113       where:
114         type: string
115       os:
116         type: string
117       vm:
118         type: string
119       shell:
120         type: string
121         default: "/bin/bash"
122       home:
123         type: string
124         default: ./.no-persist/
125       find:
126         type: string
127         default: find
128       store-home:
129         type: string
130         default: ./.no-persist/
131     steps:
132       - run:
133           shell: <<parameters.shell>>
134           name: Save test results
135           command: |
136             mkdir -p "<<parameters.home>>/test-results/junit-<<parameters.os>>-<<parameters.where>>/"
137             <<parameters.find>> . -type f -regex '.*/'"<<parameters.where>>"'/junit/.*\.xml' -exec cp {} "<<parameters.home>>/test-results/junit-<<parameters.os>>-<<parameters.where>>/" \;
138           when: always
139       - run:
140           shell: <<parameters.shell>>
141           name: Save test results
142           command: |
143             mkdir -p "<<parameters.home>>/test-results/csv-<<parameters.os>>-<<parameters.where>>/"
144             <<parameters.find>> . -type f -regex '.*/'"<<parameters.where>>"'/csv/.*\.csv' -exec cp {} "<<parameters.home>>/test-results/csv-<<parameters.os>>-<<parameters.where>>/" \;
145           when: always
146       - run:
147           shell: <<parameters.shell>>
148           name: Save snapshots
149           command: |
150             mkdir -p "<<parameters.home>>/test-results/nps-<<parameters.vm>>-<<parameters.os>>-<<parameters.where>>/"
151             <<parameters.find>> . -type f -regex '.*/'"<<parameters.where>>"'/nps/.*\.nps' -exec cp {} "<<parameters.home>>/test-results/nps-<<parameters.vm>>-<<parameters.os>>-<<parameters.where>>/" \;
152           when: always
153       - store_test_results:
154           path: <<parameters.store-home>>/test-results
155       - store_artifacts:
156           path: <<parameters.store-home>>/test-results
158   # Standard apt-get install
159   linux-debian-apt-get-install:
160     parameters:
161       packages:
162         type: string
163     steps:
164       - run:
165           name: Install packages
166           environment:
167             DEBIAN_FRONTEND: noninteractive
168             NEEDRESTART_MODE: l
169             NEEDRESTART_SUSPEND: 1
170           command: |
171             sudo apt-get install -y --no-install-recommends <<parameters.packages>>
173   # Standard apt-get install, optional
174   linux-debian-apt-get-install-optional:
175     parameters:
176       packages:
177         type: string
178       look:
179         type: string
180     steps:
181       - run:
182           name: Install packages (optional)
183           environment:
184             DEBIAN_FRONTEND: noninteractive
185             NEEDRESTART_MODE: l
186             NEEDRESTART_SUSPEND: 1
187           command: |
188             if ! which "<<parameters.look>>"; then sudo apt-get install -y --no-install-recommends <<parameters.packages>> || echo "Failed, but ignoring..."; fi
190   # Install standard packages in Debian/Ubuntu
191   linux-install-required:
192     steps:
193       - run:
194           name: Install Sudo
195           environment:
196             DEBIAN_FRONTEND: noninteractive
197             NEEDRESTART_MODE: l
198             NEEDRESTART_SUSPEND: 1
199           command: apt-get update -y && apt-get -yqq install sudo || echo "Failed, but ignoring..."
200       - run:
201           name: Update package lists
202           environment:
203             DEBIAN_FRONTEND: noninteractive
204             NEEDRESTART_MODE: l
205             NEEDRESTART_SUSPEND: 1
206           command: sudo apt-get update -y
207       - linux-debian-apt-get-install:
208           packages: cmake build-essential curl wget gcc g++ make clang git openssh-client
209       - linux-debian-apt-get-install-optional:
210           look: javac
211           packages: openjdk-17-jdk
212       - linux-debian-apt-get-install-optional:
213           look: javac
214           packages: openjdk-11-jdk
215       - linux-debian-apt-get-install-optional:
216           look: javac
217           packages: openjdk-8-jdk
218       - linux-debian-apt-get-install-optional:
219           look: javac
220           packages: openjdk-7-jdk
222   # Install required packages on Windows
223   windows-install-required:
224     steps:
225       - run:
226           name: Install CMake
227           shell: cmd.exe
228           command: choco install cmake -y
229       - run:
230           name: Install Mingw-w64
231           shell: cmd.exe
232           command: choco install mingw -y
234   # Windows JDK Install
235   windows-install-jdk:
236     parameters:
237       jdk-url:
238         type: string
239     steps:
240       - run:
241           shell: bash.exe
242           name: Download Older JDK
243           command: curl -o /c/users/circleci/jdk.zip <<parameters.jdk-url>>
244       - run:
245           shell: bash.exe
246           name: Extract Older JDK
247           command: unzip /c/users/circleci/jdk.zip
248       - persist_to_workspace:
249           root: .
250           paths:
251             - <<pipeline.parameters.windows-jdk-base-dir>>/
253   # Install required packages on macOS
254   macos-install-required:
255     steps:
256       - run:
257           # Only OpenJDK is required, Gradle always uses Gradle wrapper so
258           # we do not need that... also CMake as well for native code
259           name: Install Dependencies
260           command: brew install openjdk@11 coreutils cmake
262   # Install what is required by Flatpak
263   flatpak-install-required:
264     steps:
265       - linux-debian-apt-get-install:
266           packages: flatpak flatpak-builder
267       - run:
268           name: Register Flathub
269           command: flatpak remote-add --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo
270       - run:
271           name: Flatpak FreeDesktop Platform
272           command: flatpak install --user -y --noninteractive flathub org.freedesktop.Platform//23.08
273       - run:
274           name: Flatpak FreeDesktop SDK
275           command: flatpak install --user -y --noninteractive flathub org.freedesktop.Sdk//23.08
276       - run:
277           name: Flatpak OpenJDK
278           command: flatpak install --user -y --noninteractive flathub runtime/org.freedesktop.Sdk.Extension.openjdk11//23.08
280   # Flatpak Common Build Rules
281   flatpak-common-build:
282     parameters:
283       arch:
284         type: string
285     steps:
286       - run:
287           name: Flatpak Build and Install
288           command: flatpak-builder --user --install --install-deps-from=flathub --allow-missing-runtimes --force-clean build-dir cc.squirreljme.SquirrelJME.yml
289       - run:
290           name: Flatpak Bundle
291           command: flatpak build-bundle $HOME/.local/share/flatpak/repo squirreljme-<<parameters.arch>>.flatpak cc.squirreljme.SquirrelJME
292       - run:
293           name: Flatpak size
294           command: ls -al squirreljme-<<parameters.arch>>.flatpak
295       - store_artifacts:
296           path: squirreljme-<<parameters.arch>>.flatpak
297           destination: squirreljme-<<parameters.arch>>.flatpak
299   # Common Build for Standalone (UNIX)
300   standalone-unix-common-build:
301     steps:
302       - run:
303           name: Construct Standalone
304           command: ./gradlew :emulators:standalone:shadowJar <<pipeline.parameters.standard-gradle-options>>
305       - run:
306           name: Remove distracting JAR, if any
307           command: rm emulators/standalone/build/libs/standalone-*.jar
308       - store_artifacts:
309           path: emulators/standalone/build/libs/
310           destination: .
312 jobs:
313   ################################## BUNDLE ##################################
314   bundle:
315     executor: build-on-linux-amd64
316     steps:
317       - checkout
318       - linux-install-required
320   ################################## WINDOWS #################################
321   build_windows_i386_setup:
322     executor:
323       name: win/default
324       shell: cmd.exe
325       size: medium
326     steps:
327       - windows-install-jdk:
328           jdk-url: <<pipeline.parameters.windows-jdk-i386>>
330   build_windows_i386:
331     executor:
332       name: win/default
333       shell: cmd.exe
334       size: medium
335     environment:
336       # Use older JDK for CircleCI
337       JAVA_HOME: c:/users/circleci/project/<<pipeline.parameters.windows-jdk-base-dir>>/
338     steps:
339       - checkout
340       - attach_workspace:
341           at: .
342       - windows-install-required
343       - run:
344           shell: cmd.exe
345           name: Gradle Build and Test
346           # According to documentation, Gradle on Windows has trouble and tries
347           # to make way too many workers which causes extreme resource.
348           # contention --max-workers=2
349           command: gradlew <<pipeline.parameters.standard-build-options>> <<pipeline.parameters.standard-gradle-options>>
350           no_output_timeout: 60m
351       - persist-gradle
352       - save-test-results:
353           where: "vm-test-hosted-debug"
354           os: "windows"
355           vm: "hosted"
356           shell: bash.exe
357           find: /usr/bin/find
358           home: "/c/users/circleci/"
359           store-home: "c:/users/circleci/"
360       - save-test-results:
361           where: "vm-test-hosted-release"
362           os: "windows"
363           vm: "hosted"
364           shell: bash.exe
365           find: /usr/bin/find
366           home: "/c/users/circleci/"
367           store-home: "c:/users/circleci/"
369   build_windows_i386_standalone:
370     executor:
371       name: win/default
372       shell: cmd.exe
373       size: medium
374     environment:
375       # Use older JDK for CircleCI
376       JAVA_HOME: c:/users/circleci/project/<<pipeline.parameters.windows-jdk-base-dir>>/
377     steps:
378       - checkout
379       - attach_workspace:
380           at: .
381       - windows-install-required
382       - run:
383           shell: bash.exe
384           name: Construct Standalone
385           command: ./gradlew :emulators:standalone:shadowJar <<pipeline.parameters.standard-gradle-options >>
386       - run:
387           shell: bash.exe
388           name: Remove distracting JAR, if any
389           command: rm emulators/standalone/build/libs/standalone-*.jar
390       - store_artifacts:
391           path: emulators/standalone/build/libs/
392           destination: .
394   build_windows_amd64_setup:
395     executor:
396       name: win/default
397       shell: cmd.exe
398       size: medium
399     environment:
400       # Use older JDK for CircleCI
401       JAVA_HOME: c:/users/circleci/project/<<pipeline.parameters.windows-jdk-base-dir>>/
402     steps:
403       - windows-install-jdk:
404           jdk-url: <<pipeline.parameters.windows-jdk-amd64>>
406   build_windows_amd64:
407     executor:
408       name: win/default
409       shell: cmd.exe
410       size: medium
411     environment:
412       # Use a reduced amount of memory to all the VMs so that it does not
413       # try grabbing all the memory that is available to the system.
414       JAVA_OPTS: -Xmx3g
416       # Use older JDK for CircleCI
417       JAVA_HOME: c:/users/circleci/project/<<pipeline.parameters.windows-jdk-base-dir>>/
418     steps:
419       - checkout
420       - attach_workspace:
421           at: .
422       - windows-install-required
423       - run:
424           shell: cmd.exe
425           name: Gradle Build and Test
426           # According to documentation, Gradle on Windows has trouble and tries
427           # to make way too many workers which causes extreme resource.
428           # contention --max-workers=2
429           command: gradlew <<pipeline.parameters.standard-build-options>> <<pipeline.parameters.standard-gradle-options>>
430           no_output_timeout: 60m
431       - persist-gradle
432       - save-test-results:
433           where: "vm-test-hosted-debug"
434           os: "windows"
435           vm: "hosted"
436           shell: bash.exe
437           find: /usr/bin/find
438           home: "/c/users/circleci/"
439           store-home: "c:/users/circleci/"
440       - save-test-results:
441           where: "vm-test-hosted-release"
442           os: "windows"
443           vm: "hosted"
444           shell: bash.exe
445           find: /usr/bin/find
446           home: "/c/users/circleci/"
447           store-home: "c:/users/circleci/"
449   build_windows_amd64_standalone:
450     executor:
451       name: win/default
452       shell: cmd.exe
453       size: medium
454     environment:
455       # Use a reduced amount of memory to all the VMs so that it does not
456       # try grabbing all the memory that is available to the system.
457       JAVA_OPTS: -Xmx3g
459       # Use older JDK for CircleCI
460       JAVA_HOME: c:/users/circleci/project/<<pipeline.parameters.windows-jdk-base-dir>>/
461     steps:
462       - checkout
463       - attach_workspace:
464           at: .
465       - windows-install-required
466       - run:
467           shell: bash.exe
468           name: Construct Standalone
469           command: ./gradlew :emulators:standalone:shadowJar <<pipeline.parameters.standard-gradle-options >>
470       - run:
471           shell: bash.exe
472           name: Remove distracting JAR, if any
473           command: rm emulators/standalone/build/libs/standalone-*.jar
474       - store_artifacts:
475           path: emulators/standalone/build/libs/
476           destination: .
478   ################################# MAC OS X #################################
479   build_macosx_amd64:
480     executor: build-on-macos
481     steps:
482       - checkout
483       - run:
484           name: Gradle Build and Test
485           command: timeout --foreground 60m ./gradlew <<pipeline.parameters.standard-build-options>> <<pipeline.parameters.standard-gradle-options>>
486           no_output_timeout: 60m
487       - persist-gradle
488       - save-test-results:
489           where: "vm-test-hosted-debug"
490           os: "macosx"
491           vm: "hosted"
492       - save-test-results:
493           where: "vm-test-hosted-release"
494           os: "macosx"
495           vm: "hosted"
496   build_macosx_arm64:
497     executor: build-on-macos-m1
498     steps:
499       - checkout
500       - run:
501           name: Gradle Build and Test
502           command: timeout --foreground 60m ./gradlew <<pipeline.parameters.standard-build-options>> <<pipeline.parameters.standard-gradle-options>>
503           no_output_timeout: 60m
504       - persist-gradle
505       - save-test-results:
506           where: "vm-test-hosted-debug"
507           os: "macosx-m1"
508           vm: "hosted"
509       - save-test-results:
510           where: "vm-test-hosted-release"
511           os: "macosx-m1"
512           vm: "hosted"
514   build_macosx_amd64_standalone:
515     executor: build-on-macos
516     steps:
517       - checkout
518       - attach_workspace:
519           at: .
520       - standalone-unix-common-build
521   build_macosx_arm64_standalone:
522     executor: build-on-macos-m1
523     steps:
524       - checkout
525       - attach_workspace:
526           at: .
527       - standalone-unix-common-build
529   ################################### LINUX ##################################
530   # Linux AMD64
531   build_linux_amd64:
532     executor: build-on-linux-amd64
533     steps:
534       - checkout
535       - linux-install-required
536       - run:
537           name: Gradle Build and Test
538           command: timeout --foreground 60m ./gradlew <<pipeline.parameters.standard-build-options>> <<pipeline.parameters.standard-gradle-options>>
539           no_output_timeout: 60m
540       - save-test-results:
541           where: "vm-test-hosted-debug"
542           os: "linux-amd64"
543           vm: "hosted"
544       - save-test-results:
545           where: "vm-test-hosted-release"
546           os: "linux-amd64"
547           vm: "hosted"
548       - persist-gradle
549   build_linux_amd64_standalone:
550     executor: build-on-linux-amd64
551     steps:
552       - checkout
553       - linux-install-required
554       - attach_workspace:
555           at: .
556       - standalone-unix-common-build
557   build_linux_amd64_standalone_flatpak:
558     executor: build-on-linux-amd64
559     steps:
560       - checkout
561       - linux-install-required
562       - flatpak-install-required
563       - flatpak-common-build:
564           arch: amd64
566   # Linux ARM64
567   build_linux_arm64:
568     executor: build-on-linux-arm64
569     steps:
570       - checkout
571       - linux-install-required
572       - run:
573           name: Gradle Build and Test
574           command: timeout --foreground 60m ./gradlew <<pipeline.parameters.standard-build-options>> <<pipeline.parameters.standard-gradle-options>>
575           no_output_timeout: 60m
576       - save-test-results:
577           where: "vm-test-hosted-debug"
578           os: "linux-arm64"
579           vm: "hosted"
580       - save-test-results:
581           where: "vm-test-hosted-release"
582           os: "linux-arm64"
583           vm: "hosted"
584       - persist-gradle
585   build_linux_arm64_standalone:
586     executor: build-on-linux-arm64
587     steps:
588       - checkout
589       - linux-install-required
590       - attach_workspace:
591           at: .
592       - standalone-unix-common-build
593   build_linux_arm64_standalone_flatpak:
594     executor: build-on-linux-arm64
595     steps:
596       - checkout
597       - linux-install-required
598       - flatpak-install-required
599       - flatpak-common-build:
600           arch: arm64
602   # Linux RISC-V 64-bit
603   build_linux_riscv64:
604     executor: build-on-linux-riscv64
605     steps:
606       - checkout
607       - run:
608           name: Gradle Build and Test
609           command: timeout --foreground 120m ./gradlew <<pipeline.parameters.standard-build-options>> <<pipeline.parameters.standard-gradle-options>>
610           no_output_timeout: 120m
611       - save-test-results:
612           where: "vm-test-hosted-debug"
613           os: "linux-arm64"
614           vm: "hosted"
615       - save-test-results:
616           where: "vm-test-hosted-release"
617           os: "linux-arm64"
618           vm: "hosted"
619       - persist-gradle
620   build_linux_riscv64_standalone:
621     executor: build-on-linux-riscv64
622     steps:
623       - checkout
624       - attach_workspace:
625           at: .
626       - standalone-unix-common-build
628   ### OSS SonaType Nexus
629   sonatype_publish:
630     executor: build-on-linux-amd64
631     steps:
632       - checkout
633       - linux-install-required
634       - attach_workspace:
635           at: .
636       - run:
637           name: Publish to OSS SonaType
638           command: ./gradlew publishMavenPublicationToMavenRepository <<pipeline.parameters.standard-gradle-options>> || circleci-agent step halt
640   ### SpringCoat
641   test_springcoat_debug:
642     executor: build-on-linux-amd64
643     steps:
644       - checkout
645       - linux-install-required
646       - attach_workspace:
647           at: .
648       - run:
649           name: SpringCoat Tests
650           command: timeout --foreground 60m ./gradlew testSpringCoatDebug <<pipeline.parameters.standard-gradle-options>>
651           no_output_timeout: 60m
652       - save-test-results:
653           where: "vm-test-springcoat-debug"
654           os: "linux"
655           vm: "springcoat"
656   test_springcoat_release:
657     executor: build-on-linux-amd64
658     steps:
659       - checkout
660       - linux-install-required
661       - attach_workspace:
662           at: .
663       - run:
664           name: SpringCoat Tests
665           command: timeout --foreground 60m ./gradlew testSpringCoatRelease <<pipeline.parameters.standard-gradle-options>>
666           no_output_timeout: 60m
667       - save-test-results:
668           where: "vm-test-springcoat-release"
669           os: "linux"
670           vm: "springcoat"
672   ################################### USERS ##################################
673   export_user_guide:
674     executor: build-on-linux-amd64
675     steps:
676       - checkout
677       - linux-install-required
678       - run:
679           name: Checkout Wiki
680           command: git clone git@github.com:SquirrelJME/SquirrelJME.wiki.git /tmp/wiki
681       - run:
682           name: Wikify
683           command: .circleci/squirreljme-wikify-user-guide.sh "$(pwd)" "/tmp/wiki"
684       - run:
685           name: Update Git User
686           command: |
687             cd "/tmp/wiki" && git config user.name "SquirrelJME Automation" && git config user.email "xerthesquirrel+squirreljme@gmail.com"
688       - run:
689           name: Commit changes
690           command: |
691             cd "/tmp/wiki" && git commit -m "Synchronize User-Guide" || echo "Ignoring commit."
692       - add_ssh_keys:
693           fingerprints:
694             - "26:b8:ae:4d:53:64:4c:6a:59:3d:a6:60:44:90:9d:6c"
695       - run:
696           name: Push changes
697           command: |
698             cd "/tmp/wiki" && git push
700   ################################ CONSTRUCTION ###############################
701   # Runs the `testJar` task so any operations following this will run faster
702   # when they need to use these JARs
703   construct_testJars:
704     executor: build-on-linux-amd64
705     steps:
706       - checkout
707       - linux-install-required
708       - attach_workspace:
709           at: .
710       - run:
711           name: Construct Test JARs
712           command: ./gradlew testJar <<pipeline.parameters.standard-gradle-options>>
713       - persist-gradle
715 workflows:
716   version: 2
717   tests:
718     jobs:
719       ############################# STANDARD TESTS ############################
720       # AMD64
721       - build_linux_amd64
722       - test_springcoat_debug:
723           requires:
724             - construct_testJars
725       - test_springcoat_release:
726           requires:
727             - construct_testJars
728           filters:
729             branches:
730               only:
731                 - trunk
732       - build_linux_amd64_standalone:
733           requires:
734             - build_linux_amd64
735           filters:
736             branches:
737               only:
738                 - trunk
739       - build_linux_amd64_standalone_flatpak:
740           requires:
741             - build_linux_amd64
742           filters:
743             branches:
744               only:
745                 - trunk
747       # ARM64
748       - build_linux_arm64
749       - build_linux_arm64_standalone:
750           requires:
751             - build_linux_arm64
752           filters:
753             branches:
754               only:
755                 - trunk
756       - build_linux_arm64_standalone_flatpak:
757           requires:
758             - build_linux_arm64
759           filters:
760             branches:
761               only:
762                 - trunk
764       # RISC-V 64-bit
765 #      - build_linux_riscv64
766 #      - build_linux_riscv64_standalone:
767 #          requires:
768 #            - build_linux_riscv64
769 #          filters:
770 #            branches:
771 #              only:
772 #                - trunk
774       # Windows 32-bit
775       - build_windows_i386_setup
776       - build_windows_i386:
777           requires:
778             - build_windows_i386_setup
779       - build_windows_i386_standalone:
780           requires:
781             - build_windows_i386
782           filters:
783             branches:
784               only:
785                 - trunk
787       # Windows 64-bit
788       - build_windows_amd64_setup
789       - build_windows_amd64:
790           requires:
791             - build_windows_amd64_setup
792       - build_windows_amd64_standalone:
793           requires:
794             - build_windows_amd64
795           filters:
796             branches:
797               only:
798                 - trunk
800       # Mac OS X runs decently however the jobs for it have a higher cost, so
801       # only perform builds and tests for trunk to lower costs.
802       # Currently, I have an overabundance of credits...
803       - build_macosx_amd64
804       - build_macosx_arm64
805       - build_macosx_amd64_standalone:
806           requires:
807             - build_macosx_amd64
808           filters:
809             branches:
810               only:
811                 - trunk
812       - build_macosx_arm64_standalone:
813           requires:
814             - build_macosx_arm64
815           filters:
816             branches:
817               only:
818                 - trunk
820       # Publishing to OSS Sonatype Nexus (https://oss.sonatype.org)
821       - sonatype_publish:
822           requires:
823             - build_linux_amd64
824           filters:
825             branches:
826               only:
827                 - trunk
828                 - wip-centralpublish
830       ###################### LIBRARY AND ROM CONSTRUCTION #####################
831       - construct_testJars:
832           requires:
833             - build_linux_amd64
835       ############################## DEPLOYMENT ##############################
836       - bundle:
837           requires:
838             - build_linux_amd64_standalone
839             - build_windows_amd64_standalone
840             - build_macosx_amd64_standalone
841             - build_macosx_arm64_standalone
842           filters:
843             branches:
844               only:
845                 - trunk
847   #################### TASKS TO INCREASE USER FRIENDLINESS ####################
848   friendliness:
849     jobs:
850       - export_user_guide:
851           filters:
852             branches:
853               only:
854                 - trunk
855                 - wip-userguide