Merge staging-next into staging
This commit is contained in:
@@ -49,6 +49,7 @@ The maintainer is welcome to come back at any time.
|
||||
## Tools for maintainers
|
||||
|
||||
When a pull request is made against a package, nixpkgs CI will notify the appropriate maintainer(s) by trying to correlate the files the PR touches with the packages that need rebuilding.
|
||||
This process is subject to error however, so we encourage PR authors to notify the appropriate people.
|
||||
|
||||
Maintainers can also invoke the [nixpkgs-merge-bot](https://github.com/nixos/nixpkgs-merge-bot) to merge pull requests targeting packages they are the maintainer of, which satisfy the current security [constraints](https://github.com/NixOS/nixpkgs-merge-bot/blob/main/README.md#constraints).
|
||||
Examples: [#397273](https://github.com/NixOS/nixpkgs/pull/397273#issuecomment-2789382120) and [#377027](https://github.com/NixOS/nixpkgs/pull/377027#issuecomment-2614510869)
|
||||
|
||||
@@ -11,6 +11,6 @@ in
|
||||
|
||||
runCommand "nixos-test-driver-docstrings" env ''
|
||||
mkdir $out
|
||||
python3 ${./src/extract-docstrings.py} ${./src/test_driver/machine.py} \
|
||||
python3 ${./src/extract-docstrings.py} ${./src/test_driver/machine/__init__.py} \
|
||||
> $out/machine-methods.md
|
||||
''
|
||||
|
||||
@@ -39,15 +39,15 @@ def get_tmp_dir() -> Path:
|
||||
Raises an exception in case the retrieved temporary directory is not writeable
|
||||
See https://docs.python.org/3/library/tempfile.html#tempfile.gettempdir
|
||||
"""
|
||||
tmp_dir = Path(tempfile.gettempdir())
|
||||
tmp_dir = Path(os.environ.get("XDG_RUNTIME_DIR", tempfile.gettempdir()))
|
||||
tmp_dir.mkdir(mode=0o700, exist_ok=True)
|
||||
if not tmp_dir.is_dir():
|
||||
raise NotADirectoryError(
|
||||
f"The directory defined by TMPDIR, TEMP, TMP or CWD: {tmp_dir} is not a directory"
|
||||
f"The directory defined by XDG_RUNTIME_DIR, TMPDIR, TEMP, TMP or CWD: {tmp_dir} is not a directory"
|
||||
)
|
||||
if not os.access(tmp_dir, os.W_OK):
|
||||
raise PermissionError(
|
||||
f"The directory defined by TMPDIR, TEMP, TMP, or CWD: {tmp_dir} is not writeable"
|
||||
f"The directory defined by XDG_RUNTIME_DIR, TMPDIR, TEMP, TMP, or CWD: {tmp_dir} is not writeable"
|
||||
)
|
||||
return tmp_dir
|
||||
|
||||
|
||||
+26
-94
@@ -13,8 +13,8 @@ import sys
|
||||
import tempfile
|
||||
import threading
|
||||
import time
|
||||
from collections.abc import Callable, Iterable
|
||||
from contextlib import _GeneratorContextManager, nullcontext
|
||||
from collections.abc import Callable, Generator
|
||||
from contextlib import _GeneratorContextManager, contextmanager, nullcontext
|
||||
from pathlib import Path
|
||||
from queue import Queue
|
||||
from typing import Any
|
||||
@@ -22,6 +22,7 @@ from typing import Any
|
||||
from test_driver.errors import MachineError, RequestedAssertionFailed
|
||||
from test_driver.logger import AbstractLogger
|
||||
|
||||
from .ocr import perform_ocr_on_screenshot, perform_ocr_variants_on_screenshot
|
||||
from .qmp import QMPSession
|
||||
|
||||
CHAR_TO_KEY = {
|
||||
@@ -92,84 +93,6 @@ def make_command(args: list) -> str:
|
||||
return " ".join(map(shlex.quote, (map(str, args))))
|
||||
|
||||
|
||||
def _preprocess_screenshot(screenshot_path: str, negate: bool = False) -> str:
|
||||
magick_args = [
|
||||
"-filter",
|
||||
"Catrom",
|
||||
"-density",
|
||||
"72",
|
||||
"-resample",
|
||||
"300",
|
||||
"-contrast",
|
||||
"-normalize",
|
||||
"-despeckle",
|
||||
"-type",
|
||||
"grayscale",
|
||||
"-sharpen",
|
||||
"1",
|
||||
"-posterize",
|
||||
"3",
|
||||
]
|
||||
out_file = screenshot_path
|
||||
|
||||
if negate:
|
||||
magick_args.append("-negate")
|
||||
out_file += ".negative"
|
||||
|
||||
magick_args += [
|
||||
"-gamma",
|
||||
"100",
|
||||
"-blur",
|
||||
"1x65535",
|
||||
]
|
||||
out_file += ".png"
|
||||
|
||||
ret = subprocess.run(
|
||||
["magick", "convert"] + magick_args + [screenshot_path, out_file],
|
||||
capture_output=True,
|
||||
)
|
||||
|
||||
if ret.returncode != 0:
|
||||
raise MachineError(
|
||||
f"Image processing failed with exit code {ret.returncode}, stdout: {ret.stdout.decode()}, stderr: {ret.stderr.decode()}"
|
||||
)
|
||||
|
||||
return out_file
|
||||
|
||||
|
||||
def _perform_ocr_on_screenshot(
|
||||
screenshot_path: str, model_ids: Iterable[int]
|
||||
) -> list[str]:
|
||||
if shutil.which("tesseract") is None:
|
||||
raise MachineError("OCR requested but enableOCR is false")
|
||||
|
||||
processed_image = _preprocess_screenshot(screenshot_path, negate=False)
|
||||
processed_negative = _preprocess_screenshot(screenshot_path, negate=True)
|
||||
|
||||
model_results = []
|
||||
for image in [screenshot_path, processed_image, processed_negative]:
|
||||
for model_id in model_ids:
|
||||
ret = subprocess.run(
|
||||
[
|
||||
"tesseract",
|
||||
image,
|
||||
"-",
|
||||
"--oem",
|
||||
str(model_id),
|
||||
"-c",
|
||||
"debug_file=/dev/null",
|
||||
"--psm",
|
||||
"11",
|
||||
],
|
||||
capture_output=True,
|
||||
)
|
||||
if ret.returncode != 0:
|
||||
raise MachineError(f"OCR failed with exit code {ret.returncode}")
|
||||
model_results.append(ret.stdout.decode("utf-8"))
|
||||
|
||||
return model_results
|
||||
|
||||
|
||||
def retry(fn: Callable, timeout: int = 900) -> None:
|
||||
"""Call the given function repeatedly, with 1 second intervals,
|
||||
until it returns True or a timeout is reached.
|
||||
@@ -910,6 +833,17 @@ class Machine:
|
||||
self.log(f"(connecting took {toc - tic:.2f} seconds)")
|
||||
self.connected = True
|
||||
|
||||
@contextmanager
|
||||
def _managed_screenshot(self) -> Generator[Path]:
|
||||
"""
|
||||
Take a screenshot and yield the screenshot filepath.
|
||||
The file will be deleted when leaving the generator.
|
||||
"""
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
screenshot_path: Path = Path(tmpdir) / "ppm"
|
||||
self.send_monitor_command(f"screendump {screenshot_path}")
|
||||
yield screenshot_path
|
||||
|
||||
def screenshot(self, filename: str) -> None:
|
||||
"""
|
||||
Take a picture of the display of the virtual machine, in PNG format.
|
||||
@@ -919,17 +853,19 @@ class Machine:
|
||||
filename += ".png"
|
||||
if "/" not in filename:
|
||||
filename = os.path.join(self.out_dir, filename)
|
||||
tmp = f"{filename}.ppm"
|
||||
|
||||
with self.nested(
|
||||
f"making screenshot {filename}",
|
||||
{"image": os.path.basename(filename)},
|
||||
):
|
||||
self.send_monitor_command(f"screendump {tmp}")
|
||||
ret = subprocess.run(f"pnmtopng '{tmp}' > '{filename}'", shell=True)
|
||||
os.unlink(tmp)
|
||||
if ret.returncode != 0:
|
||||
raise MachineError("Cannot convert screenshot")
|
||||
with self._managed_screenshot() as screenshot_path:
|
||||
ret = subprocess.run(
|
||||
f"pnmtopng '{screenshot_path}' > '{filename}'", shell=True
|
||||
)
|
||||
if ret.returncode != 0:
|
||||
raise MachineError(
|
||||
f"Cannot convert screenshot (pnmtopng returned code {ret.returncode})"
|
||||
)
|
||||
|
||||
def copy_from_host_via_shell(self, source: str, target: str) -> None:
|
||||
"""Copy a file from the host into the guest by piping it over the
|
||||
@@ -1003,12 +939,6 @@ class Machine:
|
||||
"""Debugging: Dump the contents of the TTY<n>"""
|
||||
self.execute(f"fold -w 80 /dev/vcs{tty} | systemd-cat")
|
||||
|
||||
def _get_screen_text_variants(self, model_ids: Iterable[int]) -> list[str]:
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
screenshot_path = os.path.join(tmpdir, "ppm")
|
||||
self.send_monitor_command(f"screendump {screenshot_path}")
|
||||
return _perform_ocr_on_screenshot(screenshot_path, model_ids)
|
||||
|
||||
def get_screen_text_variants(self) -> list[str]:
|
||||
"""
|
||||
Return a list of different interpretations of what is currently
|
||||
@@ -1021,7 +951,8 @@ class Machine:
|
||||
This requires [`enableOCR`](#test-opt-enableOCR) to be set to `true`.
|
||||
:::
|
||||
"""
|
||||
return self._get_screen_text_variants([0, 1, 2])
|
||||
with self._managed_screenshot() as screenshot_path:
|
||||
return perform_ocr_variants_on_screenshot(screenshot_path)
|
||||
|
||||
def get_screen_text(self) -> str:
|
||||
"""
|
||||
@@ -1032,7 +963,8 @@ class Machine:
|
||||
This requires [`enableOCR`](#test-opt-enableOCR) to be set to `true`.
|
||||
:::
|
||||
"""
|
||||
return self._get_screen_text_variants([2])[0]
|
||||
with self._managed_screenshot() as screenshot_path:
|
||||
return perform_ocr_on_screenshot(screenshot_path)
|
||||
|
||||
def wait_for_text(self, regex: str, timeout: int = 900) -> None:
|
||||
"""
|
||||
@@ -0,0 +1,127 @@
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
from concurrent.futures import Future, ThreadPoolExecutor
|
||||
from pathlib import Path
|
||||
|
||||
from test_driver.errors import MachineError
|
||||
|
||||
|
||||
def perform_ocr_on_screenshot(screenshot_path: Path) -> str:
|
||||
"""
|
||||
Perform OCR on a screenshot that contains text.
|
||||
Returns a string with all words that could be found.
|
||||
"""
|
||||
variants = perform_ocr_variants_on_screenshot(screenshot_path, False)[0]
|
||||
if len(variants) != 1:
|
||||
raise MachineError(f"Received wrong number of OCR results: {len(variants)}")
|
||||
return variants[0]
|
||||
|
||||
|
||||
def perform_ocr_variants_on_screenshot(
|
||||
screenshot_path: Path, variants: bool = True
|
||||
) -> list[str]:
|
||||
"""
|
||||
Same as perform_ocr_on_screenshot but will create variants of the images
|
||||
that can lead to more words being detected.
|
||||
Returns a string with words for each variant.
|
||||
"""
|
||||
if shutil.which("tesseract") is None:
|
||||
raise MachineError("OCR requested but `tesseract` is not available")
|
||||
|
||||
# Tesseract runs parallel on up to 4 cores.
|
||||
# Docs suggest to run it with OMP_THREAD_LIMIT=1 for hundreds of parallel
|
||||
# runs. Our average test run is somewhere inbetween.
|
||||
# https://github.com/tesseract-ocr/tesseract/issues/3109
|
||||
nix_cores: str | None = os.environ.get("NIX_BUILD_CORES")
|
||||
cores: int = os.cpu_count() or 1 if nix_cores is None else int(nix_cores)
|
||||
workers: int = max(1, int(cores / 4))
|
||||
|
||||
with ThreadPoolExecutor(max_workers=workers) as e:
|
||||
# The idea here is to let the first tesseract call run on the raw image
|
||||
# while the other two are preprocessed + tesseracted in parallel
|
||||
future_results: list[Future] = [e.submit(_run_tesseract, screenshot_path)]
|
||||
if variants:
|
||||
|
||||
def tesseract_processed(inverted: bool) -> str:
|
||||
return _run_tesseract(_preprocess_screenshot(screenshot_path, inverted))
|
||||
|
||||
future_results.append(e.submit(tesseract_processed, False))
|
||||
future_results.append(e.submit(tesseract_processed, True))
|
||||
return [future.result() for future in future_results]
|
||||
|
||||
|
||||
def _run_tesseract(image: Path) -> str:
|
||||
# tesseract --help-oem
|
||||
# OCR Engine modes (OEM):
|
||||
# 0|tesseract_only Legacy engine only.
|
||||
# 1|lstm_only Neural nets LSTM engine only.
|
||||
# 2|tesseract_lstm_combined Legacy + LSTM engines.
|
||||
# 3|default Default, based on what is available.
|
||||
ocr_engine_mode = 2
|
||||
|
||||
ret = subprocess.run(
|
||||
[
|
||||
"tesseract",
|
||||
image,
|
||||
"-",
|
||||
"--oem",
|
||||
str(ocr_engine_mode),
|
||||
"-c",
|
||||
"debug_file=/dev/null",
|
||||
"--psm",
|
||||
"11",
|
||||
],
|
||||
capture_output=True,
|
||||
)
|
||||
if ret.returncode != 0:
|
||||
raise MachineError(f"OCR failed with exit code {ret.returncode}")
|
||||
return ret.stdout.decode("utf-8")
|
||||
|
||||
|
||||
def _preprocess_screenshot(screenshot_path: Path, negate: bool = False) -> Path:
|
||||
if shutil.which("magick") is None:
|
||||
raise MachineError("OCR requested but `magick` is not available")
|
||||
|
||||
magick_args = [
|
||||
"-filter",
|
||||
"Catrom",
|
||||
"-density",
|
||||
"72",
|
||||
"-resample",
|
||||
"300",
|
||||
"-contrast",
|
||||
"-normalize",
|
||||
"-despeckle",
|
||||
"-type",
|
||||
"grayscale",
|
||||
"-sharpen",
|
||||
"1",
|
||||
"-posterize",
|
||||
"3",
|
||||
]
|
||||
out_file = screenshot_path
|
||||
|
||||
if negate:
|
||||
magick_args.append("-negate")
|
||||
out_file = out_file.with_suffix(".negative")
|
||||
|
||||
magick_args += [
|
||||
"-gamma",
|
||||
"100",
|
||||
"-blur",
|
||||
"1x65535",
|
||||
]
|
||||
out_file = out_file.with_suffix(".png")
|
||||
|
||||
ret = subprocess.run(
|
||||
["magick", "convert"] + magick_args + [screenshot_path, out_file],
|
||||
capture_output=True,
|
||||
)
|
||||
|
||||
if ret.returncode != 0:
|
||||
raise MachineError(
|
||||
f"Image processing failed with exit code {ret.returncode}, stdout: {ret.stdout.decode()}, stderr: {ret.stderr.decode()}"
|
||||
)
|
||||
|
||||
return out_file
|
||||
@@ -17,13 +17,13 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "cri-o";
|
||||
version = "1.33.1";
|
||||
version = "1.33.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cri-o";
|
||||
repo = "cri-o";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-leWFoZ8aMGQgy0JDcbyZ+GX9B6Qdm+f5ng1X0beIcw0=";
|
||||
hash = "sha256-QHWE0BVsGFk1UOo51wZUl24bisS9GzCeWkE7yM3dYec=";
|
||||
};
|
||||
vendorHash = null;
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
declare -g version
|
||||
# shellcheck shell=bash
|
||||
|
||||
declare -g out
|
||||
declare -g pname
|
||||
declare -g composerVendor
|
||||
declare -g -i composerStrictValidation="${composerStrictValidation:-0}"
|
||||
@@ -8,63 +10,64 @@ preBuildHooks+=(composerInstallBuildHook)
|
||||
preCheckHooks+=(composerInstallCheckHook)
|
||||
preInstallHooks+=(composerInstallInstallHook)
|
||||
|
||||
# shellcheck source=/dev/null
|
||||
source @phpScriptUtils@
|
||||
|
||||
composerInstallConfigureHook() {
|
||||
echo "Executing composerInstallConfigureHook"
|
||||
echo "Executing composerInstallConfigureHook"
|
||||
|
||||
setComposerRootVersion
|
||||
setComposerRootVersion
|
||||
|
||||
if [[ ! -e "${composerVendor}" ]]; then
|
||||
echo "No local composer vendor found." >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ ! -e "${composerVendor}" ]]; then
|
||||
echo "No local composer vendor found." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
install -Dm644 ${composerVendor}/composer.json .
|
||||
install -Dm644 "${composerVendor}"/composer.json .
|
||||
|
||||
if [[ -f "${composerVendor}/composer.lock" ]]; then
|
||||
install -Dm644 ${composerVendor}/composer.lock .
|
||||
fi
|
||||
if [[ -f "${composerVendor}/composer.lock" ]]; then
|
||||
install -Dm644 "${composerVendor}"/composer.lock .
|
||||
fi
|
||||
|
||||
if [[ -f "composer.lock" ]]; then
|
||||
chmod +w composer.lock
|
||||
fi
|
||||
if [[ -f "composer.lock" ]]; then
|
||||
chmod +w composer.lock
|
||||
fi
|
||||
|
||||
chmod +w composer.json
|
||||
chmod +w composer.json
|
||||
|
||||
echo "Finished composerInstallConfigureHook"
|
||||
echo "Finished composerInstallConfigureHook"
|
||||
}
|
||||
|
||||
composerInstallBuildHook() {
|
||||
echo "Executing composerInstallBuildHook"
|
||||
echo "Executing composerInstallBuildHook"
|
||||
|
||||
echo "Finished composerInstallBuildHook"
|
||||
echo "Finished composerInstallBuildHook"
|
||||
}
|
||||
|
||||
composerInstallCheckHook() {
|
||||
echo "Executing composerInstallCheckHook"
|
||||
echo "Executing composerInstallCheckHook"
|
||||
|
||||
checkComposerValidate
|
||||
checkComposerValidate
|
||||
|
||||
echo "Finished composerInstallCheckHook"
|
||||
echo "Finished composerInstallCheckHook"
|
||||
}
|
||||
|
||||
composerInstallInstallHook() {
|
||||
echo "Executing composerInstallInstallHook"
|
||||
echo "Executing composerInstallInstallHook"
|
||||
|
||||
cp -ar ${composerVendor}/* .
|
||||
cp -ar "${composerVendor}"/* .
|
||||
|
||||
# Copy the relevant files only in the store.
|
||||
mkdir -p "$out"/share/php/"${pname}"
|
||||
cp -r . "$out"/share/php/"${pname}"/
|
||||
# Copy the relevant files only in the store.
|
||||
mkdir -p "$out"/share/php/"${pname}"
|
||||
cp -r . "$out"/share/php/"${pname}"/
|
||||
|
||||
# Create symlinks for the binaries.
|
||||
mapfile -t BINS < <(jq -r -c 'try (.bin[] | select(test(".bat$")? | not) )' composer.json)
|
||||
for bin in "${BINS[@]}"; do
|
||||
echo -e "\e[32mCreating symlink ${bin}...\e[0m"
|
||||
mkdir -p "$out/bin"
|
||||
ln -s "$out/share/php/${pname}/${bin}" "$out/bin/$(basename "$bin")"
|
||||
done
|
||||
# Create symlinks for the binaries.
|
||||
mapfile -t BINS < <(jq -r -c 'try (.bin[] | select(test(".bat$")? | not) )' composer.json)
|
||||
for bin in "${BINS[@]}"; do
|
||||
echo -e "\e[32mCreating symlink ${bin}...\e[0m"
|
||||
mkdir -p "$out/bin"
|
||||
ln -s "$out/share/php/${pname}/${bin}" "$out/bin/$(basename "$bin")"
|
||||
done
|
||||
|
||||
echo "Finished composerInstallInstallHook"
|
||||
echo "Finished composerInstallInstallHook"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
# shellcheck source=/dev/null
|
||||
source @phpScriptUtils@
|
||||
|
||||
declare -g out
|
||||
declare -g composerLock
|
||||
declare -g composerNoDev="${composerNoDev:+--no-dev}"
|
||||
declare -g composerNoPlugins="${composerNoPlugins:+--no-plugins}"
|
||||
declare -g composerNoScripts="${composerNoScripts:+--no-scripts}"
|
||||
@@ -10,111 +15,111 @@ preCheckHooks+=(composerVendorCheckHook)
|
||||
preInstallHooks+=(composerVendorInstallHook)
|
||||
|
||||
composerVendorConfigureHook() {
|
||||
echo "Executing composerVendorConfigureHook"
|
||||
echo "Executing composerVendorConfigureHook"
|
||||
|
||||
setComposerRootVersion
|
||||
setComposerRootVersion
|
||||
|
||||
if [[ -f "composer.lock" ]]; then
|
||||
echo -e "\e[32mUsing \`composer.lock\` file from the source package\e[0m"
|
||||
fi
|
||||
|
||||
if [[ -e "$composerLock" ]]; then
|
||||
echo -e "\e[32mUsing user provided \`composer.lock\` file from \`$composerLock\`\e[0m"
|
||||
install -Dm644 "$composerLock" ./composer.lock
|
||||
fi
|
||||
|
||||
if [[ ! -f "composer.lock" ]]; then
|
||||
composer \
|
||||
--no-cache \
|
||||
--no-install \
|
||||
--no-interaction \
|
||||
--no-progress \
|
||||
--optimize-autoloader \
|
||||
"${composerNoDev}" \
|
||||
"${composerNoPlugins}" \
|
||||
"${composerNoScripts}" \
|
||||
update
|
||||
|
||||
if [[ -f "composer.lock" ]]; then
|
||||
echo -e "\e[32mUsing \`composer.lock\` file from the source package\e[0m"
|
||||
install -Dm644 composer.lock -t "$out"/
|
||||
|
||||
echo
|
||||
echo -e "\e[31mERROR: No composer.lock found\e[0m"
|
||||
echo
|
||||
echo -e '\e[31mNo composer.lock file found, consider adding one to your repository to ensure reproducible builds.\e[0m'
|
||||
echo -e "\e[31mIn the meantime, a composer.lock file has been generated for you in $out/composer.lock\e[0m"
|
||||
echo
|
||||
echo -e '\e[31mTo fix the issue:\e[0m'
|
||||
echo -e "\e[31m1. Copy the composer.lock file from $out/composer.lock to the project's source:\e[0m"
|
||||
echo -e "\e[31m cp $out/composer.lock <path>\e[0m"
|
||||
echo -e '\e[31m2. Add the composerLock attribute, pointing to the copied composer.lock file:\e[0m'
|
||||
echo -e '\e[31m composerLock = ./composer.lock;\e[0m'
|
||||
echo
|
||||
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -e "$composerLock" ]]; then
|
||||
echo -e "\e[32mUsing user provided \`composer.lock\` file from \`$composerLock\`\e[0m"
|
||||
install -Dm644 $composerLock ./composer.lock
|
||||
fi
|
||||
if [[ -f "composer.lock" ]]; then
|
||||
chmod +w composer.lock
|
||||
fi
|
||||
|
||||
if [[ ! -f "composer.lock" ]]; then
|
||||
composer \
|
||||
--no-cache \
|
||||
--no-install \
|
||||
--no-interaction \
|
||||
--no-progress \
|
||||
--optimize-autoloader \
|
||||
${composerNoDev} \
|
||||
${composerNoPlugins} \
|
||||
${composerNoScripts} \
|
||||
update
|
||||
chmod +w composer.json
|
||||
|
||||
if [[ -f "composer.lock" ]]; then
|
||||
install -Dm644 composer.lock -t $out/
|
||||
|
||||
echo
|
||||
echo -e "\e[31mERROR: No composer.lock found\e[0m"
|
||||
echo
|
||||
echo -e '\e[31mNo composer.lock file found, consider adding one to your repository to ensure reproducible builds.\e[0m'
|
||||
echo -e "\e[31mIn the meantime, a composer.lock file has been generated for you in $out/composer.lock\e[0m"
|
||||
echo
|
||||
echo -e '\e[31mTo fix the issue:\e[0m'
|
||||
echo -e "\e[31m1. Copy the composer.lock file from $out/composer.lock to the project's source:\e[0m"
|
||||
echo -e "\e[31m cp $out/composer.lock <path>\e[0m"
|
||||
echo -e '\e[31m2. Add the composerLock attribute, pointing to the copied composer.lock file:\e[0m'
|
||||
echo -e '\e[31m composerLock = ./composer.lock;\e[0m'
|
||||
echo
|
||||
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -f "composer.lock" ]]; then
|
||||
chmod +w composer.lock
|
||||
fi
|
||||
|
||||
chmod +w composer.json
|
||||
|
||||
echo "Finished composerVendorConfigureHook"
|
||||
echo "Finished composerVendorConfigureHook"
|
||||
}
|
||||
|
||||
composerVendorBuildHook() {
|
||||
echo "Executing composerVendorBuildHook"
|
||||
echo "Executing composerVendorBuildHook"
|
||||
|
||||
setComposerEnvVariables
|
||||
setComposerEnvVariables
|
||||
|
||||
composer \
|
||||
--no-cache \
|
||||
--no-interaction \
|
||||
--no-progress \
|
||||
--optimize-autoloader \
|
||||
${composerNoDev} \
|
||||
${composerNoPlugins} \
|
||||
${composerNoScripts} \
|
||||
install
|
||||
composer \
|
||||
--no-cache \
|
||||
--no-interaction \
|
||||
--no-progress \
|
||||
--optimize-autoloader \
|
||||
"${composerNoDev}" \
|
||||
"${composerNoPlugins}" \
|
||||
"${composerNoScripts}" \
|
||||
install
|
||||
|
||||
echo "Finished composerVendorBuildHook"
|
||||
echo "Finished composerVendorBuildHook"
|
||||
}
|
||||
|
||||
composerVendorCheckHook() {
|
||||
echo "Executing composerVendorCheckHook"
|
||||
echo "Executing composerVendorCheckHook"
|
||||
|
||||
checkComposerValidate
|
||||
checkComposerValidate
|
||||
|
||||
echo "Finished composerVendorCheckHook"
|
||||
echo "Finished composerVendorCheckHook"
|
||||
}
|
||||
|
||||
composerVendorInstallHook() {
|
||||
echo "Executing composerVendorInstallHook"
|
||||
echo "Executing composerVendorInstallHook"
|
||||
|
||||
mkdir -p $out
|
||||
mkdir -p "$out"
|
||||
|
||||
cp -ar composer.json $(composer config vendor-dir) $out/
|
||||
mapfile -t installer_paths < <(jq -r -c 'try((.extra."installer-paths") | keys[])' composer.json)
|
||||
cp -ar composer.json "$(composer config vendor-dir)" "$out"/
|
||||
mapfile -t installer_paths < <(jq -r -c 'try((.extra."installer-paths") | keys[])' composer.json)
|
||||
|
||||
for installer_path in "${installer_paths[@]}"; do
|
||||
# Remove everything after {$name} placeholder
|
||||
installer_path="${installer_path/\{\$name\}*/}";
|
||||
out_installer_path="$out/${installer_path/\{\$name\}*/}";
|
||||
# Copy the installer path if it exists
|
||||
if [[ -d "$installer_path" ]]; then
|
||||
mkdir -p $(dirname "$out_installer_path")
|
||||
echo -e "\e[32mCopying installer path $installer_path to $out_installer_path\e[0m"
|
||||
cp -ar "$installer_path" "$out_installer_path"
|
||||
# Strip out the git repositories
|
||||
find $out_installer_path -name .git -type d -prune -print -exec rm -rf {} ";"
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ -f "composer.lock" ]]; then
|
||||
cp -ar composer.lock $out/
|
||||
for installer_path in "${installer_paths[@]}"; do
|
||||
# Remove everything after {$name} placeholder
|
||||
installer_path="${installer_path/\{\$name\}*/}"
|
||||
out_installer_path="$out/${installer_path/\{\$name\}*/}"
|
||||
# Copy the installer path if it exists
|
||||
if [[ -d "$installer_path" ]]; then
|
||||
mkdir -p "$(dirname "$out_installer_path")"
|
||||
echo -e "\e[32mCopying installer path $installer_path to $out_installer_path\e[0m"
|
||||
cp -ar "$installer_path" "$out_installer_path"
|
||||
# Strip out the git repositories
|
||||
find "$out_installer_path" -name .git -type d -prune -print -exec rm -rf {} ";"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "Finished composerVendorInstallHook"
|
||||
if [[ -f "composer.lock" ]]; then
|
||||
cp -ar composer.lock "$out"/
|
||||
fi
|
||||
|
||||
echo "Finished composerVendorInstallHook"
|
||||
}
|
||||
|
||||
@@ -1,82 +1,72 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
declare -g version
|
||||
declare -g -i composerStrictValidation="${composerStrictValidation:-0}"
|
||||
|
||||
setComposerRootVersion() {
|
||||
if [[ -n $version ]]; then
|
||||
echo -e "\e[32mSetting COMPOSER_ROOT_VERSION to $version\e[0m"
|
||||
export COMPOSER_ROOT_VERSION="$version"
|
||||
fi
|
||||
if [[ -n $version ]]; then
|
||||
echo -e "\e[32mSetting COMPOSER_ROOT_VERSION to $version\e[0m"
|
||||
export COMPOSER_ROOT_VERSION="$version"
|
||||
fi
|
||||
}
|
||||
|
||||
setComposerEnvVariables() {
|
||||
echo -e "\e[32mSetting some required environment variables for Composer...\e[0m"
|
||||
export COMPOSER_MIRROR_PATH_REPOS=1
|
||||
export COMPOSER_HTACCESS_PROTECT=0
|
||||
export COMPOSER_FUND=0
|
||||
echo -e "\e[32mSetting some required environment variables for Composer...\e[0m"
|
||||
export COMPOSER_MIRROR_PATH_REPOS=1
|
||||
export COMPOSER_HTACCESS_PROTECT=0
|
||||
export COMPOSER_FUND=0
|
||||
}
|
||||
|
||||
checkComposerValidate() {
|
||||
command="composer validate --strict --quiet --no-interaction --no-check-all --no-check-lock"
|
||||
if ! $command; then
|
||||
if [[ "${composerStrictValidation}" == "1" ]]; then
|
||||
echo
|
||||
echo -e "\e[31mERROR: composer files validation failed\e[0m"
|
||||
echo
|
||||
echo -e '\e[31mThe validation of the composer.json failed.\e[0m'
|
||||
echo -e '\e[31mMake sure that the file composer.json is valid.\e[0m'
|
||||
echo
|
||||
echo -e '\e[31mTo address the issue efficiently, follow one of these steps:\e[0m'
|
||||
echo -e '\e[31m 1. File an issue in the project'\''s issue tracker with detailed information, and apply any available remote patches as a temporary solution '\('with fetchpatch'\)'.\e[0m'
|
||||
echo -e '\e[31m 2. If an immediate fix is needed or if reporting upstream isn'\''t suitable, develop a temporary local patch.\e[0m'
|
||||
echo
|
||||
exit 1
|
||||
else
|
||||
echo
|
||||
echo -e "\e[33mWARNING: composer files validation failed\e[0m"
|
||||
echo
|
||||
echo -e '\e[33mThe validation of the composer.json failed.\e[0m'
|
||||
echo -e '\e[33mMake sure that the file composer.json is valid.\e[0m'
|
||||
echo
|
||||
echo -e '\e[33mTo address the issue efficiently, follow one of these steps:\e[0m'
|
||||
echo -e '\e[33m 1. File an issue in the project'\''s issue tracker with detailed information, and apply any available remote patches as a temporary solution with '\('with fetchpatch'\)'.\e[0m'
|
||||
echo -e '\e[33m 2. If an immediate fix is needed or if reporting upstream isn'\''t suitable, develop a temporary local patch.\e[0m'
|
||||
echo
|
||||
echo -e '\e[33mThis check is not blocking, but it is recommended to fix the issue.\e[0m'
|
||||
echo
|
||||
fi
|
||||
fi
|
||||
command="composer validate --strict --quiet --no-interaction --no-check-all --no-check-lock"
|
||||
if ! $command; then
|
||||
echo
|
||||
echo -e "\e[31mERROR: composer files validation failed\e[0m"
|
||||
echo
|
||||
echo -e '\e[31mThe validation of the composer.json failed.\e[0m'
|
||||
echo -e '\e[31mMake sure that the file composer.json is valid.\e[0m'
|
||||
echo
|
||||
echo -e '\e[31mTo address the issue efficiently, follow one of these steps:\e[0m'
|
||||
echo -e '\e[31m 1. File an issue in the project'\''s issue tracker with detailed information, and apply any available remote patches as a temporary solution '\('with fetchpatch'\)'.\e[0m'
|
||||
echo -e '\e[31m 2. If an immediate fix is needed or if reporting upstream isn'\''t suitable, develop a temporary local patch.\e[0m'
|
||||
echo
|
||||
|
||||
command="composer validate --strict --no-ansi --no-interaction --quiet --no-check-all --check-lock"
|
||||
if ! $command; then
|
||||
if [[ "${composerStrictValidation}" == "1" ]]; then
|
||||
echo
|
||||
echo -e "\e[31mERROR: composer files validation failed\e[0m"
|
||||
echo
|
||||
echo -e '\e[31mThe validation of the composer.json and composer.lock failed.\e[0m'
|
||||
echo -e '\e[31mMake sure that the file composer.lock is consistent with composer.json.\e[0m'
|
||||
echo
|
||||
echo -e '\e[31mThis often indicates an issue with the upstream project, which can typically be resolved by reporting the issue to the relevant project maintainers.\e[0m'
|
||||
echo
|
||||
echo -e '\e[31mTo address the issue efficiently, follow one of these steps:\e[0m'
|
||||
echo -e '\e[31m 1. File an issue in the project'\''s issue tracker with detailed information '\('run '\''composer update --lock --no-install'\'' to fix the issue'\)', and apply any available remote patches as a temporary solution with '\('with fetchpatch'\)'.\e[0m'
|
||||
echo -e '\e[31m 2. If an immediate fix is needed or if reporting upstream isn'\''t suitable, develop a temporary local patch.\e[0m'
|
||||
echo
|
||||
exit 1
|
||||
else
|
||||
echo
|
||||
echo -e "\e[33mWARNING: composer files validation failed\e[0m"
|
||||
echo
|
||||
echo -e '\e[33mThe validation of the composer.json and composer.lock failed.\e[0m'
|
||||
echo -e '\e[33mMake sure that the file composer.lock is consistent with composer.json.\e[0m'
|
||||
echo
|
||||
echo -e '\e[33mThis often indicates an issue with the upstream project, which can typically be resolved by reporting the issue to the relevant project maintainers.\e[0m'
|
||||
echo
|
||||
echo -e '\e[33mTo address the issue efficiently, follow one of these steps:\e[0m'
|
||||
echo -e '\e[33m 1. File an issue in the project'\''s issue tracker with detailed information '\('run '\''composer update --lock --no-install'\'' to fix the issue'\)', and apply any available remote patches as a temporary solution with '\('with fetchpatch'\)'.\e[0m'
|
||||
echo -e '\e[33m 2. If an immediate fix is needed or if reporting upstream isn'\''t suitable, develop a temporary local patch.\e[0m'
|
||||
echo
|
||||
echo -e '\e[33mThis check is not blocking, but it is recommended to fix the issue.\e[0m'
|
||||
echo
|
||||
fi
|
||||
if [[ "${composerStrictValidation}" == "1" ]]; then
|
||||
echo
|
||||
echo -e '\e[33mThis check is blocking, set the attribute composerStrictValidation to false to make it not blocking.\e[0m'
|
||||
echo
|
||||
exit 1
|
||||
else
|
||||
echo
|
||||
echo -e '\e[33mThis check is not blocking, but it is recommended to fix the issue.\e[0m'
|
||||
echo
|
||||
fi
|
||||
fi
|
||||
|
||||
command="composer validate --strict --no-ansi --no-interaction --quiet --no-check-all --check-lock"
|
||||
if ! $command; then
|
||||
echo
|
||||
echo -e "\e[31mERROR: composer files validation failed\e[0m"
|
||||
echo
|
||||
echo -e '\e[31mThe validation of the composer.json and composer.lock failed.\e[0m'
|
||||
echo -e '\e[31mMake sure that the file composer.lock is consistent with composer.json.\e[0m'
|
||||
echo
|
||||
echo -e '\e[31mThis often indicates an issue with the upstream project, which can typically be resolved by reporting the issue to the relevant project maintainers.\e[0m'
|
||||
echo
|
||||
echo -e '\e[31mTo address the issue efficiently, follow one of these steps:\e[0m'
|
||||
echo -e '\e[31m 1. File an issue in the project'\''s issue tracker with detailed information '\('run '\''composer update --lock --no-install'\'' to fix the issue'\)', and apply any available remote patches as a temporary solution with '\('with fetchpatch'\)'.\e[0m'
|
||||
echo -e '\e[31m 2. If an immediate fix is needed or if reporting upstream isn'\''t suitable, develop a temporary local patch.\e[0m'
|
||||
echo
|
||||
|
||||
if [[ "${composerStrictValidation}" == "1" ]]; then
|
||||
echo
|
||||
echo -e '\e[33mThis check is blocking, set the attribute composerStrictValidation to false to make it not blocking.\e[0m'
|
||||
echo
|
||||
exit 1
|
||||
else
|
||||
echo
|
||||
echo -e '\e[33mThis check is not blocking, but it is recommended to fix the issue.\e[0m'
|
||||
echo
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "bdf2psf";
|
||||
version = "1.237";
|
||||
version = "1.239";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://debian/pool/main/c/console-setup/bdf2psf_${version}_all.deb";
|
||||
sha256 = "sha256-TdEIXD4COatzgtPm8EGMxQFqqgy/5gkgnZKrze4U2sM=";
|
||||
sha256 = "sha256-O0hV2OGj5+laVJ+a8rHGPRvThRWoiEUS5g7E3Wam7XY=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ dpkg ];
|
||||
|
||||
@@ -19,13 +19,13 @@ in
|
||||
llvmPackages.stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
pname = "c3c${optionalString debug "-debug"}";
|
||||
version = "0.7.2";
|
||||
version = "0.7.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "c3lang";
|
||||
repo = "c3c";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-/S2rcZZe441b1sbiJDH1rnxT/mEP1694d5L8MIV6QQc=";
|
||||
hash = "sha256-MOnYWlGcxLX+agChuk0BPq8BWsVvNP2QYqaGk24lb5Q=";
|
||||
};
|
||||
|
||||
cmakeBuildType = if debug then "Debug" else "Release";
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 2f35431..f08eb22 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -1,5 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.5.0)
|
||||
-project(cpp-jwt VERSION 1.2.0)
|
||||
+project(cpp-jwt VERSION 1.4.0)
|
||||
|
||||
option(CPP_JWT_BUILD_EXAMPLES "build examples" ON)
|
||||
option(CPP_JWT_BUILD_TESTS "build tests" ON)
|
||||
|
||||
@@ -10,18 +10,15 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "cpp-jwt";
|
||||
version = "1.4";
|
||||
version = "1.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "arun11299";
|
||||
repo = "cpp-jwt";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-5hVsFanTCT/uLLXrnb2kMvmL6qs9RXVkvxdWaT6m4mk=";
|
||||
sha256 = "sha256-l1FevNhGX7vouKmGh/ypCcmZQLMpHJ4JFUp5dnNMEwg=";
|
||||
};
|
||||
|
||||
# fix reported version
|
||||
patches = [ ./fix-version.patch ];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DCPP_JWT_USE_VENDORED_NLOHMANN_JSON=OFF"
|
||||
"-DCPP_JWT_BUILD_EXAMPLES=OFF"
|
||||
|
||||
@@ -17,13 +17,13 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "distroshelf";
|
||||
version = "1.0.8";
|
||||
version = "1.0.12";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ranfdev";
|
||||
repo = "DistroShelf";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-UZP/VohgYUe6Ly89oD9WlYyiAfQmTK1lXnf5TipoiNI=";
|
||||
hash = "sha256-pNGIwmw75c7Q+lXZBSZnAnIqJqYOPIA9cpAlzv/HjJU=";
|
||||
};
|
||||
|
||||
cargoDeps = rustPlatform.fetchCargoVendor {
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
cmake,
|
||||
pkg-config,
|
||||
qt6,
|
||||
wrapGAppsHook3,
|
||||
# darwin-only
|
||||
xcbuild,
|
||||
|
||||
@@ -77,6 +78,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
cmake
|
||||
pkg-config
|
||||
qt6.wrapQtAppsHook
|
||||
wrapGAppsHook3
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isDarwin [
|
||||
xcbuild # for plutil
|
||||
@@ -169,6 +171,12 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
ln -s $out/Applications/Dolphin.app/Contents/MacOS/Dolphin $out/bin
|
||||
'';
|
||||
|
||||
dontWrapGApps = true;
|
||||
|
||||
preFixup = ''
|
||||
qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
tests = {
|
||||
version = testers.testVersion {
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
|
||||
buildNpmPackage rec {
|
||||
pname = "eask-cli";
|
||||
version = "0.11.6";
|
||||
version = "0.11.7";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "emacs-eask";
|
||||
repo = "cli";
|
||||
rev = version;
|
||||
hash = "sha256-nEqzdjVdlROFkrUa/+TTI/RxVv2F11kr0THeIHEgtog=";
|
||||
hash = "sha256-k+toSvi7v3ABNR9rJMv2adQ9yMyCrEDl8WLdjpNt/vo=";
|
||||
};
|
||||
|
||||
npmDepsHash = "sha256-/6WSGHSg60MZWhdm3xIG6rIDKrJ1MJb4tlwLTqm6YFM=";
|
||||
npmDepsHash = "sha256-d3YzVZFwlKN4OabSO4Reu+zxb59lA0zaYKDTsdpYguI=";
|
||||
|
||||
dontBuild = true;
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@ let
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
srcVersion = "jun25a";
|
||||
version = "20250601_a";
|
||||
srcVersion = "jul25a";
|
||||
version = "20250701_a";
|
||||
pname = "gildas";
|
||||
|
||||
src = fetchurl {
|
||||
@@ -35,7 +35,7 @@ stdenv.mkDerivation rec {
|
||||
"http://www.iram.fr/~gildas/dist/gildas-src-${srcVersion}.tar.xz"
|
||||
"http://www.iram.fr/~gildas/dist/archive/gildas/gildas-src-${srcVersion}.tar.xz"
|
||||
];
|
||||
hash = "sha256-DhUGaG96bsZ1NGfDQEujtiM0AUwZBMD42uRpRWI5DX0=";
|
||||
hash = "sha256-t64lcbdrPXu4II5IGyd9Un6yJGrH+wqKRt5jmr/F5y4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
}:
|
||||
|
||||
let
|
||||
version = "2.10.0";
|
||||
version = "2.11.0";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "pinage404";
|
||||
repo = "git-gamble";
|
||||
rev = "version/${version}";
|
||||
hash = "sha256-oWbV3KhDcb/LlDkaGqkrYU/b2LEijUTX0RaHi0yS5cw=";
|
||||
hash = "sha256-b7jGrt8uJ9arH4EEsOOPCIcQmhwrrJb8uXcSsZPFrNQ=";
|
||||
};
|
||||
in
|
||||
rustPlatform.buildRustPackage {
|
||||
@@ -23,7 +23,7 @@ rustPlatform.buildRustPackage {
|
||||
inherit version src;
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-v8sQuFmHHWuLUhRND1CzI5VkybgHRETVyNNabw1Uhyg=";
|
||||
cargoHash = "sha256-lf66me4ot5lvrz2JTj8MreaHyVwOcFSVfPGX9lBTKug=";
|
||||
|
||||
nativeCheckInputs = [ gitMinimal ];
|
||||
preCheck = ''
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "intel-gmmlib";
|
||||
version = "22.7.2";
|
||||
version = "22.7.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "intel";
|
||||
repo = "gmmlib";
|
||||
tag = "intel-gmmlib-${version}";
|
||||
hash = "sha256-TVravPYbOaZBtS5BepRc316m4uIPm5M1YbDWMV5lW0Y=";
|
||||
hash = "sha256-3KGDKdhy4jtBVdZYY6fhEEBQYmfYzXoTR7yPAuFqBvI=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
|
||||
@@ -18,21 +18,22 @@
|
||||
hwdata,
|
||||
fuse3,
|
||||
autoAddDriverRunpath,
|
||||
fetchpatch,
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "lact";
|
||||
version = "0.7.4";
|
||||
version = "0.8.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ilya-zlobintsev";
|
||||
repo = "LACT";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-zOvFWl78INlpCcEHiB3qZdxPNHXfUeKxfHyrO+wVNN0=";
|
||||
hash = "sha256-HsDVz9Wd1WoGWIB4Cs/GsvC7RDyHAeXfFGXZDWEmo/c=";
|
||||
};
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-10FdXUpLL+8xN818toShccgB5NfpzrOLfEeDAX5oMFw=";
|
||||
cargoHash = "sha256-fgF7gOXxB9sQqA5H1hw6A0Fb5tTBPySAbSxVhcKVhcM=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
@@ -68,14 +69,20 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
]
|
||||
);
|
||||
|
||||
patches = [
|
||||
(fetchpatch {
|
||||
name = "fix-tests::snapshot_everything-due-to-outdated-hwdata-649.patch";
|
||||
url = "https://github.com/ilya-zlobintsev/LACT/commit/c9a59e48a36d590d7522c22bd15a8f9208bef0ee.patch";
|
||||
hash = "sha256-Ehq8vRosqyqpRPeabkdpBHBF6ONqSJHOeq3AXw8PXPU=";
|
||||
})
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace lact-daemon/src/server/system.rs \
|
||||
--replace-fail 'Command::new("uname")' 'Command::new("${coreutils}/bin/uname")'
|
||||
substituteInPlace lact-daemon/src/server/profiles.rs \
|
||||
substituteInPlace lact-daemon/src/system.rs \
|
||||
--replace-fail 'Command::new("uname")' 'Command::new("${coreutils}/bin/uname")'
|
||||
|
||||
substituteInPlace lact-daemon/src/server/handler.rs \
|
||||
--replace-fail 'Command::new("journalctl")' 'Command::new("${systemdMinimal}/bin/journalctl")'
|
||||
--replace-fail 'run_command("journalctl",' 'run_command("${systemdMinimal}/bin/journalctl",'
|
||||
|
||||
substituteInPlace lact-daemon/src/server/vulkan.rs \
|
||||
--replace-fail 'Command::new("vulkaninfo")' 'Command::new("${vulkan-tools}/bin/vulkaninfo")'
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
cmake,
|
||||
boost,
|
||||
gmp,
|
||||
openssl,
|
||||
pkg-config,
|
||||
@@ -38,7 +37,6 @@ stdenv.mkDerivation rec {
|
||||
pkg-config
|
||||
];
|
||||
buildInputs = [
|
||||
boost
|
||||
gmp
|
||||
openssl
|
||||
];
|
||||
|
||||
@@ -1,37 +1,33 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchzip,
|
||||
unstableGitUpdater,
|
||||
fetchgit,
|
||||
gitUpdater,
|
||||
sparse,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "mmc-utils";
|
||||
version = "unstable-2024-03-07";
|
||||
version = "1.0";
|
||||
|
||||
src = fetchzip rec {
|
||||
url = "https://git.kernel.org/pub/scm/utils/mmc/mmc-utils.git/snapshot/mmc-utils-${passthru.rev}.tar.gz";
|
||||
passthru.rev = "e1281d4de9166b7254ba30bb58f9191fc2c9e7fb";
|
||||
sha256 = "/lkcZ/ArdBAStV9usavrbfjULXenqb+h2rbDJzxZjJk=";
|
||||
src = fetchgit {
|
||||
url = "https://git.kernel.org/pub/scm/utils/mmc/mmc-utils.git";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-iWLA1psNPUBCPOP393/xnYJ6BEuOcPCEYgymqE06F3Q=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ sparse ];
|
||||
|
||||
makeFlags = [
|
||||
"CC=${stdenv.cc.targetPrefix}cc"
|
||||
"prefix=$(out)"
|
||||
"mandir=$(out)/share/man"
|
||||
];
|
||||
|
||||
# causes redefinition of _FORTIFY_SOURCE
|
||||
hardeningDisable = [ "fortify3" ];
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $out/share/man/man1
|
||||
cp man/mmc.1 $out/share/man/man1/
|
||||
'';
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
passthru.updateScript = unstableGitUpdater {
|
||||
url = "https://git.kernel.org/pub/scm/utils/mmc/mmc-utils.git";
|
||||
passthru.updateScript = gitUpdater {
|
||||
rev-prefix = "v";
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
@@ -42,4 +38,4 @@ stdenv.mkDerivation {
|
||||
maintainers = [ maintainers.dezgeg ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -13,17 +13,17 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "ntpd-rs";
|
||||
version = "1.5.0";
|
||||
version = "1.6.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "pendulum-project";
|
||||
repo = "ntpd-rs";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-APQHxlsyUMA1N6FatQvotOokxNikOO22GGyXUMh3ABo=";
|
||||
hash = "sha256-PX3vNrw/EM1d7/9JuxhfHG63dIULNUYWs0PGbOC7AcA=";
|
||||
};
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-BiLYKOgmmqOesfl/8y4590Xo2Z4+u/Rn7CglNjQk2bU=";
|
||||
cargoHash = "sha256-lBwhaoRdYOmfVSYKmeBbLp/D7cZ43z3CEnyt7sVVRlw=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pandoc
|
||||
@@ -39,14 +39,6 @@ rustPlatform.buildRustPackage rec {
|
||||
source utils/generate-man.sh
|
||||
'';
|
||||
|
||||
# lots of flaky tests
|
||||
doCheck = false;
|
||||
|
||||
checkFlags = [
|
||||
# doesn't find the testca
|
||||
"--skip=daemon::keyexchange::tests"
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
install -Dm444 -t $out/lib/systemd/system docs/examples/conf/{ntpd-rs,ntpd-rs-metrics}.service
|
||||
installManPage docs/precompiled/man/{ntp.toml.5,ntp-ctl.8,ntp-daemon.8,ntp-metrics-exporter.8}
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
}:
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "proton-ge-bin";
|
||||
version = "GE-Proton10-7";
|
||||
version = "GE-Proton10-8";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/${finalAttrs.version}/${finalAttrs.version}.tar.gz";
|
||||
hash = "sha256-XlZVQ+xYgg1H1xAHBcXZmF5//7k6w9NNspXJ/1KhzX8=";
|
||||
hash = "sha256-cbmOQYWEP/uB2ZoMAbtbeXbOJjxZui0n2U+Tr/OLKjA=";
|
||||
};
|
||||
|
||||
dontUnpack = true;
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
lib,
|
||||
stdenvNoCC,
|
||||
fetchFromGitHub,
|
||||
unstableGitUpdater,
|
||||
}:
|
||||
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "sdl_gamecontrollerdb";
|
||||
version = "0-unstable-2025-06-14";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mdqinc";
|
||||
repo = "SDL_GameControllerDB";
|
||||
rev = "79b8ea1035256740c22fb1686fa0c77d201fe45f";
|
||||
hash = "sha256-pFzIvTlcQW9wGiuMcH6chm6kzE2LLcPgPiSgWbDvgUk=";
|
||||
};
|
||||
|
||||
dontBuild = true;
|
||||
dontConfigure = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 gamecontrollerdb.txt -t $out/share
|
||||
install -Dm644 LICENSE -t $out/share/licenses/sdl_gamecontrollerdb
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
passthru.updateScript = unstableGitUpdater { };
|
||||
|
||||
meta = {
|
||||
description = "Community sourced database of game controller mappings to be used with SDL2 and SDL3 Game Controller functionality";
|
||||
homepage = "https://github.com/mdqinc/SDL_GameControllerDB";
|
||||
license = lib.licenses.zlib;
|
||||
maintainers = with lib.maintainers; [ qubitnano ];
|
||||
platforms = lib.platforms.all;
|
||||
};
|
||||
})
|
||||
@@ -19,13 +19,13 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "snort";
|
||||
version = "3.8.1.0";
|
||||
version = "3.9.1.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "snort3";
|
||||
repo = "snort3";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-+59e6rLMvLQ+LNxwRRG6nLXqjMsbn3bdykfMpwPgSpA=";
|
||||
hash = "sha256-Ciseo0mYmgyfZB44zeudEst98XnM8E2vTG5J6snA3q0=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -8,17 +8,17 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "typstyle";
|
||||
version = "0.13.11";
|
||||
version = "0.13.13";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Enter-tainer";
|
||||
repo = "typstyle";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-fp6UcWD56wWyrk3ZTS1YksydNw0e40NV7dY7Mams3ww=";
|
||||
hash = "sha256-IAKCwKekeFekHBjfdC4pi74SXJzCDFoby3n1Z0Pu5q4=";
|
||||
};
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-BkS/xfVuU3FLjEkE1KEq0K5dNoUSP4XoDkpXLa8Z5Wo=";
|
||||
cargoHash = "sha256-7TkL/bYcTFAPvr4gu5XPxcJdIuwpTyZ6aOEj/YB9F4I=";
|
||||
|
||||
# Disabling tests requiring network access
|
||||
checkFlags = [
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "wavelog";
|
||||
version = "2.0.4";
|
||||
version = "2.0.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "wavelog";
|
||||
repo = "wavelog";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-P4Rwrm9S6nI7TqFlEpX2MVm5k8l0vnvXWdshgr+7wiQ=";
|
||||
hash = "sha256-FFPg9VSyOeUPH0bV4fY3e7NKH9vW+JdIeYbAAzCEpiA=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
|
||||
@@ -13,13 +13,13 @@
|
||||
}:
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "xdg-desktop-portal-termfilechooser";
|
||||
version = "1.1.0";
|
||||
version = "1.1.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "hunkyburrito";
|
||||
repo = "xdg-desktop-portal-termfilechooser";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-o2FBPSJrcyAz6bJKQukj6Y5ikGpFuH1Un1qwX4w73os=";
|
||||
hash = "sha256-aqFaf87f0Th9MRzLthCnTuw41R2B5z0hx7dAaZ/KEWo=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "xonsh";
|
||||
version = "0.19.4";
|
||||
version = "0.19.9";
|
||||
pyproject = true;
|
||||
|
||||
# PyPI package ships incomplete tests
|
||||
@@ -36,7 +36,7 @@ buildPythonPackage rec {
|
||||
owner = "xonsh";
|
||||
repo = "xonsh";
|
||||
tag = version;
|
||||
hash = "sha256-gOk0BZNuKsEzs72Lukq7+7vltmtPE75gEs+JyLqBDdc=";
|
||||
hash = "sha256-7A6V2lfJHpjrp3AWSnfNuvPy02GvjNUXZqBBSomHJew=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "zsh-forgit";
|
||||
version = "25.06.0";
|
||||
version = "25.07.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "wfxr";
|
||||
repo = "forgit";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-D1we3pOPXNsK8KgEaRBAmD5eH1i2ud4zX1GwYbOyZvY=";
|
||||
hash = "sha256-h9li2nwKG6SnOQntWZpdeBbU3RrwO4+4yO7tAwuOwhE=";
|
||||
};
|
||||
|
||||
strictDeps = true;
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
stdenv,
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
fetchpatch,
|
||||
desktop-file-utils,
|
||||
gettext,
|
||||
libxml2,
|
||||
@@ -30,26 +29,19 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "gala";
|
||||
version = "8.2.3";
|
||||
version = "8.2.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "elementary";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
hash = "sha256-6M9IWwrCaJoi7b5e4ltdyZfdT7KkOgsollHNKhLPr9U=";
|
||||
hash = "sha256-Q+1l9KZ1Za0pb4X2It99Ui7RiOsTWDt0UrIus9ZAoJU=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# We look for plugins in `/run/current-system/sw/lib/` because
|
||||
# there are multiple plugin providers (e.g. gala and wingpanel).
|
||||
./plugins-dir.patch
|
||||
|
||||
# WindowStateSaver: fix crash
|
||||
# https://github.com/elementary/gala/pull/2443
|
||||
(fetchpatch {
|
||||
url = "https://github.com/elementary/gala/commit/9defe95ef412f87eb14e0efd8b87f2fde5378a76.patch";
|
||||
hash = "sha256-P50ahXFlTLyHMT+WdHdLU2qNdMUnfXF+CjoJRchmyzw=";
|
||||
})
|
||||
];
|
||||
|
||||
depsBuildBuild = [ pkg-config ];
|
||||
|
||||
@@ -12,14 +12,14 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "rakudo";
|
||||
version = "2025.06";
|
||||
version = "2025.06.1";
|
||||
|
||||
# nixpkgs-update: no auto update
|
||||
src = fetchFromGitHub {
|
||||
owner = "rakudo";
|
||||
repo = "rakudo";
|
||||
rev = version;
|
||||
hash = "sha256-vZ8U18TS+L6P8jTwUxasKH+nrDMElAnGKvgT3nXdpwU=";
|
||||
hash = "sha256-cofiX6VHHeki8GQcMamDyPYoVMUKiuhKVz8Gh8L9qu0=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "nqp";
|
||||
version = "2025.06";
|
||||
version = "2025.06.1";
|
||||
|
||||
# nixpkgs-update: no auto update
|
||||
src = fetchFromGitHub {
|
||||
owner = "raku";
|
||||
repo = "nqp";
|
||||
rev = version;
|
||||
hash = "sha256-zI/Br2GwZuhX7X+vnRDPERVmx5hW64+t79P1oFIeVnI=";
|
||||
hash = "sha256-zM3JilRBbx2r8s+dj9Yn8m2SQfQFnn1bxOUiz3Q7FT8=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
linux,
|
||||
scripts ? fetchsvn {
|
||||
url = "https://www.fsfla.org/svn/fsfla/software/linux-libre/releases/branches/";
|
||||
rev = "19812";
|
||||
sha256 = "1bhkc0r5p3d4mmmi26k5lsk56jgbc8hi46bfih313hxmrnsd07dy";
|
||||
rev = "19835";
|
||||
hash = "sha256-5usyLmlTr5nlM+/uWPQepzhhNSLi3Hol1BfnWb9CFws=";
|
||||
},
|
||||
...
|
||||
}@args:
|
||||
@@ -30,16 +30,30 @@ linux.override {
|
||||
src = stdenv.mkDerivation {
|
||||
name = "${linux.name}-libre-src";
|
||||
src = linux.src;
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
||||
# --force flag to skip empty files after deblobbing
|
||||
${scripts}/${majorMinor}/deblob-${majorMinor} --force \
|
||||
${major} ${minor} ${patch}
|
||||
${scripts}/${majorMinor}/deblob-${majorMinor} --force ${major} ${minor} ${patch}
|
||||
|
||||
runHook postBuild
|
||||
'';
|
||||
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
|
||||
${scripts}/deblob-check
|
||||
|
||||
runHook postCheck
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
cp -r . "$out"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
};
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ nixpkgs="$(git rev-parse --show-toplevel)"
|
||||
path="$nixpkgs/pkgs/os-specific/linux/kernel/linux-libre.nix"
|
||||
|
||||
old_rev="$(grep -o 'rev = ".*"' "$path" | awk -F'"' '{print $2}')"
|
||||
old_sha256="$(grep -o 'sha256 = ".*"' "$path" | awk -F'"' '{print $2}')"
|
||||
|
||||
svn_url=https://www.fsfla.org/svn/fsfla/software/linux-libre/releases/branches/
|
||||
rev="$(curl -s "$svn_url" | grep -Em 1 -o 'Revision [0-9]+' | awk '{print $2}')"
|
||||
@@ -16,15 +15,16 @@ if [ "$old_rev" = "$rev" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
old_hash="$(grep -o 'hash = ".*"' "$path" | awk -F'"' '{print $2}')"
|
||||
sha256="$(QUIET=1 nix-prefetch-svn "$svn_url" "$rev" | tail -1)"
|
||||
new_hash="$(nix --extra-experimental-features nix-command hash convert --to sri --hash-algo sha256 "$sha256")"
|
||||
|
||||
if [ "$old_sha256" = "$sha256" ]; then
|
||||
if [ "$old_hash" = "$new_hash" ]; then
|
||||
echo "No updates for linux-libre"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
sed -i -e "s/rev = \".*\"/rev = \"$rev\"/" \
|
||||
-e "s/sha256 = \".*\"/sha256 = \"$sha256\"/" "$path"
|
||||
sed -i -e "s,rev = \".*\",rev = \"$rev\",; s,hash = \".*\",hash = \"$new_hash\"," "$path"
|
||||
|
||||
if [ -n "${COMMIT-}" ]; then
|
||||
git commit -qm "linux_latest-libre: $old_rev -> $rev" "$path" \
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
let
|
||||
this = stdenv.mkDerivation (finalAttrs: {
|
||||
version = "7.13.0";
|
||||
version = "7.14.0";
|
||||
pname = "openapi-generator-cli";
|
||||
|
||||
jarfilename = "openapi-generator-cli-${finalAttrs.version}.jar";
|
||||
@@ -20,7 +20,7 @@ let
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://maven/org/openapitools/openapi-generator-cli/${finalAttrs.version}/${finalAttrs.jarfilename}";
|
||||
sha256 = "sha256-0G2kaAm2L96cp6ism9OZv7omUWYbF+JMqlMDQtBoH+I=";
|
||||
sha256 = "sha256-4DGGg1AiygLaSqleOWe2o7bUTC5fdgbm1cIkZvUZx1c=";
|
||||
};
|
||||
|
||||
dontUnpack = true;
|
||||
|
||||
@@ -210,14 +210,14 @@ lib.makeExtensible (
|
||||
nix_2_29 = addTests "nix_2_29" self.nixComponents_2_29.nix-everything;
|
||||
|
||||
nixComponents_git = nixDependencies.callPackage ./modular/packages.nix rec {
|
||||
version = "2.30pre20250521_${lib.substring 0 8 src.rev}";
|
||||
version = "2.30pre20250624_${lib.substring 0 8 src.rev}";
|
||||
inherit (self.nix_2_24.meta) maintainers teams;
|
||||
otherSplices = generateSplicesForNixComponents "nixComponents_git";
|
||||
src = fetchFromGitHub {
|
||||
owner = "NixOS";
|
||||
repo = "nix";
|
||||
rev = "76a4d4c2913a1654dddd195b034ff7e66cb3e96f";
|
||||
hash = "sha256-OA22Ig72oV6reHN8HMlimmnrsxpNzqyzi4h6YBVzzEA=";
|
||||
rev = "448cfb71eafbb3f2932b025aa2600c80b6d383f1";
|
||||
hash = "sha256-tk1H8lOA5lIvhNP/izZ6JzT0EuDmCOX5RBhOeHdc2cM=";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user