Merge pull request #105 from Nebucatnetzer/dev

Clean up
This commit is contained in:
Andreas Zweili 2022-12-12 21:45:13 +01:00 committed by GitHub
commit e823e39688
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 138 additions and 187 deletions

View File

@ -6,9 +6,6 @@ on:
branches: [ "master", "dev" ]
workflow_dispatch:
env:
IMAGE_NAME: network_inventory
jobs:
tests:
runs-on: ubuntu-latest

View File

@ -1,8 +0,0 @@
# Python 3.9.6
FROM python@sha256:736b76eb3f64778646ce0051fb5fed4dfbf67016e51563946230ca8bb40ac687
ENV PYTHONUNBUFFERED 1
ADD . /code
WORKDIR /code
RUN pip install wheel
RUN pip install -r requirements/docker.txt
CMD ["/bin/bash", "/code/run.sh"]

View File

@ -1,75 +0,0 @@
SHELL=/usr/bin/env bash
.DEFAULT_GOAL := run
.PHONY: run
run: setup
( \
find . -name __pycache__ -o -name "*.pyc" -delete; \
sudo iptables -I INPUT -p tcp --dport 8000 -j ACCEPT; \
cd src/; \
python manage.py runserver 0.0.0.0:8000; \
)
.PHONY: setup
setup:
( \
docker-compose -f docker-compose-development.yml up -d; \
cd src/; \
if [ -f .second_run ]; then \
sleep 2; \
python manage.py collectstatic --noinput; \
python manage.py makemigrations; \
python manage.py migrate; \
else \
python manage.py collectstatic --noinput; \
python manage.py makemigrations backups; \
python manage.py makemigrations computers; \
python manage.py makemigrations core; \
python manage.py makemigrations customers; \
python manage.py makemigrations devices; \
python manage.py makemigrations licenses; \
python manage.py makemigrations nets; \
python manage.py makemigrations softwares; \
python manage.py makemigrations users; \
python manage.py makemigrations; \
python manage.py migrate; \
python manage.py loaddata backups; \
python manage.py loaddata computers; \
python manage.py loaddata core; \
python manage.py loaddata devices; \
python manage.py loaddata nets; \
python manage.py loaddata softwares; \
python manage.py shell -c "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin@example.com', 'password')"; \
touch .second_run; \
fi; \
)
.PHONY: venv
venv:
nix build .#venv -o venv
.PHONY: clean
clean:
docker-compose -f docker-compose-development.yml down -v
find . \( -name __pycache__ -o -name "*.pyc" \) -delete
rm -rf htmlcov/
rm -f */migrations/0*.py
rm .second_run
.PHONY: cleanall
cleanall: clean
docker-compose -f docker-compose-development.yml down -v --rmi local
rm -r .venv
.PHONY: init
init:
( \
python manage.py loaddata network_inventory.yaml; \
)
.PHONY: debug
debug:
( \
pytest --pdb --nomigrations --cov=. --cov-report=html; \
)

View File

@ -28,10 +28,11 @@ Please note that I will only use and test the first method.
[^2]: https://python-poetry.org
After you've entered the development environment with either method you can
start the server with `make`. This will start a PostgreSQL database running
inside a docker container and start the Django development server.
You can then access it in the browser under the FQDN of your computer. E.g.
`mypc.domain.local`.
start the server. With the nix version you can start it with `dev run`. With
poetry `./dev.sh run`. This will start a PostgreSQL database running inside a
docker container and start the Django development server. You can then access
it in the browser under the FQDN of your computer. E.g. `mypc.domain.local`.
Run the `dev` command without an argument to see all options.
## Environment Variables

92
dev.sh Executable file
View File

@ -0,0 +1,92 @@
#!/usr/bin/env bash
run () {
setup
find . -name __pycache__ -o -name "*.pyc" -delete
sudo iptables -I INPUT -p tcp --dport 8000 -j ACCEPT
python ./src/manage.py runserver 0.0.0.0:8000
}
setup () {
docker-compose -f docker-compose-development.yml up -d
if [ -f .second_run ]; then
sleep 2
python ./src/manage.py collectstatic --noinput
python ./src/manage.py makemigrations
python ./src/manage.py migrate
else
python ./src/manage.py collectstatic --noinput
python ./src/manage.py makemigrations backups
python ./src/manage.py makemigrations computers
python ./src/manage.py makemigrations core
python ./src/manage.py makemigrations customers
python ./src/manage.py makemigrations devices
python ./src/manage.py makemigrations licenses
python ./src/manage.py makemigrations nets
python ./src/manage.py makemigrations softwares
python ./src/manage.py makemigrations users
python ./src/manage.py makemigrations
python ./src/manage.py migrate
python ./src/manage.py loaddata backups
python ./src/manage.py loaddata computers
python ./src/manage.py loaddata core
python ./src/manage.py loaddata devices
python ./src/manage.py loaddata nets
python ./src/manage.py loaddata softwares
python ./src/manage.py shell -c "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin@example.com', 'password')"
touch .second_run
fi
}
venv () {
nix build .#venv -o venv
}
docker (){
nix build && docker load < result && docker run --rm -ti network-inventory:latest
}
clean () {
docker-compose -f docker-compose-development.yml down -v
find . \( -name __pycache__ -o -name "*.pyc" \) -delete
rm -rf htmlcov/
rm -f */migrations/0*.py
rm .second_run
}
cleanall () {
clean
docker-compose -f docker-compose-development.yml down -v --rmi local
rm -r .venv
}
init () {
python ./src/manage.py loaddata network_inventory.yaml
}
debug () {
pytest --pdb --nomigrations --cov=. --cov-report=html ./src/
}
test (){
nix flake check
}
tasks=("clean" "cleanall" "debug" "docker" "run" "test" "venv")
# only one task at a time
if [ $# != 1 ]; then
echo "usage: $0 <task_name>"
echo "All tasks: ${tasks[@]}"
fi
case $1 in
"${tasks[0]}") clean;;
"${tasks[1]}") cleanall;;
"${tasks[2]}") debug;;
"${tasks[3]}") docker;;
"${tasks[4]}") run;;
"${tasks[5]}") test;;
"${tasks[6]}") venv;;
esac

102
flake.nix
View File

@ -13,13 +13,17 @@
{
overlays.default = nixpkgs.lib.composeManyExtensions [
poetry2nix.overlay
(final: prev: {
inventoryEnv = prev.poetry2nix.mkPoetryEnv {
projectDir = ./.;
};
(final: prev: rec {
inventoryDevEnv = prev.poetry2nix.mkPoetryEnv
{
projectDir = ./.;
groups = [ "main" "dev" ];
};
inventoryPackage = prev.poetry2nix.mkPoetryApplication {
projectDir = ./.;
groups = [ "main" ];
};
inventoryEnv = inventoryPackage.dependencyEnv;
})
];
} // (flake-utils.lib.eachDefaultSystem (system:
@ -28,38 +32,8 @@
inherit system;
overlays = [ self.overlays.default ];
};
src = with pkgs.lib;
cleanSource (cleanSourceWith {
filter = name: type:
let
baseName = baseNameOf (toString name);
in
!(builtins.elem baseName [
".coverage"
".coveragerc"
".dir-locals.el"
".direnv"
".git"
".github"
".env"
".envrc"
".flake8"
".gitignore"
".gitlab-ci.yml"
"docker-compose.yaml"
"flake.lock"
"flake.nix"
"Makefile"
"poetry.lock"
"poetry.toml"
"pyproject.toml"
"pytest.ini"
"*.pyc"
]);
src = ./.;
});
inventory = pkgs.stdenv.mkDerivation {
inherit src;
src = ./.;
version = "latest";
pname = "network-inventory";
installPhase = ''
@ -72,9 +46,10 @@
devShells.default = pkgs.mkShell {
buildInputs = [
pkgs.gnumake
pkgs.inventoryEnv
pkgs.inventoryDevEnv
pkgs.poetry
pkgs.python310Packages.pip
(pkgs.writeScriptBin "dev" "${builtins.readFile ./dev.sh}")
];
shellHook = ''
export DJANGO_SETTINGS_MODULE=network_inventory.settings.local
@ -89,7 +64,7 @@
doCheck = true;
name = "lint";
src = ./.;
checkInputs = [ pkgs.inventoryEnv ];
checkInputs = [ pkgs.inventoryDevEnv ];
checkPhase = ''
mkdir -p $out
flake8 . --count --show-source --statistics
@ -103,7 +78,7 @@
doCheck = true;
name = "test";
src = ./.;
checkInputs = [ pkgs.inventoryEnv ];
checkInputs = [ pkgs.inventoryDevEnv ];
checkPhase = ''
mkdir -p $out
pytest --ds=network_inventory.settings.ram_test \
@ -125,47 +100,46 @@
paths = [
pkgs.bashInteractive
pkgs.coreutils
pkgs.inventoryEnv
inventory
(pkgs.writeShellScriptBin "start-inventory" ''
cd /code
if [ -f .second_run ]; then
sleep 2
${pkgs.python3}/bin/python manage.py collectstatic --noinput
${pkgs.python3}/bin/python manage.py makemigrations
${pkgs.python3}/bin/python manage.py migrate
${pkgs.inventoryEnv}/bin/django-admin collectstatic --noinput
${pkgs.inventoryEnv}/bin/django-admin makemigrations
${pkgs.inventoryEnv}/bin/django-admin migrate
else
${pkgs.python3}/bin/python manage.py collectstatic --noinput
${pkgs.python3}/bin/python manage.py makemigrations backups
${pkgs.python3}/bin/python manage.py makemigrations computers
${pkgs.python3}/bin/python manage.py makemigrations core
${pkgs.python3}/bin/python manage.py makemigrations customers
${pkgs.python3}/bin/python manage.py makemigrations devices
${pkgs.python3}/bin/python manage.py makemigrations licenses
${pkgs.python3}/bin/python manage.py makemigrations nets
${pkgs.python3}/bin/python manage.py makemigrations softwares
${pkgs.python3}/bin/python manage.py makemigrations users
${pkgs.python3}/bin/python manage.py makemigrations
${pkgs.python3}/bin/python manage.py migrate
${pkgs.python3}/bin/python manage.py loaddata backups
${pkgs.python3}/bin/python manage.py loaddata computers
${pkgs.python3}/bin/python manage.py loaddata core
${pkgs.python3}/bin/python manage.py loaddata devices
${pkgs.python3}/bin/python manage.py loaddata nets
${pkgs.python3}/bin/python manage.py loaddata softwares
${pkgs.python3}/bin/python manage.py shell -c "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin@example.com', 'password')"
${pkgs.inventoryEnv}/bin/django-admin collectstatic --noinput
${pkgs.inventoryEnv}/bin/django-admin makemigrations backups
${pkgs.inventoryEnv}/bin/django-admin makemigrations computers
${pkgs.inventoryEnv}/bin/django-admin makemigrations core
${pkgs.inventoryEnv}/bin/django-admin makemigrations customers
${pkgs.inventoryEnv}/bin/django-admin makemigrations devices
${pkgs.inventoryEnv}/bin/django-admin makemigrations licenses
${pkgs.inventoryEnv}/bin/django-admin makemigrations nets
${pkgs.inventoryEnv}/bin/django-admin makemigrations softwares
${pkgs.inventoryEnv}/bin/django-admin makemigrations users
${pkgs.inventoryEnv}/bin/django-admin makemigrations
${pkgs.inventoryEnv}/bin/django-admin migrate
${pkgs.inventoryEnv}/bin/django-admin loaddata backups
${pkgs.inventoryEnv}/bin/django-admin loaddata computers
${pkgs.inventoryEnv}/bin/django-admin loaddata core
${pkgs.inventoryEnv}/bin/django-admin loaddata devices
${pkgs.inventoryEnv}/bin/django-admin loaddata nets
${pkgs.inventoryEnv}/bin/django-admin loaddata softwares
${pkgs.inventoryEnv}/bin/django-admin shell -c "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin@example.com', 'password')"
touch .second_run
fi
${pkgs.python310Packages.gunicorn}/bin/gunicorn network_inventory.wsgi:application --reload --bind 0.0.0.0:8000 --workers 3
${pkgs.inventoryEnv}/bin/gunicorn network_inventory.wsgi:application --reload --bind 0.0.0.0:8000 --workers 3
'')
];
};
config = {
Cmd = [ "start-inventory" ];
WorkingDir = "/code";
Env = [
"POSTGRES_DB=network_inventory"
"DJANGO_SETTINGS_MODULE=network_inventory.settings.production"
"PYTHONPATH=/lib/python3.10:/lib/python3.10/site-packages"
"PYTHONPATH=/lib/python3.10:/lib/python3.10/site-packages:/code"
];
};
};

2
poetry.lock generated
View File

@ -722,7 +722,7 @@ python-versions = "*"
[metadata]
lock-version = "1.1"
python-versions = "^3.9"
content-hash = "497467f8cce845c8f08bbbdc259f9faaf212af95639356eff39ad0240a0f22b6"
content-hash = "6c310d4f7398036e0ce6ab320014b9aa2bf4b7dc187503ae2b4962995b3eab3b"
[metadata.files]
appdirs = [

View File

@ -11,7 +11,7 @@ packages = [
{ include = "src" },
]
[tool.poetry.dependencies]
[tool.poetry.group.main.dependencies]
python = "^3.9"
Django = "^4.1.3"
django-crispy-forms = "^1.14.0"
@ -26,7 +26,7 @@ gunicorn = "^20.1.0"
psycopg2-binary = "^2.9.5"
PyYAML = "^6.0"
[tool.poetry.dev-dependencies]
[tool.poetry.group.dev.dependencies]
autopep8 = "^2.0.0"
black = "^22.10.0"
coverage = "^6.5.0"

30
run.sh
View File

@ -1,30 +0,0 @@
#!/usr/bin/env bash
if [ -f .second_run ]; then
sleep 2
python manage.py collectstatic --noinput
python manage.py makemigrations
python manage.py migrate
else
python manage.py collectstatic --noinput
python manage.py makemigrations backups
python manage.py makemigrations computers
python manage.py makemigrations core
python manage.py makemigrations customers
python manage.py makemigrations devices
python manage.py makemigrations licenses
python manage.py makemigrations nets
python manage.py makemigrations softwares
python manage.py makemigrations users
python manage.py makemigrations
python manage.py migrate
python manage.py loaddata backups
python manage.py loaddata computers
python manage.py loaddata core
python manage.py loaddata devices
python manage.py loaddata nets
python manage.py loaddata softwares
python manage.py shell -c "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin@example.com', 'password')"
touch .second_run
fi
find . \( -name __pycache__ -o -name "*.pyc" \) -delete
gunicorn network_inventory.wsgi:application --reload --bind 0.0.0.0:8000 --workers 3