ansible-collection-nameserver/.forgejo/workflows/ansible-galaxy.yml

110 lines
4 KiB
YAML

---
name: Ansible Galaxy
on: # noqa yaml[truthy]
push:
tags:
- 'v*'
jobs:
deploy:
runs-on: docker
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
apt update; apt install --yes python3-pip patch
pip3 install --break-system-packages ansible aar-doc
- name: Patch aar-doc
run: |
cd /usr/local/lib/python3.*/dist-packages/
patch -p1 <<EOF
--- a/aar_doc/defaults.py
+++ b/aar_doc/defaults.py
@@ -15,7 +15,7 @@
from ruamel.yaml.scalarstring import LiteralScalarString, SingleQuotedScalarString
yaml = YAML()
-yaml.indent(mapping=2, sequence=2, offset=2)
+yaml.indent(mapping=2, sequence=4, offset=2)
yaml.encoding = "utf-8"
yaml.allow_unicode = True
--- a/aar_doc/defaults.py
+++ b/aar_doc/defaults.py
@@ -73,18 +73,27 @@ def add_default(
else:
self._defaults.setdefault(name, RoleDefault(name, value, description))
+ def safe_quote_recursive(self, value):
+ if isinstance(value, list):
+ return [self.safe_quote_recursive(v) for v in value]
+ elif isinstance(value, dict):
+ return {k: self.safe_quote_recursive(v) for k, v in value.items()}
+ elif isinstance(value, str):
+ if value in ("yes", "no"):
+ return SingleQuotedScalarString(value)
+ elif "\n" in value:
+ return LiteralScalarString(value)
+ elif ":" in value:
+ return SingleQuotedScalarString(value)
+ return value
+
def to_commented_map(self) -> CommentedMap:
"""
Returns all tracked defaults as a CommentedMap.
"""
commented_defaults = CommentedMap()
for role_default in self.defaults:
- value = role_default.value
- if isinstance(value, str):
- if value in ("yes", "no"):
- value = SingleQuotedScalarString(value)
- if "\n" in value:
- value = LiteralScalarString(value)
+ value = self.safe_quote_recursive(role_default.value)
commented_defaults[role_default.name] = value
description_items = (
role_default.description
--- a/aar_doc/templates/markdown.j2
+++ b/aar_doc/templates/markdown.j2
@@ -29,10 +29,10 @@ Tags: {{ metadata.galaxy_info.galaxy_tags | join(', ') }}
{{ argument_specs[entrypoint].description }}
{% else %}
{%- for line in argument_specs[entrypoint].description -%}
-{{ line }}
-{% endfor -%}
-{% endif -%}
-{% endif -%}
+{{ line }}
+{% endfor %}
+{% endif %}
+{% endif %}
{% if entrypoint_options[entrypoint] %}
{%- set path, options=entrypoint_options[entrypoint][0] -%}
EOF
- name: Set version in galaxy.yml
run: |
VERSION=${GITHUB_REF#refs/tags/v}
sed -re "s/^version:.*$/version: ${VERSION}/" -i galaxy.yml
- name: Generate metadata, readme and defaults from argument_spec
run: |
set -euo pipefail
for r in roles/*; do
aar-doc --output-mode replace $r markdown
aar-doc --output-mode replace $r defaults
done
- name: Upload collection to Ansible Galaxy
env:
GALAXY_API_KEY: ${{ secrets.GALAXY_API_KEY }}
run: |
ansible-galaxy collection build
ansible-galaxy collection publish --api-key=${GALAXY_API_KEY} s3lph-nameserver*tar.gz