commit
e823e39688
|
@ -6,9 +6,6 @@ on:
|
|||
branches: [ "master", "dev" ]
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
IMAGE_NAME: network_inventory
|
||||
|
||||
jobs:
|
||||
tests:
|
||||
runs-on: ubuntu-latest
|
||||
|
|
|
@ -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"]
|
75
Makefile
75
Makefile
|
@ -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; \
|
||||
)
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
102
flake.nix
|
@ -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"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
|
|
@ -722,7 +722,7 @@ python-versions = "*"
|
|||
[metadata]
|
||||
lock-version = "1.1"
|
||||
python-versions = "^3.9"
|
||||
content-hash = "497467f8cce845c8f08bbbdc259f9faaf212af95639356eff39ad0240a0f22b6"
|
||||
content-hash = "6c310d4f7398036e0ce6ab320014b9aa2bf4b7dc187503ae2b4962995b3eab3b"
|
||||
|
||||
[metadata.files]
|
||||
appdirs = [
|
||||
|
|
|
@ -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
30
run.sh
|
@ -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
|
Loading…
Reference in New Issue