Skip to content

Instantly share code, notes, and snippets.

@drupol
Last active September 12, 2023 14:50
Show Gist options
  • Save drupol/d8b3b79ac082ea38b66d864c47abf59f to your computer and use it in GitHub Desktop.
Save drupol/d8b3b79ac082ea38b66d864c47abf59f to your computer and use it in GitHub Desktop.
Flake providing all the PHP version from PHP >= 8
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
systems.url = "github:nix-systems/default";
flake-compat.url = "github:nix-community/flake-compat";
php-active = {
url = "https://www.php.net/releases/active";
flake = false;
};
};
outputs = inputs@{ self, flake-parts, systems, ... }: flake-parts.lib.mkFlake { inherit inputs; } {
systems = import systems;
perSystem = { config, self', inputs', pkgs, system, lib, ... }: {
checks = self'.packages;
packages =
let
# Set of sets { PHP_VERSION = { filename = "", name = "", ... }, ... }
active = builtins.listToAttrs (builtins.concatMap (x: builtins.map (x: { name = x.version; value = builtins.elemAt x.source 2; }) (builtins.attrValues x)) (builtins.attrValues (builtins.fromJSON (builtins.readFile inputs.php-active))));
activeVersions = lib.foldlAttrs (acc: name: value: acc ++ [{ version = name; rev = "php-${name}"; hash = "sha256:${value.sha256}"; }]) [] active;
oldVersions = [
{ version = "8.0.0"; rev = "php-8.0.0"; hash = "sha256-++fStvRfv/PRFElp87ddczdu0WCD0zguesR99lxLFjo=";}
{ version = "8.0.1"; rev = "php-8.0.1"; hash = "sha256-BKGMYbE5WmxO5SHdwGpSY/+iit4aRiq/FejWQFdo3fA=";}
{ version = "8.0.2"; rev = "php-8.0.2"; hash = "sha256-SCEYet2l63o+O/cfx9kOKhqdcpOmsMDnpsj+pqn+ICo=";}
{ version = "8.0.3"; rev = "php-8.0.3"; hash = "sha256-nE6EpYMD6sjzDxeFz8PHIgQb6zmkZOAo/q87SaqqhqM=";}
{ version = "8.0.5"; rev = "php-8.0.5"; hash = "sha256-gLbpkgmhn48ZBKWmAWdeeJPI/cwVV9/9VVMw48h6I6Q=";}
{ version = "8.0.6"; rev = "php-8.0.6"; hash = "sha256-U0r5yWcvbpbars543RPSj/w0HMQkhrvhVziCZNGonbQ=";}
{ version = "8.0.7"; rev = "php-8.0.7"; hash = "sha256-BtyiRHzayM9XnR91LHCExydO3TLLvVLAwkI1Uk49ERc=";}
{ version = "8.0.8"; rev = "php-8.0.8"; hash = "sha256-x/DqSGJbRci0LfSPhvxEuC/FXP8j/6L1+WGqCUY8DNc=";}
{ version = "8.0.9"; rev = "php-8.0.9"; hash = "sha256-Rn0nRXzu3xnFoCYy2yscT/j1TQBy+/IJA9TSOAgaJxo=";}
{ version = "8.0.10"; rev = "php-8.0.10"; hash = "sha256-r26F6XfursnA+gUs3NTTKMvYgYgXOXYE+dmJhecpI9g=";}
{ version = "8.0.11"; rev = "php-8.0.11"; hash = "sha256-VxY+UyItIzKDK6dVrC6wy9s8z8zBHn5Nuq4OpZUPeVk=";}
{ version = "8.0.12"; rev = "php-8.0.12"; hash = "sha256-i7Zh4mGAaVzk/qRVX+9XIfwEVtVZZF/UL/Ix2kz2zM4=";}
{ version = "8.0.13"; rev = "php-8.0.13"; hash = "sha256-x+xPm3Db5W/efKwMN/dNVmypO/3TYEUV2YKOheEB5CI=";}
{ version = "8.0.14"; rev = "php-8.0.14"; hash = "sha256-SwxxfRm2YwbAZ+uf5RTRjg/P4Kw3nx38NFe6I1+1iuM=";}
{ version = "8.0.15"; rev = "php-8.0.15"; hash = "sha256-PKhYojiKhI0fYTyTRLURVTMsFiz0G55W/oY224JxdN8=";}
{ version = "8.0.16"; rev = "php-8.0.16"; hash = "sha256-KOutpF/3HlmHrBoscOFrUYPaMELHWvKNcfaN1Q80QhM=";}
{ version = "8.0.17"; rev = "php-8.0.17"; hash = "sha256-j7JOOiOjDaXBiYwe6mE57LU2bgSLsoREOsUVaP8UpJc=";}
{ version = "8.0.18"; rev = "php-8.0.18"; hash = "sha256-qMVgbyhjvjCs87y715Ycl+Cj55ThDXowgbiILakepxM=";}
{ version = "8.0.19"; rev = "php-8.0.19"; hash = "sha256-LnY9lDFIy0ogch1uiw46lcOTdoAYENR6AR9bYTX4Dds=";}
{ version = "8.0.20"; rev = "php-8.0.20"; hash = "sha256-LXNadNMKjuzGFvHGyRPLDbEJ1jo9aAqwd8BDUpfA2Qk=";}
{ version = "8.0.21"; rev = "php-8.0.21"; hash = "sha256-l6HvFZk5P1fpo7Hd5fdVldJrHetEchZl3GTXXc2PQCI=";}
{ version = "8.0.22"; rev = "php-8.0.22"; hash = "sha256-o5H26iLs5mM52OQZq7NyqdRSZ8ViIjFCr5U/eIM6E54=";}
{ version = "8.0.23"; rev = "php-8.0.23"; hash = "sha256-IsTkm8LFQoYZWZ/LP/5VZaTfuyEUwRzkiZrr9cVXgbE=";}
{ version = "8.0.24"; rev = "php-8.0.24"; hash = "sha256-9o/l3v/SRv70W0N3U57dZGH2dLLOYADUfrXBUks1ooU=";}
{ version = "8.0.25"; rev = "php-8.0.25"; hash = "sha256-o1RorpKNlJWlJqmHfVAJBy+triMQf6N0zxigeC6YUKQ=";}
{ version = "8.0.26"; rev = "php-8.0.26"; hash = "sha256-9wPt2V69KUjDrLsZGnnMQ9J1xQp1YjrBuqfTGfacgzs=";}
{ version = "8.0.27"; rev = "php-8.0.27"; hash = "sha256-QBwzMTNeXRdPJoGI6xa66xcvB7eDQ3CMoBFPcy58grk=";}
{ version = "8.0.28"; rev = "php-8.0.28"; hash = "sha256-o5H26iLs5mM52OQZq7NyqdRSZ8ViIjFCr5U/eIM6E54=";}
{ version = "8.0.29"; rev = "php-8.0.29"; hash = "sha256-k8I43fSJLsIppsjXzJoxmjUSWbwGJX3hkxxKyagz3ME=";}
{ version = "8.1.0"; rev = "php-8.1.0"; hash = "sha256-OYlZpWSzzq6YjqSAob9kzS+H1MvH1oYhExtYTcz/dVI=";}
{ version = "8.1.1"; rev = "php-8.1.1"; hash = "sha256-GAIj7w4LFThhWqD3KBtzedU1uAtzmmZcsFUxmkMG01s=";}
{ version = "8.1.2"; rev = "php-8.1.2"; hash = "sha256-GsoGYhafN0+a1DAVgOC4gMKRFLpGZLAwd0PCiaQbe9s=";}
{ version = "8.1.3"; rev = "php-8.1.3"; hash = "sha256-1MBjWhQABjENlKnpWVeerc+E31o90x7guhzjyhDJxdU=";}
{ version = "8.1.5"; rev = "php-8.1.5"; hash = "sha256-gmB2HaJzxZ1jSTdTp59mKePRvURD0p5EBj+kNxcMK7Y=";}
{ version = "8.1.6"; rev = "php-8.1.6"; hash = "sha256-xKWe01cjfEKLBiul2FXYbsWx65CpeYa6S+JFYVG0x0c=";}
{ version = "8.1.7"; rev = "php-8.1.7"; hash = "sha256-gztwTpDbTzGdiRZoyylYNz5GOD+OjFCx7fXVFMyk1yE=";}
{ version = "8.1.8"; rev = "php-8.1.8"; hash = "sha256-74rSZPLTaajHV2iA0pmUH7uEjUvCs/EUg99tcClyMvc=";}
{ version = "8.1.9"; rev = "php-8.1.9"; hash = "sha256-utoyzU66RfSYfHENC4fODrjRmLvwz6O1TNp2ILapE7I=";}
{ version = "8.1.10"; rev = "php-8.1.10"; hash = "sha256-5KQiZQs5OHoicyKUlEomloG4dXHge2hSORjPpbCxprQ=";}
{ version = "8.1.11"; rev = "php-8.1.11"; hash = "sha256-AY9oBQCzvXvdsnxs71cg7Z5r5J/uXrv9suHs4L7Hqsg=";}
{ version = "8.1.12"; rev = "php-8.1.12"; hash = "sha256-ZRJ5yGgsJvie7qVCJtZQRkFr75aIAGElFIKWW7vHfRQ=";}
{ version = "8.1.13"; rev = "php-8.1.13"; hash = "sha256-iHtur7ig7z584syMk1DmSTM2tHzpZ6xymV/ROICoq4U=";}
{ version = "8.1.14"; rev = "php-8.1.14"; hash = "sha256-YGyrlCm0jTYTIhTet9G6n+dlgsD2NDarUcSXtZupI/g=";}
{ version = "8.1.15"; rev = "php-8.1.15"; hash = "sha256-N3gXbvOC05oaIjri8Ox+RpinrA3CiOFuKtfElS8KFf0=";}
{ version = "8.1.16"; rev = "php-8.1.16"; hash = "sha256-85Ic56TqTPVm1YCmxmyWdl62eLEF6ezGU7Sp/ntzGZE=";}
{ version = "8.1.17"; rev = "php-8.1.17"; hash = "sha256-lb5IOfC+t15KpMFxL4WTL9Q7dvKjG7JBUnBOau70N5w=";}
{ version = "8.1.18"; rev = "php-8.1.18"; hash = "sha256-R23Wcqqm3bzvVfHbuN/XBUYu08eHC5AKZ3enzD3mseY=";}
{ version = "8.1.19"; rev = "php-8.1.19"; hash = "sha256-yF3d1KdJmlPgszrnOQbaXnX2o2MMqF5jOeK9Lbei96c=";}
{ version = "8.1.20"; rev = "php-8.1.20"; hash = "sha256-19a6JdkuD6hNZtdpYUIgNBDX1C/gck932VgxqP6r3TE=";}
{ version = "8.1.21"; rev = "php-8.1.21"; hash = "sha256-L01cSJm6afyNkZ3rF4BceasSRhlRAKlADlIXasEZPb0=";}
{ version = "8.1.22"; rev = "php-8.1.22"; hash = "sha256-rI3BLt79hKjF41TZbe/5jnghuTKSCTdz+T0/+HrFsFI=";}
{ version = "8.2.0"; rev = "php-8.2.0"; hash = "sha256-tR/sAhPuv2+OxIB9FZcVfOX5AEJk/Gz0T9+jglnl3DA=";}
{ version = "8.2.1"; rev = "php-8.2.1"; hash = "sha256-XoR1+A8trtjsNH2l3UKAmMl81gmMjzI4AjFphgOT4n8=";}
{ version = "8.2.2"; rev = "php-8.2.2"; hash = "sha256-Vlti7k9yN2sFWERctSPW11EOcXLNZU11EY7lL7E6kxU=";}
{ version = "8.2.3"; rev = "php-8.2.3"; hash = "sha256-OE8CBiQ6JYSR20Vplj2OZm2f3Sfr/XCh/aNWKqR443s=";}
{ version = "8.2.4"; rev = "php-8.2.4"; hash = "sha256-iFxI7LvPqjciG2rpLymFh02rpoV6t/MkTPrVtPnpvzQ=";}
{ version = "8.2.5"; rev = "php-8.2.5"; hash = "sha256-1ZpWDpsD/E64PyKE5OY/tzIwbQ/njIG0MA5xJ0LlFJ0=";}
{ version = "8.2.6"; rev = "php-8.2.6"; hash = "sha256-OzsZRjVbTaX0afCdIoV+5pVOGwqyAAmrWYrxjiAceZ4=";}
{ version = "8.2.7"; rev = "php-8.2.7"; hash = "sha256-8pCTXW0+t+PftI8sSzAegz4lZjkCGdVEp/61UkgLxOU=";}
{ version = "8.2.8"; rev = "php-8.2.8"; hash = "sha256-hpgt6pYJz0nGod3bWSarTzE32QubADWtQUloxbozwRQ=";}
{ version = "8.2.9"; rev = "php-8.2.9"; hash = "sha256-aIM9RNcFbtqeQmA7OtAANEZOOj6PGwVJ7IFcAnCA9tk=";}
];
pear = pkgs.fetchurl {
url = "https://pear.php.net/install-pear-nozlib.phar";
hash = "sha256-UblKVcsm030tNSA6mdeab+h7ZhANNz7MkFf4Z1iigjs=";
};
patchName = patch: patch.name or (builtins.baseNameOf patch);
generic = "${inputs.nixpkgs}/pkgs/development/interpreters/php/generic.nix";
base-snapshot = {src, version ? null}: (pkgs.callPackage generic {
hash = null;
version = if version != null then version else
let
configureFile = ./configure.ac;
extractVersionFromConfigureAc = configureText:
let
match = builtins.match ".*AC_INIT\\(\\[PHP],\\[([^]-]+)(-dev)?].*" configureText;
in
if match != null then builtins.head match else null;
version =
let
configureText = builtins.readFile configureFile;
version = extractVersionFromConfigureAc configureText;
in
if version != null then version else "0.0.0+unknown";
in
"${version}.snapshot.${self.lastModifiedDate}";
phpAttrsOverrides = attrs: {
inherit src;
preInstall = attrs.preInstall or "" + ''
cp -f ${pear} ./pear/install-pear-nozlib.phar
'';
};
packageOverrides = final: prev: {
extensions = prev.extensions // {
dom = prev.extensions.dom.overrideAttrs (attrs: {
postPatch =
lib.concatStringsSep "\n" [
(attrs.postPatch or "")
(lib.optionalString (lib.versionOlder prev.php.version "8.1") ''
# Removing tests failing with libxml2 (2.11.4) > 2.10.4
rm ext/dom/tests/DOMDocument_loadXML_error2.phpt
rm ext/dom/tests/DOMDocument_load_error2.phpt
'')
];
});
openssl = prev.extensions.openssl.overrifolddeAttrs (attrs: {
buildInputs =
let
replaceOpenssl = pkg:
if pkg.pname == "openssl" && lib.versionOlder prev.php.version "8.1" then
pkgs.openssl_1_1.overrideAttrs
(old: {
meta = builtins.removeAttrs old.meta [ "knownVulnerabilities" ];
})
else
pkg;
in
builtins.map replaceOpenssl attrs.buildInputs;
});
};
};
});
oldSrcs = lib.foldl'
(a: set: a // {
"${builtins.replaceStrings [ "." "-" ] [ "_" "_" ] set.rev}" = {
version = set.version;
src = pkgs.fetchFromGitHub { owner = "php"; repo = "php-src"; rev = set.rev; hash = set.hash; };
};
})
{}
oldVersions;
activeSrcs = lib.foldl'
(a: set: a // {
"${builtins.replaceStrings [ "." "-" ] [ "_" "_" ] set.rev}" = {
version = set.version;
src = pkgs.fetchurl { url = "https://www.php.net/distributions/php-${set.version}.tar.xz"; hash = set.hash; };
};
})
{}
activeVersions;
in
lib.mapAttrs
(k: v: (base-snapshot {version = v.version; src = v.src;}).withExtensions({...}: []))
(oldSrcs // activeSrcs);
};
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment