|
@@ -0,0 +1,121 @@
|
|
|
+import subprocess
|
|
|
+from unittest import mock
|
|
|
+
|
|
|
+import pytest
|
|
|
+
|
|
|
+from tools.bump_action import main
|
|
|
+
|
|
|
+
|
|
|
+@pytest.fixture
|
|
|
+def workflow_and_action(tmp_path):
|
|
|
+ base = tmp_path.joinpath("root")
|
|
|
+
|
|
|
+ base.joinpath(".github/workflows").mkdir(parents=True)
|
|
|
+ workflow = base.joinpath(".github/workflows/main.yml")
|
|
|
+
|
|
|
+ base.joinpath(".github/actions/myaction").mkdir(parents=True)
|
|
|
+ action = base.joinpath(".github/actions/myaction/action.yml")
|
|
|
+
|
|
|
+ yield base, workflow, action
|
|
|
+
|
|
|
+
|
|
|
+def test_main_noop(workflow_and_action, capsys):
|
|
|
+ base, workflow, action = workflow_and_action
|
|
|
+
|
|
|
+ workflow_src = """\
|
|
|
+name: main
|
|
|
+on:
|
|
|
+ push:
|
|
|
+jobs:
|
|
|
+ main:
|
|
|
+ runs-on: ubuntu-latest
|
|
|
+ steps:
|
|
|
+ - run: echo hi
|
|
|
+"""
|
|
|
+
|
|
|
+ action_src = """\
|
|
|
+name: my-action
|
|
|
+inputs:
|
|
|
+ arg:
|
|
|
+ required: true
|
|
|
+
|
|
|
+runs:
|
|
|
+ using: composite
|
|
|
+ steps:
|
|
|
+ - run: echo hi
|
|
|
+ shell: bash
|
|
|
+"""
|
|
|
+
|
|
|
+ workflow.write_text(workflow_src)
|
|
|
+ action.write_text(action_src)
|
|
|
+
|
|
|
+ assert main(("actions/whatever", "v1.2.3", f"--base-dir={base}")) == 0
|
|
|
+ out, err = capsys.readouterr()
|
|
|
+ assert out == err == ""
|
|
|
+
|
|
|
+
|
|
|
+def test_main_upgrades_action(workflow_and_action, capsys):
|
|
|
+ base, workflow, action = workflow_and_action
|
|
|
+
|
|
|
+ workflow_src = """\
|
|
|
+name: main
|
|
|
+on:
|
|
|
+ push:
|
|
|
+jobs:
|
|
|
+ main:
|
|
|
+ runs-on: ubuntu-latest
|
|
|
+ steps:
|
|
|
+ - uses: actions/whatever@v0.1.2
|
|
|
+"""
|
|
|
+ workflow_expected = """\
|
|
|
+name: main
|
|
|
+on:
|
|
|
+ push:
|
|
|
+jobs:
|
|
|
+ main:
|
|
|
+ runs-on: ubuntu-latest
|
|
|
+ steps:
|
|
|
+ - uses: actions/whatever@v1.2.3
|
|
|
+"""
|
|
|
+
|
|
|
+ action_src = """\
|
|
|
+name: my-action
|
|
|
+inputs:
|
|
|
+ arg:
|
|
|
+ required: true
|
|
|
+
|
|
|
+runs:
|
|
|
+ using: composite
|
|
|
+ steps:
|
|
|
+ - uses: actions/whatever@v0.1.2
|
|
|
+"""
|
|
|
+ action_expected = """\
|
|
|
+name: my-action
|
|
|
+inputs:
|
|
|
+ arg:
|
|
|
+ required: true
|
|
|
+
|
|
|
+runs:
|
|
|
+ using: composite
|
|
|
+ steps:
|
|
|
+ - uses: actions/whatever@v1.2.3
|
|
|
+"""
|
|
|
+
|
|
|
+ workflow.write_text(workflow_src)
|
|
|
+ action.write_text(action_src)
|
|
|
+
|
|
|
+ with mock.patch.object(subprocess, "call", return_value=123):
|
|
|
+ assert main(("actions/whatever", "v1.2.3", f"--base-dir={base}")) == 123
|
|
|
+
|
|
|
+ out, err = capsys.readouterr()
|
|
|
+ assert (
|
|
|
+ out
|
|
|
+ == f"""\
|
|
|
+{workflow} upgrading actions/whatever...
|
|
|
+{action} upgrading actions/whatever...
|
|
|
+freezing...
|
|
|
+"""
|
|
|
+ )
|
|
|
+
|
|
|
+ assert workflow.read_text() == workflow_expected
|
|
|
+ assert action.read_text() == action_expected
|