diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e4e766e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/*.png +/rpms/ diff --git a/clone_rpms.sh b/clone_rpms.sh index 08c839a..0558d91 100755 --- a/clone_rpms.sh +++ b/clone_rpms.sh @@ -2,7 +2,7 @@ script_location=$( (cd $(dirname $0) && pwd) ) -module=$(basename $script_location`) +module=$(basename $script_location) mkdir -p rpms pushd rpms 2>&1 >/dev/null diff --git a/eclipse.yaml b/eclipse.yaml index 2857f93..13b57f5 100644 --- a/eclipse.yaml +++ b/eclipse.yaml @@ -273,7 +273,7 @@ data: ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of eclipse-jgit, jython. + Runtime dependency of docker-client-java, eclipse-jgit, jython. apache-commons-el: buildorder: 10 ref: eclipse @@ -284,12 +284,13 @@ data: ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > + Runtime dependency of eclipse. apache-commons-lang: buildorder: 10 ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of eclipse-mylyn. + Runtime dependency of docker-client-java, eclipse-mylyn. apache-sshd: buildorder: 10 ref: eclipse @@ -313,12 +314,25 @@ data: ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > + Runtime dependency of eclipse. + bean-validation-api: + buildorder: 10 + ref: eclipse + arches: [x86_64, ppc64le, aarch64, s390x] + rationale: > + Runtime dependency of jersey. bouncycastle: buildorder: 10 ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of eclipse-jgit, jython. + Runtime dependency of docker-client-java, eclipse-jgit, jython. + docker-client-java: + buildorder: 50 + ref: eclipse + arches: [x86_64, ppc64le, aarch64, s390x] + rationale: > + Runtime dependency of eclipse-linuxtools. eclipse-abrt: buildorder: 50 ref: eclipse @@ -331,8 +345,7 @@ data: arches: [x86_64, ppc64le, aarch64, s390x] rationale: > Module API. - Runtime dependency of eclipse-photran, eclipse-ptp, - eclipse-remote. + Runtime dependency of eclipse-ptp, eclipse-remote. eclipse-dtp: buildorder: 20 ref: eclipse @@ -395,13 +408,6 @@ data: Runtime dependency of eclipse-abrt, eclipse-egit, eclipse-egit-github, eclipse-epp-logging, eclipse-subclipse. - eclipse-photran: - buildorder: 70 - ref: eclipse - arches: [x86_64, ppc64le, aarch64, s390x] - rationale: > - Module API. - Runtime dependency of eclipse-ptp. eclipse-ptp: buildorder: 80 ref: eclipse @@ -451,23 +457,26 @@ data: ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > + Runtime dependency of eclipse. felix-gogo-runtime: buildorder: 10 ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of felix-gogo-command, + Runtime dependency of eclipse, felix-gogo-command, felix-gogo-shell. felix-gogo-shell: buildorder: 20 ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > + Runtime dependency of eclipse. felix-scr: buildorder: 30 ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > + Runtime dependency of eclipse. freemarker: buildorder: 10 ref: eclipse @@ -479,6 +488,19 @@ data: ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > + Runtime dependency of eclipse, glassfish-hk2, jersey. + glassfish-hk2: + buildorder: 20 + ref: eclipse + arches: [x86_64, ppc64le, aarch64, s390x] + rationale: > + Runtime dependency of docker-client-java, jersey. + glassfish-jax-rs-api: + buildorder: 10 + ref: eclipse + arches: [x86_64, ppc64le, aarch64, s390x] + rationale: > + Runtime dependency of eclipse-linuxtools, jersey. glassfish-jaxb: buildorder: 20 ref: eclipse @@ -490,37 +512,79 @@ data: ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of eclipse-cdt, glassfish-jaxb. + Runtime dependency of eclipse-cdt, eclipse-ptp, glassfish-jaxb. glassfish-jsp: buildorder: 30 ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > + Runtime dependency of eclipse. glassfish-jsp-api: buildorder: 20 ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of glassfish-jsp. + Runtime dependency of eclipse, glassfish-jsp. glassfish-servlet-api: buildorder: 10 ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of glassfish-jsp-api, jetty. + Runtime dependency of eclipse, glassfish-jsp-api, jetty. google-gson: buildorder: 10 ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of eclipse-cdt, eclipse-egit-github, + Runtime dependency of eclipse, eclipse-cdt, eclipse-egit-github, eclipse-epp-logging, eclipse-jgit, eclipse-mylyn. icu4j: buildorder: 10 ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of jython. + Runtime dependency of eclipse, jython. + jackson-annotations: + buildorder: 10 + ref: eclipse + arches: [x86_64, ppc64le, aarch64, s390x] + rationale: > + Runtime dependency of eclipse-linuxtools, + jackson-databind, jackson-modules-base, jersey. + jackson-core: + buildorder: 10 + ref: eclipse + arches: [x86_64, ppc64le, aarch64, s390x] + rationale: > + Runtime dependency of jackson-databind, + jackson-datatypes-collections, jackson-jaxrs-providers, + jackson-modules-base. + jackson-databind: + buildorder: 20 + ref: eclipse + arches: [x86_64, ppc64le, aarch64, s390x] + rationale: > + Runtime dependency of docker-client-java, + eclipse-linuxtools, jackson-datatypes-collections, + jackson-jaxrs-providers, jackson-modules-base, jersey. + jackson-datatypes-collections: + buildorder: 30 + ref: eclipse + arches: [x86_64, ppc64le, aarch64, s390x] + rationale: > + Runtime dependency of docker-client-java. + jackson-jaxrs-providers: + buildorder: 40 + ref: eclipse + arches: [x86_64, ppc64le, aarch64, s390x] + rationale: > + Runtime dependency of docker-client-java. + jackson-modules-base: + buildorder: 30 + ref: eclipse + arches: [x86_64, ppc64le, aarch64, s390x] + rationale: > + Runtime dependency of jackson-jaxrs-providers, jersey. jakarta-commons-httpclient: buildorder: 10 ref: eclipse @@ -539,6 +603,19 @@ data: arches: [x86_64, ppc64le, aarch64, s390x] rationale: > Build dependency of jctools. + javassist: + buildorder: 10 + ref: eclipse + arches: [x86_64, ppc64le, aarch64, s390x] + rationale: > + Runtime dependency of glassfish-hk2. + jersey: + buildorder: 40 + ref: eclipse + arches: [x86_64, ppc64le, aarch64, s390x] + rationale: > + Runtime dependency of docker-client-java, + eclipse-linuxtools. jctools: buildorder: 20 ref: eclipse @@ -550,7 +627,7 @@ data: ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of eclipse-jgit. + Runtime dependency of eclipse, eclipse-jgit. jffi: buildorder: 10 ref: eclipse @@ -606,7 +683,7 @@ data: ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of eclipse-abrt. + Runtime dependency of docker-client-java, eclipse-abrt. jnr-x86asm: buildorder: 10 ref: eclipse @@ -636,13 +713,13 @@ data: ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of eclipse-cdt, eclipse-dtp. + Runtime dependency of eclipse-dtp. lucene: buildorder: 10 ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of eclipse-dtp, eclipse-mylyn. + Runtime dependency of eclipse, eclipse-dtp, eclipse-mylyn. nekohtml: buildorder: 10 ref: eclipse @@ -660,7 +737,7 @@ data: ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > - Runtime dependency of jnr-ffi, jython. + Runtime dependency of eclipse, jersey, jnr-ffi, jython. rxtx: buildorder: 10 ref: eclipse @@ -672,11 +749,13 @@ data: ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > + Runtime dependency of eclipse. sat4j: buildorder: 10 ref: eclipse arches: [x86_64, ppc64le, aarch64, s390x] rationale: > + Runtime dependency of eclipse. sequence-library: buildorder: 10 ref: eclipse diff --git a/gen_build_order_graph.py b/gen_build_order_graph.py new file mode 100755 index 0000000..44223dc --- /dev/null +++ b/gen_build_order_graph.py @@ -0,0 +1,54 @@ +#!/usr/bin/python3 + +import yaml +from pygraphviz import AGraph +from subprocess import call + +with open("eclipse.yaml", 'r') as stream: + yaml = yaml.safe_load(stream) + +rpms = yaml['data']['components']['rpms'] + +g = AGraph(directed=True, name="G", strict=False, label="Build Order Graph") +ranks = [] +for key, value in rpms.items(): + rank = value['buildorder'] + if rank not in ranks: + ranks.append(rank) + subg = g.get_subgraph(f"{rank}") + if subg is None: + subg = g.add_subgraph(name=f"{rank}", label=f"Build Order {rank}", rank="same") + subg.add_node(f"{rank}") + subg.add_node(key) + rs = value['rationale'].replace('\n', ' ').split('.') + reqs = [] + breqs = [] + for r in rs: + r = r.strip() + if not r or r == 'Module API': + continue + if r.startswith('Runtime dependency of'): + r = r[len('Runtime dependency of'):] + reqs = [x.strip() for x in r.split(',')] + if r.startswith('Build dependency of'): + r = r[len('Build dependency of'):] + breqs = [x.strip() for x in r.split(',')] + for req in reqs: + # For Rs, check if also a BR + if req not in breqs: + g.add_edge(key, req, color='blue') + else: + g.add_edge(key, req, color='purple') + for breq in breqs: + # For BRs, check if also a R + if breq not in reqs: + g.add_edge(key, breq, color='red') +ranks.sort() +for idx, rank in enumerate(ranks): + if idx+1 < len(ranks): + g.add_edge(rank, ranks[idx+1], weight=1000) + + +print(g.string()) +g.draw("build_order_graph.png", prog="dot") +call('eog build_order_graph.png &', shell=True)