{ nixConfig = { extra-substituters = [ "https://stardustxr.cachix.org" ]; extra-trusted-public-keys = [ "stardustxr.cachix.org-1:mWSn8Ap2RLsIWT/8gsj+VfbJB6xoOkPaZpbjO+r9HBo=" ]; }; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; flake-parts.url = "github:hercules-ci/flake-parts"; hercules-ci-effects.url = "github:hercules-ci/hercules-ci-effects"; # Since we do not have a monorepo, we have to fetch Flatland in order to use # it to create VM Tests flatland.url = "github:StardustXR/flatland"; }; outputs = inputs@{ self, flake-parts, nixpkgs, hercules-ci-effects, flatland, ... }: let name = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).package.name; src = builtins.path { name = "${name}-source"; path = toString ./.; filter = path: type: nixpkgs.lib.all (n: builtins.baseNameOf path != n) [ "flake.nix" "flake.lock" "nix" "README.md" ]; }; in flake-parts.lib.mkFlake { inherit inputs; } { imports = [ flake-parts.flakeModules.easyOverlay ]; systems = [ "aarch64-linux" "x86_64-linux" "riscv64-linux" ]; perSystem = { config, self', inputs', pkgs, system, ... }: { _module.args.pkgs = import inputs.nixpkgs { inherit system; overlays = [ inputs.self.overlays.default ]; }; overlayAttrs = config.packages; packages = { default = self'.packages.${name}; gnome-graphical-test = self'.checks.gnome-graphical-test; "${name}" = pkgs.callPackage ./nix/stardust-xr-server.nix { inherit name src; }; }; apps.default = { type = "app"; program = self'.packages.${name} + "/bin/stardust-xr-server"; }; checks.gnome-graphical-test = pkgs.nixosTest (import ./nix/gnome-graphical-test.nix { inherit pkgs self; }); devShells.default = pkgs.mkShell { inputsFrom = [ self'.packages.default ]; LIBCLANG_PATH = "${pkgs.libclang.lib}/lib"; }; }; flake = { herculesCI.ciSystems = [ "x86_64-linux" ]; effects = let pkgs = nixpkgs.legacyPackages.x86_64-linux; hci-effects = hercules-ci-effects.lib.withPkgs pkgs; in { ref, rev, ... }: { gnome-graphical-test = hci-effects.mkEffect { secretsMap."stardustxrDiscord" = "stardustxrDiscord"; secretsMap."stardustxrIpfs" = "stardustxrIpfs"; effectScript = '' readSecretString stardustxrDiscord .webhook > .webhook readSecretString stardustxrIpfs .basicauth > .basicauth set -x export RESPONSE=$(curl -H @.basicauth -F file=@${self.packages."x86_64-linux".gnome-graphical-test}/screen.png https://ipfs-api.stardustxr.org/api/v0/add) export CID=$(echo "$RESPONSE" | ${pkgs.jq}/bin/jq -r .Hash) set +x export ADDRESS="https://ipfs.stardustxr.org/ipfs/$CID" ${pkgs.discord-sh}/bin/discord.sh \ --description "\`stardustxr/server\` has been modified, here's how it renders \`weston-cliptest\` on \`flatland\` via \`monado-service\` inside of the \`gnome-graphical-test\`" \ --field "Ref;${ref}" \ --field "Commit ID;${rev}" \ --field "Flatland Revision;${flatland.rev}" \ --field "Reproducer;\`nix build github:stardustxr/server/${rev}#gnome-graphical-test\`" \ --image "$ADDRESS" ''; }; }; }; }; }