-
Notifications
You must be signed in to change notification settings - Fork 39
Internal contribution guide
Here are a couple of points to remember when starting development in Membrane:
-
The task assignee is responsible for watching over it:
- asking for needed resources/explanation/help
- keeping it in the proper place in the kanban
- assigning reviewers and making sure they remember about the review
- merging pull requests
- transferring the task to someone else if necessary.
-
When moving a task from "Backlog" to "To do" replace any notes with an issue in the proper repo and assign yourself.
-
Create a branch with a meaningful name
-
You can open a draft PR right away.
-
Remember to link the issue to the PR (either by adding
Closes #
and PR number or using the UI) -
Try to avoid making huge PRs - if the feature you're working on is big, create draft PR with a list of steps and ask for a review as early as possible. You can create smaller PRs from sub-task branches and use the main as
master
for this feature -
Before requesting review generate docs and check if there are only modules or functions that are part of API there, they have specs and docs, there are no dead links nor out-of-date content etc. It's worth doing even if you didn't change the docs. Do the same when reviewing someone else's PR.
-
When finished, make a self-review before assigning a reviewer.
-
Assign a reviewer. Ask during the stand-up meeting who can do the review. You need at least one approval from one of the core team members and passing CI tests to merge new features.
-
When reviewer requests fixes, refer to each comment in at least one of the following ways:
- Fix the problem. GitHub usually detects that and automatically marks the comment as 'outdated', but if it doesn't, add a 'done' reply.
- Start a discussion or ask for an explanation in a reply.
- If a comment requests new, big features, suggest moving that to a separate PR. Remember to create an issue for that and pin it to the proper column in the kanban.
Remember to watch for comments accidentally marked as outdated and don't mark someone else's comments as resolved.
-
When you consider all the comments fixed, re-request the review.
-
Do not force push changes to the reviewed commits - this breaks 'changes since last review' functionality on GH
-
Always remove your branch after merging the PR. It should happen automatically. If not, enable that in settings (or ask someone with permissions to do this)
- Each new plugin should have its own repo and hex package
- The plugin should contain one or more elements related to the same format/protocol (e.g. H264 plugin may contain decoder, encoder and parser)
- One plugin should only depend on at most one native library, so if you need separate libraries for decoder and encoder each should be a separate plugin
- When starting development you should create new repo based on https://github.com/membraneframework/membrane_template_plugin, enable CI and create a branch (often called
develop
) and follow the usual steps. - Place your plugin in the packages list with
[In progress]
tag.
- Make sure the repo has proper README with usage example, docs and no dependencies from Git repos
- [If updating] Bump package version according to Semantic Versioning in
mix.exs
andREADME.md
- Checkout to
master
, make sure there are no uncommitted changes (viagit status
) - Run
mix hex.publish
. Publish undermembraneframework
organization (you need an account on hex.pm added to this organization) - Add tag in format
v0.0.0
matching package version (git tag v0.0.0
) - [IMPORTANT!] Push the tag to repo (
git push --tags
) - Create a release on GitHub (go to tags, click three dots button and then create release). Add some release notes.
- Update the repository description and the packages list.
- Checkout to the latest tag e.g.
git checkout v0.3.0
- Write in README.md that package has been moved like here
- Update bugfix version in
mix.exs
e.g. from0.3.0
to0.3.1
- Run
mix hex.publish
. Publish undermembraneframework
organization (you need an account on hex.pm added to this organization) - Retire package with
mix hex.retire old_name version_with_updated_bugifx renamed --message "Renamed to new_name
- Don't push these changes to the github. Run
git checkout -f master
- Update minor version of renamed package and release