mirror of
https://github.com/dz0ny/meshcore-sar.git
synced 2026-10-09 19:55:05 +00:00
chore: Initial commit
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XPovRHpejR4zRxuhjY4Qs3
This commit is contained in:
144
Makefile
Normal file
144
Makefile
Normal file
@@ -0,0 +1,144 @@
|
||||
# MeshCore SAR Makefile
|
||||
# Version format: YYYY.MMDD.N+build (Flutter-compatible semver with date)
|
||||
# Example: 2025.1205.1+1
|
||||
|
||||
# Configuration
|
||||
APP_NAME := meshcore-sar
|
||||
PUBSPEC := pubspec.yaml
|
||||
BUILD_DIR := build/app/outputs/flutter-apk
|
||||
|
||||
# Get current date parts
|
||||
YEAR := $(shell date +%Y)
|
||||
MMDD := $(shell date +%m%d)
|
||||
|
||||
# Get current version info from pubspec.yaml
|
||||
CURRENT_VERSION := $(shell grep '^version:' $(PUBSPEC) | sed 's/version: //')
|
||||
CURRENT_BUILD_NUMBER := $(shell echo $(CURRENT_VERSION) | cut -d'+' -f2)
|
||||
|
||||
# Extract current MMDD from version (middle part)
|
||||
CURRENT_MMDD := $(shell echo $(CURRENT_VERSION) | cut -d'.' -f2)
|
||||
|
||||
# Calculate new build number
|
||||
# IMPORTANT: Build number (version code) must ALWAYS increment for Android updates
|
||||
# Never reset to 1, even on date changes
|
||||
NEW_BUILD_NUMBER := $(shell echo $$(($(CURRENT_BUILD_NUMBER) + 1)))
|
||||
|
||||
# Calculate daily sequence number (resets each day for version name readability)
|
||||
DAILY_BUILD := $(shell \
|
||||
if [ "$(CURRENT_MMDD)" = "$(MMDD)" ]; then \
|
||||
echo $(CURRENT_VERSION) | cut -d'.' -f3 | cut -d'+' -f1 | awk '{print $$1 + 1}'; \
|
||||
else \
|
||||
echo 1; \
|
||||
fi)
|
||||
|
||||
# Version format: YYYY.MMDD.DAILY+BUILD
|
||||
# DAILY resets each day (for readability), BUILD always increments (for Android)
|
||||
NEW_VERSION := $(YEAR).$(MMDD).$(DAILY_BUILD)+$(NEW_BUILD_NUMBER)
|
||||
NEW_BUILD_NAME := $(shell echo $(NEW_VERSION) | cut -d'+' -f1)
|
||||
|
||||
.PHONY: help version bump make-bump sync-ios-version build release release-android release-ios clean deps analyze test icon bundle bundle-no-bump
|
||||
|
||||
help: ## Show this help
|
||||
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
|
||||
|
||||
version: ## Show current and next version
|
||||
@echo "Current version: $(CURRENT_VERSION)"
|
||||
@echo "Current build: $(CURRENT_BUILD_NUMBER)"
|
||||
@echo "---"
|
||||
@echo "Next version: $(NEW_VERSION)"
|
||||
|
||||
bump: ## Bump version in pubspec.yaml
|
||||
@echo "Bumping version to $(NEW_VERSION)..."
|
||||
@sed -i '' 's/^version: .*/version: $(NEW_VERSION)/' $(PUBSPEC)
|
||||
@$(MAKE) sync-ios-version BUILD_NAME=$(NEW_BUILD_NAME) BUILD_NUMBER=$(NEW_BUILD_NUMBER)
|
||||
@echo "Version bumped to $(NEW_VERSION)"
|
||||
|
||||
make-bump: bump ## Alias for bump
|
||||
|
||||
sync-ios-version: ## Sync iOS FLUTTER_BUILD_NAME/NUMBER from pubspec or provided BUILD_NAME/BUILD_NUMBER
|
||||
@$(eval IOS_VERSION := $(shell grep '^version:' $(PUBSPEC) | sed 's/version: //'))
|
||||
@$(eval IOS_BUILD_NAME := $(if $(BUILD_NAME),$(BUILD_NAME),$(shell echo $(IOS_VERSION) | cut -d'+' -f1)))
|
||||
@$(eval IOS_BUILD_NUMBER := $(if $(BUILD_NUMBER),$(BUILD_NUMBER),$(shell echo $(IOS_VERSION) | cut -d'+' -f2)))
|
||||
@echo "Syncing iOS version to $(IOS_BUILD_NAME)+$(IOS_BUILD_NUMBER)..."
|
||||
@flutter build ios --config-only --build-name "$(IOS_BUILD_NAME)" --build-number "$(IOS_BUILD_NUMBER)" > /dev/null
|
||||
@echo "iOS version synced"
|
||||
|
||||
deps: ## Install dependencies
|
||||
flutter pub get
|
||||
|
||||
analyze: ## Run Flutter analyze
|
||||
flutter analyze
|
||||
|
||||
test: ## Run tests
|
||||
flutter test
|
||||
|
||||
icon: ## Generate app icons from icon.png
|
||||
dart run flutter_launcher_icons
|
||||
|
||||
build: bump ## Build release APK (auto-bumps version)
|
||||
@echo "Building release APK..."
|
||||
flutter build apk --release
|
||||
@echo "APK built: $(BUILD_DIR)/app-release.apk"
|
||||
@ls -lh $(BUILD_DIR)/app-release.apk
|
||||
|
||||
build-no-bump: ## Build release APK without bumping version
|
||||
flutter build apk --release
|
||||
@ls -lh $(BUILD_DIR)/app-release.apk
|
||||
|
||||
bundle: bump ## Build release App Bundle (auto-bumps version)
|
||||
@echo "Building release App Bundle..."
|
||||
flutter build appbundle --release
|
||||
@echo "App Bundle built: build/app/outputs/bundle/release/app-release.aab"
|
||||
@ls -lh build/app/outputs/bundle/release/app-release.aab
|
||||
|
||||
bundle-no-bump: ## Build release App Bundle without bumping version
|
||||
flutter build appbundle --release
|
||||
@ls -lh build/app/outputs/bundle/release/app-release.aab
|
||||
|
||||
release: build release-ios ## Build APK, create GitHub release, and upload iOS to TestFlight
|
||||
$(eval VERSION := $(shell grep '^version:' $(PUBSPEC) | sed 's/version: //' | cut -d'+' -f1))
|
||||
@echo "Creating GitHub release v$(VERSION)..."
|
||||
@if ! command -v gh &> /dev/null; then \
|
||||
echo "Error: GitHub CLI (gh) not installed. Install with: brew install gh"; \
|
||||
exit 1; \
|
||||
fi
|
||||
@cp $(BUILD_DIR)/app-release.apk $(BUILD_DIR)/$(APP_NAME)-$(VERSION).apk
|
||||
gh release create "v$(VERSION)" \
|
||||
"$(BUILD_DIR)/$(APP_NAME)-$(VERSION).apk#MeshCore SAR $(VERSION) APK" \
|
||||
--title "MeshCore SAR v$(VERSION)" \
|
||||
--notes "Release $(VERSION)" \
|
||||
--latest
|
||||
@echo "Release v$(VERSION) created!"
|
||||
|
||||
release-android: build ## Build APK and create GitHub release (Android only)
|
||||
$(eval VERSION := $(shell grep '^version:' $(PUBSPEC) | sed 's/version: //' | cut -d'+' -f1))
|
||||
@echo "Creating GitHub release v$(VERSION)..."
|
||||
@if ! command -v gh &> /dev/null; then \
|
||||
echo "Error: GitHub CLI (gh) not installed. Install with: brew install gh"; \
|
||||
exit 1; \
|
||||
fi
|
||||
@cp $(BUILD_DIR)/app-release.apk $(BUILD_DIR)/$(APP_NAME)-$(VERSION).apk
|
||||
gh release create "v$(VERSION)" \
|
||||
"$(BUILD_DIR)/$(APP_NAME)-$(VERSION).apk#MeshCore SAR $(VERSION) APK" \
|
||||
--title "MeshCore SAR v$(VERSION)" \
|
||||
--notes "Release $(VERSION)" \
|
||||
--latest
|
||||
@echo "Release v$(VERSION) created!"
|
||||
|
||||
release-ios: ## Build iOS and upload to TestFlight
|
||||
@echo "Building iOS and uploading to TestFlight..."
|
||||
@$(MAKE) sync-ios-version
|
||||
cd ios && fastlane release
|
||||
@echo "iOS release uploaded!"
|
||||
|
||||
clean: ## Clean build artifacts
|
||||
flutter clean
|
||||
rm -rf $(BUILD_DIR)
|
||||
|
||||
build-web: ## Build web with WebAssembly
|
||||
flutter build web --wasm --release
|
||||
|
||||
# Build for all platforms
|
||||
build-all: bump ## Build for Android and iOS
|
||||
flutter build apk --release
|
||||
flutter build ios --release --no-codesign
|
||||
Reference in New Issue
Block a user