Skip to content

Commit b3a1f93

Browse files
committed
Merge branch 'release-candidate' into release
2 parents b3ec82a + 9c21aff commit b3a1f93

File tree

4 files changed

+113
-18
lines changed

4 files changed

+113
-18
lines changed

.github/workflows/test.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
name: Run tests
2+
3+
on:
4+
pull_request:
5+
6+
jobs:
7+
run-tests:
8+
runs-on: ubuntu-latest
9+
strategy:
10+
matrix:
11+
python-version: [3.8, 3.11]
12+
13+
steps:
14+
- uses: actions/checkout@v2
15+
- uses: actions/setup-python@v2
16+
with:
17+
python-version: ${{ matrix.python-version }}
18+
- name: Install dependencies
19+
run: |
20+
python -m pip install --upgrade pip .
21+
- name: Run tests
22+
run: |
23+
python -m unittest

VERSION.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.2.4.2
1+
0.2.4.3

test.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import json
2+
import subprocess
3+
import unittest
4+
5+
6+
# ufbt invokation & json status output
7+
def ufbt_status() -> dict:
8+
# Call "ufbt status --json" and return the parsed json
9+
try:
10+
status = subprocess.check_output(["ufbt", "status", "--json"])
11+
except subprocess.CalledProcessError as e:
12+
status = e.output
13+
return json.loads(status)
14+
15+
16+
def ufbt_exec(args):
17+
# Call "ufbt" with the given args and return the parsed json
18+
return subprocess.check_output(["ufbt"] + args)
19+
20+
21+
# Test initial deployment
22+
class TestInitialDeployment(unittest.TestCase):
23+
def test_default_deployment(self):
24+
ufbt_exec(["clean"])
25+
status = ufbt_status()
26+
self.assertEqual(status.get("error"), "SDK is not deployed")
27+
28+
ufbt_exec(["update"])
29+
status = ufbt_status()
30+
self.assertIsNone(status.get("error"))
31+
self.assertEqual(status.get("target"), "f7")
32+
self.assertEqual(status.get("mode"), "channel")
33+
self.assertEqual(status.get("details", {}).get("channel"), "release")
34+
35+
def test_customized_deployment(self):
36+
ufbt_exec(["clean"])
37+
status = ufbt_status()
38+
self.assertEqual(status.get("error"), "SDK is not deployed")
39+
40+
ufbt_exec(["update", "-t", "f18", "-c", "rc"])
41+
status = ufbt_status()
42+
self.assertIsNone(status.get("error"))
43+
self.assertEqual(status.get("target"), "f18")
44+
self.assertEqual(status.get("mode"), "channel")
45+
self.assertEqual(status.get("details", {}).get("channel"), "rc")
46+
self.assertIn("rc", status.get("version", ""))
47+
48+
def test_target_switch(self):
49+
ufbt_exec(["clean"])
50+
status = ufbt_status()
51+
self.assertEqual(status.get("error"), "SDK is not deployed")
52+
53+
ufbt_exec(["update"])
54+
status = ufbt_status()
55+
self.assertEqual(status.get("target"), "f7")
56+
57+
ufbt_exec(["update", "-t", "f18"])
58+
status = ufbt_status()
59+
self.assertEqual(status.get("target"), "f18")
60+
self.assertEqual(status.get("mode"), "channel")
61+
self.assertEqual(status.get("details", {}).get("channel"), "release")
62+
63+
def test_target_mode_switches(self):
64+
ufbt_exec(["clean"])
65+
status = ufbt_status()
66+
self.assertEqual(status.get("error"), "SDK is not deployed")
67+
68+
ufbt_exec(["update"])
69+
status = ufbt_status()
70+
self.assertEqual(status.get("target"), "f7")
71+
72+
ufbt_exec(["update", "-t", "f18"])
73+
status = ufbt_status()
74+
self.assertEqual(status.get("target"), "f18")
75+
self.assertEqual(status.get("mode"), "channel")
76+
77+
ufbt_exec(["update", "-b", "dev"])
78+
status = ufbt_status()
79+
self.assertEqual(status.get("target"), "f18")
80+
self.assertEqual(status.get("mode"), "branch")
81+
self.assertEqual(status.get("details", {}).get("branch"), "dev")
82+
83+
previous_status = status
84+
ufbt_exec(["update"])
85+
status = ufbt_status()
86+
self.assertEqual(previous_status, status)

ufbt/bootstrap.py

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -597,25 +597,11 @@ def _add_arguments(self, parser: argparse.ArgumentParser) -> None:
597597

598598
def _func(self, args) -> int:
599599
sdk_deployer = UfbtSdkDeployer(args.ufbt_home)
600-
current_task = SdkDeployTask.from_args(args)
601-
task_to_deploy = None
602600

603-
if previous_task := sdk_deployer.get_previous_task():
604-
previous_task.update_from(current_task)
605-
task_to_deploy = previous_task
606-
else:
607-
if current_task.mode:
608-
task_to_deploy = current_task
609-
# No previous state, use default hw target
610-
if task_to_deploy and not task_to_deploy.hw_target:
611-
task_to_deploy.hw_target = SdkDeployTask.DEFAULT_HW_TARGET
612-
else:
613-
log.warn("No previous SDK state was found, fetching latest release")
614-
task_to_deploy = SdkDeployTask.default()
601+
task_to_deploy = sdk_deployer.get_previous_task() or SdkDeployTask.default()
602+
task_to_deploy.update_from(SdkDeployTask.from_args(args))
615603

616-
if not sdk_deployer.deploy(task_to_deploy):
617-
return 1
618-
return 0
604+
return 0 if sdk_deployer.deploy(task_to_deploy) else 1
619605

620606

621607
class CleanSubcommand(CliSubcommand):

0 commit comments

Comments
 (0)