diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index aa600d5..2720eec 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,4 +1,4 @@ -name: Deploy app to server +name: Deploy to server on: workflow_run: @@ -7,12 +7,13 @@ on: branches: [ devel, main ] env: SERVER_USER: root - SERVER_IP: 128.140.75.240 + QS_SERVER_IP: 128.140.75.240 + PROD_SERVER_IP: 116.203.122.75 jobs: deploy: runs-on: ubuntu-latest - if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.event == 'push' }} + if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.event != 'pull_request' }} steps: - uses: actions/checkout@v4 @@ -24,14 +25,14 @@ jobs: - name: Install SSH Key uses: shimataro/ssh-key-action@v2 with: - key: ${{ secrets.DEMO_SERVER_SSH_KEY }} - known_hosts: ${{ secrets.DEMO_SERVER_KNOWN_HOSTS }} + key: ${{ github.ref_name == 'devel' && secrets.QS_SSH_KEY || secrets.PROD_SSH_KEY }} + known_hosts: ${{ github.ref_name == 'devel' && secrets.QS_KNOWN_HOSTS || secrets.PROD_KNOWN_HOSTS }} - name: Deploy to demo server run: | nix run nixpkgs#nixos-rebuild -- switch \ - --flake .#demo-server \ + --flake .#$[ github.ref_name == 'devel' && 'qs' || 'prod' ] \ --fast \ - --build-host ${{ env.SERVER_USER }}@${{ env.SERVER_IP }} \ - --target-host ${{ env.SERVER_USER }}@${{ env.SERVER_IP }} \ + --build-host ${{ env.SERVER_USER }}@$[ github.ref_name == 'devel' && env.QS_SERVER_IP || env.PROD_SERVER_IP ] \ + --target-host ${{ env.SERVER_USER }}@$[ github.ref_name == 'devel' && env.QS_SERVER_IP || env.PROD_SERVER_IP ] \ --use-remote-sudo diff --git a/flake.nix b/flake.nix index b098b72..e3503a2 100644 --- a/flake.nix +++ b/flake.nix @@ -78,10 +78,17 @@ system = "x86_64-linux"; modules = [ ./nix/dev-vm.nix ]; }; - demo-server = nixpkgs.lib.nixosSystem { + qs = nixpkgs.lib.nixosSystem { system = "aarch64-linux"; modules = [ - ./nix/demo-server + ./nix/deploy/qs + { _module.args.localArchtikaPackage = self.packages."aarch64-linux".default; } + ]; + }; + prod = nixpkgs.lib.nixosSystem { + system = "aarch64-linux"; + modules = [ + ./nix/deploy/prod { _module.args.localArchtikaPackage = self.packages."aarch64-linux".default; } ]; }; diff --git a/nix/deploy/prod/default.nix b/nix/deploy/prod/default.nix new file mode 100644 index 0000000..32f1ccc --- /dev/null +++ b/nix/deploy/prod/default.nix @@ -0,0 +1,19 @@ +{ pkgs, localArchtikaPackage, ... }: +{ + imports = [ + ./hardware-configuration.nix + ../shared.nix + ../../module.nix + ]; + + networking.hostName = "archtika-prod"; + + services.archtika = { + enable = true; + package = localArchtikaPackage; + domain = "demo.archtika.com"; + acmeEmail = "thilo.hohlt@tutanota.com"; + dnsProvider = "porkbun"; + dnsEnvironmentFile = /var/lib/porkbun.env; + }; +} diff --git a/nix/deploy/qs/default.nix b/nix/deploy/qs/default.nix new file mode 100644 index 0000000..dabd468 --- /dev/null +++ b/nix/deploy/qs/default.nix @@ -0,0 +1,19 @@ +{ pkgs, localArchtikaPackage, ... }: +{ + imports = [ + ./hardware-configuration.nix + ../shared.nix + ../../module.nix + ]; + + networking.hostName = "archtika-qs"; + + services.archtika = { + enable = true; + package = localArchtikaPackage; + domain = "qs.archtika.com"; + acmeEmail = "thilo.hohlt@tutanota.com"; + dnsProvider = "porkbun"; + dnsEnvironmentFile = /var/lib/porkbun.env; + }; +} diff --git a/nix/demo-server/hardware-configuration.nix b/nix/deploy/qs/hardware-configuration.nix similarity index 100% rename from nix/demo-server/hardware-configuration.nix rename to nix/deploy/qs/hardware-configuration.nix diff --git a/nix/demo-server/default.nix b/nix/deploy/shared.nix similarity index 79% rename from nix/demo-server/default.nix rename to nix/deploy/shared.nix index 6e0a9b9..cf3f334 100644 --- a/nix/demo-server/default.nix +++ b/nix/deploy/shared.nix @@ -1,10 +1,5 @@ -{ pkgs, localArchtikaPackage, ... }: +{ pkgs, ... }: { - imports = [ - ./hardware-configuration.nix - ../module.nix - ]; - boot = { loader = { systemd-boot.enable = true; @@ -23,7 +18,6 @@ nixpkgs.config.allowUnfree = true; networking = { - hostName = "archtika-qs"; networkmanager.enable = true; firewall = { allowedTCPPorts = [ @@ -62,14 +56,5 @@ settings.PasswordAuthentication = false; }; - services.archtika = { - enable = true; - package = localArchtikaPackage; - domain = "qs.archtika.com"; - acmeEmail = "thilo.hohlt@tutanota.com"; - dnsProvider = "porkbun"; - dnsEnvironmentFile = /var/lib/porkbun.env; - }; - system.stateVersion = "24.11"; }