Skip to content

Commit

Permalink
migrate to github actions (#491)
Browse files Browse the repository at this point in the history
  • Loading branch information
dbarrosop committed Feb 16, 2020
1 parent a4085c1 commit de1dcfe
Show file tree
Hide file tree
Showing 21 changed files with 143 additions and 177 deletions.
84 changes: 84 additions & 0 deletions .github/workflows/main.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
---
name: test nornir
on: [push,pull_request]

jobs:
linters:
name: linters
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup python
uses: actions/setup-python@v1

- name: Install Poetry
uses: dschep/install-poetry-action@v1.2

- name: Cache Poetry virtualenv
uses: actions/cache@v1
id: cache
with:
path: ~/.virtualenvs
key: poetry-linters-${{ hashFiles('**/poetry.lock') }}
restore-keys: poetry-linters-${{ hashFiles('**/poetry.lock') }}

- name: Set Poetry config
run: |
poetry config virtualenvs.in-project false
poetry config virtualenvs.path ~/.virtualenvs
- name: Install Dependencies
run: poetry install

- name: Run pylama
run: make pylama
- name: Run black
run: make black
- name: Run mypy
run: make mypy
- name: Run sphinx
run: |
sudo apt-get install pandoc
make sphinx
pytest:
name: Testing on Python ${{ matrix.python-version }}
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ '3.6', '3.7', '3.8' ]
steps:
- uses: actions/checkout@v2
- name: Setup python
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}
architecture: x64

- name: Start containers
run: docker-compose up -d

- name: Install Poetry
uses: dschep/install-poetry-action@v1.2

- name: Cache Poetry virtualenv
uses: actions/cache@v1
id: cache
with:
path: ~/.virtualenvs
key: poetry-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }}
restore-keys: poetry-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }}

- name: Set Poetry config
run: |
poetry config virtualenvs.in-project false
poetry config virtualenvs.path ~/.virtualenvs
- name: Install Dependencies
run: poetry install

- name: Run pytest
run: make pytest

- name: Run nbval
run: make nbval
33 changes: 0 additions & 33 deletions .travis.yml

This file was deleted.

47 changes: 12 additions & 35 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,68 +1,45 @@
ifeq ($(PYTHON), )
override PYTHON=3.6
endif

DOCKER_COMPOSE_FILE=docker-compose.yaml
DOCKER_COMPOSE=PYTHON=${PYTHON} docker-compose -f ${DOCKER_COMPOSE_FILE}
NORNIR_DIRS=nornir tests docs

.PHONY: start_dev_env
start_dev_env:
${DOCKER_COMPOSE} \
up -d \
dev1.group_1 dev2.group_1 dev3.group_2 dev4.group_2 dev5.no_group httpbin netconf1.no_group
up -d

.PHONY: stop_dev_env
stop_dev_env:
${DOCKER_COMPOSE} \
down

.PHONY: build_test_container
build_test_container:
${DOCKER_COMPOSE} \
build nornir

.PHONY: enter-container
enter-container:
${DOCKER_COMPOSE} \
run --rm nornir bash

.PHONY: pytest
pytest:
${DOCKER_COMPOSE} \
run --rm nornir pytest --cov=nornir --cov-report=term-missing -vs ${ARGS}
poetry run pytest --cov=nornir --cov-report=term-missing -vs ${ARGS}

.PHONY: black
black:
${DOCKER_COMPOSE} \
run --rm nornir black --check ${NORNIR_DIRS}
poetry run black --check ${NORNIR_DIRS}

.PHONY: sphinx
sphinx:
# TODO REPLACE with: sphinx-build -n -E -q -N -b dummy -d docs/_build/doctrees docs asd
${DOCKER_COMPOSE} \
run --rm nornir sphinx-build -W -b html -d docs/_build/doctrees docs docs/_build/html
poetry run sphinx-build -W -b html -d docs/_build/doctrees docs docs/_build/html

.PHONY: pylama
pylama:
${DOCKER_COMPOSE} \
run --rm nornir pylama ${NORNIR_DIRS}
poetry run pylama ${NORNIR_DIRS}

.PHONY: mypy
mypy:
${DOCKER_COMPOSE} \
run --rm nornir mypy nornir tests
poetry run mypy nornir tests

.PHONY: nbval
nbval:
${DOCKER_COMPOSE} \
run --rm nornir pytest --nbval --sanitize-with docs/nbval_sanitize.cfg \
docs/plugins \
docs/howto \
docs/tutorials/intro/initializing_nornir.ipynb \
docs/tutorials/intro/inventory.ipynb
poetry run pytest --nbval --sanitize-with docs/nbval_sanitize.cfg \
docs/plugins \
docs/howto \
docs/tutorials/intro/initializing_nornir.ipynb \
docs/tutorials/intro/inventory.ipynb

.PHONY: tests
tests: stop_dev_env build_test_container start_dev_env black sphinx pylama mypy nbval
make pytest PYTEST=3.6
make pytest PYTEST=3.7
tests: stop_dev_env start_dev_env black sphinx pylama mypy nbval pytest
61 changes: 14 additions & 47 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,77 +2,44 @@
version: '2.1'

services:
nornir:
image: nornir:latest
build:
context: .
args:
PYTHON: ${PYTHON}
extra_hosts:
- "dev1.group_1:10.21.33.101"
- "dev2.group_1:10.21.33.102"
- "dev3.group_2:10.21.33.103"
- "dev4.group_2:10.21.33.104"
- "dev5.no_group:10.21.33.105"
- "httpbin:10.21.33.201"
volumes:
- ./docs/_build/:/nornir/docs/_build/
networks:
net1:
ipv4_address: 10.21.33.2

dev1.group_1:
hostname: dev1.group_1
image: dbarroso/stupid_ssh_container
networks:
net1:
ipv4_address: 10.21.33.101
ports:
- "65020:22"

dev2.group_1:
hostname: dev2.group_1
image: dbarroso/stupid_ssh_container
networks:
net1:
ipv4_address: 10.21.33.102
ports:
- "65021:22"

dev3.group_2:
hostname: dev3.group_2
image: dbarroso/stupid_ssh_container
networks:
net1:
ipv4_address: 10.21.33.103
ports:
- "65022:22"

dev4.group_2:
hostname: dev4.group_2
image: dbarroso/stupid_ssh_container
networks:
net1:
ipv4_address: 10.21.33.104
ports:
- "65023:22"

dev5.no_group:
hostname: dev5.no_group
image: dbarroso/stupid_ssh_container
networks:
net1:
ipv4_address: 10.21.33.105
ports:
- "65024:22"

netconf1.no_group:
hostname: netconf1.no_group
image: sysrepo/sysrepo-netopeer2:v0.7.7
networks:
net1:
ipv4_address: 10.21.33.106
ports:
- "65025:830"

httpbin:
hostname: httpbin
image: bungoume/httpbin-container
networks:
net1:
ipv4_address: 10.21.33.201

networks:
net1:
driver: bridge
ipam:
config:
- subnet: 10.21.33.0/24
ports:
- "65080:80"
6 changes: 3 additions & 3 deletions docs/howto/handling_connections.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,8 @@
"output_type": "stream",
"text": [
"dev1.group_1:\n",
" port: 22\n",
" hostname: dev1.group_1\n",
" port: 65020\n",
" hostname: localhost\n",
" username:\n",
" password: a_password\n",
" platform: eos\n",
Expand All @@ -156,7 +156,7 @@
" - group_1\n",
" connection_options:\n",
" paramiko:\n",
" port: 22\n",
" port: 65020\n",
" hostname:\n",
" username: root\n",
" password: docker\n",
Expand Down
8 changes: 4 additions & 4 deletions tests/core/test_connections.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,10 @@ def test_context_manager(self, nornir):

def test_validate_params_simple(self, nornir):
params = {
"hostname": "dev2.group_1",
"hostname": "localhost",
"username": "root",
"password": "from_group1",
"port": 22,
"port": 65021,
"platform": "junos",
"extras": {},
}
Expand All @@ -132,7 +132,7 @@ def test_validate_params_simple(self, nornir):

def test_validate_params_overrides(self, nornir):
params = {
"port": 22,
"port": 65021,
"hostname": "dummy_from_parent_group",
"username": "root",
"password": "from_group1",
Expand All @@ -146,7 +146,7 @@ def test_validate_params_overrides(self, nornir):

def test_validate_params_overrides_groups(self, nornir):
params = {
"port": 22,
"port": 65021,
"hostname": "dummy2_from_parent_group",
"username": "dummy2_from_host",
"password": "from_group1",
Expand Down
10 changes: 5 additions & 5 deletions tests/core/test_inventory.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ def test_get_connection_parameters(self):
inv = deserializer.Inventory.deserialize(**inv_dict)
p1 = inv.hosts["dev1.group_1"].get_connection_parameters("dummy")
assert deserializer.ConnectionOptions.serialize(p1).dict() == {
"port": 22,
"port": 65020,
"hostname": "dummy_from_host",
"username": "root",
"password": "a_password",
Expand All @@ -174,16 +174,16 @@ def test_get_connection_parameters(self):
}
p2 = inv.hosts["dev1.group_1"].get_connection_parameters("asd")
assert deserializer.ConnectionOptions.serialize(p2).dict() == {
"port": 22,
"hostname": "dev1.group_1",
"port": 65020,
"hostname": "localhost",
"username": "root",
"password": "a_password",
"platform": "eos",
"extras": {},
}
p3 = inv.hosts["dev2.group_1"].get_connection_parameters("dummy")
assert deserializer.ConnectionOptions.serialize(p3).dict() == {
"port": 22,
"port": 65021,
"hostname": "dummy_from_parent_group",
"username": "root",
"password": "from_group1",
Expand All @@ -192,7 +192,7 @@ def test_get_connection_parameters(self):
}
p4 = inv.hosts["dev3.group_2"].get_connection_parameters("dummy")
assert deserializer.ConnectionOptions.serialize(p4).dict() == {
"port": 22,
"port": 65022,
"hostname": "dummy_from_defaults",
"username": "root",
"password": "docker",
Expand Down

0 comments on commit de1dcfe

Please sign in to comment.