Merge staging-next into staging
This commit is contained in:
commit
6c56d2db74
|
@ -15774,6 +15774,12 @@
|
|||
githubId = 4201956;
|
||||
name = "pongo1231";
|
||||
};
|
||||
poptart = {
|
||||
email = "poptart@hosakacorp.net";
|
||||
github = "terrorbyte";
|
||||
githubId = 1601039;
|
||||
name = "Cale Black";
|
||||
};
|
||||
portothree = {
|
||||
name = "Gustavo Porto";
|
||||
email = "gus@p8s.co";
|
||||
|
|
|
@ -12,7 +12,7 @@ looks like this:
|
|||
type = type specification;
|
||||
default = default value;
|
||||
example = example value;
|
||||
description = lib.mdDoc "Description for use in the NixOS manual.";
|
||||
description = "Description for use in the NixOS manual.";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -58,12 +58,9 @@ The function `mkOption` accepts the following arguments.
|
|||
|
||||
`description`
|
||||
|
||||
: A textual description of the option, in [Nixpkgs-flavored Markdown](
|
||||
https://nixos.org/nixpkgs/manual/#sec-contributing-markup) format, that will be
|
||||
included in the NixOS manual. During the migration process from DocBook
|
||||
it is necessary to mark descriptions written in CommonMark with `lib.mdDoc`.
|
||||
The description may still be written in DocBook (without any marker), but this
|
||||
is discouraged and will be deprecated in the future.
|
||||
: A textual description of the option in [Nixpkgs-flavored Markdown](
|
||||
https://nixos.org/nixpkgs/manual/#sec-contributing-markup) format that will be
|
||||
included in the NixOS manual.
|
||||
|
||||
## Utility functions for common option patterns {#sec-option-declarations-util}
|
||||
|
||||
|
@ -81,13 +78,13 @@ For example:
|
|||
::: {#ex-options-declarations-util-mkEnableOption-magic .example}
|
||||
### `mkEnableOption` usage
|
||||
```nix
|
||||
lib.mkEnableOption (lib.mdDoc "magic")
|
||||
lib.mkEnableOption "magic"
|
||||
# is like
|
||||
lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
example = true;
|
||||
description = lib.mdDoc "Whether to enable magic.";
|
||||
description = "Whether to enable magic.";
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
@ -135,7 +132,7 @@ lib.mkOption {
|
|||
type = lib.types.package;
|
||||
default = pkgs.hello;
|
||||
defaultText = lib.literalExpression "pkgs.hello";
|
||||
description = lib.mdDoc "The hello package to use.";
|
||||
description = "The hello package to use.";
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
@ -153,7 +150,7 @@ lib.mkOption {
|
|||
default = pkgs.ghc;
|
||||
defaultText = lib.literalExpression "pkgs.ghc";
|
||||
example = lib.literalExpression "pkgs.haskell.packages.ghc92.ghc.withPackages (hkgs: [ hkgs.primes ])";
|
||||
description = lib.mdDoc "The GHC package to use.";
|
||||
description = "The GHC package to use.";
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
|
|
@ -473,6 +473,8 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
|
|||
- `services.zfs.zed.enableMail` now uses the global `sendmail` wrapper defined by an email module
|
||||
(such as msmtp or Postfix). It no longer requires using a special ZFS build with email support.
|
||||
|
||||
- `castopod` has some migration actions to be taken in case of a S3 setup. Some new features may also need some manual migration actions. See [https://code.castopod.org/adaures/castopod/-/releases](https://code.castopod.org/adaures/castopod/-/releases) for more informations.
|
||||
|
||||
- `nextcloud-setup.service` no longer changes the group of each file & directory inside `/var/lib/nextcloud/{config,data,store-apps}` if one of these directories has the wrong owner group. This was part of transitioning the group used for `/var/lib/nextcloud`, but isn't necessary anymore.
|
||||
|
||||
- `services.kavita` now uses the freeform option `services.kavita.settings` for the application settings file.
|
||||
|
|
|
@ -117,9 +117,7 @@
|
|||
# deprecated since 23.11.
|
||||
# TODO remove in a while.
|
||||
, allowDocBook ? false
|
||||
# whether lib.mdDoc is required for descriptions to be read as markdown.
|
||||
# deprecated since 23.11.
|
||||
# TODO remove in a while.
|
||||
# TODO remove in a while (see https://github.com/NixOS/nixpkgs/issues/300735)
|
||||
, markdownByDefault ? true
|
||||
}:
|
||||
|
||||
|
|
|
@ -31,7 +31,6 @@ let
|
|||
;
|
||||
|
||||
inherit (lib)
|
||||
mdDoc
|
||||
mkDefault
|
||||
mkDerivedConfig
|
||||
mkEnableOption
|
||||
|
@ -81,11 +80,11 @@ rec {
|
|||
|
||||
initrdContents = attrsOf (submodule ({ config, options, name, ... }: {
|
||||
options = {
|
||||
enable = mkEnableOption (mdDoc "copying of this file and symlinking it") // { default = true; };
|
||||
enable = (mkEnableOption "copying of this file and symlinking it") // { default = true; };
|
||||
|
||||
target = mkOption {
|
||||
type = path;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Path of the symlink.
|
||||
'';
|
||||
default = name;
|
||||
|
@ -94,12 +93,12 @@ rec {
|
|||
text = mkOption {
|
||||
default = null;
|
||||
type = nullOr lines;
|
||||
description = mdDoc "Text of the file.";
|
||||
description = "Text of the file.";
|
||||
};
|
||||
|
||||
source = mkOption {
|
||||
type = path;
|
||||
description = mdDoc "Path of the source file.";
|
||||
description = "Path of the source file.";
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -17,7 +17,6 @@ let
|
|||
concatMap
|
||||
filterOverrides
|
||||
isList
|
||||
mdDoc
|
||||
mergeEqualOption
|
||||
mkIf
|
||||
mkMerge
|
||||
|
@ -55,7 +54,7 @@ in rec {
|
|||
enable = mkOption {
|
||||
default = true;
|
||||
type = types.bool;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
If set to false, this unit will be a symlink to
|
||||
/dev/null. This is primarily useful to prevent specific
|
||||
template instances
|
||||
|
@ -69,7 +68,7 @@ in rec {
|
|||
overrideStrategy = mkOption {
|
||||
default = "asDropinIfExists";
|
||||
type = types.enum [ "asDropinIfExists" "asDropin" ];
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Defines how unit configuration is provided for systemd:
|
||||
|
||||
`asDropinIfExists` creates a unit file when no unit file is provided by the package
|
||||
|
@ -85,7 +84,7 @@ in rec {
|
|||
requiredBy = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Units that require (i.e. depend on and need to go down with) this unit.
|
||||
As discussed in the `wantedBy` option description this also creates
|
||||
`.requires` symlinks automatically.
|
||||
|
@ -95,7 +94,7 @@ in rec {
|
|||
upheldBy = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Keep this unit running as long as the listed units are running. This is a continuously
|
||||
enforced version of wantedBy.
|
||||
'';
|
||||
|
@ -104,7 +103,7 @@ in rec {
|
|||
wantedBy = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Units that want (i.e. depend on) this unit. The default method for
|
||||
starting a unit by default at boot time is to set this option to
|
||||
`["multi-user.target"]` for system services. Likewise for user units
|
||||
|
@ -122,7 +121,7 @@ in rec {
|
|||
aliases = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc "Aliases of that unit.";
|
||||
description = "Aliases of that unit.";
|
||||
};
|
||||
|
||||
};
|
||||
|
@ -132,12 +131,12 @@ in rec {
|
|||
text = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = mdDoc "Text of this systemd unit.";
|
||||
description = "Text of this systemd unit.";
|
||||
};
|
||||
|
||||
unit = mkOption {
|
||||
internal = true;
|
||||
description = mdDoc "The generated unit.";
|
||||
description = "The generated unit.";
|
||||
};
|
||||
|
||||
};
|
||||
|
@ -148,19 +147,19 @@ in rec {
|
|||
description = mkOption {
|
||||
default = "";
|
||||
type = types.singleLineStr;
|
||||
description = mdDoc "Description of this unit used in systemd messages and progress indicators.";
|
||||
description = "Description of this unit used in systemd messages and progress indicators.";
|
||||
};
|
||||
|
||||
documentation = mkOption {
|
||||
default = [];
|
||||
type = types.listOf types.str;
|
||||
description = mdDoc "A list of URIs referencing documentation for this unit or its configuration.";
|
||||
description = "A list of URIs referencing documentation for this unit or its configuration.";
|
||||
};
|
||||
|
||||
requires = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Start the specified units when this unit is started, and stop
|
||||
this unit when the specified units are stopped or fail.
|
||||
'';
|
||||
|
@ -169,7 +168,7 @@ in rec {
|
|||
wants = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Start the specified units when this unit is started.
|
||||
'';
|
||||
};
|
||||
|
@ -177,7 +176,7 @@ in rec {
|
|||
upholds = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Keeps the specified running while this unit is running. A continuous version of `wants`.
|
||||
'';
|
||||
};
|
||||
|
@ -185,7 +184,7 @@ in rec {
|
|||
after = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
If the specified units are started at the same time as
|
||||
this unit, delay this unit until they have started.
|
||||
'';
|
||||
|
@ -194,7 +193,7 @@ in rec {
|
|||
before = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
If the specified units are started at the same time as
|
||||
this unit, delay them until this unit has started.
|
||||
'';
|
||||
|
@ -203,7 +202,7 @@ in rec {
|
|||
bindsTo = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Like ‘requires’, but in addition, if the specified units
|
||||
unexpectedly disappear, this unit will be stopped as well.
|
||||
'';
|
||||
|
@ -212,7 +211,7 @@ in rec {
|
|||
partOf = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
If the specified units are stopped or restarted, then this
|
||||
unit is stopped or restarted as well.
|
||||
'';
|
||||
|
@ -221,7 +220,7 @@ in rec {
|
|||
conflicts = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
If the specified units are started, then this unit is stopped
|
||||
and vice versa.
|
||||
'';
|
||||
|
@ -230,7 +229,7 @@ in rec {
|
|||
requisite = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Similar to requires. However if the units listed are not started,
|
||||
they will not be started and the transaction will fail.
|
||||
'';
|
||||
|
@ -240,7 +239,7 @@ in rec {
|
|||
default = {};
|
||||
example = { RequiresMountsFor = "/data"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Unit]` section of the unit. See
|
||||
{manpage}`systemd.unit(5)` for details.
|
||||
|
@ -250,7 +249,7 @@ in rec {
|
|||
onFailure = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
A list of one or more units that are activated when
|
||||
this unit enters the "failed" state.
|
||||
'';
|
||||
|
@ -259,7 +258,7 @@ in rec {
|
|||
onSuccess = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
A list of one or more units that are activated when
|
||||
this unit enters the "inactive" state.
|
||||
'';
|
||||
|
@ -267,7 +266,7 @@ in rec {
|
|||
|
||||
startLimitBurst = mkOption {
|
||||
type = types.int;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Configure unit start rate limiting. Units which are started
|
||||
more than startLimitBurst times within an interval time
|
||||
interval are not permitted to start any more.
|
||||
|
@ -276,7 +275,7 @@ in rec {
|
|||
|
||||
startLimitIntervalSec = mkOption {
|
||||
type = types.int;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Configure unit start rate limiting. Units which are started
|
||||
more than startLimitBurst times within an interval time
|
||||
interval are not permitted to start any more.
|
||||
|
@ -295,7 +294,7 @@ in rec {
|
|||
restartTriggers = mkOption {
|
||||
default = [];
|
||||
type = types.listOf types.unspecified;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
An arbitrary list of items such as derivations. If any item
|
||||
in the list changes between reconfigurations, the service will
|
||||
be restarted.
|
||||
|
@ -305,7 +304,7 @@ in rec {
|
|||
reloadTriggers = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitOption;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
An arbitrary list of items such as derivations. If any item
|
||||
in the list changes between reconfigurations, the service will
|
||||
be reloaded. If anything but a reload trigger changes in the
|
||||
|
@ -323,13 +322,13 @@ in rec {
|
|||
default = {};
|
||||
type = with types; attrsOf (nullOr (oneOf [ str path package ]));
|
||||
example = { PATH = "/foo/bar/bin"; LANG = "nl_NL.UTF-8"; };
|
||||
description = mdDoc "Environment variables passed to the service's processes.";
|
||||
description = "Environment variables passed to the service's processes.";
|
||||
};
|
||||
|
||||
path = mkOption {
|
||||
default = [];
|
||||
type = with types; listOf (oneOf [ package str ]);
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Packages added to the service's {env}`PATH`
|
||||
environment variable. Both the {file}`bin`
|
||||
and {file}`sbin` subdirectories of each
|
||||
|
@ -343,7 +342,7 @@ in rec {
|
|||
{ RestartSec = 5;
|
||||
};
|
||||
type = types.addCheck (types.attrsOf unitOption) checkService;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Service]` section of the unit. See
|
||||
{manpage}`systemd.service(5)` for details.
|
||||
|
@ -353,14 +352,14 @@ in rec {
|
|||
script = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = mdDoc "Shell commands executed as the service's main process.";
|
||||
description = "Shell commands executed as the service's main process.";
|
||||
};
|
||||
|
||||
scriptArgs = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
example = "%i";
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Arguments passed to the main process script.
|
||||
Can contain specifiers (`%` placeholders expanded by systemd, see {manpage}`systemd.unit(5)`).
|
||||
'';
|
||||
|
@ -369,7 +368,7 @@ in rec {
|
|||
preStart = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Shell commands executed before the service's main process
|
||||
is started.
|
||||
'';
|
||||
|
@ -378,7 +377,7 @@ in rec {
|
|||
postStart = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Shell commands executed after the service's main process
|
||||
is started.
|
||||
'';
|
||||
|
@ -387,7 +386,7 @@ in rec {
|
|||
reload = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Shell commands executed when the service's main process
|
||||
is reloaded.
|
||||
'';
|
||||
|
@ -396,7 +395,7 @@ in rec {
|
|||
preStop = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Shell commands executed to stop the service.
|
||||
'';
|
||||
};
|
||||
|
@ -404,7 +403,7 @@ in rec {
|
|||
postStop = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Shell commands executed after the service's main process
|
||||
has exited.
|
||||
'';
|
||||
|
@ -413,7 +412,7 @@ in rec {
|
|||
jobScripts = mkOption {
|
||||
type = with types; coercedTo path singleton (listOf path);
|
||||
internal = true;
|
||||
description = mdDoc "A list of all job script derivations of this unit.";
|
||||
description = "A list of all job script derivations of this unit.";
|
||||
default = [];
|
||||
};
|
||||
|
||||
|
@ -458,7 +457,7 @@ in rec {
|
|||
restartIfChanged = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Whether the service should be restarted during a NixOS
|
||||
configuration switch if its definition has changed.
|
||||
'';
|
||||
|
@ -467,7 +466,7 @@ in rec {
|
|||
reloadIfChanged = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Whether the service should be reloaded during a NixOS
|
||||
configuration switch if its definition has changed. If
|
||||
enabled, the value of {option}`restartIfChanged` is
|
||||
|
@ -483,7 +482,7 @@ in rec {
|
|||
stopIfChanged = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
If set, a changed unit is restarted by calling
|
||||
{command}`systemctl stop` in the old configuration,
|
||||
then {command}`systemctl start` in the new one.
|
||||
|
@ -499,7 +498,7 @@ in rec {
|
|||
type = with types; either str (listOf str);
|
||||
default = [];
|
||||
example = "Sun 14:00:00";
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Automatically start this unit at the given date/time, which
|
||||
must be in the format described in
|
||||
{manpage}`systemd.time(7)`. This is equivalent
|
||||
|
@ -526,7 +525,7 @@ in rec {
|
|||
default = [];
|
||||
type = types.listOf types.str;
|
||||
example = [ "0.0.0.0:993" "/run/my-socket" ];
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
For each item in this list, a `ListenStream`
|
||||
option in the `[Socket]` section will be created.
|
||||
'';
|
||||
|
@ -536,7 +535,7 @@ in rec {
|
|||
default = [];
|
||||
type = types.listOf types.str;
|
||||
example = [ "0.0.0.0:993" "/run/my-socket" ];
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
For each item in this list, a `ListenDatagram`
|
||||
option in the `[Socket]` section will be created.
|
||||
'';
|
||||
|
@ -546,7 +545,7 @@ in rec {
|
|||
default = {};
|
||||
example = { ListenStream = "/run/my-socket"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Socket]` section of the unit. See
|
||||
{manpage}`systemd.socket(5)` for details.
|
||||
|
@ -578,7 +577,7 @@ in rec {
|
|||
default = {};
|
||||
example = { OnCalendar = "Sun 14:00:00"; Unit = "foo.service"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Timer]` section of the unit. See
|
||||
{manpage}`systemd.timer(5)` and
|
||||
|
@ -611,7 +610,7 @@ in rec {
|
|||
default = {};
|
||||
example = { PathChanged = "/some/path"; Unit = "changedpath.service"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Path]` section of the unit. See
|
||||
{manpage}`systemd.path(5)` for details.
|
||||
|
@ -642,13 +641,13 @@ in rec {
|
|||
what = mkOption {
|
||||
example = "/dev/sda1";
|
||||
type = types.str;
|
||||
description = mdDoc "Absolute path of device node, file or other resource. (Mandatory)";
|
||||
description = "Absolute path of device node, file or other resource. (Mandatory)";
|
||||
};
|
||||
|
||||
where = mkOption {
|
||||
example = "/mnt";
|
||||
type = types.str;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Absolute path of a directory of the mount point.
|
||||
Will be created if it doesn't exist. (Mandatory)
|
||||
'';
|
||||
|
@ -658,21 +657,21 @@ in rec {
|
|||
default = "";
|
||||
example = "ext4";
|
||||
type = types.str;
|
||||
description = mdDoc "File system type.";
|
||||
description = "File system type.";
|
||||
};
|
||||
|
||||
options = mkOption {
|
||||
default = "";
|
||||
example = "noatime";
|
||||
type = types.commas;
|
||||
description = mdDoc "Options used to mount the file system.";
|
||||
description = "Options used to mount the file system.";
|
||||
};
|
||||
|
||||
mountConfig = mkOption {
|
||||
default = {};
|
||||
example = { DirectoryMode = "0775"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Mount]` section of the unit. See
|
||||
{manpage}`systemd.mount(5)` for details.
|
||||
|
@ -702,7 +701,7 @@ in rec {
|
|||
where = mkOption {
|
||||
example = "/mnt";
|
||||
type = types.str;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Absolute path of a directory of the mount point.
|
||||
Will be created if it doesn't exist. (Mandatory)
|
||||
'';
|
||||
|
@ -712,7 +711,7 @@ in rec {
|
|||
default = {};
|
||||
example = { DirectoryMode = "0775"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Automount]` section of the unit. See
|
||||
{manpage}`systemd.automount(5)` for details.
|
||||
|
@ -743,7 +742,7 @@ in rec {
|
|||
default = {};
|
||||
example = { MemoryMax = "2G"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Slice]` section of the unit. See
|
||||
{manpage}`systemd.slice(5)` for details.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{ config, lib, hostPkgs, ... }:
|
||||
let
|
||||
inherit (lib) mkOption types literalMD mdDoc;
|
||||
inherit (lib) mkOption types literalMD;
|
||||
|
||||
# Reifies and correctly wraps the python test driver for
|
||||
# the respective qemu version and with or without ocr support
|
||||
|
@ -104,13 +104,13 @@ in
|
|||
options = {
|
||||
|
||||
driver = mkOption {
|
||||
description = mdDoc "Package containing a script that runs the test.";
|
||||
description = "Package containing a script that runs the test.";
|
||||
type = types.package;
|
||||
defaultText = literalMD "set by the test framework";
|
||||
};
|
||||
|
||||
hostPkgs = mkOption {
|
||||
description = mdDoc "Nixpkgs attrset used outside the nodes.";
|
||||
description = "Nixpkgs attrset used outside the nodes.";
|
||||
type = types.raw;
|
||||
example = lib.literalExpression ''
|
||||
import nixpkgs { inherit system config overlays; }
|
||||
|
@ -118,14 +118,14 @@ in
|
|||
};
|
||||
|
||||
qemu.package = mkOption {
|
||||
description = mdDoc "Which qemu package to use for the virtualisation of [{option}`nodes`](#test-opt-nodes).";
|
||||
description = "Which qemu package to use for the virtualisation of [{option}`nodes`](#test-opt-nodes).";
|
||||
type = types.package;
|
||||
default = hostPkgs.qemu_test;
|
||||
defaultText = "hostPkgs.qemu_test";
|
||||
};
|
||||
|
||||
globalTimeout = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
A global timeout for the complete test, expressed in seconds.
|
||||
Beyond that timeout, every resource will be killed and released and the test will fail.
|
||||
|
||||
|
@ -137,7 +137,7 @@ in
|
|||
};
|
||||
|
||||
enableOCR = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Whether to enable Optical Character Recognition functionality for
|
||||
testing graphical programs. See [Machine objects](`ssec-machine-objects`).
|
||||
'';
|
||||
|
@ -146,7 +146,7 @@ in
|
|||
};
|
||||
|
||||
extraPythonPackages = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Python packages to add to the test driver.
|
||||
|
||||
The argument is a Python package set, similar to `pkgs.pythonPackages`.
|
||||
|
@ -159,7 +159,7 @@ in
|
|||
};
|
||||
|
||||
extraDriverArgs = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Extra arguments to pass to the test driver.
|
||||
|
||||
They become part of [{option}`driver`](#test-opt-driver) via `wrapProgram`.
|
||||
|
@ -171,7 +171,7 @@ in
|
|||
skipLint = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Do not run the linters. This may speed up your iteration cycle, but it is not something you should commit.
|
||||
'';
|
||||
};
|
||||
|
@ -179,7 +179,7 @@ in
|
|||
skipTypeCheck = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Disable type checking. This must not be enabled for new NixOS tests.
|
||||
|
||||
This may speed up your iteration cycle, unless you're working on the [{option}`testScript`](#test-opt-testScript).
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{ config, lib, moduleType, hostPkgs, ... }:
|
||||
let
|
||||
inherit (lib) mkOption types mdDoc;
|
||||
inherit (lib) mkOption types;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
interactive = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Tests [can be run interactively](#sec-running-nixos-tests-interactively)
|
||||
using the program in the test derivation's `.driverInteractive` attribute.
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{ lib, ... }:
|
||||
let
|
||||
inherit (lib) types mkOption mdDoc;
|
||||
inherit (lib) types mkOption;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
meta = lib.mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
The [`meta`](https://nixos.org/manual/nixpkgs/stable/#chap-meta) attributes that will be set on the returned derivations.
|
||||
|
||||
Not all [`meta`](https://nixos.org/manual/nixpkgs/stable/#chap-meta) attributes are supported, but more can be added as desired.
|
||||
|
@ -16,21 +16,21 @@ in
|
|||
maintainers = lib.mkOption {
|
||||
type = types.listOf types.raw;
|
||||
default = [];
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
The [list of maintainers](https://nixos.org/manual/nixpkgs/stable/#var-meta-maintainers) for this test.
|
||||
'';
|
||||
};
|
||||
timeout = lib.mkOption {
|
||||
type = types.nullOr types.int;
|
||||
default = 3600; # 1 hour
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
The [{option}`test`](#test-opt-test)'s [`meta.timeout`](https://nixos.org/manual/nixpkgs/stable/#var-meta-timeout) in seconds.
|
||||
'';
|
||||
};
|
||||
broken = lib.mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Sets the [`meta.broken`](https://nixos.org/manual/nixpkgs/stable/#var-meta-broken) attribute on the [{option}`test`](#test-opt-test) derivation.
|
||||
'';
|
||||
};
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
{ lib, ... }:
|
||||
let
|
||||
inherit (lib) mkOption types mdDoc;
|
||||
inherit (lib) mkOption types;
|
||||
in
|
||||
{
|
||||
options.name = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
The name of the test.
|
||||
|
||||
This is used in the derivation names of the [{option}`driver`](#test-opt-driver) and [{option}`test`](#test-opt-test) runner.
|
||||
|
|
|
@ -5,7 +5,6 @@ let
|
|||
attrNames concatMap concatMapStrings flip forEach head
|
||||
listToAttrs mkDefault mkOption nameValuePair optionalString
|
||||
range toLower types zipListsWith zipLists
|
||||
mdDoc
|
||||
;
|
||||
|
||||
nodeNumbers =
|
||||
|
@ -89,7 +88,7 @@ let
|
|||
default = name;
|
||||
# We need to force this in specilisations, otherwise it'd be
|
||||
# readOnly = true;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
The `name` in `nodes.<name>`; stable across `specialisations`.
|
||||
'';
|
||||
};
|
||||
|
@ -98,7 +97,7 @@ let
|
|||
type = types.int;
|
||||
readOnly = true;
|
||||
default = nodeNumbers.${config.virtualisation.test.nodeName};
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
A unique number assigned for each node in `nodes`.
|
||||
'';
|
||||
};
|
||||
|
|
|
@ -5,7 +5,6 @@ let
|
|||
literalExpression
|
||||
literalMD
|
||||
mapAttrs
|
||||
mdDoc
|
||||
mkDefault
|
||||
mkIf
|
||||
mkOption mkForce
|
||||
|
@ -76,7 +75,7 @@ in
|
|||
nodes = mkOption {
|
||||
type = types.lazyAttrsOf config.node.type;
|
||||
visible = "shallow";
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
An attribute set of NixOS configuration modules.
|
||||
|
||||
The configurations are augmented by the [`defaults`](#test-opt-defaults) option.
|
||||
|
@ -88,7 +87,7 @@ in
|
|||
};
|
||||
|
||||
defaults = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
NixOS configuration that is applied to all [{option}`nodes`](#test-opt-nodes).
|
||||
'';
|
||||
type = types.deferredModule;
|
||||
|
@ -96,7 +95,7 @@ in
|
|||
};
|
||||
|
||||
extraBaseModules = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
NixOS configuration that, like [{option}`defaults`](#test-opt-defaults), is applied to all [{option}`nodes`](#test-opt-nodes) and can not be undone with [`specialisation.<name>.inheritParentConfig`](https://search.nixos.org/options?show=specialisation.%3Cname%3E.inheritParentConfig&from=0&size=50&sort=relevance&type=packages&query=specialisation).
|
||||
'';
|
||||
type = types.deferredModule;
|
||||
|
@ -104,7 +103,7 @@ in
|
|||
};
|
||||
|
||||
node.pkgs = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
The Nixpkgs to use for the nodes.
|
||||
|
||||
Setting this will make the `nixpkgs.*` options read-only, to avoid mistakenly testing with a Nixpkgs configuration that diverges from regular use.
|
||||
|
@ -117,7 +116,7 @@ in
|
|||
};
|
||||
|
||||
node.pkgsReadOnly = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Whether to make the `nixpkgs.*` options read-only. This is only relevant when [`node.pkgs`](#test-opt-node.pkgs) is set.
|
||||
|
||||
Set this to `false` when any of the [`nodes`](#test-opt-nodes) needs to configure any of the `nixpkgs.*` options. This will slow down evaluation of your test a bit.
|
||||
|
@ -130,7 +129,7 @@ in
|
|||
node.specialArgs = mkOption {
|
||||
type = types.lazyAttrsOf types.raw;
|
||||
default = { };
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
An attribute set of arbitrary values that will be made available as module arguments during the resolution of module `imports`.
|
||||
|
||||
Note that it is not possible to override these from within the NixOS configurations. If you argument is not relevant to `imports`, consider setting {option}`defaults._module.args.<name>` instead.
|
||||
|
@ -139,7 +138,7 @@ in
|
|||
|
||||
nodesCompat = mkOption {
|
||||
internal = true;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Basically `_module.args.nodes`, but with backcompat and warnings added.
|
||||
|
||||
This will go away.
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{ config, hostPkgs, lib, ... }:
|
||||
let
|
||||
inherit (lib) types mkOption mdDoc;
|
||||
inherit (lib) types mkOption;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
passthru = mkOption {
|
||||
type = types.lazyAttrsOf types.raw;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Attributes to add to the returned derivations,
|
||||
which are not necessarily part of the build.
|
||||
|
||||
|
@ -18,7 +18,7 @@ in
|
|||
|
||||
rawTestDerivation = mkOption {
|
||||
type = types.package;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Unfiltered version of `test`, for troubleshooting the test framework and `testBuildFailure` in the test framework's test suite.
|
||||
This is not intended for general use. Use `test` instead.
|
||||
'';
|
||||
|
@ -28,7 +28,7 @@ in
|
|||
test = mkOption {
|
||||
type = types.package;
|
||||
# TODO: can the interactive driver be configured to access the network?
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Derivation that runs the test as its "build" process.
|
||||
|
||||
This implies that NixOS tests run isolated from the network, making them
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
testModuleArgs@{ config, lib, hostPkgs, nodes, moduleType, ... }:
|
||||
let
|
||||
inherit (lib) mkOption types mdDoc;
|
||||
inherit (lib) mkOption types;
|
||||
inherit (types) either str functionTo;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
testScript = mkOption {
|
||||
type = either str (functionTo str);
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
A series of python declarations and statements that you write to perform
|
||||
the test.
|
||||
'';
|
||||
|
@ -25,7 +25,7 @@ in
|
|||
};
|
||||
withoutTestScriptReferences = mkOption {
|
||||
type = moduleType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
A parallel universe where the testScript is invalid and has no references.
|
||||
'';
|
||||
internal = true;
|
||||
|
|
|
@ -342,7 +342,6 @@
|
|||
./services/amqp/rabbitmq.nix
|
||||
./services/audio/alsa.nix
|
||||
./services/audio/botamusique.nix
|
||||
./services/audio/castopod.nix
|
||||
./services/audio/gmediarender.nix
|
||||
./services/audio/gonic.nix
|
||||
./services/audio/goxlr-utility.nix
|
||||
|
@ -1303,6 +1302,7 @@
|
|||
./services/web-apps/bookstack.nix
|
||||
./services/web-apps/c2fmzq-server.nix
|
||||
./services/web-apps/calibre-web.nix
|
||||
./services/web-apps/castopod.nix
|
||||
./services/web-apps/coder.nix
|
||||
./services/web-apps/changedetection-io.nix
|
||||
./services/web-apps/chatgpt-retrieval-plugin.nix
|
||||
|
|
|
@ -118,7 +118,7 @@ are already created.
|
|||
before = "service1.service";
|
||||
after = "postgresql.service";
|
||||
serviceConfig.User = "postgres";
|
||||
environment.PSQL = "psql --port=${toString services.postgresql.port}";
|
||||
environment.PSQL = "psql --port=${toString services.postgresql.settings.port}";
|
||||
path = [ postgresql ];
|
||||
script = ''
|
||||
$PSQL service1 -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
|
||||
|
@ -139,7 +139,7 @@ are already created.
|
|||
|
||||
```nix
|
||||
{
|
||||
environment.PSQL = "psql --port=${toString services.postgresql.port}";
|
||||
environment.PSQL = "psql --port=${toString services.postgresql.settings.port}";
|
||||
path = [ postgresql ];
|
||||
systemd.services."service1".preStart = ''
|
||||
$PSQL -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
|
||||
|
@ -159,7 +159,7 @@ are already created.
|
|||
before = "service1.service";
|
||||
after = "postgresql.service";
|
||||
serviceConfig.User = "service1";
|
||||
environment.PSQL = "psql --port=${toString services.postgresql.port}";
|
||||
environment.PSQL = "psql --port=${toString services.postgresql.settings.port}";
|
||||
path = [ postgresql ];
|
||||
script = ''
|
||||
$PSQL -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
|
||||
|
|
|
@ -27,7 +27,7 @@ let
|
|||
else toString value;
|
||||
|
||||
# The main PostgreSQL configuration file.
|
||||
configFile = pkgs.writeTextDir "postgresql.conf" (concatStringsSep "\n" (mapAttrsToList (n: v: "${n} = ${toStr v}") cfg.settings));
|
||||
configFile = pkgs.writeTextDir "postgresql.conf" (concatStringsSep "\n" (mapAttrsToList (n: v: "${n} = ${toStr v}") (filterAttrs (const (x: x != null)) cfg.settings)));
|
||||
|
||||
configFileCheck = pkgs.runCommand "postgresql-configfile-check" {} ''
|
||||
${cfg.package}/bin/postgres -D${configFile} -C config_file >/dev/null
|
||||
|
@ -41,6 +41,9 @@ in
|
|||
{
|
||||
imports = [
|
||||
(mkRemovedOptionModule [ "services" "postgresql" "extraConfig" ] "Use services.postgresql.settings instead.")
|
||||
|
||||
(mkRenamedOptionModule [ "services" "postgresql" "logLinePrefix" ] [ "services" "postgresql" "settings" "log_line_prefix" ])
|
||||
(mkRenamedOptionModule [ "services" "postgresql" "port" ] [ "services" "postgresql" "settings" "port" ])
|
||||
];
|
||||
|
||||
###### interface
|
||||
|
@ -57,14 +60,6 @@ in
|
|||
example = "postgresql_15";
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5432;
|
||||
description = lib.mdDoc ''
|
||||
The port on which PostgreSQL listens.
|
||||
'';
|
||||
};
|
||||
|
||||
checkConfig = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
|
@ -352,17 +347,6 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
logLinePrefix = mkOption {
|
||||
type = types.str;
|
||||
default = "[%p] ";
|
||||
example = "%m [%p] ";
|
||||
description = lib.mdDoc ''
|
||||
A printf-style string that is output at the beginning of each log line.
|
||||
Upstream default is `'%m [%p] '`, i.e. it includes the timestamp. We do
|
||||
not include the timestamp, because journal has it anyway.
|
||||
'';
|
||||
};
|
||||
|
||||
extraPlugins = mkOption {
|
||||
type = with types; coercedTo (listOf path) (path: _ignorePg: path) (functionTo (listOf path));
|
||||
default = _: [];
|
||||
|
@ -373,7 +357,38 @@ in
|
|||
};
|
||||
|
||||
settings = mkOption {
|
||||
type = with types; attrsOf (oneOf [ bool float int str ]);
|
||||
type = with types; submodule {
|
||||
freeformType = attrsOf (oneOf [ bool float int str ]);
|
||||
options = {
|
||||
shared_preload_libraries = mkOption {
|
||||
type = nullOr (coercedTo (listOf str) (concatStringsSep ", ") str);
|
||||
default = null;
|
||||
example = literalExpression ''[ "auto_explain" "anon" ]'';
|
||||
description = mdDoc ''
|
||||
List of libraries to be preloaded.
|
||||
'';
|
||||
};
|
||||
|
||||
log_line_prefix = mkOption {
|
||||
type = types.str;
|
||||
default = "[%p] ";
|
||||
example = "%m [%p] ";
|
||||
description = lib.mdDoc ''
|
||||
A printf-style string that is output at the beginning of each log line.
|
||||
Upstream default is `'%m [%p] '`, i.e. it includes the timestamp. We do
|
||||
not include the timestamp, because journal has it anyway.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5432;
|
||||
description = lib.mdDoc ''
|
||||
The port on which PostgreSQL listens.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
default = {};
|
||||
description = lib.mdDoc ''
|
||||
PostgreSQL configuration. Refer to
|
||||
|
@ -439,9 +454,7 @@ in
|
|||
hba_file = "${pkgs.writeText "pg_hba.conf" cfg.authentication}";
|
||||
ident_file = "${pkgs.writeText "pg_ident.conf" cfg.identMap}";
|
||||
log_destination = "stderr";
|
||||
log_line_prefix = cfg.logLinePrefix;
|
||||
listen_addresses = if cfg.enableTCPIP then "*" else "localhost";
|
||||
port = cfg.port;
|
||||
jit = mkDefault (if cfg.enableJIT then "on" else "off");
|
||||
};
|
||||
|
||||
|
@ -524,7 +537,7 @@ in
|
|||
# Wait for PostgreSQL to be ready to accept connections.
|
||||
postStart =
|
||||
''
|
||||
PSQL="psql --port=${toString cfg.port}"
|
||||
PSQL="psql --port=${toString cfg.settings.port}"
|
||||
|
||||
while ! $PSQL -d postgres -c "" 2> /dev/null; do
|
||||
if ! kill -0 "$MAINPID"; then exit 1; fi
|
||||
|
|
|
@ -114,11 +114,11 @@ in
|
|||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = if !usePostgresql then 3306 else pg.port;
|
||||
default = if usePostgresql then pg.settings.port else 3306;
|
||||
defaultText = literalExpression ''
|
||||
if config.${opt.database.type} != "postgresql"
|
||||
then 3306
|
||||
else config.${options.services.postgresql.port}
|
||||
else 5432
|
||||
'';
|
||||
description = mdDoc "Database host port.";
|
||||
};
|
||||
|
|
|
@ -100,11 +100,11 @@ in
|
|||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = if !usePostgresql then 3306 else pg.port;
|
||||
default = if usePostgresql then pg.settings.port else 3306;
|
||||
defaultText = literalExpression ''
|
||||
if config.${opt.database.type} != "postgresql"
|
||||
then 3306
|
||||
else config.${options.services.postgresql.port}
|
||||
else 5432
|
||||
'';
|
||||
description = lib.mdDoc "Database host port.";
|
||||
};
|
||||
|
|
|
@ -20,7 +20,7 @@ in {
|
|||
extraFlags = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
description = "Extra flags passed to llama-cpp-server.";
|
||||
example = ["-c" "4096" "-ngl" "32" "--numa"];
|
||||
example = ["-c" "4096" "-ngl" "32" "--numa" "numactl"];
|
||||
default = [];
|
||||
};
|
||||
|
||||
|
|
|
@ -10,16 +10,22 @@ let
|
|||
format = pkgs.formats.yaml {};
|
||||
bundle = "${cfg.package}/share/redmine/bin/bundle";
|
||||
|
||||
databaseYml = pkgs.writeText "database.yml" ''
|
||||
production:
|
||||
adapter: ${cfg.database.type}
|
||||
database: ${cfg.database.name}
|
||||
host: ${if (cfg.database.type == "postgresql" && cfg.database.socket != null) then cfg.database.socket else cfg.database.host}
|
||||
port: ${toString cfg.database.port}
|
||||
username: ${cfg.database.user}
|
||||
password: #dbpass#
|
||||
${optionalString (cfg.database.type == "mysql2" && cfg.database.socket != null) "socket: ${cfg.database.socket}"}
|
||||
'';
|
||||
databaseSettings = {
|
||||
production = {
|
||||
adapter = cfg.database.type;
|
||||
database = if cfg.database.type == "sqlite3" then "${cfg.stateDir}/database.sqlite3" else cfg.database.name;
|
||||
} // optionalAttrs (cfg.database.type != "sqlite3") {
|
||||
host = if (cfg.database.type == "postgresql" && cfg.database.socket != null) then cfg.database.socket else cfg.database.host;
|
||||
port = cfg.database.port;
|
||||
username = cfg.database.user;
|
||||
} // optionalAttrs (cfg.database.type != "sqlite3" && cfg.database.passwordFile != null) {
|
||||
password = "#dbpass#";
|
||||
} // optionalAttrs (cfg.database.type == "mysql2" && cfg.database.socket != null) {
|
||||
socket = cfg.database.socket;
|
||||
};
|
||||
};
|
||||
|
||||
databaseYml = format.generate "database.yml" databaseSettings;
|
||||
|
||||
configurationYml = format.generate "configuration.yml" cfg.settings;
|
||||
additionalEnvironment = pkgs.writeText "additional_environment.rb" cfg.extraEnv;
|
||||
|
@ -145,7 +151,7 @@ in
|
|||
|
||||
database = {
|
||||
type = mkOption {
|
||||
type = types.enum [ "mysql2" "postgresql" ];
|
||||
type = types.enum [ "mysql2" "postgresql" "sqlite3" ];
|
||||
example = "postgresql";
|
||||
default = "mysql2";
|
||||
description = lib.mdDoc "Database engine to use.";
|
||||
|
@ -261,7 +267,7 @@ in
|
|||
config = mkIf cfg.enable {
|
||||
|
||||
assertions = [
|
||||
{ assertion = cfg.database.passwordFile != null || cfg.database.socket != null;
|
||||
{ assertion = cfg.database.type != "sqlite3" -> cfg.database.passwordFile != null || cfg.database.socket != null;
|
||||
message = "one of services.redmine.database.socket or services.redmine.database.passwordFile must be set";
|
||||
}
|
||||
{ assertion = cfg.database.createLocally -> cfg.database.user == cfg.user;
|
||||
|
@ -270,7 +276,7 @@ in
|
|||
{ assertion = pgsqlLocal -> cfg.database.user == cfg.database.name;
|
||||
message = "services.redmine.database.user and services.redmine.database.name must be the same when using a local postgresql database";
|
||||
}
|
||||
{ assertion = cfg.database.createLocally -> cfg.database.socket != null;
|
||||
{ assertion = cfg.database.createLocally -> cfg.database.type != "sqlite3" && cfg.database.socket != null;
|
||||
message = "services.redmine.database.socket must be set if services.redmine.database.createLocally is set to true";
|
||||
}
|
||||
{ assertion = cfg.database.createLocally -> cfg.database.host == "localhost";
|
||||
|
@ -395,9 +401,13 @@ in
|
|||
|
||||
|
||||
# handle database.passwordFile & permissions
|
||||
DBPASS=${optionalString (cfg.database.passwordFile != null) "$(head -n1 ${cfg.database.passwordFile})"}
|
||||
cp -f ${databaseYml} "${cfg.stateDir}/config/database.yml"
|
||||
sed -e "s,#dbpass#,$DBPASS,g" -i "${cfg.stateDir}/config/database.yml"
|
||||
|
||||
${optionalString ((cfg.database.type != "sqlite3") && (cfg.database.passwordFile != null)) ''
|
||||
DBPASS="$(head -n1 ${cfg.database.passwordFile})"
|
||||
sed -e "s,#dbpass#,$DBPASS,g" -i "${cfg.stateDir}/config/database.yml"
|
||||
''}
|
||||
|
||||
chmod 440 "${cfg.stateDir}/config/database.yml"
|
||||
|
||||
|
||||
|
|
|
@ -103,11 +103,11 @@ in
|
|||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = if cfg.database.type == "mysql" then mysql.port else pgsql.port;
|
||||
default = if cfg.database.type == "mysql" then mysql.port else pgsql.services.port;
|
||||
defaultText = literalExpression ''
|
||||
if config.${opt.database.type} == "mysql"
|
||||
then config.${options.services.mysql.port}
|
||||
else config.${options.services.postgresql.port}
|
||||
else config.services.postgresql.settings.port
|
||||
'';
|
||||
description = lib.mdDoc "Database host port.";
|
||||
};
|
||||
|
|
|
@ -95,11 +95,11 @@ in
|
|||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = if cfg.database.type == "mysql" then mysql.port else pgsql.port;
|
||||
default = if cfg.database.type == "mysql" then mysql.port else pgsql.settings.port;
|
||||
defaultText = literalExpression ''
|
||||
if config.${opt.database.type} == "mysql"
|
||||
then config.${options.services.mysql.port}
|
||||
else config.${options.services.postgresql.port}
|
||||
else config.services.postgresql.settings.port
|
||||
'';
|
||||
description = lib.mdDoc "Database host port.";
|
||||
};
|
||||
|
|
|
@ -4,6 +4,7 @@ Castopod is an open-source hosting platform made for podcasters who want to enga
|
|||
|
||||
## Quickstart {#module-services-castopod-quickstart}
|
||||
|
||||
Configure ACME (https://nixos.org/manual/nixos/unstable/#module-security-acme).
|
||||
Use the following configuration to start a public instance of Castopod on `castopod.example.com` domain:
|
||||
|
||||
```nix
|
|
@ -4,7 +4,6 @@ let
|
|||
fpm = config.services.phpfpm.pools.castopod;
|
||||
|
||||
user = "castopod";
|
||||
stateDirectory = "/var/lib/castopod";
|
||||
|
||||
# https://docs.castopod.org/getting-started/install.html#requirements
|
||||
phpPackage = pkgs.php.withExtensions ({ enabled, all }: with all; [
|
||||
|
@ -29,6 +28,15 @@ in
|
|||
defaultText = lib.literalMD "pkgs.castopod";
|
||||
description = lib.mdDoc "Which Castopod package to use.";
|
||||
};
|
||||
dataDir = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
default = "/var/lib/castopod";
|
||||
description = lib.mdDoc ''
|
||||
The path where castopod stores all data. This path must be in sync
|
||||
with the castopod package (where it is hardcoded during the build in
|
||||
accordance with its own `dataDir` argument).
|
||||
'';
|
||||
};
|
||||
database = {
|
||||
createLocally = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
|
@ -59,6 +67,8 @@ in
|
|||
description = lib.mdDoc ''
|
||||
A file containing the password corresponding to
|
||||
[](#opt-services.castopod.database.user).
|
||||
|
||||
This file is loaded using systemd LoadCredentials.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
@ -85,6 +95,8 @@ in
|
|||
Environment file to inject e.g. secrets into the configuration.
|
||||
See [](https://code.castopod.org/adaures/castopod/-/blob/main/.env.example)
|
||||
for available environment variables.
|
||||
|
||||
This file is loaded using systemd LoadCredentials.
|
||||
'';
|
||||
};
|
||||
configureNginx = lib.mkOption {
|
||||
|
@ -111,6 +123,19 @@ in
|
|||
Options for Castopod's PHP pool. See the documentation on `php-fpm.conf` for details on configuration directives.
|
||||
'';
|
||||
};
|
||||
maxUploadSize = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "512M";
|
||||
description = lib.mdDoc ''
|
||||
Maximum supported size for a file upload in. Maximum HTTP body
|
||||
size is set to this value for nginx and PHP (because castopod doesn't
|
||||
support chunked uploads yet:
|
||||
https://code.castopod.org/adaures/castopod/-/issues/330).
|
||||
|
||||
Note, that practical upload size limit is smaller. For example, with
|
||||
512 MiB setting - around 500 MiB is possible.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -120,13 +145,13 @@ in
|
|||
sslEnabled = with config.services.nginx.virtualHosts.${cfg.localDomain}; addSSL || forceSSL || onlySSL || enableACME || useACMEHost != null;
|
||||
baseURL = "http${lib.optionalString sslEnabled "s"}://${cfg.localDomain}";
|
||||
in
|
||||
lib.mapAttrs (name: lib.mkDefault) {
|
||||
lib.mapAttrs (_: lib.mkDefault) {
|
||||
"app.forceGlobalSecureRequests" = sslEnabled;
|
||||
"app.baseURL" = baseURL;
|
||||
|
||||
"media.baseURL" = "/";
|
||||
"media.baseURL" = baseURL;
|
||||
"media.root" = "media";
|
||||
"media.storage" = stateDirectory;
|
||||
"media.storage" = cfg.dataDir;
|
||||
|
||||
"admin.gateway" = "admin";
|
||||
"auth.gateway" = "auth";
|
||||
|
@ -142,13 +167,13 @@ in
|
|||
services.phpfpm.pools.castopod = {
|
||||
inherit user;
|
||||
group = config.services.nginx.group;
|
||||
phpPackage = phpPackage;
|
||||
inherit phpPackage;
|
||||
phpOptions = ''
|
||||
# https://code.castopod.org/adaures/castopod/-/blob/main/docker/production/app/uploads.ini
|
||||
# https://code.castopod.org/adaures/castopod/-/blob/develop/docker/production/common/uploads.template.ini
|
||||
file_uploads = On
|
||||
memory_limit = 512M
|
||||
upload_max_filesize = 500M
|
||||
post_max_size = 512M
|
||||
upload_max_filesize = ${cfg.maxUploadSize}
|
||||
post_max_size = ${cfg.maxUploadSize}
|
||||
max_execution_time = 300
|
||||
max_input_time = 300
|
||||
'';
|
||||
|
@ -165,45 +190,50 @@ in
|
|||
path = [ pkgs.openssl phpPackage ];
|
||||
script =
|
||||
let
|
||||
envFile = "${stateDirectory}/.env";
|
||||
envFile = "${cfg.dataDir}/.env";
|
||||
media = "${cfg.settings."media.storage"}/${cfg.settings."media.root"}";
|
||||
in
|
||||
''
|
||||
mkdir -p ${stateDirectory}/writable/{cache,logs,session,temp,uploads}
|
||||
mkdir -p ${cfg.dataDir}/writable/{cache,logs,session,temp,uploads}
|
||||
|
||||
if [ ! -d ${lib.escapeShellArg media} ]; then
|
||||
cp --no-preserve=mode,ownership -r ${cfg.package}/share/castopod/public/media ${lib.escapeShellArg media}
|
||||
fi
|
||||
|
||||
if [ ! -f ${stateDirectory}/salt ]; then
|
||||
openssl rand -base64 33 > ${stateDirectory}/salt
|
||||
if [ ! -f ${cfg.dataDir}/salt ]; then
|
||||
openssl rand -base64 33 > ${cfg.dataDir}/salt
|
||||
fi
|
||||
|
||||
cat <<'EOF' > ${envFile}
|
||||
${lib.generators.toKeyValue { } cfg.settings}
|
||||
EOF
|
||||
|
||||
echo "analytics.salt=$(cat ${stateDirectory}/salt)" >> ${envFile}
|
||||
echo "analytics.salt=$(cat ${cfg.dataDir}/salt)" >> ${envFile}
|
||||
|
||||
${if (cfg.database.passwordFile != null) then ''
|
||||
echo "database.default.password=$(cat ${lib.escapeShellArg cfg.database.passwordFile})" >> ${envFile}
|
||||
echo "database.default.password=$(cat "$CREDENTIALS_DIRECTORY/dbpasswordfile)" >> ${envFile}
|
||||
'' else ''
|
||||
echo "database.default.password=" >> ${envFile}
|
||||
''}
|
||||
|
||||
${lib.optionalString (cfg.environmentFile != null) ''
|
||||
cat ${lib.escapeShellArg cfg.environmentFile}) >> ${envFile}
|
||||
cat "$CREDENTIALS_DIRECTORY/envfile" >> ${envFile}
|
||||
''}
|
||||
|
||||
php spark castopod:database-update
|
||||
php ${cfg.package}/share/castopod/spark castopod:database-update
|
||||
'';
|
||||
serviceConfig = {
|
||||
StateDirectory = "castopod";
|
||||
LoadCredential = lib.optional (cfg.environmentFile != null)
|
||||
"envfile:${cfg.environmentFile}"
|
||||
++ (lib.optional (cfg.database.passwordFile != null)
|
||||
"dbpasswordfile:${cfg.database.passwordFile}");
|
||||
WorkingDirectory = "${cfg.package}/share/castopod";
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
User = user;
|
||||
Group = config.services.nginx.group;
|
||||
ReadWritePaths = cfg.dataDir;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -212,9 +242,7 @@ in
|
|||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ phpPackage ];
|
||||
script = ''
|
||||
php public/index.php scheduled-activities
|
||||
php public/index.php scheduled-websub-publish
|
||||
php public/index.php scheduled-video-clips
|
||||
php ${cfg.package}/share/castopod/spark tasks:run
|
||||
'';
|
||||
serviceConfig = {
|
||||
StateDirectory = "castopod";
|
||||
|
@ -222,6 +250,8 @@ in
|
|||
Type = "oneshot";
|
||||
User = user;
|
||||
Group = config.services.nginx.group;
|
||||
ReadWritePaths = cfg.dataDir;
|
||||
LogLevelMax = "notice"; # otherwise periodic tasks flood the journal
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -251,6 +281,7 @@ in
|
|||
extraConfig = ''
|
||||
try_files $uri $uri/ /index.php?$args;
|
||||
index index.php index.html;
|
||||
client_max_body_size ${cfg.maxUploadSize};
|
||||
'';
|
||||
|
||||
locations."^~ /${cfg.settings."media.root"}/" = {
|
||||
|
@ -278,7 +309,7 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
users.users.${user} = lib.mapAttrs (name: lib.mkDefault) {
|
||||
users.users.${user} = lib.mapAttrs (_: lib.mkDefault) {
|
||||
description = "Castopod user";
|
||||
isSystemUser = true;
|
||||
group = config.services.nginx.group;
|
|
@ -346,8 +346,8 @@ in
|
|||
|
||||
port = lib.mkOption {
|
||||
type = types.port;
|
||||
default = options.services.postgresql.port.default;
|
||||
defaultText = lib.literalExpression "options.services.postgresql.port.default";
|
||||
default = config.services.postgresql.settings.port;
|
||||
defaultText = lib.literalExpression "config.services.postgresql.settings.port";
|
||||
description = lib.mdDoc ''
|
||||
The port of the database Invidious should use.
|
||||
|
||||
|
|
|
@ -76,11 +76,11 @@ in
|
|||
type = types.port;
|
||||
default =
|
||||
if cfg.database.type == "mysql" then config.services.mysql.port
|
||||
else if cfg.database.type == "pgsql" then config.services.postgresql.port
|
||||
else if cfg.database.type == "pgsql" then config.services.postgresql.settings.port
|
||||
else 1521;
|
||||
defaultText = literalExpression ''
|
||||
if config.${opt.database.type} == "mysql" then config.${options.services.mysql.port}
|
||||
else if config.${opt.database.type} == "pgsql" then config.${options.services.postgresql.port}
|
||||
else if config.${opt.database.type} == "pgsql" then config.services.postgresql.settings.port
|
||||
else 1521
|
||||
'';
|
||||
description = lib.mdDoc "Database host port.";
|
||||
|
|
|
@ -4,74 +4,218 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
|
|||
meta = with lib.maintainers; {
|
||||
maintainers = [ alexoundos misuzu ];
|
||||
};
|
||||
|
||||
nodes.castopod = { nodes, ... }: {
|
||||
# otherwise 500 MiB file upload fails!
|
||||
virtualisation.diskSize = 512 + 3 * 512;
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ 80 ];
|
||||
networking.extraHosts = ''
|
||||
127.0.0.1 castopod.example.com
|
||||
'';
|
||||
networking.extraHosts =
|
||||
lib.strings.concatStringsSep "\n"
|
||||
(lib.attrsets.mapAttrsToList
|
||||
(name: _: "127.0.0.1 ${name}")
|
||||
nodes.castopod.services.nginx.virtualHosts);
|
||||
|
||||
services.castopod = {
|
||||
enable = true;
|
||||
database.createLocally = true;
|
||||
localDomain = "castopod.example.com";
|
||||
maxUploadSize = "512M";
|
||||
};
|
||||
environment.systemPackages =
|
||||
let
|
||||
username = "admin";
|
||||
email = "admin@castood.example.com";
|
||||
password = "v82HmEp5";
|
||||
testRunner = pkgs.writers.writePython3Bin "test-runner"
|
||||
{
|
||||
libraries = [ pkgs.python3Packages.selenium ];
|
||||
flakeIgnore = [
|
||||
"E501"
|
||||
];
|
||||
} ''
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver import Firefox
|
||||
from selenium.webdriver.firefox.options import Options
|
||||
from selenium.webdriver.support.ui import WebDriverWait
|
||||
from selenium.webdriver.support import expected_conditions as EC
|
||||
|
||||
options = Options()
|
||||
options.add_argument('--headless')
|
||||
driver = Firefox(options=options)
|
||||
try:
|
||||
driver.implicitly_wait(20)
|
||||
driver.get('http://castopod.example.com/cp-install')
|
||||
|
||||
wait = WebDriverWait(driver, 10)
|
||||
|
||||
wait.until(EC.title_contains("installer"))
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, '#username').send_keys(
|
||||
'${username}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#email').send_keys(
|
||||
'${email}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#password').send_keys(
|
||||
'${password}'
|
||||
)
|
||||
driver.find_element(By.XPATH, "//button[contains(., 'Finish install')]").click()
|
||||
|
||||
wait.until(EC.title_contains("Auth"))
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, '#email').send_keys(
|
||||
'${email}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#password').send_keys(
|
||||
'${password}'
|
||||
)
|
||||
driver.find_element(By.XPATH, "//button[contains(., 'Login')]").click()
|
||||
|
||||
wait.until(EC.title_contains("Admin dashboard"))
|
||||
finally:
|
||||
driver.close()
|
||||
driver.quit()
|
||||
'';
|
||||
in
|
||||
[ pkgs.firefox-unwrapped pkgs.geckodriver testRunner ];
|
||||
};
|
||||
|
||||
nodes.client = { nodes, pkgs, lib, ... }:
|
||||
let
|
||||
domain = nodes.castopod.services.castopod.localDomain;
|
||||
|
||||
getIP = node:
|
||||
(builtins.head node.networking.interfaces.eth1.ipv4.addresses).address;
|
||||
|
||||
targetPodcastSize = 500 * 1024 * 1024;
|
||||
lameMp3Bitrate = 348300;
|
||||
lameMp3FileAdjust = -800;
|
||||
targetPodcastDuration = toString
|
||||
((targetPodcastSize + lameMp3FileAdjust) / (lameMp3Bitrate / 8));
|
||||
bannerWidth = 3000;
|
||||
banner = pkgs.runCommand "gen-castopod-cover.jpg" { } ''
|
||||
${pkgs.imagemagick}/bin/magick `
|
||||
`-background green -bordercolor white -gravity northwest xc:black `
|
||||
`-duplicate 99 `
|
||||
`-seed 1 -resize "%[fx:rand()*72+24]" `
|
||||
`-seed 0 -rotate "%[fx:rand()*360]" -border 6x6 -splice 16x36 `
|
||||
`-seed 0 -rotate "%[fx:floor(rand()*4)*90]" -resize "150x50!" `
|
||||
`+append -crop 10x1@ +repage -roll "+%[fx:(t%2)*72]+0" -append `
|
||||
`-resize ${toString bannerWidth} -quality 1 $out
|
||||
'';
|
||||
|
||||
coverWidth = toString 3000;
|
||||
cover = pkgs.runCommand "gen-castopod-banner.jpg" { } ''
|
||||
${pkgs.imagemagick}/bin/magick `
|
||||
`-background white -bordercolor white -gravity northwest xc:black `
|
||||
`-duplicate 99 `
|
||||
`-seed 1 -resize "%[fx:rand()*72+24]" `
|
||||
`-seed 0 -rotate "%[fx:rand()*360]" -border 6x6 -splice 36x36 `
|
||||
`-seed 0 -rotate "%[fx:floor(rand()*4)*90]" -resize "144x144!" `
|
||||
`+append -crop 10x1@ +repage -roll "+%[fx:(t%2)*72]+0" -append `
|
||||
`-resize ${coverWidth} -quality 1 $out
|
||||
'';
|
||||
in
|
||||
{
|
||||
networking.extraHosts =
|
||||
lib.strings.concatStringsSep "\n"
|
||||
(lib.attrsets.mapAttrsToList
|
||||
(name: _: "${getIP nodes.castopod} ${name}")
|
||||
nodes.castopod.services.nginx.virtualHosts);
|
||||
|
||||
environment.systemPackages =
|
||||
let
|
||||
username = "admin";
|
||||
email = "admin@${domain}";
|
||||
password = "Abcd1234";
|
||||
podcastTitle = "Some Title";
|
||||
episodeTitle = "Episode Title";
|
||||
browser-test = pkgs.writers.writePython3Bin "browser-test"
|
||||
{
|
||||
libraries = [ pkgs.python3Packages.selenium ];
|
||||
flakeIgnore = [ "E124" "E501" ];
|
||||
} ''
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver import Firefox
|
||||
from selenium.webdriver.firefox.options import Options
|
||||
from selenium.webdriver.firefox.service import Service
|
||||
from selenium.webdriver.support.ui import WebDriverWait
|
||||
from selenium.webdriver.support import expected_conditions as EC
|
||||
from subprocess import STDOUT
|
||||
import logging
|
||||
|
||||
selenium_logger = logging.getLogger("selenium")
|
||||
selenium_logger.setLevel(logging.DEBUG)
|
||||
selenium_logger.addHandler(logging.StreamHandler())
|
||||
|
||||
options = Options()
|
||||
options.add_argument('--headless')
|
||||
service = Service(log_output=STDOUT)
|
||||
driver = Firefox(options=options, service=service)
|
||||
driver = Firefox(options=options)
|
||||
driver.implicitly_wait(30)
|
||||
|
||||
# install ##########################################################
|
||||
|
||||
driver.get('http://${domain}/cp-install')
|
||||
|
||||
wait = WebDriverWait(driver, 20)
|
||||
|
||||
wait.until(EC.title_contains("installer"))
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, '#username').send_keys(
|
||||
'${username}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#email').send_keys(
|
||||
'${email}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#password').send_keys(
|
||||
'${password}'
|
||||
)
|
||||
driver.find_element(By.XPATH,
|
||||
"//button[contains(., 'Finish install')]"
|
||||
).click()
|
||||
|
||||
wait.until(EC.title_contains("Auth"))
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, '#email').send_keys(
|
||||
'${email}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#password').send_keys(
|
||||
'${password}'
|
||||
)
|
||||
driver.find_element(By.XPATH,
|
||||
"//button[contains(., 'Login')]"
|
||||
).click()
|
||||
|
||||
wait.until(EC.title_contains("Admin dashboard"))
|
||||
|
||||
# create podcast ###################################################
|
||||
|
||||
driver.get('http://${domain}/admin/podcasts/new')
|
||||
|
||||
wait.until(EC.title_contains("Create podcast"))
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, '#cover').send_keys(
|
||||
'${cover}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#banner').send_keys(
|
||||
'${banner}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#title').send_keys(
|
||||
'${podcastTitle}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#handle').send_keys(
|
||||
'some_handle'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#description').send_keys(
|
||||
'Some description'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#owner_name').send_keys(
|
||||
'Owner Name'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#owner_email').send_keys(
|
||||
'owner@email.xyz'
|
||||
)
|
||||
driver.find_element(By.XPATH,
|
||||
"//button[contains(., 'Create podcast')]"
|
||||
).click()
|
||||
|
||||
wait.until(EC.title_contains("${podcastTitle}"))
|
||||
|
||||
driver.find_element(By.XPATH,
|
||||
"//span[contains(., 'Add an episode')]"
|
||||
).click()
|
||||
|
||||
wait.until(EC.title_contains("Add an episode"))
|
||||
|
||||
# upload podcast ###################################################
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, '#audio_file').send_keys(
|
||||
'/tmp/podcast.mp3'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#cover').send_keys(
|
||||
'${cover}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#description').send_keys(
|
||||
'Episode description'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#title').send_keys(
|
||||
'${episodeTitle}'
|
||||
)
|
||||
driver.find_element(By.XPATH,
|
||||
"//button[contains(., 'Create episode')]"
|
||||
).click()
|
||||
|
||||
wait.until(EC.title_contains("${episodeTitle}"))
|
||||
|
||||
driver.close()
|
||||
driver.quit()
|
||||
'';
|
||||
in
|
||||
[
|
||||
pkgs.firefox-unwrapped
|
||||
pkgs.geckodriver
|
||||
browser-test
|
||||
(pkgs.writeShellApplication {
|
||||
name = "build-mp3";
|
||||
runtimeInputs = with pkgs; [ sox lame ];
|
||||
text = ''
|
||||
out=/tmp/podcast.mp3
|
||||
sox -n -r 48000 -t wav - synth ${targetPodcastDuration} sine 440 `
|
||||
`| lame --noreplaygain -cbr -q 9 -b 320 - $out
|
||||
FILESIZE="$(stat -c%s $out)"
|
||||
[ "$FILESIZE" -gt 0 ]
|
||||
[ "$FILESIZE" -le "${toString targetPodcastSize}" ]
|
||||
'';
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
castopod.wait_for_unit("castopod-setup.service")
|
||||
|
@ -79,9 +223,11 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
|
|||
castopod.wait_for_unit("nginx.service")
|
||||
castopod.wait_for_open_port(80)
|
||||
castopod.wait_until_succeeds("curl -sS -f http://castopod.example.com")
|
||||
castopod.succeed("curl -s http://localhost/cp-install | grep 'Create your Super Admin account' > /dev/null")
|
||||
|
||||
with subtest("Create superadmin and log in"):
|
||||
castopod.succeed("PYTHONUNBUFFERED=1 systemd-cat -t test-runner test-runner")
|
||||
client.succeed("build-mp3")
|
||||
|
||||
with subtest("Create superadmin, log in, create and upload a podcast"):
|
||||
client.succeed(\
|
||||
"PYTHONUNBUFFERED=1 systemd-cat -t browser-test browser-test")
|
||||
'';
|
||||
})
|
||||
|
|
|
@ -18,7 +18,7 @@ import ./make-test-python.nix ({ pkgs, ... }: {
|
|||
host invidious invidious samenet scram-sha-256
|
||||
'';
|
||||
};
|
||||
networking.firewall.allowedTCPPorts = [ config.services.postgresql.port ];
|
||||
networking.firewall.allowedTCPPorts = [ config.services.postgresql.settings.port ];
|
||||
};
|
||||
machine = { config, lib, pkgs, ... }: {
|
||||
services.invidious = {
|
||||
|
|
|
@ -76,7 +76,7 @@ in
|
|||
systemd.services.postgresql.postStart = lib.mkAfter ''
|
||||
$PSQL -tAd miniflux -c 'CREATE EXTENSION hstore;'
|
||||
'';
|
||||
networking.firewall.allowedTCPPorts = [ config.services.postgresql.port ];
|
||||
networking.firewall.allowedTCPPorts = [ config.services.postgresql.settings.port ];
|
||||
};
|
||||
externalDb = { ... }: {
|
||||
security.apparmor.enable = true;
|
||||
|
|
|
@ -7,7 +7,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
|
|||
services.postgresql = {
|
||||
enable = true;
|
||||
extraPlugins = ps: [ ps.anonymizer ];
|
||||
settings.shared_preload_libraries = "anon";
|
||||
settings.shared_preload_libraries = [ "anon" ];
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ in
|
|||
pgmanage = {
|
||||
enable = true;
|
||||
connections = {
|
||||
${conn} = "hostaddr=127.0.0.1 port=${toString config.services.postgresql.port} dbname=postgres";
|
||||
${conn} = "hostaddr=127.0.0.1 port=${toString config.services.postgresql.settings.port} dbname=postgres";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -33,7 +33,7 @@ in
|
|||
extraHosts = hosts;
|
||||
firewall.allowedTCPPorts = [
|
||||
config.services.redis.servers.mastodon.port
|
||||
config.services.postgresql.port
|
||||
config.services.postgresql.settings.port
|
||||
];
|
||||
};
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
, ffmpeg-headless
|
||||
, lib
|
||||
, nixosTests
|
||||
, stateDirectory ? "/var/lib/castopod"
|
||||
, dataDir ? "/var/lib/castopod"
|
||||
}:
|
||||
stdenv.mkDerivation {
|
||||
pname = "castopod";
|
||||
|
@ -20,13 +20,16 @@ stdenv.mkDerivation {
|
|||
postPatch = ''
|
||||
# not configurable at runtime unfortunately:
|
||||
substituteInPlace app/Config/Paths.php \
|
||||
--replace "__DIR__ . '/../../writable'" "'${stateDirectory}/writable'"
|
||||
--replace "__DIR__ . '/../../writable'" "'${dataDir}/writable'"
|
||||
|
||||
# configuration file must be writable, place it to ${stateDirectory}
|
||||
substituteInPlace modules/Admin/Controllers/DashboardController.php \
|
||||
--replace "disk_total_space('./')" "disk_total_space('${dataDir}')"
|
||||
|
||||
# configuration file must be writable, place it to ${dataDir}
|
||||
substituteInPlace modules/Install/Controllers/InstallController.php \
|
||||
--replace "ROOTPATH" "'${stateDirectory}/'"
|
||||
--replace "ROOTPATH" "'${dataDir}/'"
|
||||
substituteInPlace public/index.php spark \
|
||||
--replace "DotEnv(ROOTPATH)" "DotEnv('${stateDirectory}')"
|
||||
--replace "DotEnv(ROOTPATH)" "DotEnv('${dataDir}')"
|
||||
|
||||
# ffmpeg is required for Video Clips feature
|
||||
substituteInPlace modules/MediaClipper/VideoClipper.php \
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "ergo";
|
||||
version = "5.0.20";
|
||||
version = "5.0.21";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/ergoplatform/ergo/releases/download/v${version}/ergo-${version}.jar";
|
||||
sha256 = "sha256-wC3KnuKHsUw1jt7EXVAgPhB6Sk8630sVaM3yn6CGPqs=";
|
||||
sha256 = "sha256-WtBsChSHnYbRBojxRUGdMnXlG+45hp4ZSd8GLx5n/88=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
|
|
@ -17081,5 +17081,17 @@ final: prev:
|
|||
meta.homepage = "https://github.com/codethread/qmk.nvim/";
|
||||
};
|
||||
|
||||
vim-godot = buildVimPlugin {
|
||||
pname = "vim-godot";
|
||||
version = "2024-02-18";
|
||||
src = fetchFromGitHub {
|
||||
owner = "habamax";
|
||||
repo = "vim-godot";
|
||||
rev = "f9c0b36b299efcc4aa4cb119a2be36a83fe10388";
|
||||
sha256 = "sha256-HKp3CQwAOs+7TL8MjWZ2EHLHMZ3Ss7AckAZ5eOjTDEg=";
|
||||
};
|
||||
meta.homepage = "https://github.com/habamax/vim-godot/";
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1100,6 +1100,7 @@ https://github.com/junegunn/vim-github-dashboard/,,
|
|||
https://github.com/tikhomirov/vim-glsl/,,
|
||||
https://github.com/jamessan/vim-gnupg/,,
|
||||
https://github.com/fatih/vim-go/,,
|
||||
https://github.com/habamax/vim-godot/,HEAD,
|
||||
https://github.com/rhysd/vim-grammarous/,,
|
||||
https://github.com/jparise/vim-graphql/,,
|
||||
https://github.com/mhinz/vim-grepper/,,
|
||||
|
|
|
@ -1,39 +1,49 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchgit
|
||||
, ninja
|
||||
, pkg-config
|
||||
, ed
|
||||
, wrapGAppsHook
|
||||
, webkitgtk
|
||||
, libxml2
|
||||
, glib
|
||||
, glib-networking
|
||||
, gettext
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "badwolf";
|
||||
version = "1.2.2";
|
||||
version = "1.3.0";
|
||||
|
||||
src = fetchgit {
|
||||
url = "git://hacktivis.me/git/badwolf.git";
|
||||
url = "https://hacktivis.me/git/badwolf.git";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-HfAsq6z+1kqMAsNxJjWJx9nd2cbv0XN4KRS8cYuhOsQ=";
|
||||
hash = "sha256-feWSxK9TJ5MWxUKutuTcdmMk5IbLjNseUAvfm20kQ1U=";
|
||||
};
|
||||
|
||||
preConfigure = ''
|
||||
export PREFIX=$out
|
||||
'';
|
||||
# configure script not accepting '--prefix'
|
||||
prefixKey = "PREFIX=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config wrapGAppsHook ];
|
||||
nativeBuildInputs = [
|
||||
ninja
|
||||
pkg-config
|
||||
ed
|
||||
wrapGAppsHook
|
||||
];
|
||||
|
||||
buildInputs = [ webkitgtk libxml2 gettext glib glib-networking ];
|
||||
buildInputs = [
|
||||
webkitgtk
|
||||
libxml2
|
||||
gettext
|
||||
glib-networking
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Minimalist and privacy-oriented WebKitGTK+ browser";
|
||||
mainProgram = "badwolf";
|
||||
homepage = "https://hacktivis.me/projects/badwolf";
|
||||
license = licenses.bsd3;
|
||||
license = with licenses; [ bsd3 cc-by-sa-40 ];
|
||||
platforms = platforms.linux;
|
||||
maintainers = with maintainers; [ laalsaas ];
|
||||
maintainers = with maintainers; [ laalsaas aleksana ];
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -12,13 +12,13 @@
|
|||
|
||||
stdenv.mkDerivation {
|
||||
pname = "litebrowser";
|
||||
version = "unstable-2022-10-31";
|
||||
version = "unstable-2024-02-25";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "litehtml";
|
||||
repo = "litebrowser-linux";
|
||||
rev = "4654f8fb2d5e2deba7ac6223b6639341bd3b7eba";
|
||||
hash = "sha256-SvW1AOxLBLKqa+/2u2Zn+/t33ZzQHmqlcLRl6z0rK9U=";
|
||||
rev = "8130cf50af90e07d201d43b934b5a57f7ed4e68d";
|
||||
hash = "sha256-L/pd4VypDfjLKfh+HLpc4um+POWGzGa4OOttudwJxyk=";
|
||||
fetchSubmodules = true; # litehtml submodule
|
||||
};
|
||||
|
||||
|
@ -46,6 +46,7 @@ stdenv.mkDerivation {
|
|||
'';
|
||||
|
||||
meta = with lib; {
|
||||
broken = stdenv.cc.isClang; # https://github.com/litehtml/litebrowser-linux/issues/19
|
||||
description = "A simple browser based on the litehtml engine";
|
||||
mainProgram = "litebrowser";
|
||||
homepage = "https://github.com/litehtml/litebrowser-linux";
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "cilium-cli";
|
||||
version = "0.16.3";
|
||||
version = "0.16.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cilium";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-WD0CUPl9Qkalhog2IbefMkiLiVZFW59X21sYH4hUqZs=";
|
||||
hash = "sha256-fhTjYhRCtJu18AGYF6hiTdRMEdlNO+DmDwh2hZBXzPk=";
|
||||
};
|
||||
|
||||
vendorHash = null;
|
||||
|
@ -37,11 +37,12 @@ buildGoModule rec {
|
|||
--zsh <($out/bin/cilium completion zsh)
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
changelog = "https://github.com/cilium/cilium-cli/releases/tag/v${version}";
|
||||
description = "CLI to install, manage & troubleshoot Kubernetes clusters running Cilium";
|
||||
license = licenses.asl20;
|
||||
license = lib.licenses.asl20;
|
||||
homepage = "https://www.cilium.io/";
|
||||
maintainers = with maintainers; [ humancalico bryanasdev000 qjoly ];
|
||||
maintainers = with lib.maintainers; [ bryanasdev000 humancalico qjoly superherointj ];
|
||||
mainProgram = "cilium";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -12,16 +12,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "kubebuilder";
|
||||
version = "3.14.0";
|
||||
version = "3.14.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kubernetes-sigs";
|
||||
repo = "kubebuilder";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-em+I2YICcqljaaNQ+zOAnOZ552elmV6Ywbfla8buwaY=";
|
||||
hash = "sha256-TMKixwZonYGPXIqOtgnuilbH7BaIRyqJU6uKtp9ANKM=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-iBwhpVs9u5AQAvmzb69SaewdYHmmaV19Bstd0Tux9CA=";
|
||||
vendorHash = "sha256-Hl01dFSffYv59zensKTjXWLXxwfkQYAO5xadlc5iBJY=";
|
||||
|
||||
subPackages = ["cmd"];
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "flexget";
|
||||
version = "3.11.25";
|
||||
version = "3.11.27";
|
||||
pyproject = true;
|
||||
|
||||
# Fetch from GitHub in order to use `requirements.in`
|
||||
|
@ -14,7 +14,7 @@ python3.pkgs.buildPythonApplication rec {
|
|||
owner = "Flexget";
|
||||
repo = "Flexget";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-bvCogSBB990LIkk273EMTlqNN303JKr5WCI8g7hLU9Q=";
|
||||
hash = "sha256-0ENBUOH+/pe4OsVQ6cu1xLTPPHtUMNARQGVyxOk60X0=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "signalbackup-tools";
|
||||
version = "20240320";
|
||||
version = "20240328-1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bepaald";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
hash = "sha256-2H+VGVPnSHdsx62hPygWc5uz5vH6DS7AfmYSlBZuB4A=";
|
||||
hash = "sha256-oEwWbTs8Orpo+qRCKVvkeJYEob8O/qkKmv/iA5JUpfQ=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
|
|
@ -45,14 +45,14 @@ let
|
|||
|
||||
pname = "slack";
|
||||
|
||||
x86_64-darwin-version = "4.36.140";
|
||||
x86_64-darwin-sha256 = "0w1fxza3aglh7513znv190gsha12rk7k1ybdp4ml2pffwmm8diad";
|
||||
x86_64-darwin-version = "4.37.94";
|
||||
x86_64-darwin-sha256 = "01v7v977fq8mfsl0lipdc7ig55p2sknxzr1jmh8qxiq4f4y0rj5g";
|
||||
|
||||
x86_64-linux-version = "4.36.140";
|
||||
x86_64-linux-sha256 = "0zahhhpcb1dxdhfmam32iqr5w3pspzbmcdv53ciqfnbkmwzkc3xr";
|
||||
x86_64-linux-version = "4.37.94";
|
||||
x86_64-linux-sha256 = "1f1spl767ldrarvpxrayry2d0nyr22b8xacxl4g1r8raryvnyz0x";
|
||||
|
||||
aarch64-darwin-version = "4.36.140";
|
||||
aarch64-darwin-sha256 = "118mzkpk431dcm61gkbj5m4sdxkwnk6fvmxg9f96xiv6n22n7pnx";
|
||||
aarch64-darwin-version = "4.37.94";
|
||||
aarch64-darwin-sha256 = "0gh45gvlbjzxh0fn24z15glxqih5lggam8w6kpawsxgivkw6rjcc";
|
||||
|
||||
version = {
|
||||
x86_64-darwin = x86_64-darwin-version;
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
{ mkDerivation, lib, fetchFromGitHub, cmake, boost179, ceres-solver, eigen,
|
||||
freeimage, glog, libGLU, glew, qtbase,
|
||||
autoAddDriverRunpath,
|
||||
config,
|
||||
cudaSupport ? config.cudaSupport, cudaPackages }:
|
||||
cudaSupport ? config.cudaSupport, cudaPackages
|
||||
}:
|
||||
|
||||
assert cudaSupport -> cudaPackages != { };
|
||||
|
||||
|
@ -37,7 +39,7 @@ mkDerivation rec {
|
|||
nativeBuildInputs = [
|
||||
cmake
|
||||
] ++ lib.optionals cudaSupport [
|
||||
cudaPackages.autoAddDriverRunpath
|
||||
autoAddDriverRunpath
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
|
|
|
@ -1,107 +0,0 @@
|
|||
source 'https://rubygems.org'
|
||||
|
||||
ruby '>= 2.5.0', '< 3.2.0'
|
||||
gem 'bundler', '>= 1.12.0'
|
||||
|
||||
gem 'rails', '6.1.7.6'
|
||||
gem 'globalid', '~> 0.4.2' if Gem.ruby_version < Gem::Version.new('2.6.0')
|
||||
gem 'rouge', '~> 3.28.0'
|
||||
gem 'request_store', '~> 1.5.0'
|
||||
gem 'mini_mime', '~> 1.1.0'
|
||||
gem "actionpack-xml_parser"
|
||||
gem 'roadie-rails', (Gem.ruby_version < Gem::Version.new('2.6.0') ? '~> 2.2.0' : '~> 3.0.0')
|
||||
gem 'marcel'
|
||||
gem "mail", "~> 2.7.1"
|
||||
gem 'csv', '~> 3.2.0'
|
||||
gem 'nokogiri', (if Gem.ruby_version < Gem::Version.new('2.6.0')
|
||||
'~> 1.12.5'
|
||||
elsif Gem.ruby_version < Gem::Version.new('2.7.0')
|
||||
'~> 1.13.10'
|
||||
else
|
||||
'~> 1.15.2'
|
||||
end)
|
||||
gem "rexml", require: false if Gem.ruby_version >= Gem::Version.new('3.0')
|
||||
gem 'i18n', '~> 1.10.0'
|
||||
gem 'rbpdf', '~> 1.21.3'
|
||||
gem 'addressable'
|
||||
gem 'rubyzip', '~> 2.3.0'
|
||||
gem 'net-smtp', '~> 0.3.0'
|
||||
gem 'net-imap', '~> 0.2.2'
|
||||
gem 'net-pop', '~> 0.1.1'
|
||||
# Rails 6.1.6.1 does not work with Pysch 3.0.2, which is installed by default with Ruby 2.5. See https://github.com/rails/rails/issues/45590
|
||||
gem 'psych', '>= 3.1.0' if Gem.ruby_version < Gem::Version.new('2.6.0')
|
||||
|
||||
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||
gem 'tzinfo-data', platforms: [:mingw, :x64_mingw, :mswin]
|
||||
|
||||
# TOTP-based 2-factor authentication
|
||||
gem 'rotp', '>= 5.0.0'
|
||||
gem 'rqrcode'
|
||||
|
||||
# Optional gem for LDAP authentication
|
||||
group :ldap do
|
||||
gem 'net-ldap', '~> 0.17.0'
|
||||
end
|
||||
|
||||
# Optional gem for exporting the gantt to a PNG file
|
||||
group :minimagick do
|
||||
gem 'mini_magick', '~> 4.11.0'
|
||||
end
|
||||
|
||||
# Optional Markdown support, not for JRuby
|
||||
# ToDo: Remove common_mark group when common_mark is decoupled from markdown. See defect (#36892) for more details.
|
||||
gem 'redcarpet', '~> 3.5.1', groups: [:markdown, :common_mark]
|
||||
|
||||
# Optional CommonMark support, not for JRuby
|
||||
group :common_mark do
|
||||
gem "html-pipeline", "~> 2.13.2"
|
||||
gem "commonmarker", (Gem.ruby_version < Gem::Version.new('2.6.0') ? '0.21.0' : '~> 0.23.8')
|
||||
gem "sanitize", "~> 6.0"
|
||||
gem 'deckar01-task_list', '2.3.2'
|
||||
end
|
||||
|
||||
# webrick
|
||||
gem 'webrick'
|
||||
|
||||
# Include database gems for the database adapters NixOS supports
|
||||
require 'erb'
|
||||
require 'yaml'
|
||||
gem "mysql2", "~> 0.5.0", :platforms => [:mri, :mingw, :x64_mingw]
|
||||
gem "pg", "~> 1.4.2", :platforms => [:mri, :mingw, :x64_mingw]
|
||||
|
||||
group :development do
|
||||
gem 'listen', '~> 3.3'
|
||||
gem "yard"
|
||||
end
|
||||
|
||||
group :test do
|
||||
gem "rails-dom-testing"
|
||||
gem 'mocha', '>= 2.0.1'
|
||||
gem 'simplecov', '~> 0.21.2', :require => false
|
||||
gem "ffi", platforms: [:mri, :mingw, :x64_mingw, :mswin]
|
||||
# For running system tests
|
||||
gem 'puma', (Gem.ruby_version < Gem::Version.new('2.7') ? '< 6.0.0' : '>= 0')
|
||||
gem 'capybara', (if Gem.ruby_version < Gem::Version.new('2.6')
|
||||
'~> 3.35.3'
|
||||
elsif Gem.ruby_version < Gem::Version.new('2.7')
|
||||
'~> 3.36.0'
|
||||
else
|
||||
'~> 3.38.0'
|
||||
end)
|
||||
gem "selenium-webdriver", "~> 3.142.7"
|
||||
gem 'webdrivers', '4.6.1', require: false
|
||||
# RuboCop
|
||||
gem 'rubocop', '~> 1.26.0'
|
||||
gem 'rubocop-performance', '~> 1.13.0'
|
||||
gem 'rubocop-rails', '~> 2.14.0'
|
||||
end
|
||||
|
||||
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
|
||||
if File.exist?(local_gemfile)
|
||||
eval_gemfile local_gemfile
|
||||
end
|
||||
|
||||
# Load plugins' Gemfiles
|
||||
Dir.glob File.expand_path("../plugins/*/{Gemfile,PluginGemfile}", __FILE__) do |file|
|
||||
eval_gemfile file
|
||||
end
|
|
@ -10,11 +10,11 @@
|
|||
}:
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "tart";
|
||||
version = "2.6.0";
|
||||
version = "2.7.2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/cirruslabs/tart/releases/download/${finalAttrs.version}/tart-arm64.tar.gz";
|
||||
hash = "sha256-QtVqgmjYpLAhFibW1DIVWNYiOjHB1X/YY6zRVB+1soA=";
|
||||
hash = "sha256-Z/LZ8g1/FYT7Jh943tFxN8L5HeNf0CVz1VEJj+2fCd8=";
|
||||
};
|
||||
sourceRoot = ".";
|
||||
|
||||
|
|
|
@ -5,27 +5,27 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "bee";
|
||||
version = "1.18.2";
|
||||
version = "2.0.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ethersphere";
|
||||
repo = "bee";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-LUOKF1073GmQWG2q4w0cTErSHw7ok5N6PQZ45xpjYx4=";
|
||||
sha256 = "sha256-gZDmFufk/zBftQe7Ju4rDpZqw0hm2nf9YQg1Oa8540s=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-UdsF/otjXqS1NY3PkCimRiD93hGntHG3Xhw6avFtHog=";
|
||||
vendorHash = "sha256-GpazHMQ8xZ6P7mADvsG3bXxDxEWnCJRIsBwDnL/McZA=";
|
||||
|
||||
subPackages = [ "cmd/bee" ];
|
||||
|
||||
ldflags = [
|
||||
"-s"
|
||||
"-w"
|
||||
"-X github.com/ethersphere/bee.version=${version}"
|
||||
"-X github.com/ethersphere/bee/pkg/api.Version=5.2.0"
|
||||
"-X github.com/ethersphere/bee/pkg/api.DebugVersion=4.1.0"
|
||||
"-X github.com/ethersphere/bee/pkg/p2p/libp2p.reachabilityOverridePublic=false"
|
||||
"-X github.com/ethersphere/bee/pkg/postage/listener.batchFactorOverridePublic=5"
|
||||
"-X github.com/ethersphere/bee/v2.version=${version}"
|
||||
"-X github.com/ethersphere/bee/v2/pkg/api.Version=5.2.0"
|
||||
"-X github.com/ethersphere/bee/v2/pkg/api.DebugVersion=4.1.1"
|
||||
"-X github.com/ethersphere/bee/v2/pkg/p2p/libp2p.reachabilityOverridePublic=false"
|
||||
"-X github.com/ethersphere/bee/v2/pkg/postage/listener.batchFactorOverridePublic=5"
|
||||
];
|
||||
|
||||
CGO_ENABLED = 0;
|
|
@ -9,16 +9,16 @@
|
|||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "boxbuddy";
|
||||
version = "2.1.5";
|
||||
version = "2.2.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Dvlv";
|
||||
repo = "BoxBuddyRS";
|
||||
rev = version;
|
||||
hash = "sha256-XMLgUYOv2ObHqYxqPch5i0Q1/BvfDuC1Lti5FYAVmnk=";
|
||||
hash = "sha256-Fb3Df+P2ovSVQhtDxhed/hH06UKnJY/iugt3Pi9/Jp0=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-zbhdGpF3TonGlvRXCWF00PhIc0k1ZO2xIMXuwYD90mY=";
|
||||
cargoHash = "sha256-dmBQdE4rsL8ygXOGupjtZrWuXjVAy5m1p/xJlUdUwkY=";
|
||||
|
||||
# The software assumes it is installed either in flatpak or in the home directory
|
||||
# so the xdg data path needs to be patched here
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
{ buildGoModule, fetchFromSourcehut, lib }:
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "go-bare";
|
||||
version = "0-unstable-2021-04-06";
|
||||
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~sircmpwn";
|
||||
repo = "go-bare";
|
||||
rev = "ab86bc2846d997bc8760fdb0d06d4a55e746b1db";
|
||||
hash = "sha256-SKTYDKidB1Ia3Jg4EBg5rPAtqlXAa19RY5qieS82A34=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-OhJb/q1XJ/U/AvCcCXw2Ll86UKlkHGuURHS5J6aXNTs=";
|
||||
|
||||
subPackages = [ "cmd/gen" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "An implementation of the BARE message format for Go";
|
||||
mainProgram = "gen";
|
||||
homepage = "https://git.sr.ht/~sircmpwn/go-bare";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ poptart ];
|
||||
};
|
||||
}
|
|
@ -5,11 +5,11 @@
|
|||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "lxgw-neoxihei";
|
||||
version = "1.120.1";
|
||||
version = "1.120.2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/lxgw/LxgwNeoXiHei/releases/download/v${version}/LXGWNeoXiHei.ttf";
|
||||
hash = "sha256-shzJ5y2mjvodtSHct9gm+09CludxUpR38qi9zvewjaQ=";
|
||||
hash = "sha256-RN0OmNS3aSRMK19nNiqXYJ4PIAQh6u5W/+L8DCeqMcE=";
|
||||
};
|
||||
|
||||
dontUnpack = true;
|
|
@ -5,12 +5,12 @@
|
|||
|
||||
appimageTools.wrapType2 rec {
|
||||
pname = "miru";
|
||||
version = "5.0.0";
|
||||
version = "5.0.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/ThaUnknown/miru/releases/download/v${version}/linux-Miru-${version}.AppImage";
|
||||
name = "${pname}-${version}.AppImage";
|
||||
sha256 = "sha256-Gp3pP973+peSr0pfUDqKQWZFiY4jdOp4tsn1336wcwY=";
|
||||
sha256 = "sha256-vKV1Scd+YiJMIV8EWx4udoOxTXW9NA7k/CxRVNRqrjk=";
|
||||
};
|
||||
|
||||
extraInstallCommands =
|
||||
|
@ -29,7 +29,7 @@ appimageTools.wrapType2 rec {
|
|||
|
||||
meta = with lib; {
|
||||
description = "Stream anime torrents, real-time with no waiting for downloads";
|
||||
homepage = "https://github.com/ThaUnknown/miru#readme";
|
||||
homepage = "https://miru.watch";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = [ maintainers.d4ilyrun ];
|
||||
mainProgram = "miru";
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
{ lib
|
||||
, stdenvNoCC
|
||||
, fetchFromGitHub
|
||||
}:
|
||||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "nuclei-templates";
|
||||
version = "9.8.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "projectdiscovery";
|
||||
repo = "nuclei-templates";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-1aLy8wNWMFouZRjhCSiwSq1uo20C9wN7LPxyBqK6K0k=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/share/nuclei-templates
|
||||
cp -R cloud code config dns file headless helpers http javascript network ssl \
|
||||
$out/share/nuclei-templates/
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Templates for the nuclei engine to find security vulnerabilities";
|
||||
homepage = "https://github.com/projectdiscovery/nuclei-templates";
|
||||
changelog = "https://github.com/projectdiscovery/nuclei-templates/releases/tag/v${version}";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
platforms = platforms.all;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,101 @@
|
|||
source 'https://rubygems.org'
|
||||
|
||||
ruby '>= 2.7.0', '< 3.3.0'
|
||||
|
||||
gem 'rails', '6.1.7.7'
|
||||
gem 'rouge', '~> 4.2.0'
|
||||
gem 'request_store', '~> 1.5.0'
|
||||
gem 'mini_mime', '~> 1.1.0'
|
||||
gem "actionpack-xml_parser"
|
||||
gem 'roadie-rails', '~> 3.1.0'
|
||||
gem 'marcel'
|
||||
gem 'mail', '~> 2.8.1'
|
||||
gem 'nokogiri', '~> 1.15.2'
|
||||
gem 'i18n', '~> 1.14.1'
|
||||
gem 'rbpdf', '~> 1.21.3'
|
||||
gem 'addressable'
|
||||
gem 'rubyzip', '~> 2.3.0'
|
||||
|
||||
# Ruby Standard Gems
|
||||
gem 'csv', '~> 3.2.6'
|
||||
gem 'net-imap', '~> 0.3.4'
|
||||
gem 'net-pop', '~> 0.1.2'
|
||||
gem 'net-smtp', '~> 0.3.3'
|
||||
gem 'rexml', require: false if Gem.ruby_version >= Gem::Version.new('3.0')
|
||||
|
||||
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||
gem 'tzinfo-data', platforms: [:mingw, :x64_mingw, :mswin]
|
||||
|
||||
# TOTP-based 2-factor authentication
|
||||
gem 'rotp', '>= 5.0.0'
|
||||
gem 'rqrcode'
|
||||
|
||||
# HTML pipeline and sanitization
|
||||
gem "html-pipeline", "~> 2.13.2"
|
||||
gem "sanitize", "~> 6.0"
|
||||
|
||||
# Optional gem for LDAP authentication
|
||||
group :ldap do
|
||||
gem 'net-ldap', '~> 0.17.0'
|
||||
end
|
||||
|
||||
# Optional gem for exporting the gantt to a PNG file
|
||||
group :minimagick do
|
||||
gem 'mini_magick', '~> 4.12.0'
|
||||
end
|
||||
|
||||
# Optional Markdown support
|
||||
group :markdown do
|
||||
gem 'redcarpet', '~> 3.6.0'
|
||||
end
|
||||
|
||||
# Optional CommonMark support, not for JRuby
|
||||
group :common_mark do
|
||||
gem "commonmarker", '~> 0.23.8'
|
||||
gem 'deckar01-task_list', '2.3.2'
|
||||
end
|
||||
|
||||
# Include database gems for the database adapters NixOS supports
|
||||
require 'erb'
|
||||
require 'yaml'
|
||||
gem "mysql2", "~> 0.5.0", :platforms => [:mri, :mingw, :x64_mingw]
|
||||
gem "with_advisory_lock"
|
||||
gem 'pg', '~> 1.5.3', :platforms => [:mri, :mingw, :x64_mingw]
|
||||
gem 'sqlite3', '~> 1.6.0', :platforms => [:mri, :mingw, :x64_mingw]
|
||||
|
||||
group :development do
|
||||
gem 'listen', '~> 3.3'
|
||||
gem "yard"
|
||||
end
|
||||
|
||||
group :test do
|
||||
gem "rails-dom-testing"
|
||||
gem 'mocha', '>= 2.0.1'
|
||||
gem 'simplecov', '~> 0.22.0', :require => false
|
||||
gem "ffi", platforms: [:mri, :mingw, :x64_mingw, :mswin]
|
||||
# For running system tests
|
||||
gem 'puma'
|
||||
gem "capybara", ">= 3.39"
|
||||
if Gem.ruby_version < Gem::Version.new('3.0')
|
||||
gem "selenium-webdriver", "<= 4.9.0"
|
||||
gem "webdrivers", require: false
|
||||
else
|
||||
gem "selenium-webdriver", ">= 4.11.0"
|
||||
end
|
||||
# RuboCop
|
||||
gem 'rubocop', '~> 1.57.0', require: false
|
||||
gem 'rubocop-performance', '~> 1.19.0', require: false
|
||||
gem 'rubocop-rails', '~> 2.22.1', require: false
|
||||
end
|
||||
|
||||
gem "webrick"
|
||||
|
||||
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
|
||||
if File.exist?(local_gemfile)
|
||||
eval_gemfile local_gemfile
|
||||
end
|
||||
|
||||
# Load plugins' Gemfiles
|
||||
Dir.glob File.expand_path("../plugins/*/{Gemfile,PluginGemfile}", __FILE__) do |file|
|
||||
eval_gemfile file
|
||||
end
|
|
@ -1,28 +1,28 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
actioncable (6.1.7.6)
|
||||
actionpack (= 6.1.7.6)
|
||||
activesupport (= 6.1.7.6)
|
||||
actioncable (6.1.7.7)
|
||||
actionpack (= 6.1.7.7)
|
||||
activesupport (= 6.1.7.7)
|
||||
nio4r (~> 2.0)
|
||||
websocket-driver (>= 0.6.1)
|
||||
actionmailbox (6.1.7.6)
|
||||
actionpack (= 6.1.7.6)
|
||||
activejob (= 6.1.7.6)
|
||||
activerecord (= 6.1.7.6)
|
||||
activestorage (= 6.1.7.6)
|
||||
activesupport (= 6.1.7.6)
|
||||
actionmailbox (6.1.7.7)
|
||||
actionpack (= 6.1.7.7)
|
||||
activejob (= 6.1.7.7)
|
||||
activerecord (= 6.1.7.7)
|
||||
activestorage (= 6.1.7.7)
|
||||
activesupport (= 6.1.7.7)
|
||||
mail (>= 2.7.1)
|
||||
actionmailer (6.1.7.6)
|
||||
actionpack (= 6.1.7.6)
|
||||
actionview (= 6.1.7.6)
|
||||
activejob (= 6.1.7.6)
|
||||
activesupport (= 6.1.7.6)
|
||||
actionmailer (6.1.7.7)
|
||||
actionpack (= 6.1.7.7)
|
||||
actionview (= 6.1.7.7)
|
||||
activejob (= 6.1.7.7)
|
||||
activesupport (= 6.1.7.7)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
actionpack (6.1.7.6)
|
||||
actionview (= 6.1.7.6)
|
||||
activesupport (= 6.1.7.6)
|
||||
actionpack (6.1.7.7)
|
||||
actionview (= 6.1.7.7)
|
||||
activesupport (= 6.1.7.7)
|
||||
rack (~> 2.0, >= 2.0.9)
|
||||
rack-test (>= 0.6.3)
|
||||
rails-dom-testing (~> 2.0)
|
||||
|
@ -30,63 +30,63 @@ GEM
|
|||
actionpack-xml_parser (2.0.1)
|
||||
actionpack (>= 5.0)
|
||||
railties (>= 5.0)
|
||||
actiontext (6.1.7.6)
|
||||
actionpack (= 6.1.7.6)
|
||||
activerecord (= 6.1.7.6)
|
||||
activestorage (= 6.1.7.6)
|
||||
activesupport (= 6.1.7.6)
|
||||
actiontext (6.1.7.7)
|
||||
actionpack (= 6.1.7.7)
|
||||
activerecord (= 6.1.7.7)
|
||||
activestorage (= 6.1.7.7)
|
||||
activesupport (= 6.1.7.7)
|
||||
nokogiri (>= 1.8.5)
|
||||
actionview (6.1.7.6)
|
||||
activesupport (= 6.1.7.6)
|
||||
actionview (6.1.7.7)
|
||||
activesupport (= 6.1.7.7)
|
||||
builder (~> 3.1)
|
||||
erubi (~> 1.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
||||
activejob (6.1.7.6)
|
||||
activesupport (= 6.1.7.6)
|
||||
activejob (6.1.7.7)
|
||||
activesupport (= 6.1.7.7)
|
||||
globalid (>= 0.3.6)
|
||||
activemodel (6.1.7.6)
|
||||
activesupport (= 6.1.7.6)
|
||||
activerecord (6.1.7.6)
|
||||
activemodel (= 6.1.7.6)
|
||||
activesupport (= 6.1.7.6)
|
||||
activestorage (6.1.7.6)
|
||||
actionpack (= 6.1.7.6)
|
||||
activejob (= 6.1.7.6)
|
||||
activerecord (= 6.1.7.6)
|
||||
activesupport (= 6.1.7.6)
|
||||
activemodel (6.1.7.7)
|
||||
activesupport (= 6.1.7.7)
|
||||
activerecord (6.1.7.7)
|
||||
activemodel (= 6.1.7.7)
|
||||
activesupport (= 6.1.7.7)
|
||||
activestorage (6.1.7.7)
|
||||
actionpack (= 6.1.7.7)
|
||||
activejob (= 6.1.7.7)
|
||||
activerecord (= 6.1.7.7)
|
||||
activesupport (= 6.1.7.7)
|
||||
marcel (~> 1.0)
|
||||
mini_mime (>= 1.1.0)
|
||||
activesupport (6.1.7.6)
|
||||
activesupport (6.1.7.7)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
tzinfo (~> 2.0)
|
||||
zeitwerk (~> 2.3)
|
||||
addressable (2.8.5)
|
||||
addressable (2.8.6)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
ast (2.4.2)
|
||||
base64 (0.2.0)
|
||||
builder (3.2.4)
|
||||
capybara (3.38.0)
|
||||
capybara (3.40.0)
|
||||
addressable
|
||||
matrix
|
||||
mini_mime (>= 0.1.3)
|
||||
nokogiri (~> 1.8)
|
||||
nokogiri (~> 1.11)
|
||||
rack (>= 1.6.0)
|
||||
rack-test (>= 0.6.3)
|
||||
regexp_parser (>= 1.5, < 3.0)
|
||||
xpath (~> 3.2)
|
||||
childprocess (3.0.0)
|
||||
chunky_png (1.4.0)
|
||||
commonmarker (0.23.10)
|
||||
concurrent-ruby (1.2.2)
|
||||
concurrent-ruby (1.2.3)
|
||||
crass (1.0.6)
|
||||
css_parser (1.16.0)
|
||||
addressable
|
||||
csv (3.2.8)
|
||||
csv (3.2.9)
|
||||
date (3.3.4)
|
||||
deckar01-task_list (2.3.2)
|
||||
html-pipeline
|
||||
digest (3.1.1)
|
||||
docile (1.4.0)
|
||||
erubi (1.12.0)
|
||||
ffi (1.16.3)
|
||||
|
@ -96,67 +96,71 @@ GEM
|
|||
activesupport (>= 2)
|
||||
nokogiri (>= 1.4)
|
||||
htmlentities (4.3.4)
|
||||
i18n (1.10.0)
|
||||
i18n (1.14.4)
|
||||
concurrent-ruby (~> 1.0)
|
||||
listen (3.8.0)
|
||||
json (2.7.1)
|
||||
language_server-protocol (3.17.0.3)
|
||||
listen (3.9.0)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
loofah (2.22.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.12.0)
|
||||
mail (2.7.1)
|
||||
mail (2.8.1)
|
||||
mini_mime (>= 0.1.1)
|
||||
marcel (1.0.2)
|
||||
net-imap
|
||||
net-pop
|
||||
net-smtp
|
||||
marcel (1.0.4)
|
||||
matrix (0.4.2)
|
||||
method_source (1.0.0)
|
||||
mini_magick (4.11.0)
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.5)
|
||||
mini_portile2 (2.8.5)
|
||||
minitest (5.20.0)
|
||||
minitest (5.22.3)
|
||||
mocha (2.1.0)
|
||||
ruby2_keywords (>= 0.0.5)
|
||||
mysql2 (0.5.5)
|
||||
net-imap (0.2.3)
|
||||
digest
|
||||
mysql2 (0.5.6)
|
||||
net-imap (0.3.7)
|
||||
date
|
||||
net-protocol
|
||||
strscan
|
||||
net-ldap (0.17.1)
|
||||
net-pop (0.1.2)
|
||||
net-protocol
|
||||
net-protocol (0.2.2)
|
||||
timeout
|
||||
net-smtp (0.3.3)
|
||||
net-smtp (0.3.4)
|
||||
net-protocol
|
||||
nio4r (2.6.1)
|
||||
nokogiri (1.15.5)
|
||||
nio4r (2.7.1)
|
||||
nokogiri (1.15.6)
|
||||
mini_portile2 (~> 2.8.2)
|
||||
racc (~> 1.4)
|
||||
parallel (1.23.0)
|
||||
parser (3.2.2.4)
|
||||
parallel (1.24.0)
|
||||
parser (3.3.0.5)
|
||||
ast (~> 2.4.1)
|
||||
racc
|
||||
pg (1.4.6)
|
||||
pg (1.5.6)
|
||||
public_suffix (5.0.4)
|
||||
puma (6.4.0)
|
||||
puma (6.4.2)
|
||||
nio4r (~> 2.0)
|
||||
racc (1.7.3)
|
||||
rack (2.2.8)
|
||||
rack (2.2.9)
|
||||
rack-test (2.1.0)
|
||||
rack (>= 1.3)
|
||||
rails (6.1.7.6)
|
||||
actioncable (= 6.1.7.6)
|
||||
actionmailbox (= 6.1.7.6)
|
||||
actionmailer (= 6.1.7.6)
|
||||
actionpack (= 6.1.7.6)
|
||||
actiontext (= 6.1.7.6)
|
||||
actionview (= 6.1.7.6)
|
||||
activejob (= 6.1.7.6)
|
||||
activemodel (= 6.1.7.6)
|
||||
activerecord (= 6.1.7.6)
|
||||
activestorage (= 6.1.7.6)
|
||||
activesupport (= 6.1.7.6)
|
||||
rails (6.1.7.7)
|
||||
actioncable (= 6.1.7.7)
|
||||
actionmailbox (= 6.1.7.7)
|
||||
actionmailer (= 6.1.7.7)
|
||||
actionpack (= 6.1.7.7)
|
||||
actiontext (= 6.1.7.7)
|
||||
actionview (= 6.1.7.7)
|
||||
activejob (= 6.1.7.7)
|
||||
activemodel (= 6.1.7.7)
|
||||
activerecord (= 6.1.7.7)
|
||||
activestorage (= 6.1.7.7)
|
||||
activesupport (= 6.1.7.7)
|
||||
bundler (>= 1.15.0)
|
||||
railties (= 6.1.7.6)
|
||||
railties (= 6.1.7.7)
|
||||
sprockets-rails (>= 2.0.0)
|
||||
rails-dom-testing (2.2.0)
|
||||
activesupport (>= 5.0.0)
|
||||
|
@ -165,9 +169,9 @@ GEM
|
|||
rails-html-sanitizer (1.6.0)
|
||||
loofah (~> 2.21)
|
||||
nokogiri (~> 1.14)
|
||||
railties (6.1.7.6)
|
||||
actionpack (= 6.1.7.6)
|
||||
activesupport (= 6.1.7.6)
|
||||
railties (6.1.7.7)
|
||||
actionpack (= 6.1.7.7)
|
||||
activesupport (= 6.1.7.7)
|
||||
method_source
|
||||
rake (>= 12.2)
|
||||
thor (~> 1.0)
|
||||
|
@ -180,51 +184,56 @@ GEM
|
|||
htmlentities
|
||||
rbpdf-font (~> 1.19.0)
|
||||
rbpdf-font (1.19.1)
|
||||
redcarpet (3.5.1)
|
||||
regexp_parser (2.8.2)
|
||||
redcarpet (3.6.0)
|
||||
regexp_parser (2.9.0)
|
||||
request_store (1.5.1)
|
||||
rack (>= 1.4)
|
||||
rexml (3.2.6)
|
||||
roadie (5.2.0)
|
||||
roadie (5.2.1)
|
||||
css_parser (~> 1.4)
|
||||
nokogiri (~> 1.15)
|
||||
roadie-rails (3.0.0)
|
||||
railties (>= 5.1, < 7.1)
|
||||
roadie-rails (3.1.0)
|
||||
railties (>= 5.1, < 8.0)
|
||||
roadie (~> 5.0)
|
||||
rotp (6.3.0)
|
||||
rouge (3.28.0)
|
||||
rouge (4.2.1)
|
||||
rqrcode (2.2.0)
|
||||
chunky_png (~> 1.0)
|
||||
rqrcode_core (~> 1.0)
|
||||
rqrcode_core (1.2.0)
|
||||
rubocop (1.26.1)
|
||||
rubocop (1.57.2)
|
||||
json (~> 2.3)
|
||||
language_server-protocol (>= 3.17.0)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 3.1.0.0)
|
||||
parser (>= 3.2.2.4)
|
||||
rainbow (>= 2.2.2, < 4.0)
|
||||
regexp_parser (>= 1.8, < 3.0)
|
||||
rexml
|
||||
rubocop-ast (>= 1.16.0, < 2.0)
|
||||
rexml (>= 3.2.5, < 4.0)
|
||||
rubocop-ast (>= 1.28.1, < 2.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 1.4.0, < 3.0)
|
||||
rubocop-ast (1.30.0)
|
||||
parser (>= 3.2.1.0)
|
||||
rubocop-performance (1.13.3)
|
||||
unicode-display_width (>= 2.4.0, < 3.0)
|
||||
rubocop-ast (1.31.2)
|
||||
parser (>= 3.3.0.4)
|
||||
rubocop-performance (1.19.1)
|
||||
rubocop (>= 1.7.0, < 2.0)
|
||||
rubocop-ast (>= 0.4.0)
|
||||
rubocop-rails (2.14.2)
|
||||
rubocop-rails (2.22.2)
|
||||
activesupport (>= 4.2.0)
|
||||
rack (>= 1.1)
|
||||
rubocop (>= 1.7.0, < 2.0)
|
||||
rubocop (>= 1.33.0, < 2.0)
|
||||
rubocop-ast (>= 1.30.0, < 2.0)
|
||||
ruby-progressbar (1.13.0)
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.3.2)
|
||||
sanitize (6.1.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.12.0)
|
||||
selenium-webdriver (3.142.7)
|
||||
childprocess (>= 0.5, < 4.0)
|
||||
rubyzip (>= 1.2.2)
|
||||
simplecov (0.21.2)
|
||||
selenium-webdriver (4.18.1)
|
||||
base64 (~> 0.2)
|
||||
rexml (~> 3.2, >= 3.2.5)
|
||||
rubyzip (>= 1.2.2, < 3.0)
|
||||
websocket (~> 1.0)
|
||||
simplecov (0.22.0)
|
||||
docile (~> 1.1)
|
||||
simplecov-html (~> 0.11)
|
||||
simplecov_json_formatter (~> 0.1)
|
||||
|
@ -237,24 +246,25 @@ GEM
|
|||
actionpack (>= 5.2)
|
||||
activesupport (>= 5.2)
|
||||
sprockets (>= 3.0.0)
|
||||
strscan (3.0.7)
|
||||
thor (1.3.0)
|
||||
sqlite3 (1.6.9)
|
||||
mini_portile2 (~> 2.8.0)
|
||||
thor (1.3.1)
|
||||
timeout (0.4.1)
|
||||
tzinfo (2.0.6)
|
||||
concurrent-ruby (~> 1.0)
|
||||
unicode-display_width (2.5.0)
|
||||
webdrivers (4.6.1)
|
||||
nokogiri (~> 1.6)
|
||||
rubyzip (>= 1.3.0)
|
||||
selenium-webdriver (>= 3.0, < 4.0)
|
||||
webrick (1.8.1)
|
||||
websocket (1.2.10)
|
||||
websocket-driver (0.7.6)
|
||||
websocket-extensions (>= 0.1.0)
|
||||
websocket-extensions (0.1.5)
|
||||
with_advisory_lock (5.1.0)
|
||||
activerecord (>= 6.1)
|
||||
zeitwerk (>= 2.6)
|
||||
xpath (3.2.0)
|
||||
nokogiri (~> 1.8)
|
||||
yard (0.9.34)
|
||||
zeitwerk (2.6.12)
|
||||
yard (0.9.36)
|
||||
zeitwerk (2.6.13)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
@ -262,52 +272,52 @@ PLATFORMS
|
|||
DEPENDENCIES
|
||||
actionpack-xml_parser
|
||||
addressable
|
||||
bundler (>= 1.12.0)
|
||||
capybara (~> 3.38.0)
|
||||
capybara (>= 3.39)
|
||||
commonmarker (~> 0.23.8)
|
||||
csv (~> 3.2.0)
|
||||
csv (~> 3.2.6)
|
||||
deckar01-task_list (= 2.3.2)
|
||||
ffi
|
||||
html-pipeline (~> 2.13.2)
|
||||
i18n (~> 1.10.0)
|
||||
i18n (~> 1.14.1)
|
||||
listen (~> 3.3)
|
||||
mail (~> 2.7.1)
|
||||
mail (~> 2.8.1)
|
||||
marcel
|
||||
mini_magick (~> 4.11.0)
|
||||
mini_magick (~> 4.12.0)
|
||||
mini_mime (~> 1.1.0)
|
||||
mocha (>= 2.0.1)
|
||||
mysql2 (~> 0.5.0)
|
||||
net-imap (~> 0.2.2)
|
||||
net-imap (~> 0.3.4)
|
||||
net-ldap (~> 0.17.0)
|
||||
net-pop (~> 0.1.1)
|
||||
net-smtp (~> 0.3.0)
|
||||
net-pop (~> 0.1.2)
|
||||
net-smtp (~> 0.3.3)
|
||||
nokogiri (~> 1.15.2)
|
||||
pg (~> 1.4.2)
|
||||
pg (~> 1.5.3)
|
||||
puma
|
||||
rails (= 6.1.7.6)
|
||||
rails (= 6.1.7.7)
|
||||
rails-dom-testing
|
||||
rbpdf (~> 1.21.3)
|
||||
redcarpet (~> 3.5.1)
|
||||
redcarpet (~> 3.6.0)
|
||||
request_store (~> 1.5.0)
|
||||
rexml
|
||||
roadie-rails (~> 3.0.0)
|
||||
roadie-rails (~> 3.1.0)
|
||||
rotp (>= 5.0.0)
|
||||
rouge (~> 3.28.0)
|
||||
rouge (~> 4.2.0)
|
||||
rqrcode
|
||||
rubocop (~> 1.26.0)
|
||||
rubocop-performance (~> 1.13.0)
|
||||
rubocop-rails (~> 2.14.0)
|
||||
rubocop (~> 1.57.0)
|
||||
rubocop-performance (~> 1.19.0)
|
||||
rubocop-rails (~> 2.22.1)
|
||||
rubyzip (~> 2.3.0)
|
||||
sanitize (~> 6.0)
|
||||
selenium-webdriver (~> 3.142.7)
|
||||
simplecov (~> 0.21.2)
|
||||
selenium-webdriver (>= 4.11.0)
|
||||
simplecov (~> 0.22.0)
|
||||
sqlite3 (~> 1.6.0)
|
||||
tzinfo-data
|
||||
webdrivers (= 4.6.1)
|
||||
webrick
|
||||
with_advisory_lock
|
||||
yard
|
||||
|
||||
RUBY VERSION
|
||||
ruby 3.1.4p223
|
||||
|
||||
BUNDLED WITH
|
||||
2.4.12
|
||||
2.4.22
|
|
@ -5,10 +5,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1fdbks9byqqlkd6glj6lkz5f1z6948hh8fhv9x5pzqciralmz142";
|
||||
sha256 = "1br4vjv1si1gvhh8p96r95crljqwbx3nlzbkkdqg21xq8f9106kl";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.6";
|
||||
version = "6.1.7.7";
|
||||
};
|
||||
actionmailbox = {
|
||||
dependencies = ["actionpack" "activejob" "activerecord" "activestorage" "activesupport" "mail"];
|
||||
|
@ -16,10 +16,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1rfya6qgsl14cm9l2w7h7lg4znsyg3gqiskhqr8wn76sh0x2hln0";
|
||||
sha256 = "1i21621aiv233pa8fp1pvibwgbzzdddp0bx44qqn16yca6z35zrj";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.6";
|
||||
version = "6.1.7.7";
|
||||
};
|
||||
actionmailer = {
|
||||
dependencies = ["actionpack" "actionview" "activejob" "activesupport" "mail" "rails-dom-testing"];
|
||||
|
@ -27,10 +27,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0jr9jpf542svzqz8x68s08jnf30shxrrh7rq1a0s7jia5a5zx3qd";
|
||||
sha256 = "0irkj00z2mzsvbrpdl8sd08k04hz5lhvy8rfkzhx2sqq5x1n155a";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.6";
|
||||
version = "6.1.7.7";
|
||||
};
|
||||
actionpack = {
|
||||
dependencies = ["actionview" "activesupport" "rack" "rack-test" "rails-dom-testing" "rails-html-sanitizer"];
|
||||
|
@ -38,10 +38,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0vf6ncs647psa9p23d2108zgmlf0pr7gcjr080yg5yf68gyhs53k";
|
||||
sha256 = "15jp9a1mgz8xjm618s8g69d70w19nn2svav4fhz3aarjwfbkvwj7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.6";
|
||||
version = "6.1.7.7";
|
||||
};
|
||||
actionpack-xml_parser = {
|
||||
dependencies = ["actionpack" "railties"];
|
||||
|
@ -60,10 +60,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1i8s3v6m8q3y17c40l6d3k2vs1mdqr0y1lfm7i6dfbj2y673lk9r";
|
||||
sha256 = "0hjm6vapqq1f7addwl71qwzn72lnmq686ypnbyhd873hqlnzangf";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.6";
|
||||
version = "6.1.7.7";
|
||||
};
|
||||
actionview = {
|
||||
dependencies = ["activesupport" "builder" "erubi" "rails-dom-testing" "rails-html-sanitizer"];
|
||||
|
@ -71,10 +71,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1s4c1n5lv31sc7w4w74xz8gzyq3sann00bm4l7lxgy3vgi2wqkid";
|
||||
sha256 = "1hkdqf299dx8bgvgpgknf37kcbprqgq0iy8xdipww6pmbbc45bwk";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.6";
|
||||
version = "6.1.7.7";
|
||||
};
|
||||
activejob = {
|
||||
dependencies = ["activesupport" "globalid"];
|
||||
|
@ -82,10 +82,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1641003plszig5ybhrqy90fv43l1vcai5h35qmhh9j12byk5hp26";
|
||||
sha256 = "06rp7kks22wrc55vric8yh0kg137jsiwd62jimdiqhh9bp48jbbm";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.6";
|
||||
version = "6.1.7.7";
|
||||
};
|
||||
activemodel = {
|
||||
dependencies = ["activesupport"];
|
||||
|
@ -93,10 +93,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "148szdj5jlnfpv3nmy8cby8rxgpdvs43f3rzqby1f7a0l2knd3va";
|
||||
sha256 = "0zz32997k2fsyd0fzrh8f79yjr6hv3i4j9wykkxncl02j8dhrkay";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.6";
|
||||
version = "6.1.7.7";
|
||||
};
|
||||
activerecord = {
|
||||
dependencies = ["activemodel" "activesupport"];
|
||||
|
@ -104,10 +104,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0n7hg582ajdncilfk1kkw8qfdchymp2gqgkad1znlhlmclihsafr";
|
||||
sha256 = "0qzymgyrvw2k32ldabp2jr0zgp6z9w8smyb946qgvs9zfs4n2qnn";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.6";
|
||||
version = "6.1.7.7";
|
||||
};
|
||||
activestorage = {
|
||||
dependencies = ["actionpack" "activejob" "activerecord" "activesupport" "marcel" "mini_mime"];
|
||||
|
@ -115,10 +115,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "16pylwnqsbvq2wxhl7k1rnravbr3dgpjmnj0psz5gijgkydd52yc";
|
||||
sha256 = "12i033l3m41vr3qs7msy4p88a6pglx9vnsh5nakp0b6abf6mv5mk";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.6";
|
||||
version = "6.1.7.7";
|
||||
};
|
||||
activesupport = {
|
||||
dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
|
||||
|
@ -126,10 +126,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1nhrdih0rk46i0s6x7nqhbypmj1hf23zl5gfl9xasb6k4r2a1dxk";
|
||||
sha256 = "0r2i9b0pm0b1dy8fc7kyls1g7f0bcnyq53v825rykibzdqfqdfgp";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.6";
|
||||
version = "6.1.7.7";
|
||||
};
|
||||
addressable = {
|
||||
dependencies = ["public_suffix"];
|
||||
|
@ -137,10 +137,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "05r1fwy487klqkya7vzia8hnklcxy4vr92m9dmni3prfwk6zpw33";
|
||||
sha256 = "0irbdwkkjwzajq1ip6ba46q49sxnrl2cw7ddkdhsfhb6aprnm3vr";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.8.5";
|
||||
version = "2.8.6";
|
||||
};
|
||||
ast = {
|
||||
groups = ["default" "test"];
|
||||
|
@ -152,6 +152,16 @@
|
|||
};
|
||||
version = "2.4.2";
|
||||
};
|
||||
base64 = {
|
||||
groups = ["default" "test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "01qml0yilb9basf7is2614skjp8384h2pycfx86cr8023arfj98g";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.2.0";
|
||||
};
|
||||
builder = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
|
@ -168,20 +178,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "123198zk2ak8mziwa5jc3ckgpmsg08zn064n3aywnqm9s1bwjv3v";
|
||||
sha256 = "1vxfah83j6zpw3v5hic0j70h519nvmix2hbszmjwm8cfawhagns2";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.38.0";
|
||||
};
|
||||
childprocess = {
|
||||
groups = ["default" "test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1ic028k8xgm2dds9mqnvwwx3ibaz32j8455zxr9f4bcnviyahya5";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.0";
|
||||
version = "3.40.0";
|
||||
};
|
||||
chunky_png = {
|
||||
groups = ["default"];
|
||||
|
@ -208,13 +208,13 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
|
||||
sha256 = "1qh1b14jwbbj242klkyz5fc7npd4j0mvndz62gajhvl1l3wd7zc2";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.2";
|
||||
version = "1.2.3";
|
||||
};
|
||||
crass = {
|
||||
groups = ["common_mark" "default"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
|
@ -239,10 +239,20 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1zmrgngggg4yvdbggdx9p3z4wcav4vxfigramxxvjh3hi7l12pig";
|
||||
sha256 = "1fp986v5xfpzcj9v3dyvdd26fcnmbbzjwcp66pz34hv6g86z66a9";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.2.8";
|
||||
version = "3.2.9";
|
||||
};
|
||||
date = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "149jknsq999gnhy865n33fkk22s0r447k76x9pmcnnwldfv2q7wp";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.3.4";
|
||||
};
|
||||
deckar01-task_list = {
|
||||
dependencies = ["html-pipeline"];
|
||||
|
@ -255,16 +265,6 @@
|
|||
};
|
||||
version = "2.3.2";
|
||||
};
|
||||
digest = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "01qkpbkxq83ip3iysfh2kjrg9sh2n2q91prhyxh3vq10lcfzv9l1";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.1.1";
|
||||
};
|
||||
docile = {
|
||||
groups = ["default" "test"];
|
||||
platforms = [];
|
||||
|
@ -318,7 +318,7 @@
|
|||
};
|
||||
html-pipeline = {
|
||||
dependencies = ["activesupport" "nokogiri"];
|
||||
groups = ["common_mark"];
|
||||
groups = ["common_mark" "default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
|
@ -343,10 +343,30 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0b2qyvnk4yynlg17ymkq4g5xgr275637fhl1mjh0valw3cb1fhhg";
|
||||
sha256 = "0lbm33fpb3w06wd2231sg58dwlwgjsvym93m548ajvl6s3mfvpn7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.10.0";
|
||||
version = "1.14.4";
|
||||
};
|
||||
json = {
|
||||
groups = ["default" "test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0r9jmjhg2ly3l736flk7r2al47b5c8cayh0gqkq0yhjqzc9a6zhq";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.7.1";
|
||||
};
|
||||
language_server-protocol = {
|
||||
groups = ["default" "test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0gvb1j8xsqxms9mww01rmdl78zkd72zgxaap56bhv8j45z05hp1x";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.17.0.3";
|
||||
};
|
||||
listen = {
|
||||
dependencies = ["rb-fsevent" "rb-inotify"];
|
||||
|
@ -354,10 +374,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "13rgkfar8pp31z1aamxf5y7cfq88wv6rxxcwy7cmm177qq508ycn";
|
||||
sha256 = "0rwwsmvq79qwzl6324yc53py02kbrcww35si720490z5w0j497nv";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.8.0";
|
||||
version = "3.9.0";
|
||||
};
|
||||
loofah = {
|
||||
dependencies = ["crass" "nokogiri"];
|
||||
|
@ -371,25 +391,25 @@
|
|||
version = "2.22.0";
|
||||
};
|
||||
mail = {
|
||||
dependencies = ["mini_mime"];
|
||||
dependencies = ["mini_mime" "net-imap" "net-pop" "net-smtp"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "00wwz6ys0502dpk8xprwcqfwyf3hmnx6lgxaiq6vj43mkx43sapc";
|
||||
sha256 = "1bf9pysw1jfgynv692hhaycfxa8ckay1gjw5hz3madrbrynryfzc";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.7.1";
|
||||
version = "2.8.1";
|
||||
};
|
||||
marcel = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0kky3yiwagsk8gfbzn3mvl2fxlh3b39v6nawzm4wpjs6xxvvc4x0";
|
||||
sha256 = "190n2mk8m1l708kr88fh6mip9sdsh339d2s6sgrik3sbnvz4jmhd";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.2";
|
||||
version = "1.0.4";
|
||||
};
|
||||
matrix = {
|
||||
groups = ["default" "test"];
|
||||
|
@ -416,10 +436,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1aj604x11d9pksbljh0l38f70b558rhdgji1s9i763hiagvvx2hs";
|
||||
sha256 = "0slh78f9z6n0l1i2km7m48yz7l4fjrk88sj1f4mh1wb39sl2yc37";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.11.0";
|
||||
version = "4.12.0";
|
||||
};
|
||||
mini_mime = {
|
||||
groups = ["default" "test"];
|
||||
|
@ -433,7 +453,15 @@
|
|||
};
|
||||
mini_portile2 = {
|
||||
groups = ["common_mark" "default" "test"];
|
||||
platforms = [];
|
||||
platforms = [{
|
||||
engine = "maglev";
|
||||
} {
|
||||
engine = "mingw";
|
||||
} {
|
||||
engine = "mingw";
|
||||
} {
|
||||
engine = "ruby";
|
||||
}];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1kl9c3kdchjabrihdqfmcplk3lq4cw1rr9f378y6q22qwy5dndvs";
|
||||
|
@ -446,10 +474,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0bkmfi9mb49m0fkdhl2g38i3xxa02d411gg0m8x0gvbwfmmg5ym3";
|
||||
sha256 = "07lq26b86giy3ha3fhrywk9r1ajhc2pm2mzj657jnpnbj1i6g17a";
|
||||
type = "gem";
|
||||
};
|
||||
version = "5.20.0";
|
||||
version = "5.22.3";
|
||||
};
|
||||
mocha = {
|
||||
dependencies = ["ruby2_keywords"];
|
||||
|
@ -475,21 +503,21 @@
|
|||
}];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1gjvj215qdhwk3292sc7xsn6fmwnnaq2xs35hh5hc8d8j22izlbn";
|
||||
sha256 = "0cysv1wdfdbizwkd0d9s16s832khdwv31pgp01mw2g3bbpa4gx3h";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.5.5";
|
||||
version = "0.5.6";
|
||||
};
|
||||
net-imap = {
|
||||
dependencies = ["digest" "net-protocol" "strscan"];
|
||||
dependencies = ["date" "net-protocol"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1rl79ykmxa2k4dlk6ykrb9l0a4h101q1gd8c4qv3cl0p9h68zmbn";
|
||||
sha256 = "0lf7wqg7czhaj51qsnmn28j7jmcxhkh3m28rl1cjrqsgjxhwj7r3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.2.3";
|
||||
version = "0.3.7";
|
||||
};
|
||||
net-ldap = {
|
||||
groups = ["ldap"];
|
||||
|
@ -529,20 +557,20 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1c6md06hm5bf6rv53sk54dl2vg038pg8kglwv3rayx0vk2mdql9x";
|
||||
sha256 = "0hwiqplhi29kfjl8jm0rhl51qv6wmxfynl4qap1dhv9xdwc4bm1x";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.3.3";
|
||||
version = "0.3.4";
|
||||
};
|
||||
nio4r = {
|
||||
groups = ["default" "test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1y99dfzlb3kgzh7pfk8km0p5zjiblxyh5rm8yal9h523vi5awji8";
|
||||
sha256 = "15iwbiij52x6jhdbl0rkcldnhfndmsy0sbnsygkr9vhskfqrp72m";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.6.1";
|
||||
version = "2.7.1";
|
||||
};
|
||||
nokogiri = {
|
||||
dependencies = ["mini_portile2" "racc"];
|
||||
|
@ -550,20 +578,20 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "004ip9x9281fxhpipwi8di1sb1dnabscq9dy1p3cxgdwbniqqi12";
|
||||
sha256 = "023f2j0q8makgmmfj4pv2fhwgcbh9y8s678za1cb68ry9fdpkkkh";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.15.5";
|
||||
version = "1.15.6";
|
||||
};
|
||||
parallel = {
|
||||
groups = ["default" "test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0jcc512l38c0c163ni3jgskvq1vc3mr8ly5pvjijzwvfml9lf597";
|
||||
sha256 = "15wkxrg1sj3n1h2g8jcrn7gcapwcgxr659ypjf75z1ipkgxqxwsv";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.23.0";
|
||||
version = "1.24.0";
|
||||
};
|
||||
parser = {
|
||||
dependencies = ["ast" "racc"];
|
||||
|
@ -571,10 +599,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0r69dbh6h6j4d54isany2ir4ni4gf2ysvk3k44awi6amz18nggpd";
|
||||
sha256 = "11r6kp8wam0nkfvnwyc1fmvky102r1vcfr84vi2p1a2wa0z32j3p";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.2.2.4";
|
||||
version = "3.3.0.5";
|
||||
};
|
||||
pg = {
|
||||
groups = ["default"];
|
||||
|
@ -589,10 +617,10 @@
|
|||
}];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "07m6lxljabw9kyww5k5lgsxsznsm1v5l14r1la09gqka9b5kv3yr";
|
||||
sha256 = "071b55bhsz7mivlnp2kv0a11msnl7xg5awvk8mlflpl270javhsb";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.4.6";
|
||||
version = "1.5.6";
|
||||
};
|
||||
public_suffix = {
|
||||
groups = ["default" "test"];
|
||||
|
@ -610,10 +638,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1y8jcw80zcxvdq0id329lzmp5pzx7hpac227d7sgjkblc89s3pfm";
|
||||
sha256 = "0i2vaww6qcazj0ywva1plmjnj6rk23b01szswc5jhcq7s2cikd1y";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.4.0";
|
||||
version = "6.4.2";
|
||||
};
|
||||
racc = {
|
||||
groups = ["common_mark" "default" "test"];
|
||||
|
@ -630,10 +658,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "15rdwbyk71c9nxvd527bvb8jxkcys8r3dj3vqra5b3sa63qs30vv";
|
||||
sha256 = "0hj0rkw2z9r1lcg2wlrcld2n3phwrcgqcp7qd1g9a7hwgalh2qzx";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.2.8";
|
||||
version = "2.2.9";
|
||||
};
|
||||
rack-test = {
|
||||
dependencies = ["rack"];
|
||||
|
@ -652,10 +680,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0gf5dqabzd0mf0q39a07kf0smdm2cv2z5swl3zr4cz50yb85zz3l";
|
||||
sha256 = "0jqp5fggkxbjm4rhsywa7j5rvwkzp6gbaa1mg4k8zxrbfczhxwwl";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.6";
|
||||
version = "6.1.7.7";
|
||||
};
|
||||
rails-dom-testing = {
|
||||
dependencies = ["activesupport" "minitest" "nokogiri"];
|
||||
|
@ -685,10 +713,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1vq4ahyg9hraixxmmwwypdnpcylpvznvdxhj4xa23xk45wzbl3h7";
|
||||
sha256 = "07qxgrd92yq0cckrmzx54glvjdd1xx87xysgvaqd75hn50klp8ip";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.1.7.6";
|
||||
version = "6.1.7.7";
|
||||
};
|
||||
rainbow = {
|
||||
groups = ["default" "test"];
|
||||
|
@ -753,24 +781,24 @@
|
|||
version = "1.19.1";
|
||||
};
|
||||
redcarpet = {
|
||||
groups = ["common_mark" "markdown"];
|
||||
groups = ["markdown"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0bvk8yyns5s1ls437z719y5sdv9fr8kfs8dmr6g8s761dv5n8zvi";
|
||||
sha256 = "1sg9sbf9pm91l7lac7fs4silabyn0vflxwaa2x3lrzsm0ff8ilca";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.5.1";
|
||||
version = "3.6.0";
|
||||
};
|
||||
regexp_parser = {
|
||||
groups = ["default" "test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1d9a5s3qrjdy50ll2s32gg3qmf10ryp3v2nr5k718kvfadp50ray";
|
||||
sha256 = "1ndxm0xnv27p4gv6xynk6q41irckj76q1jsqpysd9h6f86hhp841";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.8.2";
|
||||
version = "2.9.0";
|
||||
};
|
||||
request_store = {
|
||||
dependencies = ["rack"];
|
||||
|
@ -799,10 +827,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1qs594ybaz0lh2sakh95syzvhva4jms8xyiwhgjfncf3ri0qxp7l";
|
||||
sha256 = "1mh1a0m0i0xrm20nry4d3gf0q5kbmm5lp15n52r93gcjwwfgd974";
|
||||
type = "gem";
|
||||
};
|
||||
version = "5.2.0";
|
||||
version = "5.2.1";
|
||||
};
|
||||
roadie-rails = {
|
||||
dependencies = ["railties" "roadie"];
|
||||
|
@ -810,10 +838,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "16j1cjhq8xqr77vyf7m7ip2132619wdnpvlbig4cnn96yyi0cnan";
|
||||
sha256 = "08fycjfbg9rqksk3bch8qv76g7acd1jbxy2y68lsqz1gxfky2ias";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.0";
|
||||
version = "3.1.0";
|
||||
};
|
||||
rotp = {
|
||||
groups = ["default"];
|
||||
|
@ -830,10 +858,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "080fswzii68wnbsg7pgq55ba7p289sqjlxwp4vch0h32qy1f8v8d";
|
||||
sha256 = "1zd1pdldi6h8x27dqim7cy8m69xr01aw5c8k1zhkz497n4np6wgk";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.28.0";
|
||||
version = "4.2.1";
|
||||
};
|
||||
rqrcode = {
|
||||
dependencies = ["chunky_png" "rqrcode_core"];
|
||||
|
@ -857,15 +885,15 @@
|
|||
version = "1.2.0";
|
||||
};
|
||||
rubocop = {
|
||||
dependencies = ["parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
|
||||
dependencies = ["json" "language_server-protocol" "parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
|
||||
groups = ["test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "06105yrqajpm5l07fng1nbk55y9490hny542zclnan8hg841pjgl";
|
||||
sha256 = "06qnp5zs233j4f59yyqrg8al6hr9n4a7vcdg3p31v0np8bz9srwg";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.26.1";
|
||||
version = "1.57.2";
|
||||
};
|
||||
rubocop-ast = {
|
||||
dependencies = ["parser"];
|
||||
|
@ -873,10 +901,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1cs9cc5p9q70valk4na3lki4xs88b52486p2v46yx3q1n5969bgs";
|
||||
sha256 = "1v3q8n48w8h809rqbgzihkikr4g3xk72m1na7s97jdsmjjq6y83w";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.30.0";
|
||||
version = "1.31.2";
|
||||
};
|
||||
rubocop-performance = {
|
||||
dependencies = ["rubocop" "rubocop-ast"];
|
||||
|
@ -884,21 +912,21 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "17ny81dy5gjrvris8mni7la8yjg57snphyg9nmvnc3al7yhwr74x";
|
||||
sha256 = "1pzsrnjmrachdjxzl9jpw47cydicn3408vgdg3a4bss4v5r42rjj";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.13.3";
|
||||
version = "1.19.1";
|
||||
};
|
||||
rubocop-rails = {
|
||||
dependencies = ["activesupport" "rack" "rubocop"];
|
||||
dependencies = ["activesupport" "rack" "rubocop" "rubocop-ast"];
|
||||
groups = ["test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "14xagb3jbms5mlcf932kx1djn2q4k952d4xia75ll36vh7xf2fpp";
|
||||
sha256 = "0ym0h2w97b8c2h6zl44m22lzg253qkmim0ali32aiy58ddvbj0mm";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.14.2";
|
||||
version = "2.22.2";
|
||||
};
|
||||
ruby-progressbar = {
|
||||
groups = ["default" "test"];
|
||||
|
@ -932,7 +960,7 @@
|
|||
};
|
||||
sanitize = {
|
||||
dependencies = ["crass" "nokogiri"];
|
||||
groups = ["common_mark"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
|
@ -942,15 +970,15 @@
|
|||
version = "6.1.0";
|
||||
};
|
||||
selenium-webdriver = {
|
||||
dependencies = ["childprocess" "rubyzip"];
|
||||
dependencies = ["base64" "rexml" "rubyzip" "websocket"];
|
||||
groups = ["test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0adcvp86dinaqq3nhf8p3m0rl2g6q0a4h52k0i7kdnsg1qz9k86y";
|
||||
sha256 = "1asysih4l1mv24wqxrbnz0c0454kw3dhqaj6nsa8pyn9fjjdms5b";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.142.7";
|
||||
version = "4.18.1";
|
||||
};
|
||||
simplecov = {
|
||||
dependencies = ["docile" "simplecov-html" "simplecov_json_formatter"];
|
||||
|
@ -958,10 +986,10 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1hrv046jll6ad1s964gsmcq4hvkr3zzr6jc7z1mns22mvfpbc3cr";
|
||||
sha256 = "198kcbrjxhhzca19yrdcd6jjj9sb51aaic3b0sc3pwjghg3j49py";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.21.2";
|
||||
version = "0.22.0";
|
||||
};
|
||||
simplecov-html = {
|
||||
groups = ["default" "test"];
|
||||
|
@ -1005,25 +1033,34 @@
|
|||
};
|
||||
version = "3.4.2";
|
||||
};
|
||||
strscan = {
|
||||
sqlite3 = {
|
||||
dependencies = ["mini_portile2"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
platforms = [{
|
||||
engine = "maglev";
|
||||
} {
|
||||
engine = "mingw";
|
||||
} {
|
||||
engine = "mingw";
|
||||
} {
|
||||
engine = "ruby";
|
||||
}];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0w2lc1mqia13x43ajzhih419r40ppddg936ydhawz57f63ab6fll";
|
||||
sha256 = "08irz5llz31im8pmkk5k0kw433jyyji1qa98xkdmpphncdjr38am";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.7";
|
||||
version = "1.6.9";
|
||||
};
|
||||
thor = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1hx77jxkrwi66yvs10wfxqa8s25ds25ywgrrf66acm9nbfg7zp0s";
|
||||
sha256 = "1vq1fjp45az9hfp6fxljhdrkv75cvbab1jfrwcw738pnsiqk8zps";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.3.0";
|
||||
version = "1.3.1";
|
||||
};
|
||||
timeout = {
|
||||
groups = ["default"];
|
||||
|
@ -1056,17 +1093,6 @@
|
|||
};
|
||||
version = "2.5.0";
|
||||
};
|
||||
webdrivers = {
|
||||
dependencies = ["nokogiri" "rubyzip" "selenium-webdriver"];
|
||||
groups = ["test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1naymcfmm9pkf0f67xd99d9f6dpv477ggyvc1c04gxifirynfydp";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.6.1";
|
||||
};
|
||||
webrick = {
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
|
@ -1077,6 +1103,16 @@
|
|||
};
|
||||
version = "1.8.1";
|
||||
};
|
||||
websocket = {
|
||||
groups = ["default" "test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1a4zc8d0d91c3xqwapda3j3zgpfwdbj76hkb69xn6qvfkfks9h9c";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.10";
|
||||
};
|
||||
websocket-driver = {
|
||||
dependencies = ["websocket-extensions"];
|
||||
groups = ["default"];
|
||||
|
@ -1098,6 +1134,17 @@
|
|||
};
|
||||
version = "0.1.5";
|
||||
};
|
||||
with_advisory_lock = {
|
||||
dependencies = ["activerecord" "zeitwerk"];
|
||||
groups = ["default"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1mzy29advrdczf88j2ffvck4kf8sfhxn07sym9ciq9rv061cv4h6";
|
||||
type = "gem";
|
||||
};
|
||||
version = "5.1.0";
|
||||
};
|
||||
xpath = {
|
||||
dependencies = ["nokogiri"];
|
||||
groups = ["default" "test"];
|
||||
|
@ -1114,19 +1161,19 @@
|
|||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "013yrnwx1zhzhn1fnc19zck22a1qgimsaglp2iwgf5bz9l8h93js";
|
||||
sha256 = "1r0b8w58p7gy06wph1qdjv2p087hfnmhd9jk23vjdj803dn761am";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.34";
|
||||
version = "0.9.36";
|
||||
};
|
||||
zeitwerk = {
|
||||
groups = ["common_mark" "default" "test"];
|
||||
platforms = [];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1gir0if4nryl1jhwi28669gjwhxb7gzrm1fcc8xzsch3bnbi47jn";
|
||||
sha256 = "1m67qmsak3x8ixs8rb971azl3l7wapri65pmbf5z886h46q63f1d";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.6.12";
|
||||
version = "2.6.13";
|
||||
};
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
{ lib, stdenv, fetchurl, bundlerEnv, ruby, defaultGemConfig, makeWrapper, nixosTests }:
|
||||
{ lib, stdenv, fetchurl, bundlerEnv, ruby, makeWrapper, nixosTests }:
|
||||
|
||||
let
|
||||
version = "5.0.6";
|
||||
version = "5.1.2";
|
||||
rubyEnv = bundlerEnv {
|
||||
name = "redmine-env-${version}";
|
||||
|
||||
|
@ -16,7 +16,7 @@ in
|
|||
|
||||
src = fetchurl {
|
||||
url = "https://www.redmine.org/releases/${pname}-${version}.tar.gz";
|
||||
hash = "sha256-SI/gjzeo6xARQVkiqOp0O3842Kel+IIpUKNKN13PCO4=";
|
||||
hash = "sha256-JsDKCpqu4c65g4Jb8SZsmbCFC/ATwXhxP1o7AIABISM=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
|
@ -6,11 +6,11 @@
|
|||
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "stats";
|
||||
version = "2.10.5";
|
||||
version = "2.10.6";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/exelban/stats/releases/download/v${finalAttrs.version}/Stats.dmg";
|
||||
hash = "sha256-IBliS0RSWlCSLYeSHTapW9B2mPJtZqL7k8jskpXy1F4=";
|
||||
hash = "sha256-5FjxEBZ+HbiWVR/8DBfVPeWACRwrw+Kcn1jld/CR+Ck=";
|
||||
};
|
||||
sourceRoot = ".";
|
||||
|
||||
|
|
|
@ -7,13 +7,13 @@
|
|||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "uxn";
|
||||
version = "unstable-2024-03-18";
|
||||
version = "unstable-2024-03-30";
|
||||
|
||||
src = fetchFromSourcehut {
|
||||
owner = "~rabbits";
|
||||
repo = "uxn";
|
||||
rev = "250aecc920a6f12d2d5479a5230a31630dac2a1e";
|
||||
hash = "sha256-nhKlcuhXkrhecRwVIuSf+jOmFbX0NMhmmc5pj6MCNdQ=";
|
||||
rev = "fc6ec0b387723940868133fade8854ad37648881";
|
||||
hash = "sha256-Ver8oI3IzxwF6KeZ85d3mmiCwARVoH+RZoFNCxhGFDc=";
|
||||
};
|
||||
|
||||
outputs = [ "out" "projects" ];
|
||||
|
|
|
@ -38,6 +38,7 @@ buildGoModule {
|
|||
installPhase = ''
|
||||
runHook preInstall
|
||||
install -Dm644 geosite.db $out/share/sing-box/geosite.db
|
||||
install -Dm644 rule-set/* -t $out/share/sing-box/rule-set
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
|
|
|
@ -16,4 +16,37 @@ func main() {
|
|||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
ruleSetOutput := "rule-set"
|
||||
err = os.MkdirAll(ruleSetOutput, 0o755)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
for code, domains := range domainMap {
|
||||
var headlessRule option.DefaultHeadlessRule
|
||||
defaultRule := geosite.Compile(domains)
|
||||
headlessRule.Domain = defaultRule.Domain
|
||||
headlessRule.DomainSuffix = defaultRule.DomainSuffix
|
||||
headlessRule.DomainKeyword = defaultRule.DomainKeyword
|
||||
headlessRule.DomainRegex = defaultRule.DomainRegex
|
||||
var plainRuleSet option.PlainRuleSet
|
||||
plainRuleSet.Rules = []option.HeadlessRule{
|
||||
{
|
||||
Type: C.RuleTypeDefault,
|
||||
DefaultOptions: headlessRule,
|
||||
},
|
||||
}
|
||||
srsPath, _ := filepath.Abs(filepath.Join(ruleSetOutput, "geosite-"+code+".srs"))
|
||||
os.Stderr.WriteString("write " + srsPath + "\n")
|
||||
outputRuleSet, err := os.Create(srsPath)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = srs.Write(outputRuleSet, plainRuleSet)
|
||||
if err != nil {
|
||||
outputRuleSet.Close()
|
||||
panic(err)
|
||||
}
|
||||
outputRuleSet.Close()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,13 +26,13 @@ lib.checkListOfEnum "${pname}: theme tweaks" validTweaks tweaks
|
|||
stdenvNoCC.mkDerivation
|
||||
rec {
|
||||
inherit pname;
|
||||
version = "2023-10-20";
|
||||
version = "2024-04-01";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
repo = "Orchis-theme";
|
||||
owner = "vinceliuice";
|
||||
rev = version;
|
||||
hash = "sha256-GhSzTtbuvbAuXxKNm29sJX5kXE2s2jMDB6Ww6Q7GNSo=";
|
||||
hash = "sha256-gszyUZGWlgrBTQnaz6Ws7jzfTN5KAfX5SjVwmVrP9QE=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ gtk3 sassc ];
|
||||
|
|
|
@ -4,11 +4,22 @@
|
|||
otherRids,
|
||||
pkgs ? import ../../../.. {}
|
||||
}:
|
||||
with pkgs.lib;
|
||||
let
|
||||
inherit (pkgs) writeText;
|
||||
|
||||
inherit (pkgs.lib)
|
||||
concatMap
|
||||
concatMapStringsSep
|
||||
generators
|
||||
optionals
|
||||
replaceStrings
|
||||
sortOn
|
||||
strings
|
||||
unique
|
||||
;
|
||||
|
||||
fns = map (file: import file) list;
|
||||
|
||||
packages = unique
|
||||
(concatMap (fn: fn { fetchNuGet = package: package; }) fns);
|
||||
|
||||
|
|
|
@ -1,11 +1,52 @@
|
|||
{ pkgs, lib, callPackage, ... }:
|
||||
|
||||
with pkgs.gerbil-support; {
|
||||
let
|
||||
inherit (builtins) filterSource;
|
||||
|
||||
pppToName = ppp: lib.removeSuffix ".nix" (baseNameOf ppp); # from pre-package path to name
|
||||
inherit (lib)
|
||||
commitIdFromGitRepo
|
||||
concatStringsSep
|
||||
elem
|
||||
elemAt
|
||||
hasSuffix
|
||||
listToAttrs
|
||||
mapAttrs
|
||||
optionalString
|
||||
pathExists
|
||||
readFile
|
||||
removeSuffix
|
||||
substring
|
||||
traceSeqN
|
||||
;
|
||||
|
||||
inherit (lib.strings) match;
|
||||
|
||||
# Implicitly calls through to this file, similar to `let .. in` or `rec`.
|
||||
inherit (pkgs.gerbil-support)
|
||||
callPpp
|
||||
gerbilLoadPath
|
||||
gerbilPackage
|
||||
gerbilPackages-unstable
|
||||
gerbilSkippableFiles
|
||||
gerbilSourceFilter
|
||||
overrideSrcIfShaDiff
|
||||
ppaToPl
|
||||
pppToKV
|
||||
pppToName
|
||||
ppplToPpa
|
||||
prePackage-defaults
|
||||
prePackages-unstable
|
||||
resolve-pre-src
|
||||
sha256-of-pre-src
|
||||
view
|
||||
;
|
||||
in
|
||||
|
||||
{
|
||||
pppToName = ppp: removeSuffix ".nix" (baseNameOf ppp); # from pre-package path to name
|
||||
callPpp = ppp: callPackage ppp prePackage-defaults; # from pre-package path to pre-package
|
||||
pppToKV = ppp: { name = pppToName ppp; value = callPpp ppp; }; # from pre-package path to name
|
||||
ppplToPpa = ppps: builtins.listToAttrs (map pppToKV ppps); # from pre-package path list to name/pre-package attr
|
||||
ppplToPpa = ppps: listToAttrs (map pppToKV ppps); # from pre-package path list to name/pre-package attr
|
||||
|
||||
prePackages-unstable =
|
||||
ppplToPpa
|
||||
|
@ -32,37 +73,37 @@ with pkgs.gerbil-support; {
|
|||
softwareName = "";
|
||||
};
|
||||
|
||||
ppaToPl = builtins.mapAttrs (_: gerbilPackage);
|
||||
ppaToPl = mapAttrs (_: gerbilPackage);
|
||||
gerbilPackages-unstable = ppaToPl prePackages-unstable;
|
||||
|
||||
resolve-pre-src = pre-src: pre-src.fun (removeAttrs pre-src ["fun"]);
|
||||
|
||||
gerbilVersionFromGit = srcDir: version-path:
|
||||
let version-file = "${srcDir}/${version-path}.ss"; in
|
||||
if builtins.pathExists version-file then
|
||||
if pathExists version-file then
|
||||
let m =
|
||||
builtins.match "\\(import :clan/versioning.*\\)\n\\(register-software \"([-_.A-Za-z0-9]+)\" \"([-_.A-Za-z0-9]+)\"\\) ;; ([-0-9]+)\n"
|
||||
(builtins.readFile version-file); in
|
||||
{ version = "${builtins.elemAt m 2}-git"; git-version = builtins.elemAt m 1; }
|
||||
match "\\(import :clan/versioning.*\\)\n\\(register-software \"([-_.A-Za-z0-9]+)\" \"([-_.A-Za-z0-9]+)\"\\) ;; ([-0-9]+)\n"
|
||||
(readFile version-file); in
|
||||
{ version = "${elemAt m 2}-git"; git-version = elemAt m 1; }
|
||||
else { version = "0.0-git";
|
||||
git-version = let gitpath = "${srcDir}/.git"; in
|
||||
if builtins.pathExists gitpath then lib.commitIdFromGitRepo gitpath else "0"; };
|
||||
if pathExists gitpath then commitIdFromGitRepo gitpath else "0"; };
|
||||
|
||||
gerbilSkippableFiles = [".git" ".build" ".build_outputs" "run" "result" "dep" "BLAH" "tmp.nix"];
|
||||
|
||||
gerbilSourceFilter = path: type:
|
||||
let baseName = baseNameOf path; in
|
||||
! (builtins.elem baseName gerbilSkippableFiles || lib.hasSuffix "~" baseName);
|
||||
! (elem baseName gerbilSkippableFiles || hasSuffix "~" baseName);
|
||||
|
||||
gerbilFilterSource = builtins.filterSource gerbilSourceFilter;
|
||||
gerbilFilterSource = filterSource gerbilSourceFilter;
|
||||
|
||||
# Use this function in any package that uses Gerbil libraries, to define the GERBIL_LOADPATH.
|
||||
gerbilLoadPath =
|
||||
gerbilInputs: builtins.concatStringsSep ":" (map (x: x + "/gerbil/lib") gerbilInputs);
|
||||
gerbilInputs: concatStringsSep ":" (map (x: x + "/gerbil/lib") gerbilInputs);
|
||||
|
||||
path-src = path: { fun = _: path; };
|
||||
|
||||
view = lib.debug.traceSeqN 4;
|
||||
view = traceSeqN 4;
|
||||
|
||||
sha256-of-pre-src = pre-src: if pre-src ? sha256 then pre-src.sha256 else "none";
|
||||
|
||||
|
@ -75,7 +116,7 @@ with pkgs.gerbil-support; {
|
|||
pre-src = new-pre-src;
|
||||
version = "override";
|
||||
git-version = if new-pre-src ? rev
|
||||
then lib.substring 0 7 new-pre-src.rev
|
||||
then substring 0 7 new-pre-src.rev
|
||||
else "unknown";};
|
||||
};
|
||||
|
||||
|
@ -102,10 +143,10 @@ with pkgs.gerbil-support; {
|
|||
|
||||
postPatch = ''
|
||||
set -e ;
|
||||
${lib.optionalString (version-path != "")
|
||||
''echo -e '(import :clan/versioning${builtins.concatStringsSep ""
|
||||
${optionalString (version-path != "")
|
||||
''echo -e '(import :clan/versioning${concatStringsSep ""
|
||||
(map (x: let px = x.passthru.pre-pkg; in
|
||||
lib.optionalString (px.version-path != "")
|
||||
optionalString (px.version-path != "")
|
||||
" :${px.gerbil-package}/${px.version-path}")
|
||||
gerbilInputs)
|
||||
})\n(register-software "${softwareName}" "v${git-version}")\n' > "${version-path}.ss"''}
|
||||
|
|
|
@ -19,11 +19,6 @@
|
|||
|
||||
let
|
||||
versionMap = {
|
||||
# Only kept around for BCLM. Remove once unneeded there.
|
||||
"2.1.9" = {
|
||||
sha256 = "189gjqzdz10xh3ybiy4ch1r98bsmkcb4hpnrmggd4y2g5kqnyx4y";
|
||||
};
|
||||
|
||||
"2.4.2" = {
|
||||
sha256 = "sha256-/APLUtEqr+h1nmMoRQogG73fibFwcaToPznoC0Pd7w8=";
|
||||
};
|
||||
|
@ -103,11 +98,6 @@ stdenv.mkDerivation (self: rec {
|
|||
[ zstd ]
|
||||
);
|
||||
|
||||
patches = lib.optionals (lib.versionOlder self.version "2.4.2") [
|
||||
# Fixed in 2.4.2
|
||||
./search-for-binaries-in-PATH.patch
|
||||
];
|
||||
|
||||
# I don’t know why these are failing (on ofBorg), and I’d rather just disable
|
||||
# them and move forward with the succeeding tests than block testing
|
||||
# altogether. One by one hopefully we can fix these (on ofBorg,
|
||||
|
|
|
@ -1,108 +0,0 @@
|
|||
From 35856b09e3606361b17f21225c759632be1cdf34 Mon Sep 17 00:00:00 2001
|
||||
From: Hraban Luyat <hraban@0brg.net>
|
||||
Date: Wed, 24 Jan 2024 14:58:53 -0500
|
||||
Subject: [PATCH] Search for binaries in tests in PATH, not /usr/bin
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Same as 8ed662fbfeb5dde35eb265f390b55b01f79f70c1 but for tests, and for more
|
||||
than just ‘cat’. For the same reasons as that diff.
|
||||
---
|
||||
tests/run-program.impure.lisp | 18 ++++++++++--------
|
||||
tests/run-program.test.sh | 9 ++++-----
|
||||
2 files changed, 14 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/tests/run-program.impure.lisp b/tests/run-program.impure.lisp
|
||||
index 0eab8884c..b07d1e4fb 100644
|
||||
--- a/tests/run-program.impure.lisp
|
||||
+++ b/tests/run-program.impure.lisp
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
(defun bin-pwd-ignoring-result ()
|
||||
(let ((initially-open-fds (directory "/proc/self/fd/*" :resolve-symlinks nil)))
|
||||
- (sb-ext:run-program "/usr/bin/pwd" nil :input :stream :output :stream :wait nil)
|
||||
+ (sb-ext:run-program "pwd" nil :search t :input :stream :output :stream :wait nil)
|
||||
(length initially-open-fds)))
|
||||
|
||||
(with-test (:name (run-program :autoclose-streams)
|
||||
@@ -49,7 +49,7 @@
|
||||
(with-test (:name (run-program :cat 2)
|
||||
:skipped-on (or (not :sb-thread) :win32))
|
||||
;; Tests that reading from a FIFO is interruptible.
|
||||
- (let* ((process (run-program "/bin/cat" '()
|
||||
+ (let* ((process (run-program "cat" '() :search t
|
||||
:wait nil :output :stream :input :stream))
|
||||
(in (process-input process))
|
||||
(out (process-output process))
|
||||
@@ -167,7 +167,7 @@
|
||||
(defparameter *cat-out* (make-synonym-stream '*cat-out-pipe*)))
|
||||
|
||||
(with-test (:name (run-program :cat 5) :fails-on :win32)
|
||||
- (let ((cat (run-program "/bin/cat" nil :input *cat-in* :output *cat-out*
|
||||
+ (let ((cat (run-program "cat" nil :search t :input *cat-in* :output *cat-out*
|
||||
:wait nil)))
|
||||
(dolist (test '("This is a test!"
|
||||
"This is another test!"
|
||||
@@ -310,14 +310,16 @@
|
||||
(let ((had-error-p nil))
|
||||
(flet ((barf (&optional (format :default))
|
||||
(with-output-to-string (stream)
|
||||
- (run-program #-netbsd "/usr/bin/perl" #+netbsd "/usr/pkg/bin/perl"
|
||||
+ (run-program #-netbsd "perl" #+netbsd "/usr/pkg/bin/perl"
|
||||
'("-e" "print \"\\x20\\xfe\\xff\\x0a\"")
|
||||
+ :search #-netbsd t #+netbsd nil
|
||||
:output stream
|
||||
:external-format format)))
|
||||
(no-barf ()
|
||||
(with-output-to-string (stream)
|
||||
- (run-program "/bin/echo"
|
||||
+ (run-program "echo"
|
||||
'("This is a test")
|
||||
+ :search t
|
||||
:output stream))))
|
||||
(handler-case
|
||||
(barf :utf-8)
|
||||
@@ -353,9 +355,9 @@
|
||||
;; If the permitted inputs are :ANY then leave it be
|
||||
(listp (symbol-value 'run-tests::*allowed-inputs*)))
|
||||
(push (namestring file) (symbol-value 'run-tests::*allowed-inputs*)))
|
||||
- (assert (null (run-program "/bin/cat" '() :input file)))
|
||||
- (assert (null (run-program "/bin/cat" '() :output #.(or *compile-file-truename*
|
||||
- *load-truename*)
|
||||
+ (assert (null (run-program "cat" '() :search t :input file)))
|
||||
+ (assert (null (run-program "cat" '() :search t :output #.(or *compile-file-truename*
|
||||
+ *load-truename*)
|
||||
:if-output-exists nil)))))
|
||||
|
||||
|
||||
diff --git a/tests/run-program.test.sh b/tests/run-program.test.sh
|
||||
index 48eaef889..c926e5a05 100755
|
||||
--- a/tests/run-program.test.sh
|
||||
+++ b/tests/run-program.test.sh
|
||||
@@ -39,9 +39,8 @@ run_sbcl --eval "(defvar *exit-ok* $EXIT_LISP_WIN)" <<'EOF'
|
||||
(assert (not (zerop (sb-ext:process-exit-code
|
||||
(sb-ext:run-program "false" () :search t :wait t)))))
|
||||
(let ((string (with-output-to-string (stream)
|
||||
- (our-run-program "/bin/echo"
|
||||
- '("foo" "bar")
|
||||
- :output stream))))
|
||||
+ (run-program "echo" '("foo" "bar")
|
||||
+ :search t :output stream))))
|
||||
(assert (string= string "foo bar
|
||||
")))
|
||||
(format t ";;; Smoke tests: PASS~%")
|
||||
@@ -103,8 +102,8 @@ run_sbcl --eval "(defvar *exit-ok* $EXIT_LISP_WIN)" <<'EOF'
|
||||
;; make sure that a stream input argument is basically reasonable.
|
||||
(let ((string (let ((i (make-string-input-stream "abcdef")))
|
||||
(with-output-to-string (stream)
|
||||
- (our-run-program "/bin/cat" ()
|
||||
- :input i :output stream)))))
|
||||
+ (run-program "cat" ()
|
||||
+ :search t :input i :output stream)))))
|
||||
(assert (= (length string) 6))
|
||||
(assert (string= string "abcdef")))
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
|
@ -6,11 +6,11 @@
|
|||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "ode";
|
||||
version = "0.16.4";
|
||||
version = "0.16.5";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://bitbucket.org/odedevs/ode/downloads/ode-${finalAttrs.version}.tar.gz";
|
||||
hash = "sha256-cQN7goHGyGsKVXKfkNXbaXq+TL7B2BGBV+ANSOwlNGc=";
|
||||
hash = "sha256-uode3RZFcJWHle6qcPFIU7/DTMmHH4rd6NpH4SvVRnk=";
|
||||
};
|
||||
|
||||
buildInputs = lib.optionals stdenv.isDarwin [
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
stdenv.mkDerivation rec {
|
||||
pname = "poco";
|
||||
|
||||
version = "1.12.5p2";
|
||||
version = "1.13.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "pocoproject";
|
||||
repo = "poco";
|
||||
sha256 = "sha256-UAseNOC9n+OooDl4E67qcndJ02fAgmp2d8Ii/IyPvhg=";
|
||||
sha256 = "sha256-GcwkGiui9j9RzMQyEEmqq8dxWzKpv5xWxJgvJpSMdbw=";
|
||||
rev = "poco-${version}-release";
|
||||
};
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{ lib, stdenv, fetchFromGitHub, autoreconfHook, doxygen, numactl
|
||||
, rdma-core, libbfd, libiberty, perl, zlib, symlinkJoin, pkg-config
|
||||
, config
|
||||
, autoAddDriverRunpath
|
||||
, enableCuda ? config.cudaSupport
|
||||
, cudaPackages
|
||||
, enableRocm ? config.rocmSupport
|
||||
|
@ -36,7 +37,7 @@ stdenv.mkDerivation rec {
|
|||
]
|
||||
++ lib.optionals enableCuda [
|
||||
cudaPackages.cuda_nvcc
|
||||
cudaPackages.autoAddDriverRunpath
|
||||
autoAddDriverRunpath
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
|
|
|
@ -4,23 +4,28 @@
|
|||
, fetchFromGitHub
|
||||
, pythonOlder
|
||||
, pytestCheckHook
|
||||
, setuptools
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "aiolyric";
|
||||
version = "1.1.1";
|
||||
format = "setuptools";
|
||||
version = "2.0.0";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "timmo001";
|
||||
repo = pname;
|
||||
rev = "refs/tags/v${version}";
|
||||
repo = "aiolyric";
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-FZhLjVrLzLv6CZz/ROlvbtBK9XnpO8pG48aSIoBxhCo=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
build-system = [
|
||||
setuptools
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
aiohttp
|
||||
];
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "async-upnp-client";
|
||||
version = "0.38.2";
|
||||
version = "0.38.3";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.8";
|
||||
|
@ -31,14 +31,14 @@ buildPythonPackage rec {
|
|||
owner = "StevenLooman";
|
||||
repo = "async_upnp_client";
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-gPA9u1BuMswfg5Nll8l6vrcTP2s3Zn9ESTbV+dOxlhA=";
|
||||
hash = "sha256-RmpQOVZ/s3Zv2e+iS7LTI5Wh/g0yy0Xv0M8ppsbYZPg=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
build-system = [
|
||||
setuptools
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
dependencies = [
|
||||
aiohttp
|
||||
async-timeout
|
||||
defusedxml
|
||||
|
@ -56,20 +56,6 @@ buildPythonPackage rec {
|
|||
# socket.gaierror: [Errno -2] Name or service not known
|
||||
"test_async_get_local_ip"
|
||||
"test_get_local_ip"
|
||||
# OSError: [Errno 101] Network is unreachable
|
||||
"test_auto_resubscribe_fail"
|
||||
"test_init"
|
||||
"test_on_notify_dlna_event"
|
||||
"test_on_notify_upnp_event"
|
||||
"test_server_init"
|
||||
"test_server_start"
|
||||
"test_start_server"
|
||||
"test_subscribe"
|
||||
"test_subscribe_auto_resubscribe"
|
||||
"test_subscribe_fail"
|
||||
"test_subscribe_manual_resubscribe"
|
||||
"test_subscribe_renew"
|
||||
"test_unsubscribe"
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
"test_deferred_callback_url"
|
||||
];
|
||||
|
@ -85,10 +71,10 @@ buildPythonPackage rec {
|
|||
|
||||
meta = with lib; {
|
||||
description = "Asyncio UPnP Client library for Python";
|
||||
mainProgram = "upnp-client";
|
||||
homepage = "https://github.com/StevenLooman/async_upnp_client";
|
||||
changelog = "https://github.com/StevenLooman/async_upnp_client/blob/${version}/CHANGES.rst";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ hexa ];
|
||||
mainProgram = "upnp-client";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
, fetchFromGitHub
|
||||
, glibcLocales
|
||||
, importlib-metadata
|
||||
, packaging
|
||||
, logfury
|
||||
, pyfakefs
|
||||
, pytestCheckHook
|
||||
|
@ -41,6 +42,7 @@ buildPythonPackage rec {
|
|||
];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
packaging
|
||||
logfury
|
||||
requests
|
||||
tqdm
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
, stdenv
|
||||
, buildPythonPackage
|
||||
, fetchPypi
|
||||
, pythonAtLeast
|
||||
, pythonOlder
|
||||
, substituteAll
|
||||
|
||||
|
@ -74,6 +75,11 @@ buildPythonPackage rec {
|
|||
postPatch = ''
|
||||
substituteInPlace tests/utils_tests/test_autoreload.py \
|
||||
--replace "/usr/bin/python" "${python.interpreter}"
|
||||
'' + lib.optionalString (pythonAtLeast "3.12" && stdenv.hostPlatform.system == "aarch64-linux") ''
|
||||
# Test regression after xz was reverted from 5.6.0 to 5.4.6
|
||||
# https://hydra.nixos.org/build/254630990
|
||||
substituteInPlace tests/view_tests/tests/test_debug.py \
|
||||
--replace-fail "test_files" "dont_test_files"
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
, stdenv
|
||||
, buildPythonPackage
|
||||
, fetchPypi
|
||||
, pythonAtLeast
|
||||
, pythonOlder
|
||||
, substituteAll
|
||||
|
||||
|
@ -75,6 +76,11 @@ buildPythonPackage rec {
|
|||
postPatch = ''
|
||||
substituteInPlace tests/utils_tests/test_autoreload.py \
|
||||
--replace "/usr/bin/python" "${python.interpreter}"
|
||||
'' + lib.optionalString (pythonAtLeast "3.12" && stdenv.hostPlatform.system == "aarch64-linux") ''
|
||||
# Test regression after xz was reverted from 5.6.0 to 5.4.6
|
||||
# https://hydra.nixos.org/build/254532197
|
||||
substituteInPlace tests/view_tests/tests/test_debug.py \
|
||||
--replace-fail "test_files" "dont_test_files"
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "ezyrb";
|
||||
version = "1.3.0.post2403";
|
||||
version = "1.3.0.post2404";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
@ -23,7 +23,7 @@ buildPythonPackage rec {
|
|||
owner = "mathLab";
|
||||
repo = "EZyRB";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-t0Mv8Kae6N+jHeQx57ljDR5lmmbW2mqrlqygtrwGWhY=";
|
||||
hash = "sha256-nu75Geyeu1nTLoGaohXB9pmbUWKgdgch9Z5OJqz9xKQ=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "fastapi-sso";
|
||||
version = "0.13.0";
|
||||
version = "0.13.1";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.8";
|
||||
|
@ -25,18 +25,18 @@ buildPythonPackage rec {
|
|||
owner = "tomasvotava";
|
||||
repo = "fastapi-sso";
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-7gBJ6Etb9X2mJzrWYpNGAl3NFoI1bz+PcGfUsMgRlN8=";
|
||||
hash = "sha256-gblxjunXNerbC+7IYkGrO/PJak0MCoxdmWfo7iVeV7g=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
sed -i "/--cov/d" pyproject.toml
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
build-system = [
|
||||
poetry-core
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
dependencies = [
|
||||
fastapi
|
||||
httpx
|
||||
oauthlib
|
||||
|
|
|
@ -14,14 +14,14 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "google-cloud-container";
|
||||
version = "2.44.0";
|
||||
version = "2.45.0";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-heNvRcepXqayn/impyP5h4L+eOJjGV1hMrZyg96aZKU=";
|
||||
hash = "sha256-8vaSLR+cIKohDpbC679cKydLsnBKhewtTpdBDymxjss=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
lib,
|
||||
bash,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
fetchpatch,
|
||||
|
@ -33,9 +34,14 @@ buildPythonPackage rec {
|
|||
})
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ setuptools ];
|
||||
postPatch = ''
|
||||
substituteInPlace jishaku/shell.py \
|
||||
--replace-fail '"/bin/bash"' '"${lib.getExe bash}"'
|
||||
'';
|
||||
|
||||
propagatedBuildInputs = [
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
discordpy
|
||||
click
|
||||
braceexpand
|
||||
|
|
|
@ -12,19 +12,23 @@
|
|||
, importlib-metadata
|
||||
, substituteAll
|
||||
, runCommand
|
||||
, symlinkJoin
|
||||
, writers
|
||||
, numba
|
||||
|
||||
, config
|
||||
|
||||
# CUDA-only dependencies:
|
||||
, addOpenGLRunpath ? null
|
||||
, cudaPackages ? {}
|
||||
, addDriverRunpath
|
||||
, autoAddDriverRunpath ? cudaPackages.autoAddDriverRunpathHook or cudaPackages.autoAddOpenGLRunpathHook
|
||||
, cudaPackages
|
||||
|
||||
# CUDA flags:
|
||||
, cudaSupport ? config.cudaSupport
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (cudaPackages) cudatoolkit;
|
||||
cudatoolkit = cudaPackages.cuda_nvcc;
|
||||
in buildPythonPackage rec {
|
||||
# Using an untagged version, with numpy 1.25 support, when it's released
|
||||
# also drop the versioneer patch in postPatch
|
||||
|
@ -52,12 +56,25 @@ in buildPythonPackage rec {
|
|||
# relevant strings ourselves, using `sed` commands, in extraPostFetch.
|
||||
hash = "sha256-wd4TujPhV2Jy/HUUXLHAlcbVFm4gfQNWxWFXD+jeZC4=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace numba/cuda/cudadrv/driver.py \
|
||||
--replace-fail \
|
||||
"dldir = [" \
|
||||
"dldir = [ '${addDriverRunpath.driverLink}/lib', "
|
||||
'';
|
||||
|
||||
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-I${lib.getDev libcxx}/include/c++/v1";
|
||||
|
||||
nativeBuildInputs = [
|
||||
numpy
|
||||
] ++ lib.optionals cudaSupport [
|
||||
addOpenGLRunpath
|
||||
autoAddDriverRunpath
|
||||
cudaPackages.cuda_nvcc
|
||||
];
|
||||
|
||||
buildInputs = with cudaPackages; [
|
||||
cuda_cudart
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
@ -66,26 +83,16 @@ in buildPythonPackage rec {
|
|||
setuptools
|
||||
] ++ lib.optionals (pythonOlder "3.9") [
|
||||
importlib-metadata
|
||||
] ++ lib.optionals cudaSupport [
|
||||
cudatoolkit
|
||||
cudatoolkit.lib
|
||||
];
|
||||
|
||||
patches = lib.optionals cudaSupport [
|
||||
(substituteAll {
|
||||
src = ./cuda_path.patch;
|
||||
cuda_toolkit_path = cudatoolkit;
|
||||
cuda_toolkit_lib_path = cudatoolkit.lib;
|
||||
cuda_toolkit_lib_path = lib.getLib cudatoolkit;
|
||||
})
|
||||
];
|
||||
|
||||
postFixup = lib.optionalString cudaSupport ''
|
||||
find $out -type f \( -name '*.so' -or -name '*.so.*' \) | while read lib; do
|
||||
addOpenGLRunpath "$lib"
|
||||
patchelf --set-rpath "${cudatoolkit}/lib:${cudatoolkit.lib}/lib:$(patchelf --print-rpath "$lib")" "$lib"
|
||||
done
|
||||
'';
|
||||
|
||||
# run a smoke test in a temporary directory so that
|
||||
# a) Python picks up the installed library in $out instead of the build files
|
||||
# b) we have somewhere to put $HOME so some caching tests work
|
||||
|
@ -104,6 +111,13 @@ in buildPythonPackage rec {
|
|||
"numba"
|
||||
];
|
||||
|
||||
passthru.testers.cuda-detect =
|
||||
writers.writePython3Bin "numba-cuda-detect"
|
||||
{ libraries = [ (numba.override { cudaSupport = true; }) ]; }
|
||||
''
|
||||
from numba import cuda
|
||||
cuda.detect()
|
||||
'';
|
||||
passthru.tests = {
|
||||
# CONTRIBUTOR NOTE: numba also contains CUDA tests, though these cannot be run in
|
||||
# this sandbox environment. Consider running similar commands to those below outside the
|
||||
|
|
|
@ -2,20 +2,25 @@
|
|||
, buildPythonPackage
|
||||
, fetchPypi
|
||||
, pythonOlder
|
||||
, setuptools
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "openrgb-python";
|
||||
version = "0.2.15";
|
||||
format = "setuptools";
|
||||
version = "0.3.0";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-rTfpqMM+IUd8rMmw/r15sICLoPHL6KLaRrmUjWTfUkA=";
|
||||
hash = "sha256-2eeb2XHYvBaHkHHs9KxZKDGXtcLaT28c/aLC9pxrRmM=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
];
|
||||
|
||||
# Module has no tests
|
||||
doCheck = false;
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "opower";
|
||||
version = "0.4.1";
|
||||
version = "0.4.2";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.9";
|
||||
|
@ -21,14 +21,14 @@ buildPythonPackage rec {
|
|||
owner = "tronikos";
|
||||
repo = "opower";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-PB6t1ltxJs7aYn/OthCORHbyRXqMkTZ6YE2He0k/2mc=";
|
||||
hash = "sha256-mQE3WypB//OPilx4vA8b8V+eO0MJ/cSa3wILLW+Jk4Y=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
build-system = [
|
||||
setuptools
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
dependencies = [
|
||||
aiohttp
|
||||
arrow
|
||||
pyotp
|
||||
|
|
|
@ -10,17 +10,17 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "publicsuffixlist";
|
||||
version = "0.10.0.20240312";
|
||||
version = "0.10.0.20240328";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-ApEvPghPrWfiRjNl/UMVRJIdnbP1H21DzqcWnIax8Yg=";
|
||||
hash = "sha256-XArawQzC9J5ShtgCG02qf8RRxNTKJMn8aiclG+4CUKY=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
build-system = [
|
||||
setuptools
|
||||
];
|
||||
|
||||
|
@ -47,9 +47,9 @@ buildPythonPackage rec {
|
|||
|
||||
meta = with lib; {
|
||||
description = "Public Suffix List parser implementation";
|
||||
mainProgram = "publicsuffixlist-download";
|
||||
homepage = "https://github.com/ko-zu/psl";
|
||||
license = licenses.mpl20;
|
||||
maintainers = with maintainers; [ fab ];
|
||||
mainProgram = "publicsuffixlist-download";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -24,14 +24,14 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "pywbem";
|
||||
version = "1.6.2";
|
||||
version = "1.6.3";
|
||||
format = "setuptools";
|
||||
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-JugXm8F+MXa0zVdrn1p3MPhI1RvgUTdo/X8x/ZsnCpY=";
|
||||
hash = "sha256-eN8w3umMUIYgtZm4lR8yKoHGwKnXt4/+XgF7lBfNl7k=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "threadpoolctl";
|
||||
version = "3.3.0";
|
||||
version = "3.4.0";
|
||||
|
||||
disabled = pythonOlder "3.6";
|
||||
format = "pyproject";
|
||||
|
@ -19,7 +19,7 @@ buildPythonPackage rec {
|
|||
owner = "joblib";
|
||||
repo = pname;
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-mdOZcplqXrkKlL/SXipJg6A9Dh1lXGEHszBLGH/kxqs=";
|
||||
hash = "sha256-nWaBhiFw76azx6dV4I18XodiUnHiLb0gNNhXks6iHIg=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -1,73 +0,0 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchgit
|
||||
, wrapLisp
|
||||
, openssl
|
||||
, sbcl
|
||||
}:
|
||||
|
||||
# Broken on newer versions:
|
||||
# "https://gitlab.common-lisp.net/clpm/clpm/-/issues/51". Once that bug is
|
||||
# fixed, remove this, and all 2.1.9 references from the SBCL build file.
|
||||
with rec {
|
||||
sbcl_2_1_9 = sbcl.override (_: {
|
||||
version = "2.1.9";
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "clpm";
|
||||
version = "0.4.1";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://gitlab.common-lisp.net/clpm/clpm";
|
||||
rev = "v${version}";
|
||||
fetchSubmodules = true;
|
||||
sha256 = "sha256-UhaLmbdsIPj6O+s262HUMxuz/5t43JR+TlOjq8Y2CDs=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
openssl
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
# patch cl-plus-ssl to ensure that it finds libssl and libcrypto
|
||||
sed 's|libssl.so|${lib.getLib openssl}/lib/libssl.so|' -i ext/cl-plus-ssl/src/reload.lisp
|
||||
sed 's|libcrypto.so|${lib.getLib openssl}/lib/libcrypto.so|' -i ext/cl-plus-ssl/src/reload.lisp
|
||||
# patch dexador to avoid error due to dexador being loaded multiple times
|
||||
sed -i 's/defpackage/uiop:define-package/g' ext/dexador/src/dexador.lisp
|
||||
'';
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
# exporting home to avoid using /homeless-shelter/.cache/ as this will cause
|
||||
# ld to complaing about `impure path used in link`.
|
||||
export HOME=$TMP
|
||||
|
||||
${sbcl_2_1_9}/bin/sbcl --script scripts/build-release.lisp
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
cd build/release-staging/dynamic/clpm-${version}*/
|
||||
INSTALL_ROOT=$out/ bash install.sh
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
# Stripping binaries results in fatal error in SBCL, `Can't find sbcl.core`
|
||||
dontStrip = true;
|
||||
|
||||
meta = with lib; {
|
||||
description = "Common Lisp Package Manager";
|
||||
homepage = "https://www.clpm.dev/";
|
||||
license = licenses.bsd2;
|
||||
maintainers = [ maintainers.petterstorvik ];
|
||||
platforms = [ "i686-linux" "x86_64-linux" ];
|
||||
};
|
||||
}
|
|
@ -13,7 +13,11 @@ buildGoModule rec {
|
|||
|
||||
vendorHash = "sha256-4t/ft3XTfc7yrsFVMSfjdCur8QULho3NI2ym6gqjexI=";
|
||||
|
||||
excludedPackages = [ "cmd/gotoml-test-decoder" "cmd/tomltestgen" ];
|
||||
excludedPackages = [
|
||||
"cmd/gotoml-test-decoder"
|
||||
"cmd/gotoml-test-encoder"
|
||||
"cmd/tomltestgen"
|
||||
];
|
||||
|
||||
ldflags = [ "-s" "-w" ];
|
||||
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "gojq";
|
||||
version = "0.12.14";
|
||||
version = "0.12.15";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "itchyny";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-mgmgOi3nMPwmcofEAVIN9nTE2oXnNN89lqT+Vi+sjzY=";
|
||||
hash = "sha256-2Og1Ek8Hnzd4KTgJurWtPaqm0W6ruoJ1RN2G+l/5yIY=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-dv4k2dIFnlJrGDTDM4mXBOpr4MF7oxms0y02ml50YyY=";
|
||||
vendorHash = "sha256-tZB52w15MpAO3UnrDkhmL1M3EIcm/QwrPy9gvJycuD0=";
|
||||
|
||||
ldflags = [ "-s" "-w" ];
|
||||
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "twilio-cli";
|
||||
version = "5.19.1";
|
||||
version = "5.19.2";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://twilio-cli-prod.s3.amazonaws.com/twilio-v${finalAttrs.version}/twilio-v${finalAttrs.version}.tar.gz";
|
||||
hash = "sha256-8IZaEL+F0FMR44KCnxYNC/8mLKBlAGdmgHG7Lv90thE=";
|
||||
hash = "sha256-9bb9cVd40h3b88pRw+S+wK8AG/436aCVyTTlzyCtH9w=";
|
||||
};
|
||||
|
||||
buildInputs = [ nodejs-slim ];
|
||||
|
|
|
@ -64,11 +64,11 @@ rec {
|
|||
# Vulkan developer beta driver
|
||||
# See here for more information: https://developer.nvidia.com/vulkan-driver
|
||||
vulkan_beta = generic rec {
|
||||
version = "550.40.55";
|
||||
version = "550.40.59";
|
||||
persistencedVersion = "550.54.14";
|
||||
settingsVersion = "550.54.14";
|
||||
sha256_64bit = "sha256-i9FYgSZW0vLMEORg16+LxFBOacXXrAfWKbtCFuD8+IQ=";
|
||||
openSha256 = "sha256-slb058rNKk/TEltGkdw6Shn/3SF3kjgsXQc8IyFMUB8=";
|
||||
sha256_64bit = "sha256-hVwYC454vkxcK8I9bj1kp6iFS667em0c+Ral243C0J8=";
|
||||
openSha256 = "sha256-/v1iVcmHhdvib54LDktNBHkcmgFxZVwQxwPdWSi0l/U=";
|
||||
settingsSha256 = "sha256-m2rNASJp0i0Ez2OuqL+JpgEF0Yd8sYVCyrOoo/ln2a4=";
|
||||
persistencedSha256 = "sha256-XaPN8jVTjdag9frLPgBtqvO/goB5zxeGzaTU0CdL6C4=";
|
||||
url = "https://developer.nvidia.com/downloads/vulkan-beta-${lib.concatStrings (lib.splitVersion version)}-linux";
|
||||
|
|
|
@ -22,13 +22,13 @@ callPackage ./generic.nix args {
|
|||
# IMPORTANT: Always use a tagged release candidate or commits from the
|
||||
# zfs-<version>-staging branch, because this is tested by the OpenZFS
|
||||
# maintainers.
|
||||
version = "2.2.3-unstable-2024-03-21";
|
||||
rev = "58211157bf866bbcdd8720e92c27297db3ba75d6";
|
||||
version = "2.2.3-unstable-2024-03-30";
|
||||
rev = "deb7a84231aff8d772bb4ce9fa486d1886f1a2b6";
|
||||
|
||||
isUnstable = true;
|
||||
tests = [
|
||||
nixosTests.zfs.unstable
|
||||
];
|
||||
|
||||
hash = "sha256-zTTzHo/UDsTGp/b7BmCmy/m115HVipSG8Id/pnkUrvQ=";
|
||||
hash = "sha256-d9ZoUFuHPmJmIBbJKENVTCTJ5U3As+3NYHk9ghWxCCA=";
|
||||
}
|
||||
|
|
|
@ -53,6 +53,8 @@ unwrapped = stdenv.mkDerivation rec {
|
|||
echo 'os.exit(77)' > daemon/lua/trust_anchors.test/bootstrap.test.lua
|
||||
sed -E '/^[[:blank:]]*test_(dstaddr|headers),?$/d' -i \
|
||||
tests/config/doh2.test.lua modules/http/http_doh.test.lua
|
||||
'' + /* FIXME: see PR #286822 */ ''
|
||||
sed '/doh2\.test\.lua/d' -i tests/config/meson.build
|
||||
'';
|
||||
|
||||
preConfigure = ''
|
||||
|
@ -118,7 +120,8 @@ wrapped-full = runCommand unwrapped.name
|
|||
allowSubstitutes = false;
|
||||
inherit (unwrapped) meta;
|
||||
}
|
||||
(''
|
||||
(assert false; # FIXME: the http module won't work; see PR #286822
|
||||
''
|
||||
mkdir -p "$out"/bin
|
||||
makeWrapper '${unwrapped}/bin/kresd' "$out"/bin/kresd \
|
||||
--set LUA_PATH "$LUA_PATH" \
|
||||
|
|
|
@ -153,11 +153,6 @@ let
|
|||
doCheck = false;
|
||||
});
|
||||
|
||||
# https://cache.nixos.org/log/srr8kfhx8hzl60hxjpl2vkhbh3y4wmmn-python3.12-django-4.2.11.drv
|
||||
django_4 = super.django_4.overridePythonAttrs {
|
||||
doCheck = false;
|
||||
};
|
||||
|
||||
dsmr-parser = super.dsmr-parser.overridePythonAttrs (oldAttrs: rec {
|
||||
version = "1.3.1";
|
||||
src = fetchFromGitHub {
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "miniflux";
|
||||
version = "2.1.1";
|
||||
version = "2.1.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "miniflux";
|
||||
repo = "v2";
|
||||
rev = "refs/tags/${version}";
|
||||
hash = "sha256-vXSOHZt6Ov5g4fQBg0bubCfn76aaVrjw2b+LRebbV6s=";
|
||||
hash = "sha256-ArGoSb4gL0Mpul9wQJWW0aaCpSgtBxqnEiv5wS1eIFY=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-p31kwJZQMYff5Us6mXpPmxbPrEXyxU6Sipf4LKSG3wU=";
|
||||
vendorHash = "sha256-FcUKlvIdXJ3fSvf02zZu4lYa6943s3l2LwFBQ/EqtyY=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, autoPatchelfHook
|
||||
, autoAddDriverRunpath
|
||||
, makeWrapper
|
||||
, buildNpmPackage
|
||||
, cmake
|
||||
|
@ -84,10 +85,11 @@ stdenv'.mkDerivation rec {
|
|||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkg-config
|
||||
autoPatchelfHook
|
||||
makeWrapper
|
||||
# Avoid fighting upstream's usage of vendored ffmpeg libraries
|
||||
autoPatchelfHook
|
||||
] ++ lib.optionals cudaSupport [
|
||||
cudaPackages.autoAddDriverRunpath
|
||||
autoAddDriverRunpath
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
, MetalKit
|
||||
|
||||
, config
|
||||
, autoAddDriverRunpath
|
||||
, cudaSupport ? config.cudaSupport
|
||||
, cudaPackages ? {}
|
||||
}:
|
||||
|
@ -42,11 +43,10 @@ effectiveStdenv.mkDerivation (finalAttrs: {
|
|||
nativeBuildInputs = [
|
||||
which
|
||||
makeWrapper
|
||||
] ++ lib.optionals cudaSupport ( with cudaPackages ;[
|
||||
cuda_nvcc
|
||||
|
||||
] ++ lib.optionals cudaSupport [
|
||||
cudaPackages.cuda_nvcc
|
||||
autoAddDriverRunpath
|
||||
]);
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
SDL2
|
||||
|
|
|
@ -11,40 +11,48 @@
|
|||
, rsync
|
||||
, makeWrapper
|
||||
, gettext
|
||||
, getconf
|
||||
, testers
|
||||
, nix-update-script
|
||||
}:
|
||||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
let self = python3.pkgs.buildPythonApplication rec {
|
||||
pname = "duplicity";
|
||||
version = "0.8.23";
|
||||
version = "2.2.3";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "duplicity";
|
||||
repo = "duplicity";
|
||||
rev = "rel.${version}";
|
||||
sha256 = "0my015zc8751smjgbsysmca7hvdm96cjw5zilqn3zq971nmmrksb";
|
||||
hash = "sha256-4IwKqXlG7jh1siuPT5pVgiYB+KlmCzF6+OMPT3I3yTQ=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# We use the tar binary on all platforms.
|
||||
./gnutar-in-test.patch
|
||||
|
||||
# Our Python infrastructure runs test in installCheckPhase so we need
|
||||
# to make the testing code stop assuming it is run from the source directory.
|
||||
./use-installed-scripts-in-test.patch
|
||||
] ++ lib.optionals stdenv.isLinux [
|
||||
# Broken on Linux in Nix' build environment
|
||||
./linux-disable-timezone-test.patch
|
||||
./keep-pythonpath-in-testing.patch
|
||||
];
|
||||
|
||||
preConfigure = ''
|
||||
# fix version displayed by duplicity --version
|
||||
# see SourceCopy in setup.py
|
||||
ls
|
||||
for i in bin/*.1 duplicity/__init__.py; do
|
||||
substituteInPlace "$i" --replace '$version' "${version}"
|
||||
done
|
||||
postPatch = ''
|
||||
patchShebangs duplicity/__main__.py
|
||||
|
||||
# don't try to use gtar on darwin/bsd
|
||||
substituteInPlace testing/functional/test_restart.py \
|
||||
--replace-fail 'tarcmd = "gtar"' 'tarcmd = "tar"'
|
||||
'' + lib.optionalString stdenv.isDarwin ''
|
||||
# tests try to access these files in the sandbox, but can't deal with EPERM
|
||||
substituteInPlace testing/unit/test_globmatch.py \
|
||||
--replace-fail /var/log /test/log
|
||||
substituteInPlace testing/unit/test_selection.py \
|
||||
--replace-fail /usr/bin /dev
|
||||
# don't use /tmp/ in tests
|
||||
substituteInPlace duplicity/backends/_testbackend.py \
|
||||
--replace-fail '"/tmp/' 'os.environ.get("TMPDIR")+"/'
|
||||
'';
|
||||
|
||||
disabledTests = lib.optionals stdenv.isDarwin [
|
||||
# uses /tmp/
|
||||
"testing/unit/test_cli_main.py::CommandlineTest::test_intermixed_args"
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
makeWrapper
|
||||
gettext
|
||||
|
@ -80,51 +88,54 @@ python3.pkgs.buildPythonApplication rec {
|
|||
par2cmdline # Add 'par2' to PATH.
|
||||
] ++ lib.optionals stdenv.isLinux [
|
||||
util-linux # Add 'setsid' to PATH.
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
getconf
|
||||
] ++ (with python3.pkgs; [
|
||||
lockfile
|
||||
mock
|
||||
pexpect
|
||||
pytest
|
||||
pytest-runner
|
||||
fasteners
|
||||
]);
|
||||
|
||||
postInstall = ''
|
||||
postInstall = let
|
||||
binPath = lib.makeBinPath ([
|
||||
gnupg
|
||||
ncftp
|
||||
rsync
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
getconf
|
||||
]); in ''
|
||||
wrapProgram $out/bin/duplicity \
|
||||
--prefix PATH : "${lib.makeBinPath [ gnupg ncftp rsync ]}"
|
||||
--prefix PATH : "${binPath}"
|
||||
'';
|
||||
|
||||
preCheck = ''
|
||||
# tests need writable $HOME
|
||||
HOME=$PWD/.home
|
||||
|
||||
wrapPythonProgramsIn "$PWD/testing/overrides/bin" "$pythonPath"
|
||||
|
||||
# Add 'duplicity' to PATH for tests.
|
||||
# Normally, 'setup.py test' adds 'build/scripts-2.7/' to PATH before running
|
||||
# tests. However, 'build/scripts-2.7/duplicity' is not wrapped, so its
|
||||
# shebang is incorrect and it fails to run inside Nix' sandbox.
|
||||
# In combination with use-installed-scripts-in-test.patch, make 'setup.py
|
||||
# test' use the installed 'duplicity' instead.
|
||||
PATH="$out/bin:$PATH"
|
||||
|
||||
# Don't run developer-only checks (pep8, etc.).
|
||||
export RUN_CODE_TESTS=0
|
||||
|
||||
# check version string
|
||||
duplicity --version | grep ${version}
|
||||
'' + lib.optionalString stdenv.isDarwin ''
|
||||
# Work around the following error when running tests:
|
||||
# > Max open files of 256 is too low, should be >= 1024.
|
||||
# > Use 'ulimit -n 1024' or higher to correct.
|
||||
ulimit -n 1024
|
||||
'';
|
||||
|
||||
# TODO: Fix test failures on macOS 10.13:
|
||||
#
|
||||
# > OSError: out of pty devices
|
||||
doCheck = !stdenv.isDarwin;
|
||||
doCheck = true;
|
||||
|
||||
passthru = {
|
||||
updateScript = nix-update-script {
|
||||
extraArgs = [ "--version-regex" "rel\.(.*)" ];
|
||||
};
|
||||
|
||||
tests.version = testers.testVersion {
|
||||
package = self;
|
||||
};
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "Encrypted bandwidth-efficient backup using the rsync algorithm";
|
||||
homepage = "https://duplicity.gitlab.io/duplicity-web/";
|
||||
license = licenses.gpl2Plus;
|
||||
maintainers = with maintainers; [ ];
|
||||
maintainers = with maintainers; [ corngood ];
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
in self
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
diff --git a/testing/functional/test_restart.py b/testing/functional/test_restart.py
|
||||
index 6d972c82..e8435fd5 100644
|
||||
--- a/testing/functional/test_restart.py
|
||||
+++ b/testing/functional/test_restart.py
|
||||
@@ -350,14 +350,7 @@ class RestartTestWithoutEncryption(RestartTest):
|
||||
https://launchpad.net/bugs/929067
|
||||
"""
|
||||
|
||||
- if platform.system().startswith(u'Linux'):
|
||||
- tarcmd = u"tar"
|
||||
- elif platform.system().startswith(u'Darwin'):
|
||||
- tarcmd = u"gtar"
|
||||
- elif platform.system().endswith(u'BSD'):
|
||||
- tarcmd = u"gtar"
|
||||
- else:
|
||||
- raise Exception(u"Platform %s not supported by tar/gtar." % platform.platform())
|
||||
+ tarcmd = u"tar"
|
||||
|
||||
# Intial normal backup
|
||||
self.backup(u"full", u"{0}/testfiles/blocktartest".format(_runtest_dir))
|
|
@ -0,0 +1,15 @@
|
|||
diff --git a/testing/functional/__init__.py b/testing/functional/__init__.py
|
||||
index 6c82d2c7..22163fa3 100644
|
||||
--- a/testing/functional/__init__.py
|
||||
+++ b/testing/functional/__init__.py
|
||||
@@ -94,8 +94,8 @@ class FunctionalTestCase(DuplicityTestCase):
|
||||
for item in passphrase_input:
|
||||
assert isinstance(item, str), f"item {os.fsdecode(item)} in passphrase_input is not unicode"
|
||||
|
||||
- # set python path to be dev directory
|
||||
- os.environ["PYTHONPATH"] = _top_dir
|
||||
+ # prepend dev directory to python path
|
||||
+ os.environ["PYTHONPATH"] = _top_dir + ":" + os.environ["PYTHONPATH"]
|
||||
|
||||
cmd_list = []
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue