110 lines
4 KiB
YAML
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
|