diff --git a/README.md b/README.md index 34ebe04c4a..e46227c844 100644 --- a/README.md +++ b/README.md @@ -92,13 +92,19 @@ The default generator uses Docker and an image based off the [swagger-codegen pr You can further configure this converter by modifying the `config/config.exs` setting: ```elixir -config :google_apis, swagger_cli_image: "swagger-cli" +config :google_apis, swagger_cli_image: "swaggerapi/swagger-codegen-cli" +``` + +To get the current version of swagger cli: + +```bash +docker pull swaggerapi/swagger-codegen-cli ``` You can also limit which APIs to generate by providing an API name argument to the mix task: ```bash -$> mix google_apis.generate CloudTrace +$> mix google_apis.build CloudTrace ``` ## Contributing diff --git a/config/config.exs b/config/config.exs index 3d802b5858..29e14a1d3a 100644 --- a/config/config.exs +++ b/config/config.exs @@ -29,7 +29,7 @@ use Mix.Config # # import_config "#{Mix.env}.exs" -config :google_apis, +config :google_apis, spec_converter: GoogleApis.Converter.ApiSpecConverter, client_generator: GoogleApis.Generator.SwaggerCli, - swagger_cli_image: "swagger-cli" + swagger_cli_image: "swaggerapi/swagger-codegen-cli" diff --git a/lib/google_apis.ex b/lib/google_apis.ex index 222aa9eed2..6a84229bcb 100644 --- a/lib/google_apis.ex +++ b/lib/google_apis.ex @@ -51,14 +51,32 @@ defmodule GoogleApis do def fetch(api_config) do file = ApiConfig.google_spec_file(api_config) - with {:ok, body} = GoogleApis.Discovery.fetch(api_config.url), - :ok <- File.mkdir_p(Path.dirname(file)), - :ok <- File.write(file, body) - do - {:ok, file} + case GoogleApis.Discovery.fetch(api_config.discoveryRestUrl) do + {:ok, body} -> + case File.mkdir_p(Path.dirname(file)) do + :ok -> + case File.write(file, body) do + :ok -> + {:ok, file} + {:error, posix} -> + msg = "Cannot write file. Error: #{posix}" + Logger.warn msg + {:error, msg} + end + _ -> + msg = "Cannot make #{Path.dirname(file)}" + Logger.warn msg + {:error, msg} + end + _ -> + msg = "Cannot Fetch from #{api_config.discoveryRestUrl}" + Logger.warn msg + {:error, msg} end end + + def convert_spec(api_config = %ApiConfig{}) do converter = Application.get_env(:google_apis, :spec_converter) converter.convert(api_config) diff --git a/lib/google_apis/api_config.ex b/lib/google_apis/api_config.ex index 9c13c1bd24..069f3e4161 100644 --- a/lib/google_apis/api_config.ex +++ b/lib/google_apis/api_config.ex @@ -14,7 +14,7 @@ defmodule GoogleApis.ApiConfig do - defstruct [:name, :version, :url] + defstruct [:name, :version, :url, :discoveryRestUrl] def file(%{name: name, version: version}), do: "#{name}-#{version}.json" diff --git a/lib/google_apis/converter/api_spec_converter.ex b/lib/google_apis/converter/api_spec_converter.ex index 68efa254a3..ec35c48552 100644 --- a/lib/google_apis/converter/api_spec_converter.ex +++ b/lib/google_apis/converter/api_spec_converter.ex @@ -23,13 +23,23 @@ defmodule GoogleApis.Converter.ApiSpecConverter do output = ApiConfig.openapi_spec_file(api_config) Logger.info("Converting #{file} to #{output}") - with {swagger, 0} <- System.cmd("npm", ["run", "-s", "api-spec-converter", "--", file, "-f", "google", "-t", "swagger_2"]), - :ok <- File.write(output, swagger) - do - {:ok, output} - else - {"", exit_code} -> {:error, "convert failed. exit code #{exit_code}"} - {:error, reason} -> {:error, reason} + case System.cmd("npm", ["run", "-s", "api-spec-converter", "--", file, "-f", "google", "-t", "swagger_2"]) do + {swagger, 0} -> + case File.mkdir_p(Path.dirname(output)) do + :ok -> + case File.write(output, swagger) do + :ok -> + {:ok, output} + {:error, posix} -> + msg = "Cannot write file. Error: #{posix}" + Logger.warn msg + {:error, msg} + end + {:error, posix} -> + msg = "Cannot make dir #{Path.dirname(output)}. Error: #{posix}" + Logger.warn msg + {:error, msg} + end end end diff --git a/lib/google_apis/discovery.ex b/lib/google_apis/discovery.ex index 2651cea7a1..c0c59798f5 100644 --- a/lib/google_apis/discovery.ex +++ b/lib/google_apis/discovery.ex @@ -21,7 +21,7 @@ defmodule GoogleApis.Discovery do try_formats(base, query, ["GOOGLE_REST_SIMPLE_URI", format]) nil -> {:ok, body} = fetch_direct(url) - {:ok, {body, "default"}} + {:ok, body} end end