From 6c113e5078209a1ce77d26a8d1a77a0fc1b93810 Mon Sep 17 00:00:00 2001 From: "Axel H." Date: Thu, 29 Feb 2024 17:48:17 +0100 Subject: [PATCH] feat(deploy): added a `--set-default` flag to set the deployed version the new default --- README.md | 3 +++ mike/commands.py | 10 +++++++++- mike/driver.py | 5 ++++- test/integration/test_deploy.py | 9 +++++++++ test/unit/test_commands.py | 14 +++++++++++++- 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 47547b5..01cf914 100644 --- a/README.md +++ b/README.md @@ -225,6 +225,9 @@ the setting of `alias_type`/`--alias-type`.) Like `deploy` and `delete` above, you can specify `--branch`, `--push`, etc to control how the commit is handled. +As with `deploy`, you can pass `-d`/`--set-default` to set the published version +as the new default. + ### Changing a Version's Title As you update your docs, you may want to change the title of a particular diff --git a/mike/commands.py b/mike/commands.py index 0dbefb7..0a7657b 100644 --- a/mike/commands.py +++ b/mike/commands.py @@ -62,7 +62,8 @@ def make_nojekyll(): @contextmanager def deploy(cfg, version, title=None, aliases=[], update_aliases=False, alias_type=AliasType.symlink, template=None, *, branch='gh-pages', - message=None, allow_empty=False, deploy_prefix='', set_props=[]): + message=None, allow_empty=False, deploy_prefix='', set_props=[], + set_default=False): if message is None: message = ( 'Deployed {rev} to {doc_version}{deploy_prefix} with MkDocs ' + @@ -118,6 +119,13 @@ def deploy(cfg, version, title=None, aliases=[], update_aliases=False, commit.add_file(versions_to_file_info(all_versions, deploy_prefix)) commit.add_file(make_nojekyll()) + if set_default: + t = _redirect_template(template) + commit.add_file(git_utils.FileInfo( + os.path.join(deploy_prefix, 'index.html'), + t.render(href=version_str + '/') + )) + def delete(identifiers=None, all=False, *, branch='gh-pages', message=None, allow_empty=False, deploy_prefix=''): diff --git a/mike/driver.py b/mike/driver.py index 5656451..1eabca5 100644 --- a/mike/driver.py +++ b/mike/driver.py @@ -196,7 +196,8 @@ def deploy(parser, args): branch=args.branch, message=args.message, allow_empty=args.allow_empty, deploy_prefix=args.deploy_prefix, - set_props=args.set_props or []), \ + set_props=args.set_props or [], + set_default=args.set_default), \ mkdocs_utils.inject_plugin(args.config_file) as config_file: mkdocs_utils.build(config_file, args.version) if args.push: @@ -350,6 +351,8 @@ def main(): '%(choices)s; default: symlink)')) deploy_p.add_argument('-T', '--template', complete='file', help='template file to use for redirects') + deploy_p.add_argument('-d', '--set-default', action='store_true', + help='set the deployed version as the new default') add_git_arguments(deploy_p) add_set_prop_arguments(deploy_p, prefix='prop-') deploy_p.add_argument('version', metavar='VERSION', diff --git a/test/integration/test_deploy.py b/test/integration/test_deploy.py index 164f52f..876d3b3 100644 --- a/test/integration/test_deploy.py +++ b/test/integration/test_deploy.py @@ -141,6 +141,15 @@ def test_update_aliases_with_version(self): versions.VersionInfo('1.0b1'), ]) + def test_set_default(self): + assertPopen(['mike', 'deploy', '1.0', '--set-default']) + check_call_silent(['git', 'checkout', 'gh-pages']) + self._test_deploy(expected_versions=[ + versions.VersionInfo('1.0'), + ]) + with open('index.html') as f: + self.assertRegex(f.read(), match_redir('1.0/')) + def test_from_subdir(self): os.mkdir('sub') with pushd('sub'): diff --git a/test/unit/test_commands.py b/test/unit/test_commands.py index d20d200..5afeb57 100644 --- a/test/unit/test_commands.py +++ b/test/unit/test_commands.py @@ -49,11 +49,14 @@ def setUp(self): commit_files(['page.html', 'file.txt', 'dir/index.html']) def _test_state(self, expected_message, expected_versions, - alias_type=AliasType.symlink, directory='.'): + alias_type=AliasType.symlink, directory='.', + expected_files=None): message = check_output(['git', 'log', '-1', '--pretty=%B']).rstrip() self.assertRegex(message, expected_message) files = {'versions.json'} + if expected_files: + files.update(expected_files) for v in expected_versions: vstr = str(v.version) files |= {vstr, vstr + '/page.html', vstr + '/file.txt', @@ -281,6 +284,15 @@ def test_update_aliases(self): versions.VersionInfo('1.0', '1.0', []), ]) + def test_set_default(self): + with commands.deploy(self.cfg, '1.0', set_default=True): + self._mock_build() + check_call_silent(['git', 'checkout', 'gh-pages']) + self._test_deploy(expected_files=["index.html"]) + + with open('index.html') as f: + self.assertRegex(f.read(), match_redir("1.0/")) + class TestDelete(TestBase): stage_dir = 'delete'