1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
{
  self,
  system,
  pkgs,
  ...
}:
let
  releng = ./..;
  this-garage = pkgs.garage_2;
  garage-ephemeral-key = pkgs.callPackage ../garage-ephemeral-key {
    inherit (pkgs.writers) writePython3Bin;
  };

  build = self.release-jobs.all.build.${system}.doc;

  pythonPackages = (
    p: [
      p.yapf
      p.requests
      p.xdg-base-dirs
      p.packaging
      p.xonsh
    ]
  );
  pythonEnv = pkgs.python3.pythonOnBuildForHost.withPackages pythonPackages;
in
{
  name = "local-releng-manual-upload";

  nodes = {
    machine =
      { config, pkgs, ... }:
      {
        services.garage.enable = true;
        services.garage.package = this-garage;
        services.garage.settings = {
          replication_factor = 1;

          rpc_bind_addr = "[::]:3901";
          rpc_secret = "4425f5c26c5e11581d3223904324dcb5b5d5dfb14e5e7f35e38c595424f5f1e6";

          s3_api.api_bind_addr = "[::]:3900";
          s3_api.s3_region = "garage";
          s3_api.root_domain = ".localhost";

          admin = {
            api_bind_addr = "[::]:3903";
            admin_token = "UkLeGWEvHnXBqnueR3ISEMWpOnm40jH2tM2HnnL/0F4=";
          };
        };

        environment.systemPackages = [
          this-garage
          pkgs.git
          pkgs.build-release-notes
          pkgs.jq
          pkgs.nix-eval-jobs
          pkgs.awscli2
          pythonEnv
          garage-ephemeral-key
        ];

        environment.sessionVariables = {
          GARAGE_ADMIN_TOKEN = "UkLeGWEvHnXBqnueR3ISEMWpOnm40jH2tM2HnnL/0F4=";
        };

        # ≥ v6.12 kernel has a system wide corruption related to 9p. wait until
        # https://lore.kernel.org/all/w5ap2zcsatkx4dmakrkjmaexwh3mnmgc5vhavb2miaj6grrzat@7kzr5vlsrmh5/
        # resolves. once this is resolved and the fix lands in a stable kernel
        # in nixpkgs, this pin can be removed.
        boot.kernelPackages = pkgs.linuxPackages_6_6;
      };
  };
  testScript = ''
    machine.wait_for_unit("garage")
    machine.wait_for_open_port(3900)

    nodeId = machine.succeed("garage node id")
    machine.succeed(f"garage layout assign -z dc1 -c 10G {nodeId}")
    machine.succeed("garage layout apply --version 1")
    machine.succeed("garage bucket create local-docs")
    machine.succeed("garage bucket create local-cache")
    machine.succeed("garage bucket create local-releases")

    machine.succeed("git init --bare releng-target")

    machine.succeed("mkdir repo")
    machine.succeed("cd repo; git init --initial-branch release-2.92 .")
    machine.succeed("cd repo; git config user.email 'local@test.com'")
    machine.succeed("cd repo; git config user.name 'Test Releng'")

    machine.copy_from_host("${../../version.json}", "repo/version.json")
    machine.copy_from_host("${releng}", "repo/releng")
    machine.copy_from_host("${../../doc}", "repo/doc")
    machine.succeed("cd repo; git add .")
    machine.succeed("cd repo; git commit -m 'initial commit'")
    machine.succeed("cd repo; git switch -c releng/2.92.4")

    machine.succeed("cd repo; python3 -m releng prepare")
    machine.succeed("cd repo; python3 -m releng tag")
    machine.succeed("cd repo; mkdir -p release/manual")
    machine.succeed("cd repo; cp --no-preserve=mode -T -vr ${build}/share/doc/nix/manual ./release/manual")
    machine.succeed("cd repo; python3 -m releng upload --noconfirm --environment local --target manual")
  '';
}