- Remove Claude Code attribution from release notes - Remove Claude Code mentions from README acknowledgments and footer - Keep technical documentation references to CLAUDE.md
GitHub Workflows
This directory contains the CI/CD workflows for HihaArvio.
Workflows
🧪 Test (test.yml)
Trigger: Push or PR to main or develop branches
Purpose: Run all unit and integration tests to ensure code quality.
What it does:
- Runs on Ubuntu (fastest, cheapest for tests)
- Sets up .NET 8.0
- Builds the solution for
net8.0target - Runs all 189 xUnit tests
- Publishes test results and coverage reports
- Uploads test artifacts for review
Status Badge:
[](https://github.com/ivuorinen/hiha-arvio/actions/workflows/test.yml)
🏗️ Build (build.yml)
Trigger: Push or PR to main or develop branches, or manual trigger
Purpose: Build the application for all supported platforms.
What it does:
- iOS Job: Builds for iOS 15.0+ on macOS-14 runner
- macOS Catalyst Job: Builds for macOS 12.0+ on macOS-14 runner
- Installs .NET MAUI workload
- Builds without code signing (for CI verification)
- Uploads build artifacts (
.appbundles) - Reports overall build status
Platforms:
- iOS (iossimulator-arm64)
- macOS Catalyst (maccatalyst-arm64)
Status Badge:
[](https://github.com/ivuorinen/hiha-arvio/actions/workflows/build.yml)
🚀 Publish (publish.yml)
Trigger:
- Push of version tags (e.g.,
v1.0.0,v1.2.3-beta) - Manual workflow dispatch with version input
Purpose: Create GitHub releases with signed and distributable builds.
What it does:
-
Create Release Job:
- Extracts version from tag or input
- Generates changelog from git commits
- Creates GitHub release (draft for pre-releases)
-
Build iOS Job:
- Builds release version for iOS
- Sets version numbers from tag/input
- Creates
.ziparchive of.appbundle - Uploads to GitHub release
-
Build macOS Job:
- Builds release version for macOS Catalyst
- Sets version numbers from tag/input
- Creates
.ziparchive of.appbundle - Uploads to GitHub release
-
Status Job:
- Reports overall publish status
- Creates summary in GitHub Actions UI
Version Numbering:
ApplicationDisplayVersion: From git tag (e.g.,1.0.0)ApplicationVersion: From GitHub run number (incremental build number)
Pre-release Detection:
Tags containing alpha, beta, or rc are marked as pre-releases.
Status Badge:
[](https://github.com/ivuorinen/hiha-arvio/actions/workflows/publish.yml)
How to Use
Running Tests Locally
dotnet test HihaArvio.sln -f net8.0
Building Locally
# iOS
dotnet build src/HihaArvio/HihaArvio.csproj -f net8.0-ios -c Release
# macOS Catalyst
dotnet build src/HihaArvio/HihaArvio.csproj -f net8.0-maccatalyst -c Release
Creating a Release
Automatic (via Git Tag)
# Create and push version tag
git tag v1.0.0
git push origin v1.0.0
Manual (via GitHub UI)
- Go to Actions → Publish workflow
- Click "Run workflow"
- Enter version number (e.g.,
1.0.0) - Click "Run workflow"
The publish workflow will:
- Create a GitHub release
- Build iOS and macOS versions
- Attach
.zipartifacts to the release - Generate changelog from commits
Workflow Dependencies
Required GitHub Secrets
None required for current workflows (unsigned builds).
For signed releases, add:
APPLE_CERTIFICATE_BASE64: iOS/macOS signing certificateAPPLE_CERTIFICATE_PASSWORD: Certificate passwordAPPLE_PROVISIONING_PROFILE_BASE64: Provisioning profileAPPLE_TEAM_ID: Apple Developer Team ID
Runner Requirements
- Test:
ubuntu-latest(any Linux runner) - Build:
macos-14(Apple Silicon runner for MAUI workloads) - Publish:
macos-14(Apple Silicon runner for MAUI workloads)
External Actions Used
actions/checkout@v4- Checkout repositoryactions/setup-dotnet@v4- Setup .NET SDKactions/upload-artifact@v4- Upload build artifactsactions/create-release@v1- Create GitHub releasesactions/upload-release-asset@v1- Upload release assetsdorny/test-reporter@v1- Generate test reports
Troubleshooting
Tests Failing
Check test output in workflow logs. Run locally with:
dotnet test HihaArvio.sln -f net8.0 --verbosity detailed
Build Failing
- Check runner logs for specific errors
- Verify .NET MAUI workload installed correctly
- Ensure all NuGet packages are restored
- Check for platform-specific compilation errors
Publish Failing
- Verify version tag format matches
v*.*.* - Check that create-release step succeeded
- Verify build artifacts were created
- Check upload permissions and GitHub token
Manual Workflow Trigger Not Working
- Ensure you have write permissions to the repository
- Check workflow YAML syntax is valid
- Verify
workflow_dispatchevent is properly configured
Workflow Optimization
Cost Considerations
- Ubuntu runners: $0.008/minute (cheapest)
- macOS runners: $0.08/minute (10x more expensive)
Strategy:
- Tests run on Ubuntu (fast, cheap)
- Builds run on macOS only when needed (platform requirement)
- Publish only on tagged releases (infrequent)
Performance Tips
- Build jobs run in parallel (iOS and macOS simultaneously)
- Use
--no-restoreand--no-buildflags to skip redundant steps - Cache NuGet packages for faster restores
- Use artifacts for passing builds between jobs
Future Enhancements
Potential Additions
- Code coverage reporting (Codecov/Coveralls)
- Static code analysis (SonarCloud)
- Dependency scanning (Dependabot)
- Performance benchmarking
- TestFlight deployment for iOS
- Mac App Store submission automation
- Code signing for official releases
- Notarization for macOS builds
Workflow Improvements
- Add caching for NuGet packages
- Matrix builds for multiple .NET versions
- Parallel test execution
- Automatic changelog generation from conventional commits
- Semantic versioning automation
- Slack/Discord notifications on release
Maintenance
Updating Workflows
- Edit workflow YAML files
- Test changes on feature branch
- Verify workflows run successfully
- Merge to main branch
Monitoring
- Check Actions tab regularly for failures
- Review test reports for flaky tests
- Monitor build times for optimization opportunities
- Track artifact sizes for distribution planning
📝 Note: These workflows are designed for unsigned development builds. For App Store distribution, additional code signing configuration is required.