Skip to content

Commit f9f362f

Browse files
committed
Merge branch 'develop' into feature/gpg_signing
2 parents 3632765 + f59b3dc commit f9f362f

File tree

91 files changed

+7216
-2444
lines changed

Some content is hidden

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

91 files changed

+7216
-2444
lines changed

.claude/settings.local.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
"Bash(touch:*)",
1515
"Bash(git log:*)",
1616
"Bash(git cherry-pick:*)",
17-
"Bash(find:*)"
17+
"Bash(find:*)",
18+
"Bash(dotnet test:*)",
19+
"Bash(git add:*)"
1820
],
1921
"deny": [],
2022
"ask": [],

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,4 @@ jobs:
7676
uses: actions/upload-artifact@v4
7777
with:
7878
name: sourcegit.${{ matrix.runtime }}
79-
path: publish/*
79+
path: publish/*

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
uses: actions/checkout@v4
2121
- name: Output version string
2222
id: version
23-
run: echo "version=$(cat VERSION)" >> "$GITHUB_OUTPUT"
23+
run: echo "version=$(cat VERSION 2>/dev/null || echo 'dev-build')" >> "$GITHUB_OUTPUT"
2424
package:
2525
needs: [build, version]
2626
name: Package

.github/workflows/localization-check.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,19 @@ on:
1010
jobs:
1111
localization-check:
1212
runs-on: ubuntu-latest
13+
permissions:
14+
contents: write
1315

1416
steps:
1517
- name: Checkout repository
1618
uses: actions/checkout@v4
19+
with:
20+
token: ${{ secrets.GITHUB_TOKEN }}
1721

1822
- name: Set up Node.js
1923
uses: actions/setup-node@v4
2024
with:
21-
node-version: '20.x'
25+
node-version: '22.x'
2226

2327
- name: Install dependencies
2428

.github/workflows/package.yml

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,36 @@ jobs:
5050
with:
5151
name: sourcegit.${{ matrix.runtime }}
5252
path: build
53-
- name: Package
53+
- name: Package as ZIP (unsigned)
5454
env:
5555
VERSION: ${{ inputs.version }}
5656
RUNTIME: ${{ matrix.runtime }}
5757
run: |
5858
mkdir build/SourceGit
5959
tar -xf "build/sourcegit.${{ matrix.runtime }}.tar" -C build/SourceGit
6060
./build/scripts/package.osx-app.sh
61-
- name: Upload package artifact
61+
- name: Package as DMG (signed if certificates available)
62+
env:
63+
VERSION: ${{ inputs.version }}
64+
RUNTIME: ${{ matrix.runtime }}
65+
MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }}
66+
MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERTIFICATE_PWD }}
67+
APPLE_ID: ${{ secrets.APPLE_ID }}
68+
NOTARIZE_PASSWORD: ${{ secrets.NOTARIZE_PASSWORD }}
69+
TEAM_ID: ${{ secrets.TEAM_ID }}
70+
run: |
71+
# Re-extract for DMG (clean state)
72+
rm -rf build/SourceGit
73+
mkdir build/SourceGit
74+
tar -xf "build/sourcegit.${{ matrix.runtime }}.tar" -C build/SourceGit
75+
./build/scripts/package.osx-dmg.sh
76+
- name: Upload package artifacts
6277
uses: actions/upload-artifact@v4
6378
with:
6479
name: package.${{ matrix.runtime }}
65-
path: build/sourcegit_*.zip
80+
path: |
81+
build/sourcegit_*.zip
82+
build/sourcegit_*.dmg
6683
- name: Delete temp artifacts
6784
uses: geekyeggo/delete-artifact@v5
6885
with:
@@ -108,4 +125,4 @@ jobs:
108125
- name: Delete temp artifacts
109126
uses: geekyeggo/delete-artifact@v5
110127
with:
111-
name: sourcegit.${{ matrix.runtime }}
128+
name: sourcegit.${{ matrix.runtime }}

.github/workflows/release.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,12 @@ jobs:
3838
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3939
TAG: ${{ github.ref_name }}
4040
VERSION: ${{ needs.version.outputs.version }}
41-
run: gh release create "$TAG" -t "$VERSION" --notes-from-tag
41+
run: |
42+
if gh release view "$TAG" > /dev/null 2>&1; then
43+
echo "Release $TAG already exists, skipping creation"
44+
else
45+
gh release create "$TAG" -t "$VERSION" --notes-from-tag
46+
fi
4247
- name: Download artifacts
4348
uses: actions/download-artifact@v4
4449
with:

CHANGELOG.md

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
# Changelog
2+
3+
All notable changes to the Iniationware Edition of SourceGit will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [v2025.34.10] - 2025-09-14
9+
10+
### Added
11+
- macOS DMG packaging with code signing and notarization support
12+
- Comprehensive documentation (README, CHANGELOG, RELEASE_NOTES)
13+
- Documentation hub in docs/README.md
14+
- macOS signing setup guide
15+
- Linux-compatible versioning format (removed hyphens)
16+
- Pre-tag validation script for quality assurance
17+
- Code formatting standards enforcement
18+
19+
### Changed
20+
- Version format from v{YEAR}.{WEEK}-IW.{X} to v{YEAR}.{WEEK}.{X}
21+
- Restored Ubuntu 20.04 containers for working ARM64 cross-compilation
22+
- Fixed GitHub Actions workflows for reliable builds
23+
- Updated README with Iniationware Edition branding
24+
25+
### Fixed
26+
- Linux package compatibility issues (AppImage, DEB, RPM)
27+
- Git permission issues in CI/CD containers
28+
- Release asset creation failures
29+
30+
## [v2025.34-IW.9] - 2025-09-14
31+
32+
### Added
33+
- Code formatting fixes across entire codebase
34+
35+
### Fixed
36+
- Whitespace and indentation issues
37+
- Missing final newlines in source files
38+
39+
## [v2025.34-IW.8] - 2025-09-14
40+
41+
### Added
42+
- Repository metrics dashboard
43+
- Branch counter functionality
44+
- Commit statistics visualization
45+
46+
### Changed
47+
- Enhanced refresh operations with cache invalidation
48+
49+
## [v2025.34-IW.7] - 2025-09-09
50+
51+
### Added
52+
- Smart memory management system
53+
- Performance monitoring capabilities
54+
- Resource optimization features
55+
56+
### Fixed
57+
- Memory leaks in long-running operations
58+
- Resource exhaustion issues
59+
60+
## [v2025.34-IW.6] - 2025-09-09
61+
62+
### Added
63+
- GitCommandCache for 60-70% performance improvement
64+
- GitProcessPool for efficient process management
65+
- BatchQueryExecutor for parallel operations
66+
67+
### Changed
68+
- Optimized branch and commit operations
69+
- Implemented lazy loading strategies
70+
71+
## [v2025.34-IW.5] - 2025-09-03
72+
73+
### Added
74+
- Comprehensive shutdown improvements
75+
- Enhanced error handling and recovery
76+
77+
### Fixed
78+
- Application hang on shutdown (30+ seconds)
79+
- Background operation cleanup issues
80+
81+
## [v2025.34-IW.4] - 2025-08-16
82+
83+
### Added
84+
- Git-Flow optimization features
85+
- Enhanced credential management
86+
- Secure storage for authentication
87+
88+
### Fixed
89+
- Missing GitFlow.FinishBranch locale keys
90+
- UI update issues after Git-Flow operations
91+
92+
## [v2025.34-IW.3] - 2025-08-10
93+
94+
### Added
95+
- Initial performance optimizations
96+
- Basic caching implementation
97+
98+
## [v2025.34-IW.2] - 2025-08-05
99+
100+
### Added
101+
- Iniationware branding
102+
- Custom version display
103+
104+
### Changed
105+
- Updated application metadata
106+
- Modified update check URLs
107+
108+
## [v2025.34-IW.1] - 2025-08-01
109+
110+
### Added
111+
- Initial Iniationware Edition fork
112+
- Basic enterprise enhancements
113+
114+
### Changed
115+
- Forked from SourceGit v2025.34
116+
117+
---
118+
119+
## Version Format
120+
121+
Starting from v2025.34.10, we use a three-part version number:
122+
- **Major**: Year (2025)
123+
- **Minor**: Week number (34)
124+
- **Patch**: Iniationware increment (10, 11, 12...)
125+
126+
Previous versions used the format v{YEAR}.{WEEK}-IW.{INCREMENT} which caused issues with Linux packaging systems.

CLAUDE.md

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,102 @@ Popups inherit from `ViewModels.Popup` and use a consistent pattern:
9898
- `Popup.InvokeAsync()` shows the popup and returns result
9999

100100
### Testing Git Operations
101-
The application supports portable mode by creating a `data` folder next to the executable. This allows testing without affecting the system-wide installation.
101+
The application supports portable mode by creating a `data` folder next to the executable. This allows testing without affecting the system-wide installation.
102+
103+
## Lessons Learned
104+
105+
### Development Methodology
106+
**Divide and Conquer (Teile und Herrsche)**: When implementing new features, follow these principles:
107+
1. **Start Small**: Implement ONE small, working feature completely before expanding
108+
2. **Use Real Data**: Never use simulated/fake data - always work with actual Git commands
109+
3. **Backend First**: Build the Git command wrapper and data model before any UI
110+
4. **Test Early**: Verify functionality with real repositories before adding complexity
111+
5. **Incremental Enhancement**: Add features one at a time, testing each addition
112+
113+
### Common Pitfalls to Avoid
114+
- **Script-Kiddy Approach**: Don't try to implement everything at once with simulated data
115+
- **Missing Validation**: Always check if methods/properties exist before using them
116+
- **Protection Levels**: Respect access modifiers - don't try to access internal/protected members
117+
- **Converter Dependencies**: Verify all converters exist before referencing them in XAML
118+
- **Namespace Conflicts**: Use fully qualified names when there are ambiguous references
119+
120+
### Shutdown Performance
121+
When dealing with background operations and UI updates:
122+
- Use `CancellationTokenSource` for all long-running operations
123+
- Implement `_isUnloading` flag to prevent dispatcher operations during shutdown
124+
- Clean up event handlers properly in `OnUnloaded()`
125+
- Cancel pending operations before disposal to prevent 30+ second hangs
126+
127+
### Git Command Integration
128+
- All Git operations must inherit from `Command` class
129+
- Use `Command.Exec()` for fire-and-forget, `Command.ExecAsync()` for awaitable operations
130+
- Parse command output in `ParseResult()` override
131+
- Log all commands through `ICommandLog` interface
132+
- Handle errors gracefully with proper exception handling
133+
134+
## Versioning and Release Strategy
135+
136+
### Iniationware Version Pattern
137+
**Format**: `v{YEAR}.{WEEK}.{IW_INCREMENT}`
138+
- **Base Version**: Always use the latest official SourceGit release tag (e.g., 2025.34)
139+
- **IW Increment**: Add a third number for Iniationware releases (e.g., .10, .11, .12)
140+
- **No Hyphens**: Linux packaging requires version numbers without hyphens
141+
142+
**Examples**:
143+
- `v2025.34.10` - Tenth Iniationware release based on SourceGit v2025.34
144+
- `v2025.34.11` - Eleventh Iniationware release based on same base version
145+
- `v2025.35.1` - First Iniationware release based on SourceGit v2025.35
146+
147+
### Creating a New Release
148+
149+
#### Pre-Release Checks
150+
Before creating a tag, always run the pre-tag validation script:
151+
```bash
152+
./check_before_tag.sh
153+
```
154+
155+
This script verifies:
156+
- No uncommitted changes
157+
- Code formatting is correct (`dotnet format`)
158+
- Project builds successfully
159+
- Tests pass (if present)
160+
- Branch is up to date with remote
161+
162+
#### Creating the Tag
163+
```bash
164+
# 1. Check current version in VERSION file
165+
cat VERSION
166+
167+
# 2. Find the latest tag (new format without IW)
168+
git tag --list "v2025.34.*" | sort -V | tail -1
169+
170+
# 3. Run pre-tag checks (REQUIRED)
171+
./check_before_tag.sh
172+
173+
# 4. Update VERSION file with new version
174+
echo "2025.34.11" > VERSION
175+
176+
# 5. Commit version update
177+
git add VERSION
178+
git commit -m "chore: bump version to 2025.34.11"
179+
180+
# 6. Create new tag (note: no -IW anymore)
181+
git tag -a v2025.34.11 -m "Release description..."
182+
183+
# 7. Push changes and tag to trigger GitHub Actions workflow
184+
git push origin develop
185+
git push origin v2025.34.11
186+
```
187+
188+
### GitHub Actions Workflow
189+
The `.github/workflows/release.yml` automatically:
190+
1. Triggers on new version tags (v*)
191+
2. Builds the application for all platforms
192+
3. Creates packages (Windows, macOS, Linux)
193+
4. Publishes GitHub release with assets
194+
195+
### Important Notes
196+
- **Stay on base version**: Don't change the base version (e.g., v2025.34) unless updating to newer SourceGit
197+
- **Only increment IW number**: For Iniationware features, only increase the number after Basis-Version
198+
- **Tag triggers workflow**: Pushing a tag automatically starts the release build process
199+
- **Semantic messages**: Use clear, descriptive release notes focusing on added features

0 commit comments

Comments
 (0)