First off, thanks for taking the time to contribute! ❤️
The guidelines described in this document apply to the X-Road core and all the official X-Road extensions (e.g., X-Road Metrics, MISP2).
All types of contributions are encouraged and valued. See the Table of Contents for different ways to help and details about how this project handles them. Please make sure to read the relevant section before making your contribution. It will make it a lot easier for us maintainers and smooth out the experience for all involved. The community looks forward to your contributions. 🎉
Before you ask a question, it is best to check the existing resources first:
If you then still feel the need to ask a question and need clarification, please submit a question to the X-Road community Slack or open an issue.
If you're not a member of the X-Road community Slack yet, you can join here.
We appreciate community contributions to X-Road open source code repositories managed by NIIS. By signing a contributor licence agreement, we ensure that the community is free to use your contributions.
The NIIS Contributor Licence Agreement (CLA) document is available as a Word and PDF document.
When you contribute to X-Road open source project on GitHub with a new pull request, it will be checked whether you have signed the CLA. If required, the pull request will be commented on with further instructions. The CLA must be received by NIIS prior to approval of the pull request. The CLA covers any and all submissions that the contributor now, or in the future, submits to the project. Therefore, it is enough to sign the CLA once before the first contribution, and not with every contribution.
The CLA can be signed digitally using a
qualified electronic signature.
A digitally signed CLA must be emailed to [email protected]
.
All contributors may use the Dokobit e-signing service to sign the CLA. Contributors from
Belgium, Estonia, Finland, Iceland, Latvia, Lithuania, Poland, Portugal and Spain may use Dokobit with their national
eID providers. Instead, contributors from countries without an approved national eID provider must first send
their name and email address to [email protected]
. Please use "Sign X-Road CLA with Dokobit" as the email subject. After
receiving the information, we'll send you the instructions on how to proceed by email.
Alternatively, the CLA can be printed out, signed manually and sent to NIIS by post:
MTÜ Nordic Institute for Interoperability Solutions
Hobujaama 4
10151 Tallinn
Estonia
X-Road enhancement requests and error reports can be submitted directly to this GitHub repository:
- For enhancement requests, please create a discussion containing your proposal in the specific software repository in
the
Ideas
category: - To report an error, please create an issue in the specific software repository:
Before submitting a bug:
- Make sure that you are using the latest version.
- Check the Knowledge Base for a list of common questions and problems.
- Ask the community on the X-Road community Slack if the problem is a known issue or a feature. Also, check the Slack history for previous questions on the same topic.
- Perform a cursory search on the X-Road, X-Road Metrics or MISP2 backlogs depending on the software, to see if the problem has already been reported. If it has and the issue is still open, add a comment to the existing issue instead of opening a new one.
- Perform a cursory search on the X-Road, X-Road Metrics or MISP2 GitHub issues depending on the software, to see if the problem has already been reported. If it has and the issue is still open, add a comment to the existing issue instead of opening a new one.
When submitting a bug, explain the problem and include additional details to help maintainers reproduce the problem:
- Summary of the problem.
- Software version.
- Host OS and version.
- More detailed description of the problem that includes:
- Steps to reproduce the issue.
- Expected result.
- Actual result.
- Related log files.
Before submitting an enhancement request:
- Make sure that you are using the latest version.
- Read the software specific documentation for X-Road, X-Road Metrics or MISP2 carefully and find out if the functionality is already covered, maybe by an individual configuration.
- Perform a search on the X-Road, X-Road Metrics or MISP2 backlogs to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.
- Perform a search on the X-Road, X-Road Metrics or MISP2 discussion boards ideas category to see if the enhancement has already been suggested. If it has, add a comment to the existing discussion instead of opening a new one.
- Find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Keep in mind that we want features that will be useful to the majority of our users and not just a small subset. If you're just targeting a minority of users, consider writing an add-on or an extension.
The evaluation process of the enhancement requests is described here.
Security issues and vulnerabilities are reported privately to the X-Road Service
Desk using the
Report a software problem
request type.
Sign up for an account and
get access to the X-Road Service Desk.
Another alternative to report security issues and vulnerabilities is the X-Road bug bounty program. Visit the program details to get started.
Unsure where to begin contributing to X-Road? You can start by looking through these good first issue
and
help wanted
issues:
- Good first issues for X-Road
- Help wanted issues for X-Road
- Good first issues for X-Road Metrics
- Help wanted issues for X-Road Metrics
X-Road can be developed locally. For instructions on how to do this, see the build instructions. Also, completing the X-Road Academy Core Developer training is strongly recommended.
To ease the review work and to make clearer what changes are done, a pull request should contain one feature or bug fix. The larger the pull request is, the more complex it is to review. Pull requests are generally reviewed and accepted on first-come, first-served (FCFS) basis. Also, it's recommended to start the CLA process already before opening a pull request.
If a pull request implements a new feature or a bigger change in an existing feature, it's strongly recommended to submit an enhancement request in advance and indicate in the enhancement request that the implementation will be provided too. In that way, it's possible to ensure in advance that the pull request will be approved.
Also, in case you're planning to implement an existing backlog item, let NIIS know about your plans in advance to avoid duplicate work.
In case a pull request includes changes in the architecture, it's strongly recommended to discuss the changes with NIIS in advance. Agreeing on the details of the changes upfront will likely speed up the approval process.
Before opening a pull request, it's recommended to review the following checklist and make sure that all the requirements are met.
- Are the features OK to be accepted to the project?
- Does the PR meet the style guides?
- Is the source code available?
- Are all the required dependencies available?
- No merge conflicts?
- Is there enough test coverage?
- During the pull request review process it's checked that the test coverage is equal or higher than in the previous version.
- SonarQube checks pass?
- During the pull request review process it's checked that SonarQube shows no bugs or code smells of severity blocker or critical.
- Does the build and the test cases work?
- Does the packaging work (Ubuntu & RHEL)?
- Can the software be installed on a clean system (Ubuntu & RHEL)?
- Can the software version be upgraded from two previous versions?
- Has the documentation been updated?
- Is the code licensing OK?
- Has the contributor delivered a signed CLA?
Branching pattern follows the
Gitflow model.
Two long-running, perpetual branches – master
and develop
– together with additional branches – feature
, beta
,
released minor version
and bugfix
– are used.
master
branch is used to release X-Road software into production.develop
branch is used to accumulate features for the next big release.feature
branches are used to work on features (or closely related sets of features) to enhance X-Road core software.feature
branches are named using the id of the feature's backlog item, e.g.,XRDDEV-123
for JIRA tickets orISSUE123
for GitHub issues.
beta
branches are used to prepare new production releases.released minor version
branches are used to track all patch versions released related to a specific minor version.- for example,
release-7.0
branch contains version7.0.0
and all its bugfix releases (e.g.,7.0.1
,7.0.2
, ...,7.0.5
, etc.).
- for example,
bugfix
branches are used to prepare patch releases.
The latest development version is always available in the develop
branch and the latest stable version in the
master
branch.
Pull requests made against the X-Road/develop
branch MUST follow these conventions:
- Pull request name format is
<TYPE>: <ISSUE_ID> <SHORT_DESCRIPTION>
, for example:feat: XRDDEV-1669 Allow overriding startup parameters
TYPE
= conventional commit type. One of: build|chore|ci|docs|feat|fix|perf|refactor|revert|style|testISSUE_ID
= id of the feature's / bug's backlog item. If the pull request is not related to any backlog item,ISSUE_ID
can be omitted. If the issue is a GitHub issue, it can beISSUE1669 Allow overriding startup parameters
instead.SHORT_DESCRIPTION
= short description of the changes included in the pull request.
- The pull request's description field must contain more detailed information about the changes. Any relevant additional information should also be provided here.
Git commit messages MUST follow conventional commits guidelines.
The commit message should be structured as follows:
<type>[optional scope]: <subject>
[optional body]
[optional footer(s)]
The message should be formatted as follows:
- Separate subject from body with a blank line.
- Do not end the subject line with a period.
- Capitalize the subject line and each paragraph.
- Use the imperative mood in the subject line.
- Wrap lines at 72 characters.
- Use the body to explain what and why you have done something. In most cases, you can leave out details about how a change has been implemented.
If a commit refers to an issue, the issue ID must be referenced. For example:
$ git commit -m "fix: Subject line
More detailed description.
Refs: XRDDEV-123"
If the commit is not related to any backlog item, the issue ID can be omitted.
The versions merged to X-Road/master
branch are tagged with annotated tags. E.g.
git tag -a 7.0.0 -m "X-Road 7.0.0"
The versions merged to X-Road/develop
branch are not tagged.
Checkstyle MUST NOT issue any errors with the configuration defined in here.