Thanks for your interest in contributing! This document explains how to set up a development environment and submit changes.
Requirements:
- Xcode (see the versions exercised in CI)
- mise for Ruby/Python toolchain management (optional but recommended)
git clone https://github.com/futamura/PunycodeSwift.git
cd PunycodeSwift
mise install # installs the Ruby/Python versions from .mise.toml
bundle install # installs fastlane and other development gems# SPM
swift build
swift test
# Run a single test method
swift test --filter PunycodeTests/<testMethodName>
# Xcode-based tests for a specific platform (what CI runs)
xcodebuild -project Punycode.xcodeproj -scheme Punycode -destination "platform=macOS" clean testFastlane lanes are available for the full matrix (bundle exec fastlane tests), linting (lint_swift), and more — or use the interactive menu: ./run.sh.
CI enforces formatting with swift-format:
swift-format lint --ignore-unparsable-files --configuration .swift-format --recursive Sources TestsRun this before pushing; the Lint Code job fails on violations.
- Base your work on
developand open pull requests againstdevelop. mainreceives merges fromdevelop; releases are tagged frommain.- Keep pull requests focused. Include tests for behavior changes — the test suite lives in
Tests/PunycodeTests.swift. - All CI checks (the
CI Successgate) must pass before merging.
Releases are handled by maintainers. The version's single source of truth is MARKETING_VERSION in Punycode.xcodeproj/project.pbxproj; set it via bundle exec fastlane set_version / bump_version. Do not edit version numbers by hand in a pull request.
Use the issue templates. For security vulnerabilities, see SECURITY.md — do not open a public issue.