diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0d436ee753..5a33d55adf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -34,6 +34,7 @@ jobs: --github-variable-prefix platforms \ --github-ci \ --verbose \ + ${{ github.repository_owner != 'libsdl-org' && '--no-artifact' }} \ --commit-message-file /tmp/commit_message.txt level1: needs: [controller] diff --git a/.github/workflows/create-test-plan.py b/.github/workflows/create-test-plan.py index 2501a97fc9..d0f877aacb 100755 --- a/.github/workflows/create-test-plan.py +++ b/.github/workflows/create-test-plan.py @@ -198,13 +198,14 @@ class JobDetails: cpactions_install_cmd: str = "" setup_vita_gles_type: str = "" - def to_workflow(self) -> dict[str, str|bool]: + def to_workflow(self, enable_artifacts) -> dict[str, str|bool]: data = { "name": self.name, "os": self.os, "container": self.container if self.container else "", "platform": self.platform, "artifact": self.artifact, + "enable-artifacts": enable_artifacts, "shell": self.shell, "msys2-msystem": self.msys2_msystem, "msys2-env": self.msys2_env, @@ -504,7 +505,7 @@ def spec_to_job(spec: JobSpec) -> JobDetails: "-DSDL_ARMSIMD=ON", )) # Fix vita.toolchain.cmake (https://github.com/vitasdk/vita-toolchain/pull/253) - job.source_cmd = "sed -i -E 's/set\( PKG_CONFIG_EXECUTABLE \"\$\{VITASDK}\/bin\/arm-vita-eabi-pkg-config\" )/set( PKG_CONFIG_EXECUTABLE \"${VITASDK}\/bin\/arm-vita-eabi-pkg-config\" CACHE PATH \"Path of pkg-config executable\" )/' ${VITASDK}/share/vita.toolchain.cmake" + job.source_cmd = r"""sed -i -E "s#set\\( PKG_CONFIG_EXECUTABLE \"\\$\\{VITASDK}/bin/arm-vita-eabi-pkg-config\" \\)#set\\( PKG_CONFIG_EXECUTABLE \"${VITASDK}/bin/arm-vita-eabi-pkg-config\" CACHE PATH \"Path of pkg-config executable\" \\)#" ${VITASDK}/share/vita.toolchain.cmake""" job.clang_tidy = False job.run_tests = False job.shared = False @@ -613,16 +614,13 @@ def spec_to_job(spec: JobSpec) -> JobDetails: return job -def specs_to_plaform(specs: tuple[JobSpec, ...]) -> list[dict[str, str|bool]]: - result = [] - for spec in specs: - logger.info("spec=%r", spec) - job = spec_to_job(spec) - logger.info("job=%r", job) - platform = job.to_workflow() - result.append(platform) - logger.info("platform=%r", platform) - return result +def spec_to_platform(spec: JobSpec, enable_artifacts: bool) -> dict[str, str|bool]: + logger.info("spec=%r", spec) + job = spec_to_job(spec) + logger.info("job=%r", job) + platform = job.to_workflow(enable_artifacts=enable_artifacts) + logger.info("platform=%r", platform) + return platform def main(): @@ -631,6 +629,7 @@ def main(): parser.add_argument("--github-ci", action="store_true") parser.add_argument("--verbose", action="store_true") parser.add_argument("--commit-message-file") + parser.add_argument("--no-artifact", dest="enable_artifacts", action="store_false") args = parser.parse_args() logging.basicConfig(level=logging.INFO if args.verbose else logging.WARNING) @@ -651,6 +650,9 @@ def main(): for m in re.finditer(r"\[sdl-ci-filter (.*)]", commit_message, flags=re.M): filters.append(m.group(1).strip(" \t\n\r\t'\"")) + if re.search(r"\[sdl-ci-artifacts?]", commit_message, flags=re.M): + args.enable_artifacts = True + if not filters: filters.append("*") @@ -658,13 +660,15 @@ def main(): all_level_platforms = {} + all_platforms = {k: spec_to_platform(spec, enable_artifacts=args.enable_artifacts) for k, spec in JOB_SPECS.items()} + for level_i, level_keys in enumerate(all_level_keys, 1): level_key = f"level{level_i}" logger.info("Level %d: keys=%r", level_i, level_keys) assert all(k in remaining_keys for k in level_keys) - level_specs = tuple(JOB_SPECS[key] for key in level_keys) + level_platforms = tuple(all_platforms[key] for key in level_keys) remaining_keys.difference_update(level_keys) - all_level_platforms[level_key] = specs_to_plaform(level_specs) + all_level_platforms[level_key] = level_platforms logger.info("=" * 80) logger.info("Keys before filter: %r", remaining_keys) @@ -677,9 +681,8 @@ def main(): remaining_keys = filtered_remaining_keys - logger.info("Remaining:") - remaining_specs = tuple(JOB_SPECS[key] for key in remaining_keys) - all_level_platforms["others"] = specs_to_plaform(remaining_specs) + logger.info("Remaining: %r", remaining_keys) + all_level_platforms["others"] = tuple(all_platforms[key] for key in remaining_keys) if args.github_ci: for level, platforms in all_level_platforms.items(): diff --git a/.github/workflows/generic.yml b/.github/workflows/generic.yml index 58d7e8ef1d..0deb5f34c9 100644 --- a/.github/workflows/generic.yml +++ b/.github/workflows/generic.yml @@ -273,13 +273,6 @@ jobs: rm -rf build/dist/_CPack_Packages rm -rf build/CMakeFiles rm -rf build/docs - - name: "Upload Android test apk's" - uses: actions/upload-artifact@v4 - if: ${{ always() && matrix.platform.artifact != '' && steps.apks.outcome == 'success' }} - with: - if-no-files-found: error - name: '${{ matrix.platform.artifact }}-apks' - path: build/test/*.apk - name: Add msbuild to PATH id: setup-msbuild if: ${{ matrix.platform.msvc-project != '' }} @@ -322,7 +315,7 @@ jobs: xcodebuild -project Xcode/SDL/SDL.xcodeproj -target SDL3 -configuration Release -sdk ${{ matrix.platform.xcode-sdk }} clean build - name: 'Upload binary package' uses: actions/upload-artifact@v4 - if: ${{ always() && matrix.platform.artifact != '' && (steps.package.outcome == 'success' || steps.cpactions.outcome == 'success') }} + if: ${{ always() && matrix.platform.artifact != '' && (steps.package.outcome == 'success' || steps.cpactions.outcome == 'success') && (matrix.platform.enable-artifacts || steps.tests.outcome == 'failure') }} with: if-no-files-found: error name: '${{ matrix.platform.artifact }}' @@ -334,3 +327,10 @@ jobs: if-no-files-found: ignore name: '${{ matrix.platform.artifact }}-minidumps' path: build/**/*.dmp + - name: "Upload Android test apk's" + uses: actions/upload-artifact@v4 + if: ${{ matrix.platform.enable-artifacts && always() && matrix.platform.artifact != '' && steps.apks.outcome == 'success' }} + with: + if-no-files-found: error + name: '${{ matrix.platform.artifact }}-apks' + path: build/test/*.apk \ No newline at end of file