Skip to content

Commit

Permalink
try generalize CI
Browse files Browse the repository at this point in the history
  • Loading branch information
andiwand committed May 25, 2024
1 parent 0293cc5 commit a37f5c0
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 55 deletions.
83 changes: 28 additions & 55 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions recipes/odrcore/all/conandata.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
53 changes: 53 additions & 0 deletions scripts/list_package_versions.py
Original file line number Diff line number Diff line change
@@ -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()

0 comments on commit a37f5c0

Please sign in to comment.