diff --git a/.github/workflows/check-dependencies.yml b/.github/workflows/check-dependencies.yml new file mode 100644 index 0000000..a92d69d --- /dev/null +++ b/.github/workflows/check-dependencies.yml @@ -0,0 +1,22 @@ +name: test-dependencies +on: + pull_request: + push: + branches: + - gnome-46-2404-sdk + +jobs: + check-deps: + runs-on: ubuntu-latest + container: + image: ubuntu:rolling + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Install dependencies (Ubuntu) + run: | + apt-get update + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends python3 python3-yaml + - name: Verify dependencies + run: | + tools/check_dependencies.py diff --git a/snapcraft.yaml b/snapcraft.yaml index 6dd82a8..0d31343 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -1335,7 +1335,7 @@ parts: done debs: - after: [ libgnome-games-support, libadwaita, libgweather, libayatana-appindicator, libsoup3 ] + after: [ libgnome-games-support, libadwaita, libgweather, libayatana-appindicator, libsoup3, librest, at-spi2-core, webp-pixbuf-loader ] plugin: nil stage-packages: - appstream diff --git a/tools/check_dependencies.py b/tools/check_dependencies.py new file mode 100755 index 0000000..6483f3c --- /dev/null +++ b/tools/check_dependencies.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 + +import os +import sys +import yaml + +# Ensure that "deb" part depends on all previous parts + +config_file = "snapcraft.yaml" +if not os.path.exists(config_file): + config_file = os.path.join("snap", "snapcraft.yaml") + +data = yaml.safe_load(open(config_file, "r")) + +exceptions = ['buildenv'] + +def filldeps(part): + """ Fill recursively the dependencies of each part """ + global data + output = [] + if 'after' in data['parts'][part]: + for dep in data['parts'][part]['after']: + # it's not a problem to have duplicated dependencies + output += filldeps(dep) + output.append(dep) + return output + +dependencies = {} + +# get the dependencies for each part +for part in data["parts"]: + dependencies[part] = filldeps(part) + +deb_dependencies = [] +for part in data["parts"]: + if "debs" == part: + continue + if "debs" in dependencies[part]: + # if it depends on debs, it must be after, so don't take it into account + continue + if part in exceptions: + continue + deb_dependencies.append(part) + +failed = False +for dependency in deb_dependencies: + if dependency not in dependencies["debs"]: + print(f"DEBS part must be after {dependency}") + failed = True + +if failed: + sys.exit(1) +print("All dependencies are correct")