def deploy = ApiJsonEndpoint()

in riff-raff/app/controllers/api.scala [363:417]


  def deploy = ApiJsonEndpoint("deploy", parse.json) { implicit request =>
    deployRequestReader
      .reads(request.body)
      .fold(
        valid = { deployRequest =>
          val (project, build, stage) = deployRequest
          val params = DeployParameters(
            Deployer(request.fullName),
            Build(project, build),
            Stage(stage),
            updateStrategy = MostlyHarmless
          )
          assert(
            !changeFreeze.frozen(stage),
            s"Deployment to $stage is frozen (API disabled, use the web interface if you need to deploy): ${changeFreeze.message}"
          )

          deployments.deploy(
            params,
            requestSource = ApiRequestSource(request.apiKey)
          ) match {
            case Right(deployId) =>
              Json.obj(
                "response" -> Json.obj(
                  "status" -> "ok",
                  "request" -> Json.obj(
                    "project" -> project,
                    "build" -> build,
                    "stage" -> stage
                  ),
                  "uuid" -> deployId.toString,
                  "logURL" -> routes.DeployController
                    .viewUUID(deployId.toString)
                    .absoluteURL()
                )
              )
            case Left(error) =>
              Json.obj(
                "response" -> Json.obj(
                  "status" -> "error",
                  "errors" -> Json.arr(error.message)
                )
              )
          }
        },
        invalid = { error =>
          Json.obj(
            "response" -> Json.obj(
              "status" -> "error",
              "errors" -> JsError.toJson(error)
            )
          )
        }
      )
  }