Compare commits

...

8 commits

Author SHA1 Message Date
4e8b399052 expose nixops4 in nix-shell 2025-06-27 10:01:34 +02:00
46182e7512 fix workflow step title (#404)
split off from #399

Reviewed-on: Fediversity/Fediversity#404
Reviewed-by: Valentin Gagarin <valentin.gagarin@tweag.io>
Co-authored-by: Kiara Grouwstra <kiara@procolix.eu>
Co-committed-by: Kiara Grouwstra <kiara@procolix.eu>
2025-06-24 08:58:01 +02:00
9a25a04bfa specify _class module attributes to explicitly declare module types (#398)
closes #93.

note that this includes classes:

- `nixos`
- `nixosTest`
- `nixops4Resource`
- `nixops4Deployment`

.. and my (made-up, as per the [docs](https://ryantm.github.io/nixpkgs/module-system/module-system/#module-system-lib-evalModules-param-class)):

- `nix-unit`
- `package`

.. while i did not manage to cover:

- service tests, given `pkgs.nixosTest` seemed to not actually like `_class = "nixosTest"` (?!)

... nor #93's mentioned destructured arguments for that matter, as per Fediversity/Fediversity#93 (comment) - let me know if that is still desired as well.

Reviewed-on: Fediversity/Fediversity#398
Reviewed-by: Valentin Gagarin <valentin.gagarin@tweag.io>
Co-authored-by: Kiara Grouwstra <kiara@procolix.eu>
Co-committed-by: Kiara Grouwstra <kiara@procolix.eu>
2025-06-23 17:24:54 +02:00
c1b33121b6 expose npins in shell for CI (#403)
Should fix Fediversity/Fediversity#65 (comment)

Reviewed-on: Fediversity/Fediversity#403
Reviewed-by: kiara Grouwstra <kiara@procolix.eu>
Co-authored-by: Valentin Gagarin <valentin.gagarin@tweag.io>
Co-committed-by: Valentin Gagarin <valentin.gagarin@tweag.io>
2025-06-23 17:21:32 +02:00
d073bd706d
cast DEPLOYMENT_FLAKE to string 2025-06-22 14:42:14 +02:00
486b316885 run updater natively (#394)
see Fediversity/Fediversity#65 (comment).

closes #65.

Reviewed-on: Fediversity/Fediversity#394
Co-authored-by: Kiara Grouwstra <kiara@procolix.eu>
Co-committed-by: Kiara Grouwstra <kiara@procolix.eu>
2025-06-20 09:41:38 +02:00
611c961dcf separate test declarations from invocations (#396)
see Fediversity/Fediversity#395 (comment)

Reviewed-on: Fediversity/Fediversity#396
Reviewed-by: Valentin Gagarin <valentin.gagarin@tweag.io>
Co-authored-by: Kiara Grouwstra <kiara@procolix.eu>
Co-committed-by: Kiara Grouwstra <kiara@procolix.eu>
2025-06-19 18:11:08 +02:00
d67f533948 fix running nixops4 apply test (#391)
Closes #390

Reviewed-on: Fediversity/Fediversity#391
Reviewed-by: kiara Grouwstra <kiara@procolix.eu>
Co-authored-by: Valentin Gagarin <valentin.gagarin@tweag.io>
Co-committed-by: Valentin Gagarin <valentin.gagarin@tweag.io>
2025-06-19 08:26:20 +02:00
68 changed files with 159 additions and 16 deletions

View file

@ -7,15 +7,16 @@ on:
jobs:
lockfile:
runs-on: ubuntu-latest
runs-on: native
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Nix
uses: cachix/install-nix-action@v31
- name: Install npins
run: nix profile install 'nixpkgs#npins'
- name: Update npins sources
uses: getchoo/update-npins@v0
- name: Update pins
run: nix-shell --run "npins update"
- name: Create PR
uses: peter-evans/create-pull-request@v7
with:
token: "${{ secrets.DEPLOY_KEY }}"
branch: npins-update
commit-message: "npins: update sources"
title: "npins: update sources"

View file

@ -10,6 +10,8 @@ let
gitignore
;
inherit (pkgs) lib;
inherit (import sources.flake-inputs) import-flake;
inherit ((import-flake { src = ./.; }).inputs) nixops4;
pre-commit-check =
(import "${git-hooks}/nix" {
inherit nixpkgs system;
@ -55,8 +57,10 @@ in
};
in
[
pkgs.npins
pkgs.nix-unit
test-loop
nixops4.packages.${system}.default
];
};

View file

@ -17,6 +17,8 @@ let
in
{
_class = "flake";
perSystem =
{ pkgs, ... }:
{

View file

@ -1,6 +1,8 @@
{ inputs, ... }:
{
_class = "nixosTest";
name = "deployment-basic";
nodes.deployer =

View file

@ -20,6 +20,8 @@ let
in
{
_class = "flake";
perSystem =
{ pkgs, ... }:
{

View file

@ -7,6 +7,8 @@ let
in
{
_class = "nixosTest";
name = "deployment-cli";
nodes.deployer =

View file

@ -18,6 +18,8 @@ let
in
{
_class = "nixos";
imports = [ ./sharedOptions.nix ];
options.system.extraDependenciesFromModule = mkOption {

View file

@ -42,6 +42,8 @@ let
in
{
_class = "nixosTest";
imports = [
./sharedOptions.nix
];

View file

@ -11,6 +11,7 @@ let
inherit (lib) mkOption types;
in
# `config` not set and imported from multiple places: no fixed module class
{
options = {
targetMachines = mkOption {

View file

@ -12,6 +12,8 @@ let
in
{
_class = "nixos";
imports = [
(modulesPath + "/profiles/qemu-guest.nix")
(modulesPath + "/../lib/testing/nixos-test-base.nix")

View file

@ -12,6 +12,8 @@ let
in
{
_class = "nixops4Resource";
imports = [ ./sharedOptions.nix ];
options = {

View file

@ -23,6 +23,8 @@ let
in
{
_class = "flake";
perSystem =
{ pkgs, ... }:
{

View file

@ -121,6 +121,8 @@ let
in
{
_class = "nixosTest";
name = "deployment-panel";
## The panel's module sets `nixpkgs.overlays` which clashes with

View file

@ -11,6 +11,8 @@ let
}).config;
in
{
_class = "nix-unit";
test-eval = {
expr =
let

View file

@ -7,6 +7,8 @@ let
in
with types;
{
_class = "nixops4Deployment";
options = {
runtime-environments = mkOption {
description = "Collection of runtime environments into which applications can be deployed";

View file

@ -65,6 +65,8 @@ let
cfg = config.deployment;
in
{
_class = "nixops4Deployment";
options = {
deployment = lib.mkOption {
description = ''

View file

@ -1,4 +1,6 @@
{
_class = "flake";
imports = [
./check/basic/flake-part.nix
./check/cli/flake-part.nix

View file

@ -17,6 +17,8 @@ let
inherit (lib) types mkOption;
in
{
_class = "nixops4Deployment";
options = {
enable = lib.mkEnableOption "Fediversity configuration";
domain = mkOption {

View file

@ -5,6 +5,8 @@ let
in
{
_class = "nixos";
imports = [
./hardware.nix
./networking.nix

View file

@ -1,6 +1,8 @@
{ modulesPath, ... }:
{
_class = "nixos";
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
boot = {

View file

@ -5,6 +5,8 @@ let
in
{
_class = "nixos";
config = {
services.openssh = {
enable = true;

View file

@ -1,4 +1,6 @@
{
_class = "nixos";
users.users = {
procolix = {
isNormalUser = true;

View file

@ -6,6 +6,8 @@ let
in
{
_class = "nixops4Resource";
options.fediversityVm = {
##########################################################################

View file

@ -1,4 +1,5 @@
{
inputs,
lib,
config,
...
@ -9,7 +10,7 @@ let
inherit (lib.attrsets) concatMapAttrs optionalAttrs;
inherit (lib.strings) removeSuffix;
sources = import ../../npins;
inherit (sources) nixpkgs agenix disko;
inherit (sources) agenix disko;
secretsPrefix = ../../secrets;
secrets = import (secretsPrefix + "/secrets.nix");
@ -17,6 +18,8 @@ let
in
{
_class = "nixops4Resource";
imports = [ ./options.nix ];
fediversityVm.hostPublicKey = mkDefault keys.systems.${config.fediversityVm.name};
@ -26,7 +29,7 @@ in
hostPublicKey = config.fediversityVm.hostPublicKey;
};
inherit nixpkgs;
inherit (inputs) nixpkgs;
## The configuration of the machine. We strive to keep in this file only the
## options that really need to be injected from the resource. Everything else

View file

@ -21,6 +21,9 @@ let
makeResourceModule =
{ vmName, isTestVm }:
{
# TODO(@fricklerhandwerk): this is terrible but IMO we should just ditch flake-parts and have our own data model for how the project is organised internally
_module.args = { inherit inputs; };
imports =
[
./common/resource.nix
@ -152,6 +155,8 @@ let
in
{
_class = "flake";
## - Each normal or test machine gets a NixOS configuration.
## - Each normal or test machine gets a VM options entry.
## - Each normal machine gets a deployment.

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 200;
proxmox = "fediversity";

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 201;
proxmox = "fediversity";

View file

@ -6,6 +6,8 @@ let
name = "panel";
in
{
_class = "nixos";
imports = [
(import ../../../panel { }).module
];

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 2116;
proxmox = "procolix";

View file

@ -5,6 +5,8 @@ let
in
{
_class = "nixos";
services.forgejo = {
enable = true;

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 2187;
proxmox = "procolix";

View file

@ -1,6 +1,8 @@
{ config, ... }:
{
_class = "nixos";
services.phpfpm.pools.mediawiki.phpOptions = ''
upload_max_filesize = 1024M;
post_max_size = 1024M;

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 7001;
proxmox = "fediversity";

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 7002;
proxmox = "fediversity";

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 7003;
proxmox = "fediversity";

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 7004;
proxmox = "fediversity";

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 7005;
proxmox = "fediversity";

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 7006;
proxmox = "fediversity";

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 7011;
proxmox = "fediversity";

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 7012;
proxmox = "fediversity";

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 7013;
proxmox = "fediversity";

View file

@ -1,4 +1,6 @@
{
_class = "nixops4Resource";
fediversityVm = {
vmId = 7014;
proxmox = "fediversity";

View file

@ -25,6 +25,22 @@
"url": null,
"hash": "1w2gsy6qwxa5abkv8clb435237iifndcxq0s79wihqw11a5yb938"
},
"disko": {
"type": "GitRelease",
"repository": {
"type": "GitHub",
"owner": "nix-community",
"repo": "disko"
},
"pre_releases": false,
"version_upper_bound": null,
"release_prefix": null,
"submodules": false,
"version": "v1.12.0",
"revision": "7121f74b976481bc36877abaf52adab2a178fcbe",
"url": "https://api.github.com/repos/nix-community/disko/tarball/v1.12.0",
"hash": "0wbx518d2x54yn4xh98cgm65wvj0gpy6nia6ra7ns4j63hx14fkq"
},
"flake-inputs": {
"type": "GitRelease",
"repository": {

View file

@ -27,7 +27,7 @@ in
pkgs.openssh
];
env = {
DEPLOYMENT_FLAKE = ../.;
DEPLOYMENT_FLAKE = toString ../.;
DEPLOYMENT_NAME = "test";
NPINS_DIRECTORY = toString ../npins;
CREDENTIALS_DIRECTORY = toString ./.credentials;

View file

@ -76,6 +76,8 @@ in
# https://git.dgnum.eu/mdebray/djangonix/
# unlicensed at the time of writing, but surely worth taking some inspiration from...
{
_class = "nixos";
options.services.${name} = {
enable = mkEnableOption "Service configuration for `${name}`";
production = mkOption {

View file

@ -60,6 +60,8 @@ let
];
in
python3.pkgs.buildPythonPackage {
_class = "package";
pname = name;
inherit (pyproject.project) version;
pyproject = true;

View file

@ -8,6 +8,8 @@
}:
buildPythonPackage rec {
_class = "package";
pname = "django-pydantic-field";
version = "v0.3.12";
pyproject = true;

View file

@ -10,6 +10,8 @@
}:
buildPythonPackage rec {
_class = "package";
pname = "drf-pydantic";
version = "v2.7.1";
pyproject = true;

View file

@ -6,8 +6,8 @@
}:
{
tests = {
mastodon = import ./tests/mastodon.nix { inherit pkgs; };
pixelfed-garage = import ./tests/pixelfed-garage.nix { inherit pkgs; };
peertube = import ./tests/peertube.nix { inherit pkgs; };
mastodon = pkgs.nixosTest ./tests/mastodon.nix;
pixelfed-garage = pkgs.nixosTest ./tests/pixelfed-garage.nix;
peertube = pkgs.nixosTest ./tests/peertube.nix;
};
}

View file

@ -6,6 +6,8 @@ let
in
{
_class = "nixos";
imports = [
./garage
./mastodon

View file

@ -97,6 +97,8 @@ let
in
{
_class = "nixos";
imports = [ ./options.nix ];
config = mkIf config.fediversity.garage.enable {

View file

@ -5,6 +5,8 @@ let
in
{
_class = "nixos";
options.fediversity.garage = {
enable = mkEnableOption "Enable a Garage server on the machine";

View file

@ -11,6 +11,8 @@ let
in
{
_class = "nixos";
imports = [ ./options.nix ];
config = mkMerge [

View file

@ -1,6 +1,8 @@
{ config, lib, ... }:
{
_class = "nixos";
options.fediversity.mastodon =
(import ../sharedOptions.nix {
inherit config lib;

View file

@ -5,6 +5,8 @@ let
in
{
_class = "nixos";
imports = [ ./options.nix ];
config = mkMerge [

View file

@ -6,6 +6,8 @@ let
in
{
_class = "nixos";
options.fediversity.peertube =
(import ../sharedOptions.nix {
inherit config lib;

View file

@ -15,6 +15,8 @@ let
in
{
_class = "nixos";
imports = [ ./options.nix ];
config = mkMerge [

View file

@ -1,6 +1,8 @@
{ config, lib, ... }:
{
_class = "nixos";
options.fediversity.pixelfed =
(import ../sharedOptions.nix {
inherit config lib;

View file

@ -14,6 +14,8 @@ let
in
{
_class = "nixos";
enable = mkEnableOption "Enable a ${serviceDocName} server on the machine";
s3AccessKeyFile = mkOption {

View file

@ -42,7 +42,7 @@ let
'';
in
pkgs.nixosTest {
{
name = "mastodon";
nodes = {

View file

@ -161,7 +161,7 @@ let
'';
in
pkgs.nixosTest {
{
name = "peertube";
nodes = {

View file

@ -114,7 +114,7 @@ let
${seleniumQuit}'';
in
pkgs.nixosTest {
{
name = "test-pixelfed-garage";
nodes = {

View file

@ -127,6 +127,8 @@ let
preOverride = pkgs.nixosTest (
test
// {
_class = "nixosTest";
interactive = (test.interactive or { }) // {
# no need to // with test.interactive.nodes here, since we are iterating
# over all of them, and adding back in the config via `imports`

View file

@ -10,6 +10,8 @@ let
in
{
_class = "nixos";
imports = [ (modulesPath + "/virtualisation/qemu-vm.nix") ];
fediversity.garage.enable = true;

View file

@ -1,6 +1,8 @@
# customize nixos-rebuild build-vm to be a bit more convenient
{ pkgs, ... }:
{
_class = "nixos";
# let us log in
users.mutableUsers = false;
users.users.root.hashedPassword = "";

View file

@ -6,6 +6,7 @@
...
}:
{
_class = "nixos";
imports = [ (modulesPath + "/virtualisation/qemu-vm.nix") ];

View file

@ -5,6 +5,8 @@
}:
{
_class = "nixos";
imports = [ (modulesPath + "/virtualisation/qemu-vm.nix") ];
fediversity = {

View file

@ -11,6 +11,8 @@ let
in
{
_class = "nixos";
imports = [ (modulesPath + "/virtualisation/qemu-vm.nix") ];
fediversity = {