Wow, this looks great! I've added some comments to one of the reviews, to clarify some DLRN internal details. A couple more comments inline:
----- Original Message ----- > > Hello, > > This sprint we worked on a new set of distro-jobs to investigate a new > rpm build pipeline. The goal is to unify the review.rdoproject.org rdoinfo, > softwarefactory sfinfo and dci dci-config jobs. All these jobs do the > same thing: build rpm on new change, enable integration tests, and > publish them in the gate pipeline. > > Here is the results of this investigation: > > # Add a new distroinfo configuration endpoint in managesf resources > > The first idea is to remove duplication of information and keeps package > information in the existing resources definition. To do that we plan on > adding a "distroinfo" resource type: > > ``` > resources: > distroinfos: > # the distro name > tdpw: > projects: > # the project to collect package information > - tdpw > distroinfo: > releases: > - name: master > branch: rpm-master > > # custom templates for 'source-repositories' configuration > package-configs: > internal-package: > name: "%(project)s" > upstream: > https://softwarefactory-project.io/r/tdpw/%(project)s.git > distgit: > https://softwarefactory-project.io/r/tdpw/%(project)s-distgit.git > internal-package-with-spec-included: > name: "%(project)s" > upstream: > https://softwarefactory-project.io/r/tdpw/%(project)s.git > distgit: > https://softwarefactory-project.io/r/tdpw/%(project)s.git > external-package-openstack: > name: "%(project)s" > upstream: https://git.openstack.org/openstack/%(project)s.git > distgit: > https://softwarefactory-project.io/r/tdpw/%(project)s-distgit.git > ``` > > Then in the project source-repository list we could have a 'package-config' > option so that the endpoint would be able to generate the distroinfo > file with all the package automatically included, similarly to what we > do for zuul tenant config. > If I got this correctly, we're splitting the distroinfo information between some general configuration, and per-package configuration in each package resource, then generating the distroinfo repo on the fly. Is it correct? > > # dnrl-preprare job provided by sfconfig > > After deployment, sfconfig configures a dlrn-base abstract job that will > use the dlrn-prepare role with these variables: > ``` > dlrn_url: https://sftests.com/dlrn/ > dlrn_api_url: https://sftests.com/dlrn-worker-api/ > dlrn_config_dir: sftests.com/config/dlrn > dlrn_config_url: https://sftests.com/manage/v2/configurations/dlrn > ``` > > The goal of dlrn-prepare is to setup the distroinfo.yml and dlrn.ini on > the test instances. > > > # dlrn-build and dlrn-publish job pipeline > > The distro-jobs repository contains a couple of abstract jobs. The > dlrn-build definition looks like this: > > ``` > - job: > name: dlrn-build > description: Build project's package. > parent: dlrn-base > run: playbooks/dlrn/build.yaml > post-run: playbooks/dlrn/fetch.yaml > provides: dlrn-repo > requires: dlrn-repo > ``` > > It uses the new provides/requires zuul artifact logic. The idea is that > in the case of depends-on, we want to be able to use the rpm built by > the change ahead without rebuild them in each queue item. The enabling > task is: > > ``` > - name: Add intermediary repositories from changes ahead > blockinfile: > path: "{{ dlrn_data }}/{{ dlrn_project }}.cfg" > marker: '' > insertafter: '# SPECULATIVE REPO HERE' > content: | > {% for artifact in zuul.artifacts|default([]) %}{% if artifact.name == > 'dlrn-repo' %} > [{{ artifact.project }}-{{ artifact.change }}-{{ artifact.patchset }}] > name={{ artifact.project }}-{{ artifact.change }}-{{ artifact.patchset > }} > enabled=1 > baseurl={{ artifact.url }}/current > gpgcheck=0 > > {% endif %}{% endfor %} > ``` > > # the project interface > > The internal details of distro-jobs and configuration are still being > explored, but the end user interface should looks like this: > > * Defines the distro information in the resources > * Add dlrn-build and dlrn-publish job to project's pipelines. > > Here is an example distribution pipeline configurations: > > ``` > --- > # Distro jobs implementation > - job: > name: tdpw-dlrn-build > parent: dlrn-build > vars: > dlrn_project: tdpw > > - job: > name: tdpw-dlrn-publish > parent: dlrn-publish > vars: > dlrn_project: tdpw > dlrn_user: > username: tdpw > password: secret > > # Distro ci jobs > - job: > name: tdpw-ci-functional > requires: dlrn-repo > run: playbooks/functional.yaml > > # Ci pipelines > - project-template: > name: tdpw-jobs > check: > jobs: > - tdpw-dlrn-build > - tdpw-ci-functional: > dependencies: > - tdpw-dlrn-build > gate: > queue: tdpw > jobs: > - tdpw-dlrn-build > - tdpw-ci-functional: > dependencies: > - tdpw-dlrn-build > - wait-for-changes-ahead: > dependencies: > - tdpw-ci-functional > - tdpw-dlrn-publish: > dependencies: > - wait-for-changes-ahead > release: > jobs: > - tdpw-dlrn-publish > ``` > > # Automatic dependencies bump > > Time ran out, but it seems like we should also be able to leverage the > git-drivers or the gerrit-drivers to also run the DLRN service inside a > zuul jobs. For example, when a new tag is created in one the upstream > project, a dlrn-propose job could propose a review to bump the version > number automatically. > This bump should happen on the distroinfo information (so the resources part). The DLRN job could be used to test it, then a post-merge job would be in charge of the final build. > > # Example implementations > > We prototyped those changes with the tdpw project > ([t]est [d]istribution [p]ackaging [w]orkflow): > > The dlrn-prepare job: https://softwarefactory-project.io/r/15206 > The distro-jobs: https://softwarefactory-project.io/r/15207 > The tdpw ci pipelines: https://softwarefactory-project.io/r/15208 > > > Todos are tracked in the README of distro-jobs. > > Regards, > -Tristan > Great! Feel free to add me to the loop if you need more info on the DLRN internals. Cheers, Javier > _______________________________________________ > Softwarefactory-dev mailing list > [email protected] > https://www.redhat.com/mailman/listinfo/softwarefactory-dev > _______________________________________________ Softwarefactory-dev mailing list [email protected] https://www.redhat.com/mailman/listinfo/softwarefactory-dev
