The Ansible community and partner engineering team at Red Hat have recently gone through the collection developer workflow using Ansible Development Tools.
The purpose of that activity was to gain a shared understanding of the tasks and challenges that developers and maintainers face when creating, testing, releasing, and maintaining Ansible collections.
As an outcome of that activity, we have collaboratively described the main milestones and high-level steps involved in the collection developer workflow. These milestones outline the journey that developers and maintainers go through to succeed in their efforts, whatever their motivation may be.
We see this journey as common across all collections, whether in the Ansible community or in Red Hat Automation Hub downstream. We want to see the results and feedback to be used as context for upcoming work in ADT teams, Community and partner engineering team, and the community to improve the collection developer experience.
We would love to hear your feedback and invite you to share your thoughts and opinions. We’re also trying to reveal and understand obstacles, pain points, and challenges that collection developers and maintainers face. In particular:
- Are there any milestones or steps within the milestones we missed?
- Should anything be updated or removed as non-essential?
- What challenges have you faced during collection development and maintenance?
- How can the journey be used to benefit the community?
- If you have additional feedback on any of the milestones and steps below or on this topic in general, please let us know.
Create a new collection milestone:
- Initialize and create a new source repository
- Initialize a collection structure on the filesystem
- Familiarize with and update the essential files like README.md and galaxy.yml
- Apply the appropriate open-source license
Normalize development environment milestone:
- Create a devcontainer and/or devfile
- Add pre-commit hooks to source control to enforce consistent style and formatting
- Understand the different types of tests: integration, unit, sanity, linting
- Choose and configure a testing framework
- Set up a basic CI pipeline structure
- Ensure CI runs the appropriate level of tests
- Configure CI checks for Ansible Lint
- Adopt a versioning convention like SemVer and clarify the types of changes (major, minor, patch)
- Install
antsibull-changelog
and configure changelogs
Add automation content milestone:
- Write tests alongside roles, modules, and plugins
- Create roles to organize playbooks
- Create modules and plugins
- Document automation content in user guides
- Specify collection metadata
- Add dependencies and requirements to the collection in files such as
galaxy.yml
,bindep.txt
,requirements.txt
, andREADME.md
- Add supported Ansible core version to
meta/runtime.yml
Automate the release pipeline milestone:
- Create an execution environment definition
- Configure CI check for Galaxy Importer
- Add CI jobs to release to Galaxy and/or Automation Hub
- Add CI jobs to build EEs and push to container registry
Maintain collection lifecycle milestone:
- Establish contribution guidelines (CONTRIBUTING.md)
- Set up a process for regular dependency updates, bug fixes, and security patching
- Adjust test matrix for Ansible core and Python versions according to core lifecycles
- Update meta/runtime.yml with core version to reflect changes
- Evaluate and integrate new types of automation content
- Review and adjust for changes in collection inclusion and certification requirements
- Document collection design and architecture for future maintainers
We’d love to hear from you in the comments!