Reviewed-on: echo/Luminate#2 Co-authored-by: Brendan Szymanski <hello@bscubed.dev> Co-committed-by: Brendan Szymanski <hello@bscubed.dev>
5 KiB
Contributing to Luminate
Thanks for your interest in contributing! 🎉
This document covers the workflow, conventions, and expectations for contributing to Luminate. Please read through before opening issues or pull requests.
Table of Contents
- Code of Conduct
- Getting Started
- Branching
- Issue Templates
- Pull Requests
- Coding Style
- Source File Headers
- Testing
- License
Code of Conduct
This project is governed by the Contributor Covenant. All participants, contributors, maintainers, and users are expected to treat each other with respect. Harassment or toxic behavior of any kind will not be tolerated.
Getting Started
- Ensure you have Swift 6.0+ and a compatible platform (Linux or macOS).
- Clone the repository.
- Run
swift buildfrom the project root to verify your environment. - Run
swift testto confirm all tests pass.
Branching
main is the default and release branch. It is protected; direct pushes are not permitted. All changes must go through a pull request.
Branch names must follow one of these prefixes:
| Prefix | Purpose |
|---|---|
feature/* |
New features or enhancements |
fix/* |
Bug fixes |
chore/* |
Maintenance, dependency updates, etc. |
refactor/* |
Code restructuring without behavior change |
docs/* |
Documentation-only changes |
test/* |
Adding or updating tests |
perf/* |
Performance improvements |
style/* |
Code formatting and style fixes |
Examples: feature/episode-detail-screen, fix/login-crash, chore/bump-dependencies.
Issue Templates
Please use the provided templates when creating issues:
- Bug Report - for reporting defects or unexpected behavior
- Feature Request - for proposing new features
These templates help ensure enough context is captured to act on your report quickly. Labels are applied automatically based on the template used.
Pull Requests
- Create a branch from
mainfollowing the branch naming convention. - Make your changes, adhering to the coding style and header format.
- Ensure all tests pass (
swift test) and the project builds without warnings (swift build). - Open a pull request against
mainusing the pull request template. - A maintainer will review your PR. Expect constructive feedback and possibly requests for changes.
- Once approved, your PR will be squashed into
main.
Coding Style
This project uses swift-format for code formatting. The configuration is defined in .swift-format at the project root.
Before submitting, format your code:
swift-format format --in-place --recursive Sources/
Or check for issues without modifying files:
swift-format lint --recursive Sources/
Key style rules:
- 4-space indentation
- 100-column line length
- Semicolons are not allowed
- One variable declaration per line
- Ordered imports
- Lower camel case identifiers
- No block comments (
/* */); use//or///instead - Triple-slash (
///) for documentation comments - One case per line in switch statements
Source File Headers
Every Swift source file must begin with the following header, with placeholders replaced as follows:
{{ FILE_NAME }}- the actual filename{{ YEAR }}- the file's creation year{{ NAME/USERNAME }}- your name or username{{ EMAIL }}- your email address
//
// {{ FILE_NAME }}.swift
//
// Copyright {{ YEAR }} {{ NAME/USERNAME }} <{{ EMAIL }}>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
//
// SPDX-License-Identifier: GPL-3.0-or-later
//
Testing
- Tests live in
Tests/LuminateTests/and use the Swift Testing framework (@Test,#expect). - Run the full suite with
swift test. - When adding new functionality, include corresponding tests.
- When fixing a bug, consider adding a test that reproduces the issue before applying the fix.
License
By contributing, you agree that your contributions will be licensed under the GNU General Public License v3.0 or later, the same license as the project.