ansible-community / ansible-build-data

Holds generated but persistent results from building the ansible community package
https://ansible.readthedocs.io/projects/ansible-build-data/
GNU General Public License v3.0
118 stars 43 forks source link

ansible-build-data

Discuss on Matrix at #community:ansible.com

Holds generated but persistent results from building the ansible community package. This information may be referred to by other projects and scripts.

Issue tracker

This repository's issue tracker handles various aspects of the ansible build, including:

  1. Tracking release dates,
  2. Tracking blockers for a release,
  3. Tracking adding, renaming, and removing collections,
  4. Tracking problems with a release related to the build process:
    • This includes problems that prevent the package to be installed or system packages to be built from the PyPI release;
  5. Tracking and discussing other problems with the ansible community package:
    • This includes important problems with the included collections that are not acted on by the collection maintainers, for example largescale incompatibilities with the current ansible-core version, violations of semantic versioning, and general violations of the Ansible inclusion requirements;
    • This includes major or security bugs in collections with wide-reaching consequences that are not addressed by the collection maintainers, or cannot be addressed on the collection level for some reason.

This issue tracker is not for tracking regular bugs or feature requests for ansible-core or the collections included in the ansible package or for user support. Such issues will be closed. Instead, check out the ansible-core issue tracker, issue trackers of the respective collections, or consider asking for help in the Ansible forum.

Milestones

Release engineers check the milestones for corresponding releases some time before releasing the package sufficient to solve all related issues.

Blockers

In the context of the Ansible Community package release workflow, a release blocker is a situation which does not allow the package to be released. It might come with a new ansible-core release and affect many of the included collections or in any other way might severely affect consistent work with the ansible package. Severity of the impact is determined by the Steering Committee in each particular case. The release blocker must be resolved before the release can proceed.

In case of a potential release blocker, the following actions need to be done:

Structure of data

::

ansible-build-data
└── 3
    ├── ansible-3.0.0.deps
    ├── ansible-3.1.0.deps
    ├── ansible-3.build
    └── ansible.in

Linting

To lint the files in this repository, run nox -e lint. This assumes you have nox installed.

Adding a new collection

Next Ansible major release

To add a collection to the next Ansible major release that has not reached feature freeze:

collections:
  # NAMESPACE.NAME
  community.example:
    # The Github usernames of this collection's maintainers
    maintainers:
      - person1
      - person2
    # The URL to the collection's SCM repository.
    repository: https://github.com/ansible-collections/community.example
    # This is the directory where galaxy.yml is stored relative to the
    # repository root.
    #
    # For collections stored in the repository root:
    collection-directory: "."
    # For collections stored in a subdirectory:
    collection-directory: "./SUBDIRECTORY"
    # This is an optional field that should only be populated if the collection
    # doesn't include a changelogs/changelog.yaml file.
    # changelog-url: ...

The current Ansible major release

To add a collection to the next minor release of the current Ansible major version:

Renaming a collection

In some situations, a collection included in Ansible is renamed with its content basically unchanged (up to renaming, adjusting documentation, and potentially other very small changes). In that case, the new collection can be included and the old collection removed if the following procedure is followed.

For simplicity, assume that the next minor Ansible release is X.Y.0, and that collection foo.bar with latest release a.b.c has been renamed to baz.bam with latest release A.B.C.

  1. baz.bam A.B.C must be compatible to foo.bar a.b.c up to renaming plugins. No options must be renamed without backwards compatible aliases, and no defaults or semantics changed.
  2. baz.bam A.B.C can be added to Ansible X.Y.0.
  3. A deprecation warning is added to Ansible X.Y.0's changelog (deprecated_features) that foo.bar has been renamed to baz.bam, that Ansible (X+1).0.0 will start having deprecated redirects from foo.bar to baz.bam, and that foo.bar will be removed from a later major release of Ansible.
  4. A new release foo.bar (a+1).0.0 is made which contains no more content, but only deprecated redirects to baz.bam. Ideally it will have a dependency on baz.bam so that users that install foo.bar will have working deprecated redirects.
  5. Ansible (X+1).0.0 contains both foo.bar (a+1).0.0, and either a baz.bam A.B'.C' release or a later major release that is still compatible with foo.bar a.b.c as specified in 1.
  6. foo.bar will be dropped from Ansible (X+2).0.0 (needs to be announced in its changelog as removed_features).