datasette publish heroku --tar option, closes #969

This commit is contained in:
Simon Willison 2020-10-08 16:30:46 -07:00
commit e4554c37b7
3 changed files with 27 additions and 4 deletions

View file

@ -24,6 +24,10 @@ def publish_subcommand(publish):
default="datasette",
help="Application name to use when deploying",
)
@click.option(
"--tar",
help="--tar option to pass to Heroku, e.g. --tar=/usr/local/bin/gtar",
)
def heroku(
files,
metadata,
@ -44,6 +48,7 @@ def publish_subcommand(publish):
about,
about_url,
name,
tar,
):
fail_if_publish_binary_not_installed(
"heroku", "Heroku", "https://cli.heroku.com"
@ -127,8 +132,13 @@ def publish_subcommand(publish):
call(
["heroku", "config:set", "-a", app_name, "{}={}".format(key, value)]
)
call(["heroku", "builds:create", "-a", app_name, "--include-vcs-ignore"])
tar_option = []
if tar:
tar_option = ["--tar", tar]
call(
["heroku", "builds:create", "-a", app_name, "--include-vcs-ignore"]
+ tar_option
)
@contextmanager

View file

@ -26,4 +26,7 @@ Options:
--about TEXT About label for metadata
--about_url TEXT About URL for metadata
-n, --name TEXT Application name to use when deploying
--tar TEXT --tar option to pass to Heroku, e.g.
--tar=/usr/local/bin/gtar
--help Show this message and exit.

View file

@ -55,12 +55,22 @@ def test_publish_heroku(mock_call, mock_check_output, mock_which):
runner = CliRunner()
with runner.isolated_filesystem():
open("test.db", "w").write("data")
result = runner.invoke(cli.cli, ["publish", "heroku", "test.db"])
result = runner.invoke(
cli.cli, ["publish", "heroku", "test.db", "--tar", "gtar"]
)
assert 0 == result.exit_code, result.output
mock_call.assert_has_calls(
[
mock.call(
["heroku", "builds:create", "-a", "f", "--include-vcs-ignore"]
[
"heroku",
"builds:create",
"-a",
"f",
"--include-vcs-ignore",
"--tar",
"gtar",
]
),
]
)