PrettyScreenSHOT uses a custom semantic versioning scheme optimized for continuous integration and deployment.
The version follows the format: MAJOR.MINOR.PATCH
However, we use specific values for each component to indicate the type of build:
Format: 0.0.<BUILD_NUMBER>
- Purpose: Continuous integration builds from every commit
- Build Number: Automatically incremented by CI/CD (GitHub Actions run number)
- Examples:
0.0.1,0.0.2,0.0.42,0.0.150 - Trigger: Automatic on every push to branches
- Artifacts: Available as CI build artifacts
Usage:
# These are created automatically by CI/CD
# No manual tagging requiredFormat: 0.<RELEASE_NUMBER>.0
- Purpose: Beta releases and pre-release versions for testing
- Release Number: Manually incremented for each beta release
- Examples:
0.1.0,0.2.0,0.5.0 - Trigger: Git tag with format
v0.X.0 - Artifacts: GitHub Release (marked as pre-release)
Usage:
# Create a beta release
git tag v0.1.0
git push origin v0.1.0
# The workflow will:
# - Build the release
# - Create ZIP archives
# - Generate checksums
# - Create GitHub Release (pre-release)Format: <MAJOR_VERSION>.0.0
- Purpose: Stable production releases
- Major Version: Incremented for major releases (1.0.0, 2.0.0, 3.0.0, etc.)
- Examples:
1.0.0,2.0.0,3.0.0 - Trigger: Git tag with format
vX.0.0 - Artifacts: GitHub Release (full release)
Usage:
# Create a production release
git tag v1.0.0
git push origin v1.0.0
# The workflow will:
# - Build the release
# - Create ZIP archives
# - Generate checksums
# - Create GitHub Release (production)The CI/CD pipeline automatically determines the version type:
| Pattern | Type | Pre-release | Example |
|---|---|---|---|
X.0.0 (X ≥ 1) |
Production | ❌ No | 1.0.0, 2.0.0 |
0.X.0 (X ≥ 1) |
Beta/Pre-release | ✅ Yes | 0.1.0, 0.2.0 |
0.0.X |
Development | ✅ Yes | 0.0.42, 0.0.100 |
The base version in the project file is set to 0.0.0:
<AssemblyVersion>0.0.0</AssemblyVersion>
<FileVersion>0.0.0</FileVersion>
<Version>0.0.0</Version>This is overridden at build time by the CI/CD pipeline.
- name: Set development build version
run: |
$buildNumber = "${{ github.run_number }}"
$version = "0.0.$buildNumber"
echo "BUILD_VERSION=$version" >> $env:GITHUB_ENV
- name: Build solution
run: dotnet build /p:Version=${{ env.BUILD_VERSION }}- name: Extract and validate version
run: |
$version = "${{ github.ref_name }}".TrimStart('v')
# Automatically determines if production, beta, or dev0.0.1 ← First development build
0.0.2 ← Second development build
...
0.0.42 ← 42nd development build
0.1.0 ← First beta release
0.0.43 ← Development continues...
0.0.50 ← More development
0.2.0 ← Second beta release
0.0.51 ← Development continues...
1.0.0 ← First production release! 🎉
1.0.1 ← Patch release (if needed)
0.0.52 ← Development for next version
2.0.0 ← Second major release
# Development builds - automatic, no action needed
# Every push triggers a 0.0.X build
# Beta release
git tag v0.1.0 -m "First beta release"
git push origin v0.1.0
# Production release
git tag v1.0.0 -m "First production release"
git push origin v1.0.0This versioning scheme provides:
- Clear Build Tracking - Every CI build has a unique version
- Automatic Versioning - No manual intervention for dev builds
- Pre-release Identification - Clear distinction between beta and production
- Semantic Meaning - Version number indicates release type at a glance
- CI/CD Integration - Works seamlessly with GitHub Actions
If upgrading from an older versioning scheme:
- Current version
0.0.1becomes the starting point - Next development build will be
0.0.<NEXT_BUILD_NUMBER> - First beta release should be
0.1.0 - First production release should be
1.0.0
A: Standard semver doesn't clearly distinguish between development builds, beta releases, and production releases. Our scheme makes this distinction explicit and automatic.
A: For production releases, use standard semver: 1.0.1, 1.0.2, etc. The pipeline will detect this as a custom version.
A: Yes! For tags like v0.1.0-alpha or v1.0.0-rc1, the pipeline will automatically mark them as pre-releases.
A: Check the executable properties or use --version flag (if implemented). The version is embedded during build.
Last Updated: 2025-11-16 Scheme Version: 1.0 Status: Active