netbox: 3.7.8 -> 4.1.3 (#331750)

This commit is contained in:
Rémi NICOLE 2024-10-25 09:09:06 +00:00 committed by GitHub
commit 0433962e5b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 617 additions and 63 deletions

View File

@ -312,6 +312,14 @@
- The method to safely handle secrets in the `networking.wireless` module has been changed to benefit from a [new feature](https://w1.fi/cgit/hostap/commit/?id=e680a51e94a33591f61edb210926bcb71217a21a) of wpa_supplicant.
The syntax to refer to secrets has changed slightly and the option `networking.wireless.environmentFile` has been replaced by `networking.wireless.secretsFile`; see the description of the latter for how to upgrade.
- NetBox was updated to `>= 4.1.0`.
Have a look at the breaking changes
of the [4.0 release](https://github.com/netbox-community/netbox/releases/tag/v4.0.0)
and the [4.1 release](https://github.com/netbox-community/netbox/releases/tag/v4.1.0),
make the required changes to your database, if needed,
then upgrade by setting `services.netbox.package = pkgs.netbox_4_1;`
in your configuration.
- `services.cgit` now runs as the cgit user by default instead of root.
This change requires granting access to the repositories to this user or
setting the appropriate one through `services.cgit.some-instance.user`.

View File

@ -75,21 +75,17 @@ in {
package = lib.mkOption {
type = lib.types.package;
default =
if lib.versionAtLeast config.system.stateVersion "24.05"
if lib.versionAtLeast config.system.stateVersion "24.11"
then pkgs.netbox_4_1
else if lib.versionAtLeast config.system.stateVersion "24.05"
then pkgs.netbox_3_7
else if lib.versionAtLeast config.system.stateVersion "23.11"
then pkgs.netbox_3_6
else if lib.versionAtLeast config.system.stateVersion "23.05"
then pkgs.netbox_3_5
else pkgs.netbox_3_3;
else pkgs.netbox_3_6;
defaultText = lib.literalExpression ''
if lib.versionAtLeast config.system.stateVersion "24.05"
if lib.versionAtLeast config.system.stateVersion "24.11"
then pkgs.netbox_4_1
else if lib.versionAtLeast config.system.stateVersion "24.05"
then pkgs.netbox_3_7
else if lib.versionAtLeast config.system.stateVersion "23.11"
then pkgs.netbox_3_6
else if lib.versionAtLeast config.system.stateVersion "23.05"
then pkgs.netbox_3_5
else pkgs.netbox_3_3;
else pkgs.netbox_3_6;
'';
description = ''
NetBox package to use.
@ -328,6 +324,7 @@ in {
--pythonpath ${pkg}/opt/netbox/netbox
'';
PrivateTmp = true;
TimeoutStartSec = lib.mkDefault "5min";
};
};

View File

@ -658,6 +658,8 @@ in {
networking.networkmanager = handleTest ./networking/networkmanager.nix {};
netbox_3_6 = handleTest ./web-apps/netbox.nix { netbox = pkgs.netbox_3_6; };
netbox_3_7 = handleTest ./web-apps/netbox.nix { netbox = pkgs.netbox_3_7; };
netbox_4_0 = handleTest ./web-apps/netbox.nix { netbox = pkgs.netbox_4_0; };
netbox_4_1 = handleTest ./web-apps/netbox.nix { netbox = pkgs.netbox_4_1; };
netbox-upgrade = handleTest ./web-apps/netbox-upgrade.nix {};
# TODO: put in networking.nix after the test becomes more complete
networkingProxy = handleTest ./networking-proxy.nix {};

View File

@ -1,6 +1,6 @@
import ../make-test-python.nix ({ lib, pkgs, ... }: let
oldNetbox = pkgs.netbox_3_6;
newNetbox = pkgs.netbox_3_7;
oldNetbox = pkgs.netbox_3_7;
newNetbox = pkgs.netbox_4_1;
in {
name = "netbox-upgrade";
@ -58,8 +58,10 @@ in {
return header.split()[1]
def check_api_version(version):
# Returns 403 with NetBox >= 4.0,
# but we still get the API version in the headers
headers = machine.succeed(
"curl -sSfL http://localhost/api/ --head -H 'Content-Type: application/json'"
"curl -sSL http://localhost/api/ --head -H 'Content-Type: application/json'"
)
assert api_version(headers) == version

View File

@ -132,7 +132,7 @@ in import ../make-test-python.nix ({ lib, pkgs, netbox, ... }: {
testScript = let
changePassword = pkgs.writeText "change-password.py" ''
from django.contrib.auth.models import User
from users.models import User
u = User.objects.get(username='netbox')
u.set_password('netbox')
u.save()
@ -171,11 +171,6 @@ in import ../make-test-python.nix ({ lib, pkgs, netbox, ... }: {
machine.succeed("curl -sSfL http://localhost/static/netbox.js")
machine.succeed("curl -sSfL http://localhost/static/docs/")
with subtest("Can interact with API"):
json.loads(
machine.succeed("curl -sSfL -H 'Accept: application/json' 'http://localhost/api/'")
)
def login(username: str, password: str):
encoded_data = json.dumps({"username": username, "password": password})
uri = "/users/tokens/provision/"

View File

@ -0,0 +1,13 @@
diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py
index 2de06dd10..00406af48 100644
--- a/netbox/netbox/settings.py
+++ b/netbox/netbox/settings.py
@@ -410,7 +412,7 @@ USE_X_FORWARDED_HOST = True
X_FRAME_OPTIONS = 'SAMEORIGIN'
# Static files (CSS, JavaScript, Images)
-STATIC_ROOT = BASE_DIR + '/static'
+STATIC_ROOT = getattr(configuration, 'STATIC_ROOT', os.path.join(BASE_DIR, 'static')).rstrip('/')
STATIC_URL = f'/{BASE_PATH}static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'project-static', 'dist'),

View File

@ -0,0 +1,81 @@
diff --git a/netbox/extras/forms/bulk_import.py b/netbox/extras/forms/bulk_import.py
index f2cf0b721..a17b6712d 100644
--- a/netbox/extras/forms/bulk_import.py
+++ b/netbox/extras/forms/bulk_import.py
@@ -194,7 +194,7 @@ class Meta:
model = EventRule
fields = (
'name', 'description', 'enabled', 'conditions', 'object_types', 'type_create', 'type_update',
- 'type_delete', 'type_job_start', 'type_job_end', 'action_type', 'action_object', 'comments', 'tags'
+ 'type_delete', 'type_job_start', 'type_job_end', 'action_type', 'comments', 'tags'
)
def clean(self):
diff --git a/netbox/extras/migrations/0002_squashed_0059.py b/netbox/extras/migrations/0002_squashed_0059.py
index 98bed255a..a403a0e19 100644
--- a/netbox/extras/migrations/0002_squashed_0059.py
+++ b/netbox/extras/migrations/0002_squashed_0059.py
@@ -131,10 +131,6 @@ class Migration(migrations.Migration):
name='webhook',
unique_together={('payload_url', 'type_create', 'type_update', 'type_delete')},
),
- migrations.AlterIndexTogether(
- name='taggeditem',
- index_together={('content_type', 'object_id')},
- ),
migrations.AlterUniqueTogether(
name='exporttemplate',
unique_together={('content_type', 'name')},
diff --git a/netbox/extras/migrations/0087_squashed_0098.py b/netbox/extras/migrations/0087_squashed_0098.py
index 55f276ecd..bbe7f79f5 100644
--- a/netbox/extras/migrations/0087_squashed_0098.py
+++ b/netbox/extras/migrations/0087_squashed_0098.py
@@ -98,10 +98,9 @@ class Migration(migrations.Migration):
name='object_types',
field=models.ManyToManyField(blank=True, related_name='+', to='contenttypes.contenttype'),
),
- migrations.RenameIndex(
+ migrations.AddIndex(
model_name='taggeditem',
- new_name='extras_tagg_content_717743_idx',
- old_fields=('content_type', 'object_id'),
+ index=models.Index(fields=['content_type', 'object_id'], name='extras_tagg_content_717743_idx'),
),
migrations.CreateModel(
name='Bookmark',
diff --git a/netbox/ipam/forms/model_forms.py b/netbox/ipam/forms/model_forms.py
index f5e3bca30..4f96bac71 100644
--- a/netbox/ipam/forms/model_forms.py
+++ b/netbox/ipam/forms/model_forms.py
@@ -588,7 +588,7 @@ class VLANGroupForm(NetBoxModelForm):
class Meta:
model = VLANGroup
fields = [
- 'name', 'slug', 'description', 'min_vid', 'max_vid', 'scope_type', 'scope', 'tags',
+ 'name', 'slug', 'description', 'min_vid', 'max_vid', 'scope_type', 'tags',
]
def __init__(self, *args, **kwargs):
diff --git a/netbox/vpn/forms/model_forms.py b/netbox/vpn/forms/model_forms.py
index a17ca9a5e..dee98afd3 100644
--- a/netbox/vpn/forms/model_forms.py
+++ b/netbox/vpn/forms/model_forms.py
@@ -258,7 +258,7 @@ class TunnelTerminationForm(NetBoxModelForm):
class Meta:
model = TunnelTermination
fields = [
- 'tunnel', 'role', 'termination', 'outside_ip', 'tags',
+ 'tunnel', 'role', 'outside_ip', 'tags',
]
def __init__(self, *args, initial=None, **kwargs):
diff --git a/requirements.txt b/requirements.txt
index 09f23871c..57f167dae 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,4 @@
-Django==5.0.9
+Django==5.1.2
django-cors-headers==4.4.0
django-debug-toolbar==4.4.6
django-filter==24.2

View File

@ -0,0 +1,132 @@
{
lib,
fetchFromGitHub,
python3,
plugins ? _ps: [ ],
nixosTests,
}:
let
py = python3.override {
packageOverrides = _final: prev: { django = prev.django_5; };
};
extraBuildInputs = plugins py.pkgs;
in
py.pkgs.buildPythonApplication rec {
pname = "netbox";
version = "4.0.11";
format = "other";
src = fetchFromGitHub {
owner = "netbox-community";
repo = "netbox";
rev = "refs/tags/v${version}";
hash = "sha256-0yEz7v5RL1+cqbGDyuyEsywFonJQfPdVIQdL0qLyc04=";
};
patches = [
./custom-static-root.patch
# From https://github.com/netbox-community/netbox/pull/17620
./django-5.1.patch
];
propagatedBuildInputs =
(
with py.pkgs;
[
django
django-cors-headers
django-debug-toolbar
django-filter
django-graphiql-debug-toolbar
django-htmx
django-mptt
django-pglocks
django-prometheus
django-redis
django-rq
django-tables2
django-taggit
django-timezone-field
djangorestframework
drf-spectacular
drf-spectacular-sidecar
feedparser
jinja2
markdown
netaddr
nh3
pillow
psycopg
psycopg.optional-dependencies.c
psycopg.optional-dependencies.pool
pyyaml
requests
social-auth-core
social-auth-app-django
strawberry-graphql
strawberry-django
svgwrite
tablib
# Optional dependencies, kept here for backward compatibility
# for the S3 data source backend
boto3
# for Git data source backend
dulwich
# for error reporting
sentry-sdk
]
++ social-auth-core.passthru.optional-dependencies.openidconnect
)
++ extraBuildInputs;
buildInputs = with py.pkgs; [
mkdocs-material
mkdocs-material-extensions
mkdocstrings
mkdocstrings-python
];
nativeBuildInputs = [ py.pkgs.mkdocs ];
postBuild = ''
PYTHONPATH=$PYTHONPATH:netbox/
python -m mkdocs build
'';
installPhase = ''
mkdir -p $out/opt/netbox
cp -r . $out/opt/netbox
chmod +x $out/opt/netbox/netbox/manage.py
makeWrapper $out/opt/netbox/netbox/manage.py $out/bin/netbox \
--prefix PYTHONPATH : "$PYTHONPATH"
'';
passthru = {
python = python3;
# PYTHONPATH of all dependencies used by the package
pythonPath = py.pkgs.makePythonPath propagatedBuildInputs;
inherit (py.pkgs) gunicorn;
tests = {
netbox = nixosTests.netbox_4_0;
};
};
meta = {
homepage = "https://github.com/netbox-community/netbox";
description = "IP address management (IPAM) and data center infrastructure management (DCIM) tool";
mainProgram = "netbox";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [
minijackson
n0emis
raitobezarius
];
knownVulnerabilities = [
"Netbox version ${version} is EOL; please upgrade by following the current release notes instructions."
];
};
}

View File

@ -0,0 +1,13 @@
diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py
index 2de06dd10..00406af48 100644
--- a/netbox/netbox/settings.py
+++ b/netbox/netbox/settings.py
@@ -410,7 +412,7 @@ USE_X_FORWARDED_HOST = True
X_FRAME_OPTIONS = 'SAMEORIGIN'
# Static files (CSS, JavaScript, Images)
-STATIC_ROOT = BASE_DIR + '/static'
+STATIC_ROOT = getattr(configuration, 'STATIC_ROOT', os.path.join(BASE_DIR, 'static')).rstrip('/')
STATIC_URL = f'/{BASE_PATH}static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'project-static', 'dist'),

View File

@ -0,0 +1,133 @@
{
lib,
fetchFromGitHub,
fetchpatch,
python3,
plugins ? _ps: [ ],
nixosTests,
}:
let
py = python3.override {
packageOverrides = _final: prev: { django = prev.django_5; };
};
extraBuildInputs = plugins py.pkgs;
in
py.pkgs.buildPythonApplication rec {
pname = "netbox";
version = "4.1.3";
format = "other";
src = fetchFromGitHub {
owner = "netbox-community";
repo = "netbox";
rev = "refs/tags/v${version}";
hash = "sha256-SRzkmRkniVDu6vYGa9Kd9exob/LHpGBPd+lRA/pbCFo=";
};
patches = [
./custom-static-root.patch
(fetchpatch {
url = "https://github.com/netbox-community/netbox/pull/17620.patch";
hash = "sha256-zN2zke4qlNJUbxI8mSV+zGmEv0Qtd0zSCbCXWyE1L2k=";
})
];
propagatedBuildInputs =
(
with py.pkgs;
[
django
django-cors-headers
django-debug-toolbar
django-filter
django-graphiql-debug-toolbar
django-htmx
django-mptt
django-pglocks
django-prometheus
django-redis
django-rq
django-tables2
django-taggit
django-timezone-field
djangorestframework
drf-spectacular
drf-spectacular-sidecar
feedparser
jinja2
markdown
netaddr
nh3
pillow
psycopg
psycopg.optional-dependencies.c
psycopg.optional-dependencies.pool
pyyaml
requests
social-auth-core
social-auth-app-django
strawberry-graphql
strawberry-django
svgwrite
tablib
# Optional dependencies, kept here for backward compatibility
# for the S3 data source backend
boto3
# for Git data source backend
dulwich
# for error reporting
sentry-sdk
]
++ social-auth-core.passthru.optional-dependencies.openidconnect
)
++ extraBuildInputs;
buildInputs = with py.pkgs; [
mkdocs-material
mkdocs-material-extensions
mkdocstrings
mkdocstrings-python
];
nativeBuildInputs = [ py.pkgs.mkdocs ];
postBuild = ''
PYTHONPATH=$PYTHONPATH:netbox/
python -m mkdocs build
'';
installPhase = ''
mkdir -p $out/opt/netbox
cp -r . $out/opt/netbox
chmod +x $out/opt/netbox/netbox/manage.py
makeWrapper $out/opt/netbox/netbox/manage.py $out/bin/netbox \
--prefix PYTHONPATH : "$PYTHONPATH"
'';
passthru = {
python = python3;
# PYTHONPATH of all dependencies used by the package
pythonPath = py.pkgs.makePythonPath propagatedBuildInputs;
inherit (py.pkgs) gunicorn;
tests = {
netbox = nixosTests.netbox_4_1;
inherit (nixosTests) netbox-upgrade;
};
};
meta = {
homepage = "https://github.com/netbox-community/netbox";
description = "IP address management (IPAM) and data center infrastructure management (DCIM) tool";
mainProgram = "netbox";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [
minijackson
n0emis
raitobezarius
];
};
}

View File

@ -0,0 +1,46 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
poetry-core,
django,
typing-extensions,
pytestCheckHook,
pytest-cov-stub,
pytest-django,
}:
buildPythonPackage rec {
pname = "django-choices-field";
version = "2.3.0";
pyproject = true;
src = fetchFromGitHub {
owner = "bellini666";
repo = "django-choices-field";
rev = "v${version}";
hash = "sha256-2oLMUM/aE4aY0eEU+CLIjTNQJAMUt/GK5Fw26QN7t34=";
};
build-system = [ poetry-core ];
dependencies = [
django
typing-extensions
];
nativeCheckInputs = [
pytestCheckHook
pytest-cov-stub
pytest-django
];
pythonImportsCheck = [ "django_choices_field" ];
meta = {
description = "Django field that set/get django's new TextChoices/IntegerChoices enum";
homepage = "https://github.com/bellini666/django-choices-field";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ minijackson ];
};
}

View File

@ -0,0 +1,44 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
setuptools,
asgiref,
django,
pytestCheckHook,
pytest-django,
}:
buildPythonPackage rec {
pname = "django-htmx";
version = "1.19.0";
pyproject = true;
src = fetchFromGitHub {
owner = "adamchainz";
repo = "django-htmx";
rev = version;
hash = "sha256-nSutErUkFafKjBswhC+Lrn39MgCbCrzttAx1a+qt1so=";
};
build-system = [ setuptools ];
dependencies = [
asgiref
django
];
nativeCheckInputs = [
pytestCheckHook
pytest-django
];
pythonImportsCheck = [ "django_htmx" ];
meta = {
description = "Extensions for using Django with htmx";
homepage = "https://github.com/adamchainz/django-htmx";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ minijackson ];
};
}

View File

@ -2,35 +2,34 @@
lib,
buildPythonPackage,
fetchFromGitHub,
hatchling,
django,
django-js-asset,
python,
}:
buildPythonPackage rec {
pname = "django-mptt";
version = "0.13.4";
format = "setuptools";
version = "0.16";
pyproject = true;
src = fetchFromGitHub {
owner = pname;
repo = pname;
owner = "django-mptt";
repo = "django-mptt";
rev = version;
sha256 = "12y3chxhqxk2yxin055f0f45nabj0s8hil12hw0lwzlbax6k9ss6";
hash = "sha256-vWnXKWzaa5AWoNaIc8NA1B2mnzKXRliQmi5VdrRMadE=";
};
propagatedBuildInputs = [
build-system = [ hatchling ];
dependencies = [
django
django-js-asset
];
pythonImportsCheck = [ "mptt" ];
checkPhase = ''
runHook preCheck
${python.interpreter} tests/manage.py test
runHook postCheck
'';
# No pytest checks, since they depend on model_mommy, which is deprecated
doCheck = false;
meta = with lib; {
description = "Utilities for implementing a modified pre-order traversal tree in Django";

View File

@ -2,6 +2,7 @@
lib,
buildPythonPackage,
fetchFromGitHub,
fetchpatch,
python,
django,
dj-database-url,
@ -19,10 +20,21 @@ buildPythonPackage rec {
hash = "sha256-JJY+FoMPSnWuSsNIas2JedGJpdm6RfPE3E1VIjGuXIc=";
};
patches = [
# Spelling of assertQuerySetEqual changed in Django >= 4.2
(fetchpatch {
url = "https://github.com/jazzband/django-polymorphic/commit/63d291f8771847e716a37652f239e3966a3360e1.patch";
hash = "sha256-rvvD9zfjm8bgH1460BA5K44Oobzv1FRAYq9Rgg291B8=";
})
];
propagatedBuildInputs = [ django ];
nativeCheckInputs = [ dj-database-url ];
# Tests fail for Django >= 5.1.0
doCheck = lib.versionOlder django.version "5.1.0";
checkPhase = ''
${python.interpreter} runtests.py
'';

View File

@ -9,14 +9,14 @@
buildPythonPackage rec {
pname = "netbox-reorder-rack";
version = "1.0.0";
version = "1.1.2";
pyproject = true;
src = fetchFromGitHub {
owner = "netbox-community";
repo = "netbox-reorder-rack";
rev = "v${version}";
hash = "sha256-UbTq3DHxSczDxQIUyAHCVJG3SZdqgyS9ULNvuDKQvEY=";
hash = "sha256-0572pj1OA08Zxl4vhMmFHvQA/K24hG/GhKEbo+hbW5Q=";
};
build-system = [

View File

@ -0,0 +1,79 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
poetry-core,
setuptools,
asgiref,
django,
strawberry-graphql,
django-debug-toolbar,
django-choices-field,
# check inputs
pytestCheckHook,
django-guardian,
django-mptt,
django-polymorphic,
factory-boy,
pillow,
psycopg2,
pytest-cov-stub,
pytest-django,
pytest-mock,
pytest-snapshot,
}:
buildPythonPackage rec {
pname = "strawberry-django";
version = "0.47.1";
pyproject = true;
src = fetchFromGitHub {
owner = "strawberry-graphql";
repo = "strawberry-django";
rev = "v${version}";
hash = "sha256-N7/EJ1AQ2xUJCEX6/xtyH1o/CuDzlvrUtpoDLq+H1WU=";
};
build-system = [
poetry-core
setuptools
];
dependencies = [
asgiref
django
strawberry-graphql
];
nativeCheckInputs = [
pytestCheckHook
django-guardian
django-mptt
django-polymorphic
factory-boy
pillow
psycopg2
pytest-cov-stub
pytest-django
pytest-mock
pytest-snapshot
] ++ optional-dependencies.debug-toolbar ++ optional-dependencies.enum;
pythonImportsCheck = [ "strawberry_django" ];
optional-dependencies = {
debug-toolbar = [ django-debug-toolbar ];
enum = [ django-choices-field ];
};
meta = {
description = "Strawberry GraphQL Django extension";
homepage = "https://github.com/strawberry-graphql/strawberry-django";
changelog = "https://github.com/strawberry-graphql/strawberry-django/blob/${src.rev}/CHANGELOG.md";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ minijackson ];
};
}

View File

@ -1,26 +1,12 @@
{ lib, nixosTests, callPackage, }:
{
lib,
nixosTests,
callPackage,
}:
let
generic = import ./generic.nix;
in
lib.fix (self: {
netbox = self.netbox_3_7;
netbox_3_6 = callPackage generic {
version = "3.6.9";
hash = "sha256-R/hcBKrylW3GnEy10DkrLVr8YJtsSCvCP9H9LhafO9I=";
extraPatches = [
# Allow setting the STATIC_ROOT from within the configuration and setting a custom redis URL
./config.patch
];
tests = {
netbox = nixosTests.netbox_3_6;
inherit (nixosTests) netbox-upgrade;
};
maintainers = with lib.maintainers; [ minijackson n0emis raitobezarius ];
eol = true;
};
{
netbox_3_7 = callPackage generic {
version = "3.7.8";
hash = "sha256-61pJbMWXNFnvWI0z9yWvsutdCAP4VydeceANNw0nKsk=";
@ -28,11 +14,13 @@ lib.fix (self: {
# Allow setting the STATIC_ROOT from within the configuration and setting a custom redis URL
./config.patch
];
tests = {
netbox = nixosTests.netbox_3_7;
inherit (nixosTests) netbox-upgrade;
};
tests.netbox = nixosTests.netbox_3_7;
maintainers = with lib.maintainers; [ minijackson n0emis raitobezarius ];
maintainers = with lib.maintainers; [
minijackson
n0emis
raitobezarius
];
eol = true;
};
})
}

View File

@ -770,6 +770,8 @@ mapAliases {
ncdu_2 = ncdu; # Added 2022-07-22
neocities-cli = neocities; # Added 2024-07-31
netbox_3_3 = throw "netbox 3.3 series has been removed as it was EOL"; # Added 2023-09-02
netbox_3_5 = throw "netbox 3.5 series has been removed as it was EOL"; # Added 2024-01-22
nextcloud27 = throw ''
Nextcloud v27 has been removed from `nixpkgs` as the support for is dropped
by upstream in 2024-06. Please upgrade to at least Nextcloud v28 by declaring

View File

@ -10274,8 +10274,10 @@ with pkgs;
netbootxyz-efi = callPackage ../tools/misc/netbootxyz-efi { };
inherit (callPackage ../servers/web-apps/netbox { })
netbox netbox_3_6 netbox_3_7;
inherit (callPackage ../servers/web-apps/netbox { }) netbox_3_7;
# Not in aliases because it wouldn't get picked up by callPackage
netbox = netbox_4_1;
netbox2netshot = callPackage ../tools/admin/netbox2netshot { };

View File

@ -3336,6 +3336,8 @@ self: super: with self; {
django-celery-results = callPackage ../development/python-modules/django-celery-results { };
django-choices-field = callPackage ../development/python-modules/django-choices-field { };
django-ckeditor = callPackage ../development/python-modules/django-ckeditor { };
django-classy-tags = callPackage ../development/python-modules/django-classy-tags { };
@ -3406,6 +3408,8 @@ self: super: with self; {
django-hijack = callPackage ../development/python-modules/django-hijack { };
django-htmx = callPackage ../development/python-modules/django-htmx { };
django-i18nfield = callPackage ../development/python-modules/django-i18nfield { };
django-import-export = callPackage ../development/python-modules/django-import-export { };
@ -15093,6 +15097,8 @@ self: super: with self; {
strawberry-graphql = callPackage ../development/python-modules/strawberry-graphql { };
strawberry-django = callPackage ../development/python-modules/strawberry-django { };
strct = callPackage ../development/python-modules/strct { };
streamcontroller-plugin-tools = callPackage ../development/python-modules/streamcontroller-plugin-tools { };