From eae546802a987473b88ce9995dd74fae5a497037 Mon Sep 17 00:00:00 2001 From: Parthiv Seetharaman Date: Sat, 5 Feb 2022 21:16:20 -0800 Subject: checks: use checks.nix to match flake output --- checks.nix | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ flake.nix | 2 +- test.nix | 127 ------------------------------------------------------------- 3 files changed, 128 insertions(+), 128 deletions(-) create mode 100644 checks.nix delete mode 100644 test.nix diff --git a/checks.nix b/checks.nix new file mode 100644 index 0000000..fd6e3f0 --- /dev/null +++ b/checks.nix @@ -0,0 +1,127 @@ +{ system ? builtins.currentSystem +, inputs ? (import ./.).inputs +}: +let + pkgs = inputs.nixpkgs.legacyPackages.${system}; + + homeserverURL = "http://homeserver:8008"; + homeserverDomain = "example.com"; + + private_key = pkgs.runCommand "matrix_key.pem" { + buildInputs = [ pkgs.dendrite ]; + } "generate-keys --private-key $out"; +in + { + matrix-appservices = pkgs.nixosTest { + name = "matrix-appservices"; + meta = with pkgs.lib; { + maintainers = teams.matrix.members; + }; + + nodes = { + homeserver = { pkgs, ... }: { + imports = [ ./module ]; + services.dendrite = { + enable = true; + settings = { + global.server_name = homeserverDomain; + global.private_key = private_key; + client_api.registration_disabled = false; + }; + }; + + networking.firewall.allowedTCPPorts = [ 8008 ]; + + services.matrix-appservices = { + inherit homeserverDomain homeserverURL; + addRegistrationFiles = true; + homeserver = "dendrite"; + services = { + discord = { + port = 29180; + package = pkgs.mx-puppet-discord; + format = "mx-puppet"; + }; + }; + }; + }; + + client = { pkgs, ... }: { + environment.systemPackages = [ + ( + pkgs.writers.writePython3Bin "do_test" + { libraries = [ pkgs.python3Packages.matrix-nio ]; } '' + import asyncio + + from nio import AsyncClient + + + async def main() -> None: + # Connect to dendrite + client = AsyncClient("http://homeserver:8008", "alice") + + # Register as user alice + response = await client.register("alice", "my-secret-password") + + # Log in as user alice + response = await client.login("my-secret-password") + + # Create a new room + response = await client.room_create(federate=False) + room_id = response.room_id + + # Join the room + response = await client.join(room_id) + + # Invite whatsapp user to room + response = await client.room_invite( + room_id, + "@_discordpuppet_bot:${homeserverDomain}" + ) + + # Send a message to the room + response = await client.room_send( + room_id=room_id, + message_type="m.room.message", + content={ + "msgtype": "m.text", + "body": "ping" + } + ) + + # Sync responses + response = await client.sync(timeout=30000) + + response = await client.joined_members(room_id) + + # Check the message was received by dendrite + # last_message = response.rooms.join[room_id].timeline.events[-1].body + # assert last_message = "ping" + + # Leave the room + response = await client.room_leave(room_id) + + # Close the client + await client.close() + + asyncio.get_event_loop().run_until_complete(main()) + '' + ) + ]; + }; + }; + + testScript = '' + start_all() + + with subtest("start the homeserver"): + homeserver.wait_for_unit("dendrite.service") + homeserver.wait_for_open_port(8008) + homeserver.wait_for_unit("matrix-as-discord.service") + + with subtest("ensure messages can be exchanged"): + client.succeed("do_test") + ''; + + }; + } diff --git a/flake.nix b/flake.nix index f763fbf..60e3ebb 100644 --- a/flake.nix +++ b/flake.nix @@ -32,6 +32,6 @@ packages = polyfillOutput ./packages.nix; - checks = polyfillOutput ./test.nix; + checks = polyfillOutput ./checks.nix; }; } diff --git a/test.nix b/test.nix deleted file mode 100644 index fd6e3f0..0000000 --- a/test.nix +++ /dev/null @@ -1,127 +0,0 @@ -{ system ? builtins.currentSystem -, inputs ? (import ./.).inputs -}: -let - pkgs = inputs.nixpkgs.legacyPackages.${system}; - - homeserverURL = "http://homeserver:8008"; - homeserverDomain = "example.com"; - - private_key = pkgs.runCommand "matrix_key.pem" { - buildInputs = [ pkgs.dendrite ]; - } "generate-keys --private-key $out"; -in - { - matrix-appservices = pkgs.nixosTest { - name = "matrix-appservices"; - meta = with pkgs.lib; { - maintainers = teams.matrix.members; - }; - - nodes = { - homeserver = { pkgs, ... }: { - imports = [ ./module ]; - services.dendrite = { - enable = true; - settings = { - global.server_name = homeserverDomain; - global.private_key = private_key; - client_api.registration_disabled = false; - }; - }; - - networking.firewall.allowedTCPPorts = [ 8008 ]; - - services.matrix-appservices = { - inherit homeserverDomain homeserverURL; - addRegistrationFiles = true; - homeserver = "dendrite"; - services = { - discord = { - port = 29180; - package = pkgs.mx-puppet-discord; - format = "mx-puppet"; - }; - }; - }; - }; - - client = { pkgs, ... }: { - environment.systemPackages = [ - ( - pkgs.writers.writePython3Bin "do_test" - { libraries = [ pkgs.python3Packages.matrix-nio ]; } '' - import asyncio - - from nio import AsyncClient - - - async def main() -> None: - # Connect to dendrite - client = AsyncClient("http://homeserver:8008", "alice") - - # Register as user alice - response = await client.register("alice", "my-secret-password") - - # Log in as user alice - response = await client.login("my-secret-password") - - # Create a new room - response = await client.room_create(federate=False) - room_id = response.room_id - - # Join the room - response = await client.join(room_id) - - # Invite whatsapp user to room - response = await client.room_invite( - room_id, - "@_discordpuppet_bot:${homeserverDomain}" - ) - - # Send a message to the room - response = await client.room_send( - room_id=room_id, - message_type="m.room.message", - content={ - "msgtype": "m.text", - "body": "ping" - } - ) - - # Sync responses - response = await client.sync(timeout=30000) - - response = await client.joined_members(room_id) - - # Check the message was received by dendrite - # last_message = response.rooms.join[room_id].timeline.events[-1].body - # assert last_message = "ping" - - # Leave the room - response = await client.room_leave(room_id) - - # Close the client - await client.close() - - asyncio.get_event_loop().run_until_complete(main()) - '' - ) - ]; - }; - }; - - testScript = '' - start_all() - - with subtest("start the homeserver"): - homeserver.wait_for_unit("dendrite.service") - homeserver.wait_for_open_port(8008) - homeserver.wait_for_unit("matrix-as-discord.service") - - with subtest("ensure messages can be exchanged"): - client.succeed("do_test") - ''; - - }; - } -- cgit v1.2.3 From e65f245314215dfca116d7d04e783ed767e168f7 Mon Sep 17 00:00:00 2001 From: Parthiv Seetharaman Date: Sat, 5 Feb 2022 21:18:33 -0800 Subject: flake: switch nixpkgs input to nixos-21.11 --- flake.lock | 12 +++++++----- flake.nix | 1 + 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/flake.lock b/flake.lock index 5afbe38..fe074e7 100644 --- a/flake.lock +++ b/flake.lock @@ -48,16 +48,18 @@ }, "nixpkgs": { "locked": { - "lastModified": 1643472818, - "narHash": "sha256-qzVPxKDUubYIxKRSuDl/JgzXWSmGvUVYny9SxFMfPJM=", + "lastModified": 1643503720, + "narHash": "sha256-tJic20ufuRnG8V+fTCd3YU6xl1ImxNspoEkXHct0AG4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "7f65e4abd5ecaad12d2d26e4380d1a7d8edafea7", + "rev": "0f316e4d72daed659233817ffe52bf08e081b5de", "type": "github" }, "original": { - "id": "nixpkgs", - "type": "indirect" + "owner": "NixOS", + "ref": "nixos-21.11", + "repo": "nixpkgs", + "type": "github" } }, "root": { diff --git a/flake.nix b/flake.nix index 60e3ebb..66c5edf 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,6 @@ { inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-21.11"; devshell.url = "github:numtide/devshell"; nixlib.url = "github:divnix/nixpkgs.lib"; flake-compat = { -- cgit v1.2.3 From 95ec4d6b0df108c8cae67f7d6cef843eec635189 Mon Sep 17 00:00:00 2001 From: Parthiv Seetharaman Date: Sat, 5 Feb 2022 21:19:42 -0800 Subject: add gitlab ci to run flake check --- .gitlab-ci.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..1a27ed3 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,15 @@ +default: + image: nixos/nix:2.6.0 + before_script: + - mkdir -p ~/.config/nix/ + - echo "experimental-features = flakes nix-command" >> ~/.config/nix/nix.conf + - echo "accept-flake-config = true" >> ~/.config/nix/nix.conf + - echo "extra-system-features = kvm" >> ~/.config/nix/nix.conf + +check: + only: + - branches + - tags + - merge_requests + script: + - nix flake check -- cgit v1.2.3