-
Notifications
You must be signed in to change notification settings - Fork 41
Internal contribution guide
Bartosz Błaszków edited this page Jul 24, 2020
·
20 revisions
Here are a couple of points to remember when starting development in Membrane:
- When moving a task from "Backlog" to "To do" replace any notes with issue in 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 review as early as possible. You can smaller PRs from sub-task branches and use the main as
masterfor this feature - When finished assign a reviewer. Ask during 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.
- 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 branch (often called
develop) and follow the usual steps.
- Pure Elixir plugins:
- Repo:
membrane_X_pluginwhere X is format/protocol name (e.g.membrane_mpegts_plugin) - Application:
:membrane_X_plugin - Modules:
Membrane.X.*(e.g.Membrane.AAC.Parser)
- Repo:
- Plugins wrapping native library:
- Repo:
membrane_X_LIB_pluginwhere X is format/protocol name and LIB - the library (e.g.membrane_aac_fdk_plugin) - Application:
:membrane_X_LIB_plugin - Modules:
Membrane.X.LIB.*(e.g.Membrane.AAC.FDK.Decoder)
- Repo:
- Format definition (former caps):
- Repo:
membrane_X_formatwhere X is the format name (e.g.membrane_aac_format) - Application:
:membrane_X_format - Format struct:
%Membrane.X{}(e.g.%Membrane.AAC{channels: 2}) - Other modules:
Membrane.X.*, the same namespace as plugins for this format (e.g.Membrane.AAC.*)
- Repo: