Hi guys,

at the moment there is approximately 250 packages shipping projects written in go. In general, each project has its own set of dependencies and provided import paths (golang packages). As usually each package has four active branches. Thus, we are dealing with approximately 1000 spec files, all potential candidates for rebases/updates and bug fixes. Each update can break backward compatibility. Some projects may require different commits of the same dependency.

What are the most hot packaging problems in the golang ecosystem?
- bundled vs. de-bundled dependencies
- updates of spec files
- backward compatibility issues
- integration testing
- best practises

*bundled vs. de-bundled dependencies)*
As mentioned in [1] some projects can not be build from de-bundled dependencies. Either caused by requirement for more commits of the same dependency or due to daily updates which require reviews of new packages. The current effort is to minimize number of bundled dependencies.

*updates of spec files)*
In general, each spec file has to be manually updated. Either if it is a list of build-time (runtime) dependencies, list of provided packages or a list of tests. Secondly, you never know if you break dependencies of other projects when you change project's API. Last but not least, when you want to update to newer release (or commit) of a golang project, new dependencies may appear. Resulting in generating of new spec files, reviews, overrides and dreamless hours of routine steps. The current effort is to detect all dependencies and provide warnings about their removal and to detect portion of API that is used by other projects. At the same time to provide more complex tooling to generate better spec file with less dependencies.

*backward compatibility issues)*
With 1000 spec files it is difficult to keep API of all projects consistent. No matter what you do you will always break something. At the moment we can provide a dependency graph only. It can tell you if a given dependency is available and what projects requires the dependency.

*integration testing)*
Some golang projects need additional services running. It would be great to be able to CI all golang packages to see what is broken and what is suitable for fixing.

*best practises)*
Well...

And there are other issues which when resolved can make the world better place to live. Mentioning some:
- generator of self-standing dvel subpackages [2]
- detectors of bundled deps [3]
- multi spec file generators [4]
- partial spec file generator [5]
- better lint

*What can you do to make the world a better place?*
Join us and contribute on gofed [6]. Currently we are in a phase of implementing new architecture, extending current and introducing new functionality. At the moment we aim to support golang language. In future, there is no reason not to extend the support to other languages. The top most goal is to implement health check analysis. Once detection of used symbols in API is done, we can provide better feedback during updates of packages and make the ecosystem health enough to be able to grow fresh and strong golang projects.

What can you do right away? Play with gofed and infrastructure, help testing and documenting.

Ideas and improvements are welcome.

[1] https://fedorahosted.org/fpc/ticket/382#comment:37
[2] https://github.com/gofed/gofed/issues/36
[3] https://github.com/gofed/gofed/issues/42
[4] https://github.com/gofed/gofed/issues/49
[5] https://github.com/gofed/gofed/issues/55

[6] https://github.com/gofed/gofed
[7] https://github.com/gofed/infra

Go nuts!!!

Jan
--
devel mailing list
devel@lists.fedoraproject.org
http://lists.fedoraproject.org/admin/lists/devel@lists.fedoraproject.org

Reply via email to