diff --git a/datasette/publish/cloudrun.py b/datasette/publish/cloudrun.py index 54f06da0..7f9e89e2 100644 --- a/datasette/publish/cloudrun.py +++ b/datasette/publish/cloudrun.py @@ -102,6 +102,13 @@ def publish_subcommand(publish): "about_url": about_url, } + if not extra_options: + extra_options = "" + if "force_https_urls" not in extra_options: + if extra_options: + extra_options += " " + extra_options += "--setting force_https_urls on" + environment_variables = {} if plugin_secret: extra_metadata["plugins"] = {} diff --git a/tests/test_publish_cloudrun.py b/tests/test_publish_cloudrun.py index 7adef39d..4eb79ee5 100644 --- a/tests/test_publish_cloudrun.py +++ b/tests/test_publish_cloudrun.py @@ -271,3 +271,47 @@ def test_publish_cloudrun_apt_get_install(mock_call, mock_output, mock_which): """ ).strip() assert expected == dockerfile + + +@mock.patch("shutil.which") +@mock.patch("datasette.publish.cloudrun.check_output") +@mock.patch("datasette.publish.cloudrun.check_call") +@pytest.mark.parametrize( + "extra_options,expected", + [ + ("", "--setting force_https_urls on"), + ("--setting base_url /foo", "--setting base_url /foo --setting force_https_urls on"), + ("--setting force_https_urls off", "--setting force_https_urls off"), + ], +) +def test_publish_cloudrun_extra_options( + mock_call, mock_output, mock_which, extra_options, expected +): + mock_which.return_value = True + mock_output.return_value = "myproject" + + runner = CliRunner() + with runner.isolated_filesystem(): + open("test.db", "w").write("data") + result = runner.invoke( + cli.cli, + [ + "publish", + "cloudrun", + "test.db", + "--service", + "datasette", + "--show-files", + "--extra-options", + extra_options, + ], + ) + assert result.exit_code == 0 + dockerfile = ( + result.output.split("==== Dockerfile ====\n")[1] + .split("\n====================\n")[0] + .strip() + ) + last_line = dockerfile.split("\n")[-1] + extra_options = last_line.split("--inspect-file inspect-data.json")[1].split("--port")[0].strip() + assert extra_options == expected \ No newline at end of file