Files
dnshelper/bump-version.ps1
T
dyoder f0ce5a4042 feat: Implement platform-specific hosts file path retrieval
- Created a new `platform` package to handle OS-specific hosts file paths.
- Added implementations for macOS, Linux, and Windows to retrieve the hosts file path.
- Introduced tests for the `GetHostsFilePath` function to ensure correct behavior across platforms.

feat: Add DNS resolver for IP lookups

- Implemented a `resolver` package for performing DNS lookups.
- Created a `DNSResolver` struct with a `LookupIP` method to handle A-record lookups and CNAME resolution.
- Added comprehensive tests for various DNS scenarios, including CNAME chains and error handling.

chore: Refactor project structure and update dependencies

- Restructured the project to follow Go's standard package layout.
- Updated `go.mod` to Go 1.20 and added `golang.org/x/net` dependency.
- Removed old source files and ensured a clean build with all tests passing.
2026-03-03 18:37:02 -05:00

148 lines
4.6 KiB
PowerShell

# Bump Version Script for dns-helper
# Automatically increments version based on semantic versioning
#
# USAGE:
# .\bump-version.ps1 -Bump patch # 1.0.0 -> 1.0.1 (creates and pushes git tag)
# .\bump-version.ps1 -Bump minor # 1.0.1 -> 1.1.0 (creates and pushes git tag)
# .\bump-version.ps1 -Bump major # 1.1.0 -> 2.0.0 (creates and pushes git tag)
# .\bump-version.ps1 -Bump patch -NoPush # Create tag locally only, don't push
# .\bump-version.ps1 -Bump patch -DryRun # Display only, don't create tag
#
# EXAMPLES:
# # Bug fix release
# .\bump-version.ps1 -Bump patch
#
# # New feature release
# .\bump-version.ps1 -Bump minor
#
# # Breaking change release
# .\bump-version.ps1 -Bump major
#
# # Preview what would happen
# .\bump-version.ps1 -Bump minor -DryRun
param(
[Parameter(Mandatory=$true)]
[ValidateSet('major','minor','patch')]
[string]$Bump,
[Parameter(Mandatory=$false)]
[switch]$NoPush,
[Parameter(Mandatory=$false)]
[switch]$DryRun
)
$ErrorActionPreference = "Stop"
Write-Host "============================================" -ForegroundColor Cyan
Write-Host " dns-helper" -ForegroundColor Cyan
Write-Host " Version Bump" -ForegroundColor Cyan
Write-Host "============================================" -ForegroundColor Cyan
Write-Host ""
# Get current version from git tags
Write-Host "Fetching current version from git tags..." -ForegroundColor Gray
$currentTag = git describe --tags --abbrev=0 2>$null
if (-not $currentTag) {
$currentTag = "v0.0.0"
Write-Host "No existing tags found. Starting from v0.0.0" -ForegroundColor Yellow
}
Write-Host "Current version: $currentTag" -ForegroundColor Cyan
# Parse version (remove 'v' prefix if present)
$version = $currentTag -replace '^v', ''
$parts = $version -split '\.'
if ($parts.Count -ne 3) {
Write-Host "Error: Invalid version format '$currentTag'. Expected format: v1.2.3" -ForegroundColor Red
exit 1
}
$major = [int]$parts[0]
$minor = [int]$parts[1]
$patch = [int]$parts[2]
# Bump version based on type
Write-Host "Bumping $Bump version..." -ForegroundColor Gray
switch ($Bump) {
'major' {
$major++
$minor = 0
$patch = 0
Write-Host " Major version bump (breaking changes)" -ForegroundColor Yellow
}
'minor' {
$minor++
$patch = 0
Write-Host " Minor version bump (new features)" -ForegroundColor Green
}
'patch' {
$patch++
Write-Host " Patch version bump (bug fixes)" -ForegroundColor Blue
}
}
$newVersion = "v$major.$minor.$patch"
Write-Host ""
Write-Host "Version Update:" -ForegroundColor White
Write-Host " From: $currentTag" -ForegroundColor Red
Write-Host " To: $newVersion" -ForegroundColor Green
Write-Host ""
# Create git tag unless dry run
if ($DryRun) {
Write-Host "[DRY RUN] Would create git tag: $newVersion" -ForegroundColor Yellow
Write-Host "Run without -DryRun to create the tag." -ForegroundColor Gray
} else {
Write-Host "Creating git tag $newVersion..." -ForegroundColor Gray
# Check for uncommitted changes
$status = git status --porcelain
if ($status) {
Write-Host "Warning: You have uncommitted changes:" -ForegroundColor Yellow
Write-Host $status -ForegroundColor Yellow
Write-Host ""
$response = Read-Host "Continue with tag creation? (y/N)"
if ($response -ne 'y' -and $response -ne 'Y') {
Write-Host "Tag creation cancelled." -ForegroundColor Red
exit 1
}
}
# Create the tag
try {
git tag -a $newVersion -m "Release $newVersion"
Write-Host "[OK] Tag created: $newVersion" -ForegroundColor Green
# Push unless -NoPush specified
if (-not $NoPush) {
Write-Host "Pushing tag to origin..." -ForegroundColor Gray
git push origin $newVersion
Write-Host "[OK] Tag pushed to origin" -ForegroundColor Green
} else {
Write-Host ""
Write-Host "Tag created locally. To push it, run:" -ForegroundColor Yellow
Write-Host " git push origin $newVersion" -ForegroundColor White
}
}
catch {
Write-Host "Error creating/pushing tag: $_" -ForegroundColor Red
exit 1
}
}
Write-Host ""
Write-Host "Next steps:" -ForegroundColor Cyan
Write-Host " 1. Build release: .\build.ps1 -Release -Package" -ForegroundColor White
Write-Host " 2. Test the build: .\build\dns-helper.exe --help" -ForegroundColor White
Write-Host ""
# Output the new version for CI/CD pipelines
Write-Host "NEW_VERSION=$newVersion" -ForegroundColor Magenta
Write-Output $newVersion