CI #1112
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: [master] | |
pull_request: | |
schedule: | |
# * is a special character in YAML so you have to quote this string | |
- cron: '0 6 * * *' | |
env: | |
python_version: '3.10' | |
jobs: | |
build: | |
name: Build collection | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
ansible: [v2.15.11, v2.16.6, stable-2.16, stable-2.17] | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Set up Python ${{ env.python_version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.python_version }} | |
- name: Install ansible-base (${{ matrix.ansible }}) | |
run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz --disable-pip-version-check | |
- name: Build a collection tarball | |
run: ansible-galaxy collection build --output-path "${GITHUB_WORKSPACE}/.cache/collection-tarballs" | |
- name: Store migrated collection artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: collection-${{ matrix.ansible }} | |
path: .cache/collection-tarballs | |
black-formating: | |
name: Using Black to check formating | |
runs-on: ubuntu-latest | |
continue-on-error: true | |
strategy: | |
fail-fast: false | |
matrix: | |
experimental: [true] | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Run black against code | |
uses: psf/black@stable | |
with: | |
options: "--check --diff --color -l 159" | |
importer: | |
name: Galaxy-importer check | |
needs: | |
- build | |
- black-formating | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
ansible: [stable-2.17] | |
steps: | |
- name: Set up Python ${{ env.python_version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.python_version }} | |
- name: Install ansible-base (${{ matrix.ansible }}) | |
run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz --disable-pip-version-check | |
- name: Download migrated collection artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: collection-${{ matrix.ansible }} | |
path: .cache/collection-tarballs | |
- name: Install the collection tarball | |
run: ansible-galaxy collection install .cache/collection-tarballs/*.tar.gz | |
- name: Install galaxy-importer | |
run: pip install galaxy-importer | |
- name: Create galaxy-importer directory | |
run: sudo mkdir -p /etc/galaxy-importer | |
- name: Create galaxy-importer.cfg | |
run: | | |
sudo cp \ | |
/home/runner/.ansible/collections/ansible_collections/cisco/nd/.github/workflows/galaxy-importer.cfg \ | |
/etc/galaxy-importer/galaxy-importer.cfg | |
- name: Run galaxy-importer check | |
run: | | |
python -m galaxy_importer.main .cache/collection-tarballs/cisco-*.tar.gz \ | |
| tee .cache/collection-tarballs/log.txt \ | |
&& sudo cp ./importer_result.json .cache/collection-tarballs/importer_result.json | |
- name: Check warnings and errors | |
run: if grep -E 'WARNING|ERROR' .cache/collection-tarballs/log.txt; then exit 1; else exit 0; fi | |
- name: Store galaxy_importer check log file | |
uses: actions/upload-artifact@v4 | |
with: | |
name: galaxy-importer-log | |
path: .cache/collection-tarballs/importer_result.json | |
sanity: | |
name: Sanity in ubuntu-latest | |
needs: | |
- importer | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
ansible: [v2.15.11, v2.16.6, stable-2.16, stable-2.17] | |
steps: | |
- name: Set up Python ${{ env.python_version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.python_version }} | |
- name: Install ansible-base (${{ matrix.ansible }}) | |
run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz --disable-pip-version-check | |
- name: Install coverage (v4.5.4) | |
run: pip install coverage==4.5.4 | |
- name: Download migrated collection artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: collection-${{ matrix.ansible }} | |
path: .cache/collection-tarballs | |
- name: Install the collection tarball | |
run: ansible-galaxy collection install .cache/collection-tarballs/*.tar.gz | |
- name: Run sanity tests | |
run: ansible-test sanity --docker -v --color --truncate 0 --coverage | |
working-directory: /home/runner/.ansible/collections/ansible_collections/cisco/nd | |
- name: Generate coverage report | |
run: ansible-test coverage xml -v --requirements --group-by command --group-by version | |
working-directory: /home/runner/.ansible/collections/ansible_collections/cisco/nd | |
- name: Push coverate report to codecov.io | |
run: bash <(curl -s https://codecov.io/bash) -s 'tests/output/reports/' -F sanity | |
working-directory: /home/runner/.ansible/collections/ansible_collections/cisco/nd | |
units: | |
name: Units in ubuntu-latest | |
if: false # No unit tests yet | |
needs: | |
- importer | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
ansible: [v2.15.11, v2.16.6, stable-2.16, stable-2.17] | |
steps: | |
- name: Set up Python ${{ env.python_version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.python_version }} | |
- name: Install ansible-base (${{ matrix.ansible }}) | |
run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz --disable-pip-version-check | |
- name: Install coverage (v4.5.4) | |
run: pip install coverage==4.5.4 | |
- name: Download migrated collection artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: collection-${{ matrix.ansible }} | |
path: .cache/collection-tarballs | |
- name: Install the collection tarball | |
run: ansible-galaxy collection install .cache/collection-tarballs/*.tar.gz | |
- name: Run unit tests | |
run: ansible-test units --docker -v --color --truncate 0 --python ${{ env.python_version }} --coverage | |
working-directory: /home/runner/.ansible/collections/ansible_collections/cisco/nd | |
- name: Generate coverage report | |
run: ansible-test coverage xml -v --requirements --group-by command --group-by version | |
working-directory: /home/runner/.ansible/collections/ansible_collections/cisco/nd | |
- name: Push coverate report to codecov.io | |
run: bash <(curl -s https://codecov.io/bash) -s 'tests/output/reports/' -F unit | |
working-directory: /home/runner/.ansible/collections/ansible_collections/cisco/nd | |
integration: | |
name: Integration in ubuntu-latest | |
needs: | |
# - units | |
- sanity | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
ansible: [stable-2.17] | |
env: | |
MUTEX_URL: https://8v7s765ibh.execute-api.us-west-1.amazonaws.com | |
steps: | |
- name: Set up Python ${{ env.python_version }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.python_version }} | |
- name: Install ansible-base (${{ matrix.ansible }}) | |
run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz --disable-pip-version-check | |
- name: Install coverage (v4.5.4) | |
run: pip install coverage==4.5.4 | |
- name: Download migrated collection artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: collection-${{ matrix.ansible }} | |
path: .cache/collection-tarballs | |
- name: Install the collection tarball | |
run: ansible-galaxy collection install .cache/collection-tarballs/*.tar.gz | |
- name: Requesting integration mutex | |
uses: nev7n/wait_for_response@v1 | |
with: | |
url: ${{ format('{0}/v1/ansible-nd?repo={1}&run_id={2}', env.MUTEX_URL, github.repository, github.run_id) }} | |
responseCode: 200 | |
timeout: 2000000 | |
interval: 5000 | |
- name: Run integration tests on Python ${{ env.python_version }} | |
run: | | |
ansible-test network-integration --docker -v --color --retry-on-error --python ${{ env.python_version }} \ | |
--truncate 0 --continue-on-error --coverage | |
working-directory: /home/runner/.ansible/collections/ansible_collections/cisco/nd | |
- name: Releasing integration mutex | |
uses: nev7n/wait_for_response@v1 | |
if: always() | |
with: | |
url: ${{ format('{0}/v1/ansible-nd/release?repo={1}&run_id={2}', env.MUTEX_URL, github.repository, github.run_id) }} | |
responseCode: 200 | |
- name: Generate coverage report | |
if: always() | |
run: ansible-test coverage xml -v --requirements --group-by command --group-by version | |
working-directory: /home/runner/.ansible/collections/ansible_collections/cisco/nd | |
- name: Push coverate report to codecov.io | |
if: always() | |
run: bash <(curl -s https://codecov.io/bash) -s 'tests/output/reports/' -F integration | |
working-directory: /home/runner/.ansible/collections/ansible_collections/cisco/nd |