Merge staging-next into staging
This commit is contained in:
commit
0f78d9c4b7
20 changed files with 166 additions and 71 deletions
|
@ -46,7 +46,7 @@ in
|
|||
messagebus = 4; # D-Bus
|
||||
haldaemon = 5;
|
||||
#disk = 6; # unused
|
||||
vsftpd = 7;
|
||||
#vsftpd = 7; # dynamically allocated ass of 2021-09-14
|
||||
ftp = 8;
|
||||
bitlbee = 9;
|
||||
#avahi = 10; # removed 2019-05-22
|
||||
|
@ -366,7 +366,7 @@ in
|
|||
messagebus = 4; # D-Bus
|
||||
haldaemon = 5;
|
||||
disk = 6;
|
||||
vsftpd = 7;
|
||||
#vsftpd = 7; # dynamically allocated as of 2021-09-14
|
||||
ftp = 8;
|
||||
bitlbee = 9;
|
||||
#avahi = 10; # removed 2019-05-22
|
||||
|
|
|
@ -282,7 +282,8 @@ in
|
|||
|
||||
users.users = {
|
||||
"vsftpd" = {
|
||||
uid = config.ids.uids.vsftpd;
|
||||
group = "vsftpd";
|
||||
isSystemUser = true;
|
||||
description = "VSFTPD user";
|
||||
home = if cfg.localRoot != null
|
||||
then cfg.localRoot # <= Necessary for virtual users.
|
||||
|
@ -297,6 +298,7 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
users.groups.vsftpd = {};
|
||||
users.groups.ftp.gid = config.ids.gids.ftp;
|
||||
|
||||
# If you really have to access root via FTP use mkOverride or userlistDeny
|
||||
|
|
|
@ -1060,6 +1060,7 @@ in
|
|||
uid = config.ids.uids.systemd-coredump;
|
||||
group = "systemd-coredump";
|
||||
};
|
||||
users.groups.systemd-coredump = {};
|
||||
users.users.systemd-network = {
|
||||
uid = config.ids.uids.systemd-network;
|
||||
group = "systemd-network";
|
||||
|
|
|
@ -24,10 +24,10 @@
|
|||
|
||||
with lib;
|
||||
let
|
||||
version = "0.21.1";
|
||||
majorMinorVersion = versions.majorMinor version;
|
||||
version = "22.0";
|
||||
majorVersion = versions.major version;
|
||||
desktop = fetchurl {
|
||||
url = "https://raw.githubusercontent.com/bitcoin-core/packaging/${majorMinorVersion}/debian/bitcoin-qt.desktop";
|
||||
url = "https://raw.githubusercontent.com/bitcoin-core/packaging/${majorVersion}.x/debian/bitcoin-qt.desktop";
|
||||
sha256 = "0cpna0nxcd1dw3nnzli36nf9zj28d2g9jf5y0zl9j18lvanvniha";
|
||||
};
|
||||
in
|
||||
|
@ -40,7 +40,7 @@ stdenv.mkDerivation rec {
|
|||
"https://bitcoincore.org/bin/bitcoin-core-${version}/bitcoin-${version}.tar.gz"
|
||||
"https://bitcoin.org/bin/bitcoin-core-${version}/bitcoin-${version}.tar.gz"
|
||||
];
|
||||
sha256 = "caff23449220cf45753f312cefede53a9eac64000bb300797916526236b6a1e0";
|
||||
sha256 = "d0e9d089b57048b1555efa7cd5a63a7ed042482045f6f33402b1df425bf9613b";
|
||||
};
|
||||
|
||||
nativeBuildInputs =
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
, libGLU
|
||||
, libXmu
|
||||
, libf2c
|
||||
, libredwg
|
||||
, libspnav
|
||||
, matplotlib
|
||||
, medfile
|
||||
|
@ -131,6 +132,7 @@ mkDerivation rec {
|
|||
|
||||
qtWrapperArgs = [
|
||||
"--set COIN_GL_NO_CURRENT_CONTEXT_CHECK 1"
|
||||
"--prefix PATH : ${libredwg}/bin"
|
||||
];
|
||||
|
||||
postFixup = ''
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
buildGoPackage rec {
|
||||
pname = "mob";
|
||||
version = "1.10.0";
|
||||
version = "1.12.0";
|
||||
goPackagePath = "github.com/remotemobprogramming/mob";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
rev = "v${version}";
|
||||
owner = "remotemobprogramming";
|
||||
repo = pname;
|
||||
sha256 = "sha256-O732PNmE+RDmETHAX/vlaSF4ZUShmO7P1B41kCw+/cQ=";
|
||||
sha256 = "sha256-5hvuaKlaWrB8nEeHytnn4ywciLbOSoXdBdc3K/PqMG8=";
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"stable": {
|
||||
"version": "93.0.4577.63",
|
||||
"sha256": "0ls8r77la6p7474j84wchvs4rvnxwfv7c8xvbxjm8h7jqak4zwza",
|
||||
"sha256bin64": "1kv742arnv710mhakm2v59dwfypg7j01k7rd5if8h0s49yzdw3qc",
|
||||
"version": "93.0.4577.82",
|
||||
"sha256": "0lr8zdq06smncdzd6knzww9hxl8ynvxadmrkyyl13fpwb1422rjx",
|
||||
"sha256bin64": "0ydvcakpnl20gx7493hv6aqnyf8f28rkvzgwnm4gws92b92n9ify",
|
||||
"deps": {
|
||||
"gn": {
|
||||
"version": "2021-07-08",
|
||||
|
@ -12,9 +12,9 @@
|
|||
}
|
||||
},
|
||||
"chromedriver": {
|
||||
"version": "93.0.4577.15",
|
||||
"sha256_linux": "11wcimkcgaiz740k9xibi5hq1kd4zgy1vk6bd6cp31wjw4y21x5f",
|
||||
"sha256_darwin": "0cxf3cg5pg9rigq7wmbap6wvmgpdr6v44bndisyaqhlw7s2hhndn"
|
||||
"version": "93.0.4577.63",
|
||||
"sha256_linux": "0w2lyjj0y9g1wnvk1sg2wi9dvhbjhdz1jb20rlrp5ny2gak6a47b",
|
||||
"sha256_darwin": "11420nflyfvf95hxj488336jq6xqjn4lcrwpr67rj2fx6ganji7z"
|
||||
}
|
||||
},
|
||||
"beta": {
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
buildGoModule rec {
|
||||
pname = "bosh-cli";
|
||||
|
||||
version = "6.4.5";
|
||||
version = "6.4.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cloudfoundry";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-/1JRje7SNrIsb3V1tq5ZW5zsURaQUzM/Jp3TMR0MfKw=";
|
||||
sha256 = "sha256-MNM8gyi7L00OSf2EIEQFAlH7oMrcZSubf6tWcgJJMeQ=";
|
||||
};
|
||||
vendorSha256 = null;
|
||||
|
||||
|
|
|
@ -38,7 +38,6 @@ isExecutable() {
|
|||
declare -Ag autoPatchelfCachedDepsAssoc
|
||||
declare -ag autoPatchelfCachedDeps
|
||||
|
||||
|
||||
addToDepCache() {
|
||||
if [[ ${autoPatchelfCachedDepsAssoc[$1]+f} ]]; then return; fi
|
||||
|
||||
|
@ -54,25 +53,70 @@ declare -gi depCacheInitialised=0
|
|||
declare -gi doneRecursiveSearch=0
|
||||
declare -g foundDependency
|
||||
|
||||
getDepsFromSo() {
|
||||
ldd "$1" 2> /dev/null | sed -n -e 's/[^=]*=> *\(.\+\) \+([^)]*)$/\1/p'
|
||||
getDepsFromElfBinary() {
|
||||
# NOTE: This does not use runPatchelf because it may encounter non-ELF
|
||||
# files. Caller is expected to check the return code if needed.
|
||||
patchelf --print-needed "$1" 2> /dev/null
|
||||
}
|
||||
|
||||
getRpathFromElfBinary() {
|
||||
# NOTE: This does not use runPatchelf because it may encounter non-ELF
|
||||
# files. Caller is expected to check the return code if needed.
|
||||
local rpath
|
||||
rpath="$(patchelf --print-rpath "$1" 2> /dev/null)" || return $?
|
||||
|
||||
local IFS=':'
|
||||
printf "%s\n" $rpath
|
||||
}
|
||||
|
||||
populateCacheForDep() {
|
||||
local so="$1"
|
||||
local rpath found
|
||||
rpath="$(getRpathFromElfBinary "$so")" || return 1
|
||||
|
||||
for found in $(getDepsFromElfBinary "$so"); do
|
||||
local rpathElem
|
||||
for rpathElem in $rpath; do
|
||||
# Ignore empty element or $ORIGIN magic variable which should be
|
||||
# deterministically resolved by adding this package's library
|
||||
# files early anyway.
|
||||
#
|
||||
# shellcheck disable=SC2016
|
||||
# (Expressions don't expand in single quotes, use double quotes for
|
||||
# that.)
|
||||
if [[ -z "$rpathElem" || "$rpathElem" == *'$ORIGIN'* ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
local soname="${found%.so*}"
|
||||
local foundso=
|
||||
for foundso in "$rpathElem/$soname".so*; do
|
||||
addToDepCache "$foundso"
|
||||
done
|
||||
|
||||
# Found in this element of the rpath, no need to check others.
|
||||
if [ -n "$foundso" ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
# Not found in any rpath element.
|
||||
return 1
|
||||
}
|
||||
|
||||
populateCacheWithRecursiveDeps() {
|
||||
local so found foundso
|
||||
for so in "${autoPatchelfCachedDeps[@]}"; do
|
||||
for found in $(getDepsFromSo "$so"); do
|
||||
local base="${found##*/}"
|
||||
local soname="${base%.so*}"
|
||||
for foundso in "${found%/*}/$soname".so*; do
|
||||
addToDepCache "$foundso"
|
||||
done
|
||||
done
|
||||
# Dependencies may add more to the end of this array, so we use a counter
|
||||
# with while instead of a regular for loop here.
|
||||
local -i i=0
|
||||
while [ $i -lt ${#autoPatchelfCachedDeps[@]} ]; do
|
||||
populateCacheForDep "${autoPatchelfCachedDeps[$i]}"
|
||||
i=$i+1
|
||||
done
|
||||
}
|
||||
|
||||
getSoArch() {
|
||||
objdump -f "$1" | sed -ne 's/^architecture: *\([^,]\+\).*/\1/p'
|
||||
$OBJDUMP -f "$1" | sed -ne 's/^architecture: *\([^,]\+\).*/\1/p'
|
||||
}
|
||||
|
||||
# NOTE: If you want to use this function outside of the autoPatchelf function,
|
||||
|
@ -130,25 +174,25 @@ autoPatchelfFile() {
|
|||
fi
|
||||
fi
|
||||
|
||||
local libcLib
|
||||
libcLib="$(< "$NIX_CC/nix-support/orig-libc")/lib"
|
||||
|
||||
echo "searching for dependencies of $toPatch" >&2
|
||||
|
||||
# We're going to find all dependencies based on ldd output, so we need to
|
||||
# clear the RPATH first.
|
||||
runPatchelf --remove-rpath "$toPatch"
|
||||
|
||||
# If the file is not a dynamic executable, ldd/sed will fail,
|
||||
# in which case we return, since there is nothing left to do.
|
||||
local missing
|
||||
missing="$(
|
||||
ldd "$toPatch" 2> /dev/null | \
|
||||
sed -n -e 's/^[\t ]*\([^ ]\+\) => not found.*/\1/p'
|
||||
)" || return 0
|
||||
missing="$(getDepsFromElfBinary "$toPatch")" || return 0
|
||||
|
||||
# This ensures that we get the output of all missing dependencies instead
|
||||
# of failing at the first one, because it's more useful when working on a
|
||||
# new package where you don't yet know its dependencies.
|
||||
|
||||
for dep in $missing; do
|
||||
# Check whether this library exists in libc. If so, we don't need to do
|
||||
# any futher searching -- it will be resolved correctly by the linker.
|
||||
if [ -f "$libcLib/$dep" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
echo -n " $dep -> " >&2
|
||||
if findDependency "$dep" "$(getSoArch "$toPatch")"; then
|
||||
rpath="$rpath${rpath:+:}${foundDependency%/*}"
|
||||
|
@ -185,7 +229,7 @@ addAutoPatchelfSearchPath() {
|
|||
done
|
||||
|
||||
while IFS= read -r -d '' file; do
|
||||
addToDepCache "$file"
|
||||
addToDepCache "$file"
|
||||
done < <(find "$@" "${findOpts[@]}" \! -type d \
|
||||
\( -name '*.so' -o -name '*.so.*' \) -print0)
|
||||
}
|
||||
|
@ -221,10 +265,10 @@ autoPatchelf() {
|
|||
segmentHeaders="$(LANG=C $READELF -l "$file")"
|
||||
# Skip if the ELF file doesn't have segment headers (eg. object files).
|
||||
# not using grep -q, because it can cause Broken pipe
|
||||
[ -n "$(echo "$segmentHeaders" | grep '^Program Headers:')" ] || continue
|
||||
grep -q '^Program Headers:' <<<"$segmentHeaders" || continue
|
||||
if isExecutable "$file"; then
|
||||
# Skip if the executable is statically linked.
|
||||
[ -n "$(echo "$segmentHeaders" | grep "^ *INTERP\\>")" ] || continue
|
||||
grep -q "^ *INTERP\\>" <<<"$segmentHeaders" || continue
|
||||
fi
|
||||
# Jump file if patchelf is unable to parse it
|
||||
# Some programs contain binary blobs for testing,
|
||||
|
@ -256,6 +300,9 @@ autoPatchelf() {
|
|||
# So what we do here is basically run in postFixup and emulate the same
|
||||
# behaviour as fixupOutputHooks because the setup hook for patchelf is run in
|
||||
# fixupOutput and the postFixup hook runs later.
|
||||
#
|
||||
# shellcheck disable=SC2016
|
||||
# (Expressions don't expand in single quotes, use double quotes for that.)
|
||||
postFixupHooks+=('
|
||||
if [ -z "${dontAutoPatchelf-}" ]; then
|
||||
autoPatchelf -- $(for output in $outputs; do
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "libadwaita";
|
||||
version = "1.0.0-alpha.1";
|
||||
version = "1.0.0-alpha.2";
|
||||
|
||||
outputs = [ "out" "dev" "devdoc" ];
|
||||
outputBin = "devdoc"; # demo app
|
||||
|
@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
|
|||
owner = "GNOME";
|
||||
repo = "libadwaita";
|
||||
rev = version;
|
||||
sha256 = "1v52md62kaqykv8b6kxxbxwnbdzlda4ir7n5wh2iizadcailyw7p";
|
||||
sha256 = "1yvjdzs5ipmr4gi0l4k6dkqhl9b090kpjc3ll8bv1a6i7yfaf53s";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "libatomic_ops";
|
||||
version = "7.6.10";
|
||||
version = "7.6.12";
|
||||
|
||||
src = fetchurl {
|
||||
urls = [
|
||||
"http://www.ivmaisoft.com/_bin/atomic_ops/libatomic_ops-${version}.tar.gz"
|
||||
"https://github.com/ivmai/libatomic_ops/releases/download/v${version}/libatomic_ops-${version}.tar.gz"
|
||||
];
|
||||
sha256 = "1bwry043f62pc4mgdd37zx3fif19qyrs8f5bw7qxlmkzh5hdyzjq";
|
||||
sha256 = "sha256-8KtWbiX84ItWDh/qtqPbAdtKOOW8aHgEM07zkgxUnz4=";
|
||||
};
|
||||
|
||||
outputs = [ "out" "dev" "doc" ];
|
||||
|
|
|
@ -19,6 +19,11 @@ buildPythonPackage rec {
|
|||
sha256 = "36d682161fdcbfa29681212c210fabecbf6849a505a0cbc54b7f70a10a5278a2";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace setup.py \
|
||||
--replace "google-crc32c >= 1.0, <= 1.1.2" "google-crc32c~=1.0"
|
||||
'';
|
||||
|
||||
propagatedBuildInputs = [ google-auth google-crc32c requests ];
|
||||
|
||||
checkInputs = [ google-cloud-testutils mock pytestCheckHook pytest-asyncio ];
|
||||
|
|
|
@ -8,14 +8,14 @@
|
|||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyupgrade";
|
||||
version = "2.25.0";
|
||||
version = "2.25.1";
|
||||
disabled = pythonOlder "3.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "asottile";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "0mbx5gv6ns896mxzml8q9r9dn5wvnrb7gc5iw49fdwbb0yw9yhyx";
|
||||
sha256 = "sha256-4k4973sNCqE2JbyT901HAijlyymFAR4hJp7NavqlzCQ=";
|
||||
};
|
||||
|
||||
checkInputs = [ pytestCheckHook ];
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "open-policy-agent";
|
||||
version = "0.31.0";
|
||||
version = "0.32.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "open-policy-agent";
|
||||
repo = "opa";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-SUMTyqzeaCTj/fVdDHFZkh43t+mIFGNt6wendOt9gfw=";
|
||||
sha256 = "sha256-RCB9PSUvfIqDAuZFw8HAF35ZhWwTiS+dAHgwlLPwc9I=";
|
||||
};
|
||||
vendorSha256 = null;
|
||||
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "operator-sdk";
|
||||
version = "1.11.0";
|
||||
version = "1.12.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "operator-framework";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-5eW2yrlUI0B5YNi9BtDjPsTC2vwavEXAMppa5rv5xhE=";
|
||||
sha256 = "sha256-+AWkzv6SI/d3p1ljopSyLg2qi1hv6PsynmVG7+lUSTw=";
|
||||
};
|
||||
|
||||
vendorSha256 = "sha256-gATpYjGKxOfXUnfSZ5uXrVbIydiEbijYR2axPluE5YU=";
|
||||
vendorSha256 = "sha256-jYBkC0IA2xbRa+56CW/5EWG8sYg3eRuFdLpOFSinuuw=";
|
||||
|
||||
doCheck = false;
|
||||
|
||||
|
|
|
@ -90,8 +90,9 @@ let
|
|||
in
|
||||
{
|
||||
name =
|
||||
(lib.strings.removePrefix "tree-sitter-"
|
||||
(lib.strings.removeSuffix "-grammar" name))
|
||||
(lib.strings.replaceStrings ["-"] ["_"]
|
||||
(lib.strings.removePrefix "tree-sitter-"
|
||||
(lib.strings.removeSuffix "-grammar" name)))
|
||||
+ stdenv.hostPlatform.extensions.sharedLibrary;
|
||||
path = "${drv}/parser";
|
||||
}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
{ lib
|
||||
, buildPythonPackage
|
||||
, fetchFromGitHub
|
||||
, isPy3k
|
||||
, click
|
||||
, dateparser
|
||||
, pandas
|
||||
, py-lru-cache
|
||||
, six
|
||||
, pytestCheckHook
|
||||
}:
|
||||
{ lib, python3, fetchFromGitHub }:
|
||||
|
||||
buildPythonPackage rec {
|
||||
let
|
||||
# csvs-to-sqlite is currently not compatible with Click 8. See the following
|
||||
# https://github.com/simonw/csvs-to-sqlite/issues/80
|
||||
#
|
||||
# Workaround the issue by providing click 7 explicitly.
|
||||
python = python3.override {
|
||||
packageOverrides = self: super: {
|
||||
click = self.callPackage ../../../development/python-modules/click/7.nix { };
|
||||
};
|
||||
};
|
||||
in with python.pkgs; buildPythonApplication rec {
|
||||
pname = "csvs-to-sqlite";
|
||||
version = "1.2";
|
||||
disabled = !isPy3k;
|
37
pkgs/tools/misc/profetch/default.nix
Normal file
37
pkgs/tools/misc/profetch/default.nix
Normal file
|
@ -0,0 +1,37 @@
|
|||
{ stdenv, lib, fetchFromGitHub, gprolog }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "profetch";
|
||||
version = "0.1.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "RustemB";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "1clh3l50wz6mlrw9kx0wh2bbhnz6bsksyh4ngz7givv4y3g9m702";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ gprolog ];
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
gplc profetch.pl --no-top-level --no-debugger \
|
||||
--no-fd-lib --no-fd-lib-warn \
|
||||
--min-size -o profetch
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
install -Dm755 -t $out/bin profetch
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "System Information Fetcher Written in GNU/Prolog";
|
||||
homepage = "https://github.com/RustemB/profetch";
|
||||
license = licenses.gpl3Only;
|
||||
platforms = platforms.all;
|
||||
maintainers = [ maintainers.vel ];
|
||||
};
|
||||
}
|
|
@ -2470,7 +2470,7 @@ with pkgs;
|
|||
|
||||
csv2latex = callPackage ../tools/misc/csv2latex { };
|
||||
|
||||
csvs-to-sqlite = with python3Packages; toPythonApplication csvs-to-sqlite;
|
||||
csvs-to-sqlite = callPackage ../tools/misc/csvs-to-sqlite { };
|
||||
|
||||
cucumber = callPackage ../development/tools/cucumber {};
|
||||
|
||||
|
@ -3303,6 +3303,8 @@ with pkgs;
|
|||
inherit (darwin) libiconv;
|
||||
};
|
||||
|
||||
profetch = callPackage ../tools/misc/profetch { };
|
||||
|
||||
psrecord = python3Packages.callPackage ../tools/misc/psrecord {};
|
||||
|
||||
reg = callPackage ../tools/virtualization/reg { };
|
||||
|
|
|
@ -1751,8 +1751,6 @@ in {
|
|||
|
||||
cssutils = callPackage ../development/python-modules/cssutils { };
|
||||
|
||||
csvs-to-sqlite = callPackage ../development/python-modules/csvs-to-sqlite { };
|
||||
|
||||
csvw = callPackage ../development/python-modules/csvw { };
|
||||
|
||||
cucumber-tag-expressions = callPackage ../development/python-modules/cucumber-tag-expressions { };
|
||||
|
|
Loading…
Reference in a new issue