Install CMake on macOS; Use size 1 for flexible arrays and unions on MSVC.
[SquirrelJME.git] / .circleci / config.yml
blob47e38d9d9b701392cc80e3c58e07e125eef38c4e
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: large
23     environment:
24       # Allow Gradle to be fully cached
25       GRADLE_USER_HOME: ${CIRCLE_WORKING_DIRECTORY}/.gradle/home
26   build-on-linux-arm64:
27     #docker:
28     #  - image: debian:bookworm
29     machine:
30       image: ubuntu-2204:2024.01.1
31     resource_class: arm.medium
32     environment:
33       # Allow Gradle to be fully cached
34       GRADLE_USER_HOME: ${CIRCLE_WORKING_DIRECTORY}/.gradle/home
36 # This is in the documentation but does not actually work, new feature?
37 #  build-on-windows:
38 #    windows:
39 #      name: win/default
40 #      shell: cmd.exe
41 #    resource_class: medium
42 #    environment:
43 #      # Use a reduced amount of memory to all the VMs so that it does not
44 #      # try grabbing all the memory that is available to the system.
45 #      JAVA_OPTS: -Xmx3g
47   build-on-macos:
48     macos:
49       xcode: 13.4.1
50     resource_class: macos.x86.medium.gen2
51     environment:
52       # Do not auto-update brew as this takes forever, and we really just want
53       # a single package
54       HOMEBREW_NO_AUTO_UPDATE: 1
56       # Do not auto-clean brew, this wastes time and everything will be thrown
57       # out when the container finishes anyway
58       HOMEBREW_CLEANUP_MAX_AGE_DAYS: 730
60       # Do not send analytics
61       HOMEBREW_NO_ANALYTICS: 1
63       # Do not clean up after installation
64       HOMEBREW_NO_INSTALL_CLEANUP: 1
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 # Commands that are used by almost everything
86 commands:
87   # Save Gradle cache and such so subsequent builds are faster
88   persist-gradle:
89     steps:
90       - persist_to_workspace:
91           root: .
92           paths:
93             - '.gradle/*'
94             - 'build/*'
95             - '*/.gradle/*'
96             - '*/build/*'
97             - '*/*/build/*'
99   # Saving of test results, since this is duplicated for many OSes
100   save-test-results:
101     parameters:
102       where:
103         type: string
104       os:
105         type: string
106       vm:
107         type: string
108       shell:
109         type: string
110         default: "/bin/bash"
111       home:
112         type: string
113         default: ./.no-persist/
114       find:
115         type: string
116         default: find
117       store-home:
118         type: string
119         default: ./.no-persist/
120     steps:
121       - run:
122           shell: <<parameters.shell>>
123           name: Save test results
124           command: |
125             mkdir -p "<<parameters.home>>/test-results/junit-<<parameters.os>>-<<parameters.where>>/"
126             <<parameters.find>> . -type f -regex '.*/'"<<parameters.where>>"'/junit/.*\.xml' -exec cp {} "<<parameters.home>>/test-results/junit-<<parameters.os>>-<<parameters.where>>/" \;
127           when: always
128       - run:
129           shell: <<parameters.shell>>
130           name: Save test results
131           command: |
132             mkdir -p "<<parameters.home>>/test-results/csv-<<parameters.os>>-<<parameters.where>>/"
133             <<parameters.find>> . -type f -regex '.*/'"<<parameters.where>>"'/csv/.*\.csv' -exec cp {} "<<parameters.home>>/test-results/csv-<<parameters.os>>-<<parameters.where>>/" \;
134           when: always
135       - run:
136           shell: <<parameters.shell>>
137           name: Save snapshots
138           command: |
139             mkdir -p "<<parameters.home>>/test-results/nps-<<parameters.vm>>-<<parameters.os>>-<<parameters.where>>/"
140             <<parameters.find>> . -type f -regex '.*/'"<<parameters.where>>"'/nps/.*\.nps' -exec cp {} "<<parameters.home>>/test-results/nps-<<parameters.vm>>-<<parameters.os>>-<<parameters.where>>/" \;
141           when: always
142       - store_test_results:
143           path: <<parameters.store-home>>/test-results
144       - store_artifacts:
145           path: <<parameters.store-home>>/test-results
147   # Install standard packages in Debian/Ubuntu
148   linux-install-required:
149     steps:
150       - run:
151           name: Install Sudo
152           command: apt-get update -y && apt-get -y install sudo || echo "Failed, but ignoring..."
153       - run:
154           name: Update package lists
155           command: sudo apt-get update -y
156       - run:
157           name: Install required dependencies
158           command: |
159             sudo apt-get install -y --no-install-recommends cmake build-essential curl wget openjdk-17-jdk gcc g++ make clang git openssh-client
161   # Install required packages on Windows
162   windows-install-required:
163     steps:
164       - run:
165           name: Install CMake
166           shell: cmd.exe
167           command: choco install cmake -y
169   # Install what is required by Flatpak
170   flatpak-install-required:
171     steps:
172       - run:
173           name: Flatpak Base
174           command: sudo apt-get install -y flatpak flatpak-builder
175       - run:
176           name: Register Flathub
177           command: flatpak remote-add --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo
178       - run:
179           name: Flatpak FreeDesktop Platform
180           command: flatpak install --user -y --noninteractive flathub org.freedesktop.Platform//23.08
181       - run:
182           name: Flatpak FreeDesktop SDK
183           command: flatpak install --user -y --noninteractive flathub org.freedesktop.Sdk//23.08
184       - run:
185           name: Flatpak OpenJDK
186           command: flatpak install --user -y --noninteractive flathub runtime/org.freedesktop.Sdk.Extension.openjdk11//23.08
188   # Flatpak Common Build Rules
189   flatpak-common-build:
190     parameters:
191       arch:
192         type: string
193     steps:
194       - run:
195           name: Flatpak Build and Install
196           command: flatpak-builder --user --install --install-deps-from=flathub --allow-missing-runtimes --force-clean build-dir cc.squirreljme.SquirrelJME.yml
197       - run:
198           name: Flatpak Bundle
199           command: flatpak build-bundle $HOME/.local/share/flatpak/repo squirreljme-<<parameters.arch>>.flatpak cc.squirreljme.SquirrelJME
200       - run:
201           name: Flatpak size
202           command: ls -al squirreljme-<<parameters.arch>>.flatpak
203       - store_artifacts:
204           path: squirreljme-<<parameters.arch>>.flatpak
205           destination: squirreljme-<<parameters.arch>>.flatpak
207 jobs:
208   ################################## BUNDLE ##################################
209   bundle:
210     executor: build-on-linux-amd64
211     steps:
212       - checkout
213       - linux-install-required
215   ################################## WINDOWS #################################
216   build_windows_setup:
217     executor:
218       name: win/default
219       shell: cmd.exe
220       size: large
221     environment:
222       # Use older JDK for CircleCI
223       JAVA_HOME: c:/users/circleci/project/jdk-11.0.22/
224     steps:
225       - run:
226           shell: bash.exe
227           name: Download Older JDK
228           command: curl -o /c/users/circleci/jdk.zip https://download.bell-sw.com/java/11.0.22+12/bellsoft-jdk11.0.22+12-windows-amd64.zip
229       - run:
230           shell: bash.exe
231           name: Extract Older JDK
232           command: unzip /c/users/circleci/jdk.zip
233       - run:
234           shell: cmd.exe
235           name: Java Version
236           command: java -version
237       - persist_to_workspace:
238           root: .
239           paths:
240             - 'jdk-11.0.22/'
241   build_windows:
242     executor:
243       name: win/default
244       shell: cmd.exe
245       size: large
246     environment:
247       # Use a reduced amount of memory to all the VMs so that it does not
248       # try grabbing all the memory that is available to the system.
249       JAVA_OPTS: -Xmx3g
251       # Use older JDK for CircleCI
252       JAVA_HOME: c:/users/circleci/project/jdk-11.0.22/
253     steps:
254       - checkout
255       - attach_workspace:
256           at: .
257       - windows-install-required
258       - run:
259           shell: cmd.exe
260           name: Java Version
261           command: java -version
262       - run:
263           shell: cmd.exe
264           name: Gradle Build and Test
265           # According to documentation, Gradle on Windows has trouble and tries
266           # to make way too many workers which causes extreme resource.
267           # contention --max-workers=2
268           command: gradlew <<pipeline.parameters.standard-build-options>> <<pipeline.parameters.standard-gradle-options>>
269           no_output_timeout: 60m
270       - persist-gradle
271       - save-test-results:
272           where: "vm-test-hosted-debug"
273           os: "windows"
274           vm: "hosted"
275           shell: bash.exe
276           find: /usr/bin/find
277           home: "/c/users/circleci/"
278           store-home: "c:/users/circleci/"
279       - save-test-results:
280           where: "vm-test-hosted-release"
281           os: "windows"
282           vm: "hosted"
283           shell: bash.exe
284           find: /usr/bin/find
285           home: "/c/users/circleci/"
286           store-home: "c:/users/circleci/"
288   build_windows_standalone:
289     executor:
290       name: win/default
291       shell: cmd.exe
292       size: large
293     environment:
294       # Use a reduced amount of memory to all the VMs so that it does not
295       # try grabbing all the memory that is available to the system.
296       JAVA_OPTS: -Xmx3g
298       # Use older JDK for CircleCI
299       JAVA_HOME: c:/users/circleci/project/jdk-11.0.22/
300     steps:
301       - checkout
302       - attach_workspace:
303           at: .
304       - windows-install-required
305       - run:
306           shell: bash.exe
307           name: Construct Standalone
308           command: ./gradlew :emulators:standalone:shadowJar <<pipeline.parameters.standard-gradle-options >>
309       - run:
310           shell: bash.exe
311           name: Remove distracting JAR, if any
312           command: rm emulators/standalone/build/libs/standalone-*.jar
313       - store_artifacts:
314           path: emulators/standalone/build/libs/
315           destination: .
317   ratufacoat_build_windows:
318     executor:
319       name: win/default
320       shell: cmd.exe
321       size: large
322     environment:
323       # Use a reduced amount of memory to all the VMs so that it does not
324       # try grabbing all the memory that is available to the system.
325       JAVA_OPTS: -Xmx3g
326     steps:
327       - checkout
328       - attach_workspace:
329           at: .
330       - windows-install-required
331       - run:
332           name: Setup CMake build
333           working_directory: ratufacoat
334           shell: bash.exe
335           command: |
336             "$PROGRAMFILES/CMake/bin/cmake.exe" .
337       - run:
338           name: Compile CMake build
339           working_directory: ratufacoat
340           shell: bash.exe
341           command: |
342             "$PROGRAMFILES/CMake/bin/cmake.exe" --build .
343       - store_artifacts:
344           path: ratufacoat\src\Debug\SquirrelJME.exe
345           destination: SquirrelJME.exe
347   ################################# MAC OS X #################################
348   build_macosx:
349     executor: build-on-macos
350     steps:
351       - checkout
352       - run:
353           # Only OpenJDK is required, Gradle always uses Gradle wrapper so
354           # we do not need that
355           name: Install Dependencies
356           command: brew install openjdk@11 coreutils cmake
357       - run:
358           name: Gradle Build and Test
359           command: timeout --foreground 60m ./gradlew <<pipeline.parameters.standard-build-options>> <<pipeline.parameters.standard-gradle-options>>
360           no_output_timeout: 60m
361       - persist-gradle
362       - save-test-results:
363           where: "vm-test-hosted-debug"
364           os: "macosx"
365           vm: "hosted"
366       - save-test-results:
367           where: "vm-test-hosted-release"
368           os: "macosx"
369           vm: "hosted"
370   build_macosx_m1:
371     executor: build-on-macos-m1
372     steps:
373       - checkout
374       - run:
375           name: Gradle Build and Test
376           command: timeout --foreground 60m ./gradlew <<pipeline.parameters.standard-build-options>> <<pipeline.parameters.standard-gradle-options>>
377           no_output_timeout: 60m
378       - persist-gradle
379       - save-test-results:
380           where: "vm-test-hosted-debug"
381           os: "macosx-m1"
382           vm: "hosted"
383       - save-test-results:
384           where: "vm-test-hosted-release"
385           os: "macosx-m1"
386           vm: "hosted"
388   build_macosx_standalone:
389     executor: build-on-macos
390     steps:
391       - checkout
392       - run:
393           # Only OpenJDK is required, Gradle always uses Gradle wrapper so
394           # we do not need that
395           name: Install Dependencies
396           command: brew install openjdk@11 coreutils cmake
397       - attach_workspace:
398           at: .
399       - run:
400           name: Construct Standalone
401           command: ./gradlew :emulators:standalone:shadowJar <<pipeline.parameters.standard-gradle-options>>
402       - run:
403           name: Remove distracting JAR, if any
404           command: rm emulators/standalone/build/libs/standalone-*.jar
405       - store_artifacts:
406           path: emulators/standalone/build/libs/
407           destination: .
408   build_macosx_m1_standalone:
409     executor: build-on-macos-m1
410     steps:
411       - checkout
412       - attach_workspace:
413           at: .
414       - run:
415           name: Construct Standalone
416           command: ./gradlew :emulators:standalone:shadowJar <<pipeline.parameters.standard-gradle-options>>
417       - run:
418           name: Remove distracting JAR, if any
419           command: rm emulators/standalone/build/libs/standalone-*.jar
420       - store_artifacts:
421           path: emulators/standalone/build/libs/
422           destination: .
424   ratufacoat_build_macosx:
425     executor: build-on-macos
426     steps:
427       - checkout
428       - run:
429           name: Install CMake
430           command: brew install cmake coreutils
431       - attach_workspace:
432           at: .
433       - run:
434           name: Setup CMake build
435           working_directory: ratufacoat
436           command: cmake .
437       - run:
438           name: Compile CMake build
439           working_directory: ratufacoat
440           command: cmake --build .
441       - store_artifacts:
442           path: ratufacoat/src/SquirrelJME
443           destination: SquirrelJME
445   ################################### LINUX ##################################
446   build_linux_amd64:
447     executor: build-on-linux-amd64
448     steps:
449       - checkout
450       - linux-install-required
451       - run:
452           name: Gradle Build and Test
453           command: timeout --foreground 60m ./gradlew <<pipeline.parameters.standard-build-options>> <<pipeline.parameters.standard-gradle-options>>
454           no_output_timeout: 60m
455       - save-test-results:
456           where: "vm-test-hosted-debug"
457           os: "linux-amd64"
458           vm: "hosted"
459       - save-test-results:
460           where: "vm-test-hosted-release"
461           os: "linux-amd64"
462           vm: "hosted"
463       - persist-gradle
464   build_linux_amd64_standalone:
465     executor: build-on-linux-amd64
466     steps:
467       - checkout
468       - linux-install-required
469       - attach_workspace:
470           at: .
471       - run:
472           name: Construct Standalone
473           command: ./gradlew :emulators:standalone:shadowJar <<pipeline.parameters.standard-gradle-options>>
474       - run:
475           name: Remove distracting JAR, if any
476           command: rm emulators/standalone/build/libs/standalone-*.jar
477       - store_artifacts:
478           path: emulators/standalone/build/libs/
479           destination: .
480   build_linux_amd64_standalone_flatpak:
481     executor: build-on-linux-amd64
482     steps:
483       - checkout
484       - linux-install-required
485       - flatpak-install-required
486       - flatpak-common-build:
487           arch: amd64
488   build_linux_arm64:
489     executor: build-on-linux-arm64
490     steps:
491       - checkout
492       - linux-install-required
493       - run:
494           name: Gradle Build and Test
495           command: timeout --foreground 60m ./gradlew <<pipeline.parameters.standard-build-options>> <<pipeline.parameters.standard-gradle-options>>
496           no_output_timeout: 60m
497       - save-test-results:
498           where: "vm-test-hosted-debug"
499           os: "linux-arm64"
500           vm: "hosted"
501       - save-test-results:
502           where: "vm-test-hosted-release"
503           os: "linux-arm64"
504           vm: "hosted"
505       - persist-gradle
506   build_linux_arm64_standalone:
507     executor: build-on-linux-arm64
508     steps:
509       - checkout
510       - linux-install-required
511       - attach_workspace:
512           at: .
513       - run:
514           name: Construct Standalone
515           command: ./gradlew :emulators:standalone:shadowJar <<pipeline.parameters.standard-gradle-options>>
516       - run:
517           name: Remove distracting JAR, if any
518           command: rm emulators/standalone/build/libs/standalone-*.jar
519       - store_artifacts:
520           path: emulators/standalone/build/libs/
521           destination: .
522   build_linux_arm64_standalone_flatpak:
523     executor: build-on-linux-arm64
524     steps:
525       - checkout
526       - linux-install-required
527       - flatpak-install-required
528       - flatpak-common-build:
529           arch: arm64
531   ### OSS SonaType Nexus
532   sonatype_publish:
533     executor: build-on-linux-amd64
534     steps:
535       - checkout
536       - linux-install-required
537       - attach_workspace:
538           at: .
539       - run:
540           name: Publish to OSS SonaType
541           command: ./gradlew publishMavenPublicationToMavenRepository <<pipeline.parameters.standard-gradle-options>> || circleci-agent step halt
543   ### RatufaCoat
544   ratufacoat_build_linux:
545     executor: build-on-linux-amd64
546     steps:
547       - checkout
548       - linux-install-required
549       - attach_workspace:
550           at: .
551       - run:
552           name: Setup CMake build
553           working_directory: ratufacoat
554           command: cmake .
555       - run:
556           name: Compile CMake build
557           working_directory: ratufacoat
558           command: cmake --build .
559       - store_artifacts:
560           path: ratufacoat/src/SquirrelJME
561           destination: SquirrelJME
563   ### SpringCoat
564   test_springcoat_debug:
565     executor: build-on-linux-amd64
566     steps:
567       - checkout
568       - linux-install-required
569       - attach_workspace:
570           at: .
571       - run:
572           name: SpringCoat Tests
573           command: timeout --foreground 60m ./gradlew testSpringCoatDebug <<pipeline.parameters.standard-gradle-options>>
574           no_output_timeout: 60m
575       - save-test-results:
576           where: "vm-test-springcoat-debug"
577           os: "linux"
578           vm: "springcoat"
579   test_springcoat_release:
580     executor: build-on-linux-amd64
581     steps:
582       - checkout
583       - linux-install-required
584       - attach_workspace:
585           at: .
586       - run:
587           name: SpringCoat Tests
588           command: timeout --foreground 60m ./gradlew testSpringCoatRelease <<pipeline.parameters.standard-gradle-options>>
589           no_output_timeout: 60m
590       - save-test-results:
591           where: "vm-test-springcoat-release"
592           os: "linux"
593           vm: "springcoat"
595   test_summercoat:
596     executor: build-on-linux-amd64
597     steps:
598       - checkout
599       - linux-install-required
600       - attach_workspace:
601           at: .
602       - run:
603           name: SummerCoat Tests
604           command: timeout --foreground 60m ./gradlew testSummerCoat <<pipeline.parameters.standard-gradle-options>>
605           no_output_timeout: 60m
606       - save-test-results:
607           where: "vm-test-summercoat-debug"
608           os: "linux"
609           vm: "summercoat"
610       - save-test-results:
611           where: "vm-test-summercoat-release"
612           os: "linux"
613           vm: "summercoat"
615   ################################### USERS ##################################
616   export_user_guide:
617     executor: build-on-linux-amd64
618     steps:
619       - checkout
620       - linux-install-required
621       - run:
622           name: Checkout Wiki
623           command: git clone git@github.com:SquirrelJME/SquirrelJME.wiki.git /tmp/wiki
624       - run:
625           name: Wikify
626           command: .circleci/squirreljme-wikify-user-guide.sh "$(pwd)" "/tmp/wiki"
627       - run:
628           name: Update Git User
629           command: |
630             cd "/tmp/wiki" && git config user.name "SquirrelJME Automation" && git config user.email "xerthesquirrel+squirreljme@gmail.com"
631       - run:
632           name: Commit changes
633           command: |
634             cd "/tmp/wiki" && git commit -m "Synchronize User-Guide" || echo "Ignoring commit."
635       - add_ssh_keys:
636           fingerprints:
637             - "26:b8:ae:4d:53:64:4c:6a:59:3d:a6:60:44:90:9d:6c"
638       - run:
639           name: Push changes
640           command: |
641             cd "/tmp/wiki" && git push
643   ################################ CONSTRUCTION ###############################
644   # Runs the `testJar` task so any operations following this will run faster
645   # when they need to use these JARs
646   construct_testJars:
647     executor: build-on-linux-amd64
648     steps:
649       - checkout
650       - linux-install-required
651       - attach_workspace:
652           at: .
653       - run:
654           name: Construct Test JARs
655           command: ./gradlew testJar <<pipeline.parameters.standard-gradle-options>>
656       - persist-gradle
658   # Constructs the ROM fragment libraries for SummerCoat, since they are used
659   # for general ROM construction
660   construct_libSummerCoat:
661     executor: build-on-linux-amd64
662     steps:
663       - checkout
664       - linux-install-required
665       - attach_workspace:
666           at: .
667       - run:
668           name: Construct SummerCoat Libraries
669           command: ./gradlew libSummerCoat <<pipeline.parameters.standard-gradle-options>>
670       - persist-gradle
672   # All the tests so that they can run from within SummerCoat
673   construct_libTestSummerCoat:
674     executor: build-on-linux-amd64
675     steps:
676       - checkout
677       - linux-install-required
678       - attach_workspace:
679           at: .
680       - run:
681           name: Construct Test SummerCoat Libraries
682           command: ./gradlew libTestSummerCoat <<pipeline.parameters.standard-gradle-options>>
683       - persist-gradle
685   # Constructs the standard SummerCoat ROM, could be uploaded later
686   construct_romSummerCoat:
687     executor: build-on-linux-amd64
688     steps:
689       - checkout
690       - linux-install-required
691       - attach_workspace:
692           at: .
693       - run:
694           name: Construct SummerCoat ROM
695           command: ./gradlew romSummerCoat <<pipeline.parameters.standard-gradle-options>>
696       - persist-gradle
698   # Constructs the test SummerCoat ROM, could be uploaded later, this is so
699   # that any RatufaCoats have an actual ROM that can be tested to ensure that
700   # it properly works.
701   construct_romTestSummerCoat:
702     executor: build-on-linux-amd64
703     steps:
704       - checkout
705       - linux-install-required
706       - attach_workspace:
707           at: .
708       - run:
709           name: Construct Test SummerCoat ROM
710           command: ./gradlew romTestSummerCoat <<pipeline.parameters.standard-gradle-options>>
711       - persist-gradle
713 workflows:
714   version: 2
715   tests:
716     jobs:
717       ############################# STANDARD TESTS ############################
718       - build_linux_amd64
719       - build_linux_arm64
720       - test_springcoat_debug:
721           requires:
722             - construct_testJars
723       - test_springcoat_release:
724           requires:
725             - construct_testJars
726 #      - test_summercoat:
727 #          requires:
728 #            - construct_libTestSummerCoat
729       - build_linux_amd64_standalone:
730            requires:
731              - build_linux_amd64
732       - build_linux_amd64_standalone_flatpak:
733            requires:
734              - build_linux_amd64
735       - build_linux_arm64_standalone:
736           requires:
737             - build_linux_arm64
738       - build_linux_arm64_standalone_flatpak:
739           requires:
740             - build_linux_arm64
742       # Building on Windows is currently expensive and takes longer, so only
743       # run these builds on trunk to lower costs.
744       # Currently, have an overabundance of credits...
745       - build_windows_setup
746       - build_windows:
747           requires:
748              - build_windows_setup
749 #          requires:
750 #            - build_linux
751 #          filters:
752 #            branches:
753 #              only:
754 #                - trunk
755       - build_windows_standalone:
756            requires:
757              - build_windows
759       # Mac OS X runs decently however the jobs for it have a higher cost, so
760       # only perform builds and tests for trunk to lower costs.
761       # Currently, I have an overabundance of credits...
762       - build_macosx
763 #          filters:
764 #            branches:
765 #              only:
766 #                - trunk
767       - build_macosx_m1
768 #          filters:
769 #            branches:
770 #              only:
771 #                - trunk
772       - build_macosx_standalone:
773            requires:
774              - build_macosx
775       - build_macosx_m1_standalone:
776            requires:
777              - build_macosx_m1
779       # Publishing to OSS Sonatype Nexus (https://oss.sonatype.org)
780       - sonatype_publish:
781           requires:
782             - build_linux_amd64
783           filters:
784             branches:
785               only:
786                 - trunk
787                 - wip-centralpublish
789       ###################### LIBRARY AND ROM CONSTRUCTION #####################
790       - construct_testJars:
791           requires:
792             - build_linux_amd64
793 #      - construct_libSummerCoat:
794 #          requires:
795 #            - build_linux_amd64
796 #      - construct_libTestSummerCoat:
797 #          requires:
798 #            - construct_testJars
799 #      - construct_romSummerCoat:
800 #          requires:
801 #            - construct_libSummerCoat
802 #      - construct_romTestSummerCoat:
803 #          requires:
804 #            - construct_libTestSummerCoat
806       ############################## RATUFACOAT ##############################
807 #      - ratufacoat_build_windows:
808 #          requires:
809 #            - build_windows
810 #            - construct_romTestSummerCoat
811 #      - ratufacoat_build_linux:
812 #          requires:
813 #            - build_linux_amd64
814 #            - construct_romTestSummerCoat
815 #      - ratufacoat_build_macosx:
816 #          requires:
817 #            - build_macosx
818 #            - construct_romTestSummerCoat
820       ############################## DEPLOYMENT ##############################
821       - bundle:
822           requires:
823             - build_linux_amd64_standalone
824             - build_windows_standalone
825             - build_macosx_standalone
826             - build_macosx_m1_standalone
828   #################### TASKS TO INCREASE USER FRIENDLINESS ####################
829   friendliness:
830     jobs:
831       - export_user_guide:
832           filters:
833             branches:
834               only:
835                 - trunk
836                 - wip-userguide