We welcome contributions to the UAC project in many forms, and there's always plenty to do!
First things first, please review the project's Code of Conduct before participating. We must keep things civil.
Here are a couple of things we are looking for help with:
Have you identified a new artifact that is still not collected by UAC? Please create a new artifact and submit it via a new Pull Request.
Please see Artifacts definition docs for more information.
You can request a new feature by submitting an issue to our GitHub Repository. If you would like to implement a new feature, please submit an issue with a proposal for your work first, to be sure that we can use it. This will also allow us to better coordinate our efforts, prevent duplication of work, and help you craft the change so that it is successfully accepted into the project.
If you are a user and you find a bug, please submit an issue. Please try to provide sufficient information for someone else to reproduce the issue. One of the project's maintainers should respond to your issue soon.
Please search within our already-reported bugs before raising a new one to make sure you're not raising a duplicate.
Share your experience with the community about how UAC is helping you by writing an article about it. Or write a How-To or Tutorial on how to use UAC for specific cases and let us know. We'd love to share your work with the rest of the community by including it in our docs.
Before you submit an issue, please search the issue tracker, maybe an issue for your problem already exists and the discussion might inform you of workarounds readily available.
We want to fix all the issues as soon as possible, but before fixing a bug we need to reproduce and confirm it. To reproduce bugs we will systematically ask you to provide sufficient information for someone else to reproduce the issue.
Unfortunately, we are not able to investigate/fix bugs without a minimal reproduction, so if we don't hear back from you we are going to close an issue that doesn't have enough info to be reproduced.
Before you submit your Pull Request (PR) consider the following guidelines. We are using the GitHub flow process to manage code contributions. If you are unfamiliar, please review that link before proceeding.
The repo holds two main branches:
main: Where the source code of HEAD always reflects a production-ready state.
develop: Where the source code of HEAD always reflects a state with the latest delivered development changes for the next release. When the source code in the develop branch reaches a stable point and is ready to be released, all of the changes will be merged back into the main branch and then tagged with a release number.
All Pull Requests must be submitted to the develop branch.
-
Search GitHub for an open or closed PR that relates to your submission. You don't want to duplicate effort.
-
Create a fork (if you haven't already).
-
Clone it locally.
git clone [email protected]:YOUR_GITHUB_USERNAME/uac.git
- Add the upstream repository as a remote.
git remote add upstream [email protected]:tclahr/uac.git
- Create a new develop branch.
git checkout -b develop
- Make sure your local develop branch is up to date with the upstream one.
git pull upstream develop
- Make your changes in a new branch.
git checkout -b my-feature-branch develop
-
Create your code following our Coding Rules.
-
Test your code against as many systems as you can. For instance, your code can fully work on a Linux but not on a FreeBSD system.
-
Commit your changes using a descriptive commit message that follows our commit message guidelines. Don't commit code as an unrecognized author. Having commits with unrecognized authors makes it more difficult to track who wrote which part of the code. Ensure your Git client is configured with the correct email address and linked to your GitHub user.
git commit -s
- Push your branch to GitHub.
git push origin my-feature-branch
- In GitHub, open a Pull Request and select the develop branch as the base. Never send a Pull Request to main.
- If we suggest changes then:
- Make the required updates using the same branch.
- Re-run the tests.
- Push to your GitHub repository (this will update your Pull Request).
That's it! Thank you for your collaboration!
After your pull request is merged, you can safely delete your branch and pull the changes from the develop (upstream) repository:
- Check out the develop branch:
git checkout -f develop
- Delete the remote branch on GitHub either through the GitHub web UI or your local shell as follows:
git push origin --delete my-feature-branch
- Delete the local branch:
git branch -D my-feature-branch
- Update your develop branch with the latest upstream version:
git pull --ff upstream develop
To ensure consistency throughout the source code, keep these rules in mind as you are working:
- You can use the Shell Style Guide as a reference. Keep in mind that UAC is meant to run on any bourne shell, so some features like arrays, command substitution
$(command)
and tests[[ ... ]]
are not fully supported by most of them. - Use ShellCheck to identify common bugs and warnings in your code.
We have very precise rules over how our git commit messages can be formatted. This leads to more readable messages that are easy to follow when looking through the project history.
Each commit message consists of a header, a blank line and a body. The header has a special format that includes a type and a subject.
<type>: <subject>
<BLANK LINE>
<body>
Any line of the commit message cannot be longer than 100 characters! This allows the message to be easier to read on GitHub as well as in various git tools.
Samples:
docs: update changelog to v2.0.0
fix: fixed issue #15
Must be one of the following:
- docs: Documentation only changes.
- feat: A new feature.
- artif: A new artifact or changes to an existing one.
- fix: A bug fix.
- perf: A code change that improves performance.
- refactor: A code change that neither fixes a bug nor adds a feature.
- style: Changes that do not affect the meaning of the code (white space, formatting, missing semi-colons, etc).
The subject must contain a succinct description of the change:
- use the imperative, present tense: "change" not "changed" nor "changes"
- don't capitalize the first letter
- no dot (.) at the end
Just as in the subject, use the imperative, present tense: "change" not "changed" nor "changes". The body should include the motivation for the change and contrast this with previous behavior. It also needs to include any references to issue(s) being addressed (e.g. Closes #15, Fixes #21).