# Contributing to Eclipse QVTd

Thanks for your interest in this project.

## Project description

The Eclipse QVT Declarative (QVTd™) component is a partial implementation of
the Core (QVTc) and Relations (QVTr) Languages defined by the OMG standard
specification (MOF) 2.0 Query/View/Transformation. To date the QVT Declarative
component provides editing capabilities to support the QVT Declarative
Languages: QVTd 2010, Helios, 0.7.0 provides QVT models and LPG based parsers
QVTd 2011, Indigo, 0.8.0 adds IMP-based editors. QVTd 2012, Juno, 0.9.0
re-engineers the models and editors to exploit Xtext and the OCL Pivot model.
QVTd 2013, Kepler, 0.10.0 introduces editing and execution of the QVTi
simplification of QVTc. QVTd 2014, Luna, 0.11.0 introduces a source debugger for
QVTi execution. QVTd 2015, Mars, 0.12.0 provides a very preliminary Epsilon
prototype of the QVTr to QVTc to QVTu to QVTm to QVTi chain. QVTd 2016, Neon,
0.13.0 provides a preliminary QVTr to QVTc to QVTu to QVTm to QVTi chain. QVTd
2017, Oxygen, 0.14.0 provides a more useable UMLX to QVTr to QVTc to QVTu to
QVTm to QVTs to QVTi chain and so full editing, compliation, execution,
debugging. QVTd 2018, Photon, 0.15.0 goes direct from QVTr to QVTs to start
supporting QVTr overrides.

* https://projects.eclipse.org/projects/modeling.mmt.qvtd

## Terms of Use

This repository is subject to the Terms of Use of the Eclipse Foundation

* https://www.eclipse.org/legal/termsofuse.php

## Developer resources

Information regarding source code management, builds, coding standards, and
more.

* https://projects.eclipse.org/projects/modeling.mmt.qvtd/developer

The project maintains the following source code repositories

* https://git.eclipse.org/r/mmt/org.eclipse.qvtd

## Eclipse Development Process

This Eclipse Foundation open project is governed by the Eclipse Foundation
Development Process and operates under the terms of the Eclipse IP Policy.

* https://eclipse.org/projects/dev_process
* https://www.eclipse.org/org/documents/Eclipse_IP_Policy.pdf

This project uses Bugzilla to track ongoing development and issues.

* Search for issues: https://eclipse.org/bugs/buglist.cgi?product=QVTd&
* Create a new report: https://eclipse.org/bugs/enter_bug.cgi?product=QVTd&

Be sure to search for existing bugs before you create another one. Remember that
contributions are always welcome!

## Eclipse Contributor Agreement

In order to be able to contribute to Eclipse Foundation projects you must
electronically sign the Eclipse Contributor Agreement (ECA).

* https://www.eclipse.org/legal/ECA.php

The ECA provides the Eclipse Foundation with a permanent record that you agree
that each of your contributions will comply with the commitments documented in
the Developer Certificate of Origin (DCO). Having an ECA on file associated with
the email address matching the "Author" field of your contribution's Git commits
fulfills the DCO's requirement that you sign-off on your contributions.

For more information, please see the Eclipse Committer Handbook:
https://www.eclipse.org/projects/handbook/#resources-commit

## Contact

Contact the project developers via the project's "dev" list.

* https://dev.eclipse.org/mailman/listinfo/qvtd-dev

