Skip to content

Commit 3efb0b1

Browse files
committed
Merge remote-tracking branch 'origin/dev' into feat/mudblazor
2 parents 7ddd755 + 94eaf13 commit 3efb0b1

227 files changed

Lines changed: 4419 additions & 2048 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/scripts/test_update_dependency_changes.py

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import os
1515
sys.path.insert(0, os.path.dirname(__file__))
1616

17-
from update_dependency_changes import merge_changes, render_section, normalize_version, extract_preamble
17+
from update_dependency_changes import merge_changes, render_section, normalize_version, extract_preamble, bump_patch_if_released
1818

1919

2020
def test_update_then_revert():
@@ -438,6 +438,55 @@ def test_normalize_version_stable():
438438
print("✓ Passed: stable versions unchanged\n")
439439

440440

441+
def test_bump_patch_no_tag():
442+
"""Test: version tag does not exist, should return as-is."""
443+
print("Test 23: bump_patch_if_released - no tag exists")
444+
tag_exists = lambda t: False
445+
assert bump_patch_if_released("10.3.0", tag_exists) == "10.3.0"
446+
assert bump_patch_if_released("10.2.0", tag_exists) == "10.2.0"
447+
print("✓ Passed: version unchanged when tag does not exist\n")
448+
449+
450+
def test_bump_patch_tag_exists():
451+
"""Test: version tag exists, should bump patch."""
452+
print("Test 24: bump_patch_if_released - tag exists")
453+
existing_tags = {"10.3.0"}
454+
tag_exists = lambda t: t in existing_tags
455+
assert bump_patch_if_released("10.3.0", tag_exists) == "10.3.1", \
456+
f"Expected '10.3.1', got: {bump_patch_if_released('10.3.0', tag_exists)}"
457+
print("✓ Passed: version bumped to 10.3.1\n")
458+
459+
460+
def test_bump_patch_multiple_tags():
461+
"""Test: multiple consecutive tags exist, should bump past all."""
462+
print("Test 25: bump_patch_if_released - multiple tags exist")
463+
existing_tags = {"10.3.0", "10.3.1", "10.3.2"}
464+
tag_exists = lambda t: t in existing_tags
465+
assert bump_patch_if_released("10.3.0", tag_exists) == "10.3.3", \
466+
f"Expected '10.3.3', got: {bump_patch_if_released('10.3.0', tag_exists)}"
467+
print("✓ Passed: version bumped past all existing tags\n")
468+
469+
470+
def test_bump_patch_prerelease_skipped():
471+
"""Test: pre-release versions should not be bumped."""
472+
print("Test 26: bump_patch_if_released - pre-release skipped")
473+
tag_exists = lambda t: True # all tags "exist"
474+
assert bump_patch_if_released("10.3.0-rc.1", tag_exists) == "10.3.0-rc.1"
475+
assert bump_patch_if_released("10.3.0-rc.2", tag_exists) == "10.3.0-rc.2"
476+
assert bump_patch_if_released("10.3.0-preview", tag_exists) == "10.3.0-preview"
477+
print("✓ Passed: pre-release versions not bumped\n")
478+
479+
480+
def test_bump_patch_non_zero_patch():
481+
"""Test: version with non-zero patch, tag exists, should bump."""
482+
print("Test 27: bump_patch_if_released - non-zero patch version")
483+
existing_tags = {"10.3.1"}
484+
tag_exists = lambda t: t in existing_tags
485+
assert bump_patch_if_released("10.3.1", tag_exists) == "10.3.2", \
486+
f"Expected '10.3.2', got: {bump_patch_if_released('10.3.1', tag_exists)}"
487+
print("✓ Passed: non-zero patch correctly bumped\n")
488+
489+
441490
def run_all_tests():
442491
"""Run all test cases."""
443492
print("=" * 70)
@@ -466,9 +515,14 @@ def run_all_tests():
466515
test_normalize_version_preview()
467516
test_normalize_version_rc()
468517
test_normalize_version_stable()
518+
test_bump_patch_no_tag()
519+
test_bump_patch_tag_exists()
520+
test_bump_patch_multiple_tags()
521+
test_bump_patch_prerelease_skipped()
522+
test_bump_patch_non_zero_patch()
469523

470524
print("=" * 70)
471-
print("All 22 tests passed! ✓")
525+
print("All 27 tests passed! ✓")
472526
print("=" * 70)
473527
print("\nTest coverage summary:")
474528
print(" ✓ Basic scenarios (update, add, remove)")
@@ -478,6 +532,7 @@ def run_all_tests():
478532
print(" ✓ Document format validation")
479533
print(" ✓ Preamble extraction (SEO block, no preamble, no heading)")
480534
print(" ✓ Version normalization (preview -> rc.1)")
535+
print(" ✓ Patch version bump when tag already released")
481536
print("=" * 70)
482537

483538

.github/scripts/update_dependency_changes.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,55 @@ def normalize_version(version):
2525
return version
2626

2727

28+
def check_tag_exists(tag):
29+
"""Check if a git tag exists on the remote."""
30+
result = subprocess.run(
31+
["git", "ls-remote", "--exit-code", "--tags", "origin", f"refs/tags/{tag}"],
32+
capture_output=True,
33+
text=True,
34+
)
35+
if result.returncode == 0:
36+
return True
37+
if result.returncode == 2:
38+
return False
39+
40+
stderr = (result.stderr or "").strip()
41+
raise RuntimeError(
42+
f"Failed to check whether git tag '{tag}' exists on remote 'origin' "
43+
f"(exit code {result.returncode}): {stderr or 'No error output provided.'}"
44+
)
45+
46+
47+
def bump_patch_if_released(version, tag_exists_fn=None):
48+
"""If the version tag already exists, bump the patch version.
49+
50+
Only applies to stable versions (no pre-release suffix like -rc.N).
51+
"""
52+
if tag_exists_fn is None:
53+
tag_exists_fn = check_tag_exists
54+
55+
# Only bump stable versions (no pre-release suffix)
56+
if "-" in version:
57+
return version
58+
59+
parts = version.split(".")
60+
if len(parts) != 3:
61+
return version
62+
63+
major, minor = parts[0], parts[1]
64+
try:
65+
patch = int(parts[2])
66+
except ValueError:
67+
return version
68+
69+
current = version
70+
while tag_exists_fn(current):
71+
patch += 1
72+
current = f"{major}.{minor}.{patch}"
73+
74+
return current
75+
76+
2877
def get_version():
2978
"""Read the current version from common.props."""
3079
try:
@@ -296,6 +345,9 @@ def main():
296345
print("Could not read version from common.props.")
297346
sys.exit(1)
298347

348+
version = bump_patch_if_released(version)
349+
print(f"Resolved version: {version}")
350+
299351
diff = get_diff(base_ref)
300352
if not diff:
301353
print("No diff found for Directory.Packages.props.")

Directory.Packages.props

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
<PackageVersion Include="Azure.Identity" Version="1.14.2" />
2020
<PackageVersion Include="Azure.Messaging.ServiceBus" Version="7.20.1" />
2121
<PackageVersion Include="Azure.Storage.Blobs" Version="12.25.0" />
22-
<PackageVersion Include="Blazorise" Version="2.0.0" />
23-
<PackageVersion Include="Blazorise.Components" Version="2.0.0" />
24-
<PackageVersion Include="Blazorise.DataGrid" Version="2.0.0" />
25-
<PackageVersion Include="Blazorise.Snackbar" Version="2.0.0" />
22+
<PackageVersion Include="Blazorise" Version="2.0.4" />
23+
<PackageVersion Include="Blazorise.Components" Version="2.0.4" />
24+
<PackageVersion Include="Blazorise.DataGrid" Version="2.0.4" />
25+
<PackageVersion Include="Blazorise.Snackbar" Version="2.0.4" />
2626
<PackageVersion Include="MudBlazor" Version="8.0.0" />
2727
<PackageVersion Include="Castle.Core" Version="5.2.1" />
2828
<PackageVersion Include="Castle.Core.AsyncInterceptor" Version="2.1.0" />
@@ -175,7 +175,7 @@
175175
<PackageVersion Include="System.Linq.Dynamic.Core" Version="1.6.7" />
176176
<PackageVersion Include="System.Linq.Queryable" Version="4.3.0" />
177177
<PackageVersion Include="System.Runtime.Loader" Version="4.3.0" />
178-
<PackageVersion Include="System.Security.Cryptography.Xml" Version="10.0.2" />
178+
<PackageVersion Include="System.Security.Cryptography.Xml" Version="10.0.6" />
179179
<PackageVersion Include="System.Security.Permissions" Version="10.0.2" />
180180
<PackageVersion Include="System.Security.Principal.Windows" Version="5.0.0" />
181181
<PackageVersion Include="System.Text.Encoding.CodePages" Version="10.0.2" />
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# ABP.IO Platform 10.3 Final Has Been Released!
2+
3+
We are glad to announce that [ABP](https://abp.io/) 10.3 stable version has been released.
4+
5+
## What's New With Version 10.3?
6+
7+
All the new features were explained in detail in the [10.3 RC Announcement Post](https://abp.io/community/announcements/announcing-abp-10-3-release-candidate-hgnpr9jq), so there is no need to review them again. You can check it out for more details.
8+
9+
## Getting Started with 10.3
10+
11+
### How to Upgrade an Existing Solution
12+
13+
You can upgrade your existing solutions with either ABP Studio or ABP CLI. In the following sections, both approaches are explained:
14+
15+
### Upgrading via ABP Studio
16+
17+
If you are already using the ABP Studio, you can upgrade it to the latest version. ABP Studio periodically checks for updates in the background, and when a new version of ABP Studio is available, you will be notified through a modal. Then, you can update it by confirming the opened modal. See [the documentation](https://abp.io/docs/latest/studio/installation#upgrading) for more info.
18+
19+
After upgrading the ABP Studio, then you can open your solution in the application, and simply click the **Upgrade ABP Packages** action button to instantly upgrade your solution:
20+
21+
![](upgrade-abp-packages.png)
22+
23+
### Upgrading via ABP CLI
24+
25+
Alternatively, you can upgrade your existing solution via ABP CLI. First, you need to install the ABP CLI or upgrade it to the latest version.
26+
27+
If you haven't installed it yet, you can run the following command:
28+
29+
```bash
30+
dotnet tool install -g Volo.Abp.Studio.Cli
31+
```
32+
33+
Or to update the existing CLI, you can run the following command:
34+
35+
```bash
36+
dotnet tool update -g Volo.Abp.Studio.Cli
37+
```
38+
39+
After installing/updating the ABP CLI, you can use the [`update` command](https://abp.io/docs/latest/CLI#update) to update all the ABP related NuGet and NPM packages in your solution as follows:
40+
41+
```bash
42+
abp update
43+
```
44+
45+
You can run this command in the root folder of your solution to update all ABP related packages.
46+
47+
## Migration Guides
48+
49+
There are some important changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v10.2 or earlier versions: [ABP Version 10.3 Migration Guide](https://abp.io/docs/10.3/release-info/migration-guides/abp-10-3)
50+
51+
## Community News
52+
53+
### New ABP Community Articles
54+
55+
As always, exciting articles have been contributed by the ABP community. I will highlight some of them here:
56+
57+
- [Liming Ma](https://abp.io/community/members/maliming) has published 6 new posts:
58+
- [Dynamic Events in ABP](https://abp.io/community/articles/dynamic-events-in-abp-dukq95m1)
59+
- [Dynamic Background Jobs and Workers in ABP](https://abp.io/community/articles/dynamic-background-jobs-and-workers-in-abp-wfdkdsq9)
60+
- [Shared User Accounts in ABP Multi-Tenancy](https://abp.io/community/articles/shared-user-accounts-in-abp-multitenancy-mf3bkg79)
61+
- [Secure Client Authentication with private_key_jwt in ABP 10.3](https://abp.io/community/articles/secure-client-authentication-with-privatekeyjwt-in-abp-b2rf18bc)
62+
- [Operation Rate Limiting in ABP Framework](https://abp.io/community/articles/operation-rate-limiting-in-abp-framework-f4jtd6sn)
63+
- [Resource-Based Authorization in ABP Framework](https://abp.io/community/articles/resourcebased-authorization-in-abp-framework-choku1sn)
64+
- [One Endpoint, Many AI Clients: Turning ABP Workspaces into OpenAI-Compatible Models](https://abp.io/community/articles/turning-abp-workspaces-into-openai-compatible-endpoints-u3ls1gp4) by [Engincan Veske](https://abp.io/community/members/EngincanV)
65+
- [Automatically Validate Your Documentation: How We Built a Tutorial Validator](https://abp.io/community/articles/automatically-validate-your-documentation-m3ozgkhv) by [Mansur Besleney](https://abp.io/community/members/mansur.besleney)
66+
- [Automate Localhost Access for Expo: A Guide to Dynamic Cloudflare Tunnels & Dev Builds](https://abp.io/community/articles/automate-localhost-access-for-expo-a-guide-to-dynamic-7cblqtj3) by [Sumeyye Kurtulus](https://abp.io/community/members/sumeyye.kurtulus)
67+
68+
Thanks to the ABP Community for all the content they have published. You can also [post your ABP related (text or video) content](https://abp.io/community/posts/create) to the ABP Community.
69+
70+
## About the Next Version
71+
72+
The next feature version will be 10.4. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version.
467 KB
Loading
16.4 KB
Loading

0 commit comments

Comments
 (0)