Skip to content

CI/CD improvements: SwiftLint integration, automated releases, and branch protection#17

Merged
othmansh0 merged 15 commits into
developfrom
feature/cicd-improvements
Jan 16, 2026
Merged

CI/CD improvements: SwiftLint integration, automated releases, and branch protection#17
othmansh0 merged 15 commits into
developfrom
feature/cicd-improvements

Conversation

@othmansh0
Copy link
Copy Markdown
Owner

@othmansh0 othmansh0 commented Jan 11, 2026

Summary

This PR adds CI/CD improvements to enhance code quality and automate releases with a proper QA testing flow.

Changes

1. SwiftLint Integration

  • Added .swiftlint.yml configuration
  • Added separate lint job in testing workflow using Docker-based action on Ubuntu
  • Lint job runs before tests (needs: lint) - failures block the test job
  • Uses norio-nomura/action-swiftlint@3.2.1 on ubuntu-latest to avoid macOS 15/Xcode 26 crashes

2. Release Workflow with QA Testing Flow

  • Triggers when PR from release/* branch is merged to main
  • Version extracted from branch name (release/1.2.01.2.0)
  • Auto-creates git tag and GitHub Release after successful build
  • Added release/* branches to /build command for QA testing

Release Flow:

  1. git checkout -b release/1.2.0 develop
  2. Open PR: release/1.2.0 → main
  3. Comment "/build" → QA tests TestFlight build
  4. Fix bugs, "/build" again → repeat until QA approves
  5. Merge PR → auto-release to TestFlight + GitHub Release

…tection docs

- Add .swiftlint.yml with strict configuration
- Add SwiftLint step to testing workflow
- Add lint lane to Fastfile for local use
- Create release.yml workflow for tag-triggered releases (v*.*.*)
- Create BRANCH_PROTECTION.md guide for repository settings
- Update README.md with new workflows and lanes
@othmansh0 othmansh0 self-assigned this Jan 11, 2026
- Add error handling for SwiftLint installation
- Remove --strict flag to avoid crashes
- Disable strict opt-in rules that cause issues
- Add warning message for lint failures
SwiftLint currently crashes with Xcode 26.x on CI runners.
Making it non-blocking with continue-on-error until compatibility is fixed.
Developers can still run 'bundle exec fastlane lint' locally.
- Replace manual brew install with official SwiftLint GitHub Action
- Simplify .swiftlint.yml config to avoid potential crash triggers
- Remove strict mode from Fastlane lint lane
- Keep SwiftLint non-blocking until Xcode 26 support is confirmed
SwiftLint crashes on Xcode 26 due to LLVM incompatibility (known issue).
Solution: Run lint on macos-14 with Xcode 15.4 (compatible), tests on macos-15 with Xcode 26.

- lint job: macos-14, Xcode 15.4, norio-nomura/action-swiftlint
- test job: macos-15, Xcode 26.x, Fastlane tests
Docker container actions don't work on macOS runners.
Using 'brew install swiftlint' on macos-14 with Xcode 15.4.
- Use macos-15 for lint job (same as test job)
- Remove glob patterns from .swiftlint.yml that may cause CI issues
- Disable type_name and identifier_name rules for project compatibility
…de 26)

SwiftLint 0.63.0 crashes on Xcode 26 due to LLVM incompatibility.
Using Xcode 16.2 for lint job, Xcode 26 for tests.
SwiftLint is not pre-installed on ubuntu-latest, so we use the
norio-nomura/action-swiftlint Docker action which packages SwiftLint.
Branch protection rules must be configured manually in GitHub UI.
This file was just documentation with no practical value.
- Remove unnecessary comments from release.yml
- Remove fastlane lint lane (CI uses Docker action instead)
- Update README to remove fastlane lint reference
- Release triggers when PR from release/* is merged to main
- Version extracted from branch name (release/1.2.0 → 1.2.0)
- Auto-creates git tag after successful build
- Allow /build comments on release/* branches for QA testing
- Update README with new release flow
@othmansh0 othmansh0 merged commit 1399b5f into develop Jan 16, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant