Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use import galaxy workflow from ansible-collections/community.docker#754 #7839

Merged
merged 1 commit into from
Jan 13, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
130 changes: 130 additions & 0 deletions .github/workflows/import-galaxy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
---
# Copyright (c) Ansible Project
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
# SPDX-License-Identifier: GPL-3.0-or-later

name: import-galaxy
'on':
# Run CI against all pushes (direct commits, also merged PRs) to main, and all Pull Requests
push:
branches:
- main
- stable-*
pull_request:

jobs:
build-collection:
name: Build collection artifact
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
with:
path: ./checkout

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Install ansible-core devel
run: pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check

- name: Make sure galaxy.yml has version entry
shell: python
id: collection-metadata
run: |
import os
import yaml

def set_output(name, value):
with open(os.environ['GITHUB_OUTPUT'], 'a', encoding='utf-8') as f:
f.write(f'{name}={value}{os.linesep}')

# Make sure galaxy.yml contains a version
with open('galaxy.yml', 'rb') as f:
data = yaml.safe_load(f) ;
data['version'] = data.get('version') or '0.0.1'
with open('galaxy.yml', 'w', encoding='utf-8') as f:
f.write(yaml.dump(data))

# Create Galaxy requirements file
if data.get('dependencies'):
reqs = dict(collections=[])
for collection, version in sorted(data['dependencies'].items()):
reqs['collections'].append(dict(
name=collection,
source='https://galaxy.ansible.com',
version=version,
))
with open('../requirements.yml', 'w', encoding='utf-8') as f:
f.write(yaml.dump(reqs))

# Extract namespace and collection name
set_output('name', data['name'])
set_output('namespace', data['namespace'])
set_output('version', data['version'])
set_output('filename', f"{data['namespace']}-{data['name']}-{data['version']}.tar.gz")
working-directory: ./checkout

- name: Build collection
run: ansible-galaxy collection build
working-directory: ./checkout

- name: Copy artifact into subdirectory
shell: bash
run: |
set -e
mkdir artifact
mv checkout/${{ steps.collection-metadata.outputs.filename }} artifact/
if [ -f requirements.yml ]; then
mv requirements.yml artifact/
fi

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: collection-build-${{ github.sha }}
path: ./artifact/

import-galaxy:
name: Import artifact with Galaxy importer
runs-on: ubuntu-latest
needs:
- build-collection
steps:
- name: Set up Python
uses: actions/setup-python@v5
with:
# Currently requirements-parser is incompatible with Python 3.12
# (https://github.com/madpah/requirements-parser/issues/88), so we
# have to stick to Python 3.11 for now...
python-version: '3.11'

- name: Install ansible-core devel
run: pip install https://github.com/ansible/ansible/archive/devel.tar.gz --disable-pip-version-check

- name: Install galaxy-importer
run: pip install galaxy-importer --disable-pip-version-check

- name: Download artifact
uses: actions/download-artifact@v4
with:
name: collection-build-${{ github.sha }}

- name: List files
shell: bash
run: |
ls -la

- name: Install collection dependencies
shell: bash
run: |
if [ -f requirements.yml ]; then
ansible-galaxy collection install --pre --requirements-file requirements.yml
else
echo "Collection has no dependencies."
fi

- name: Run Galaxy importer
run: python -m galaxy_importer.main *-*-*.tar.gz