From a37f5c00daca358e55d6b89c8b13b8dc2ebdd858 Mon Sep 17 00:00:00 2001 From: Andreas Stefl Date: Sat, 25 May 2024 09:23:55 +0200 Subject: [PATCH] try generalize CI --- .github/workflows/build.yml | 83 +++++++++++-------------------- recipes/odrcore/all/conandata.yml | 1 + scripts/list_package_versions.py | 53 ++++++++++++++++++++ 3 files changed, 82 insertions(+), 55 deletions(-) create mode 100644 scripts/list_package_versions.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 506e229..6040bfa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,13 +16,35 @@ env: CCACHE_KEY_SUFFIX: r1 jobs: + find-all-packages: + runs-on: ubuntu-22.04 + steps: + - name: setup python 3.12 + uses: actions/setup-python@v5 + with: + python-version: 3.12 + + - name: List all packages + run: python scripts/list_package_versions.py + + - name: List all packages in GitHub Actions format + id: list-packages + run: python scripts/list_package_versions.py --github | tee $GITHUB_OUTPUT + + - name: Set output in the matrix format + id: set-output + run: echo "packages=${{ steps.list-packages.outputs.* }}" >> "$GITHUB_OUTPUT" + build: runs-on: ${{ matrix.config.os }} + needs: + - find-all-packages strategy: fail-fast: false matrix: config: - { os: ubuntu-22.04, compiler: clang-15, cc: clang-15, cxx: clang++-15 } + package: ${{ fromJson(needs.find-all-packages.outputs.packages) }} steps: - name: checkout uses: actions/checkout@v4 @@ -52,61 +74,12 @@ jobs: - name: conan config run: conan config install .github/config/${{ matrix.config.os }}-${{ matrix.config.compiler }}/conan - - name: conan install 1.0.0 - run: conan install recipes/odrcore/all/conanfile.py --version 1.0.0 --output-folder=build --build=missing - - name: conan source 1.0.0 - run: conan source recipes/odrcore/all/conanfile.py --version 1.0.0 - - name: conan build 1.0.0 - run: conan build recipes/odrcore/all/conanfile.py --version 1.0.0 - - - name: conan install 2.0.0 - run: conan install recipes/odrcore/all/conanfile.py --version 2.0.0 --output-folder=build --build=missing - - name: conan source 2.0.0 - run: conan source recipes/odrcore/all/conanfile.py --version 2.0.0 - - name: conan build 2.0.0 - run: conan build recipes/odrcore/all/conanfile.py --version 2.0.0 - - - name: conan install 2.1.0 - run: conan install recipes/odrcore/all/conanfile.py --version 2.1.0 --output-folder=build --build=missing - - name: conan source 2.1.0 - run: conan source recipes/odrcore/all/conanfile.py --version 2.1.0 - - name: conan build 2.1.0 - run: conan build recipes/odrcore/all/conanfile.py --version 2.1.0 - - - name: conan install 2.1.1 - run: conan install recipes/odrcore/all/conanfile.py --version 2.1.1 --output-folder=build --build=missing - - name: conan source 2.1.1 - run: conan source recipes/odrcore/all/conanfile.py --version 2.1.1 - - name: conan build 2.1.1 - run: conan build recipes/odrcore/all/conanfile.py --version 2.1.1 - - - name: conan install 2.1.2 - run: conan install recipes/odrcore/all/conanfile.py --version 2.1.2 --output-folder=build --build=missing - - name: conan source 2.1.2 - run: conan source recipes/odrcore/all/conanfile.py --version 2.1.2 - - name: conan build 2.1.2 - run: conan build recipes/odrcore/all/conanfile.py --version 2.1.2 - - - name: conan install 2.2.0 - run: conan install recipes/odrcore/all/conanfile.py --version 2.2.0 --output-folder=build --build=missing - - name: conan source 2.2.0 - run: conan source recipes/odrcore/all/conanfile.py --version 2.2.0 - - name: conan build 2.2.0 - run: conan build recipes/odrcore/all/conanfile.py --version 2.2.0 - - - name: conan install 3.0.0 - run: conan install recipes/odrcore/all/conanfile.py --version 3.0.0 --output-folder=build --build=missing - - name: conan source 3.0.0 - run: conan source recipes/odrcore/all/conanfile.py --version 3.0.0 - - name: conan build 3.0.0 - run: conan build recipes/odrcore/all/conanfile.py --version 3.0.0 - - - name: conan install 4.0.0 - run: conan install recipes/odrcore/all/conanfile.py --version 4.0.0 --output-folder=build --build=missing - - name: conan source 4.0.0 - run: conan source recipes/odrcore/all/conanfile.py --version 4.0.0 - - name: conan build 4.0.0 - run: conan build recipes/odrcore/all/conanfile.py --version 4.0.0 + - name: conan install + run: conan install ${{ matrix.package.conanfile }} --version ${{ matrix.package.version }} --build=missing + - name: conan source + run: conan source ${{ matrix.package.conanfile }} --version ${{ matrix.package.version }} + - name: conan build + run: conan build ${{ matrix.package.conanfile }} --version ${{ matrix.package.version }} - name: cache uses: actions/cache@v4 diff --git a/recipes/odrcore/all/conandata.yml b/recipes/odrcore/all/conandata.yml index f65daef..e838b09 100644 --- a/recipes/odrcore/all/conandata.yml +++ b/recipes/odrcore/all/conandata.yml @@ -31,6 +31,7 @@ sources: source: url: "https://github.com/opendocument-app/OpenDocument.core/archive/refs/tags/v4.0.0.tar.gz" sha256: "b2d671f34bf641d465dfaae9adefdcb4a6210d58a519594a182ba2839531435e" + patches: "2.0.0": - patch_file: "patches/2.0.0-0001-fix-cmake.patch" diff --git a/scripts/list_package_versions.py b/scripts/list_package_versions.py new file mode 100644 index 0000000..a88a348 --- /dev/null +++ b/scripts/list_package_versions.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 + +import argparse +from pathlib import Path +import yaml + +def main(): + parser = argparse.ArgumentParser(description="List package versions") + parser.add_argument("--github", help="Format output for GitHub Actions", action="store_true") + args = parser.parse_args() + + script_path = Path(__file__).resolve().parent + root_path = script_path.parent + recipes_path = root_path / "recipes" + + package_infos = {} + + for recipe_path in recipes_path.iterdir(): + if not recipe_path.is_dir(): + continue + + infos = [] + + with open(recipe_path / "config.yml") as f: + config = yaml.safe_load(f) + + for version, details in config["versions"].items(): + infos.append({ + "version": version, + "folder": Path(details["folder"]), + }) + + package_infos[recipe_path.name] = infos + + if args.github: + result = [ + { + "package_version": f"{package}/{infos["version"]}", + "package": package, + "version": infos["version"], + "conanfile": str(Path("recipes") / package / infos["folder"] / "conanfile.py"), + } for package in sorted(package_infos.keys()) + for infos in sorted(package_infos[package], key=lambda x: x["version"]) + ] + + print(result) + else: + for package in sorted(package_infos.keys()): + infos = package_infos[package] + print(f"{package}: {", ".join(sorted(info['version'] for info in infos))}") + +if __name__ == "__main__": + main()