👍🎉 First off, thank you for taking the time to contribute! 🎉👍
Whether you are a novice or experienced software developer, all contributions and suggestions are welcome!
There are many ways to contribute to Featuretools, with the most common ones being contribution of code or documentation to the project.
To contribute, you can:
-
Help users on our Slack channel. Answer questions under the featuretools tag on Stack Overflow
-
Submit a pull request for one of Good First Issues
-
Make changes to the codebase, see Contributing to the codebase.
-
Improve our documentation, which can be found under the docs directory or at https://docs.featuretools.com
-
Report issues you're facing, and give a "thumbs up" on issues that others reported and that are relevant to you. Issues should be used for bugs, and feature requests only.
-
Spread the word: reference Featuretools from your blog and articles, link to it from your website, or simply star it in GitHub to say "I use it".
- If you would like to be featured on ecosystem page, you can submit a pull request.
Before starting major work, you should touch base with the maintainers of Featuretools by filing an issue on GitHub or posting a message in the #development channel on Slack. This will increase the likelihood your pull request will eventually get merged in.
-
The code is hosted on GitHub, so you will need to use Git to fork the project and make changes to the codebase. To start, go to the Featuretools GitHub page and click the
Fork
button. -
After you have created the fork, you will want to clone the fork to your machine and connect your version of the project to the upstream Featuretools repo.
git clone https://github.com/your-user-name/featuretools.git cd featuretools git remote add upstream https://github.com/alteryx/featuretools
-
Once you have obtained a copy of the code, you should create a development environment that is separate from your existing Python environment so that you can make and test changes without compromising your own work environment. You can run the following steps to create a separate virtual environment, and install Featuretools in editable mode.
python -m venv venv source venv/bin/activate make installdeps git checkout -b issue####-branch_name
-
You will need to install Spark, Scala, GraphViz, and Pandoc to run all unit tests & build docs:
If you do not install Spark/Scala, you can still run the unit tests (the Spark tests will be skipped).
Pandoc is only needed to build the documentation locally.
macOS (Intel) (use Homebrew):
brew tap AdoptOpenJDK/openjdk brew install --cask adoptopenjdk11 brew install scala apache-spark graphviz pandoc echo 'export JAVA_HOME=$(/usr/libexec/java_home)' >> ~/.zshrc echo 'export PATH="/usr/local/opt/openjdk@11/bin:$PATH"' >> ~/.zshrc
macOS (M1) (use Homebrew):
brew install openjdk@11 scala apache-spark graphviz pandoc echo 'export PATH="/opt/homebrew/opt/openjdk@11/bin:$PATH"' >> ~/.zshrc echo 'export CPPFLAGS="-I/opt/homebrew/opt/openjdk@11/include:$CPPFLAGS"' >> ~/.zprofile sudo ln -sfn /opt/homebrew/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk
Ubuntu:
sudo apt install openjdk-11-jre openjdk-11-jdk scala graphviz pandoc -y echo "export SPARK_HOME=/opt/spark" >> ~/.profile echo "export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin" >> ~/.profile echo "export PYSPARK_PYTHON=/usr/bin/python3" >> ~/.profile
Amazon Linux:
sudo amazon-linux-extras install java-openjdk11 scala -y amazon-linux-extras enable java-openjdk11
- Implement your pull request. If needed, add new tests or update the documentation.
- Before submitting to GitHub, verify the tests run and the code lints properly
# runs linting make lint # will fix some common linting issues automatically make lint-fix # runs test make test
- If you made changes to the documentation, build the documentation locally.
# go to docs and build cd docs make html # view docs locally open build/html/index.html
- Before you commit, a few lint fixing hooks will run. You can also manually run these.
# run linting hooks only on changed files pre-commit run # run linting hooks on all files pre-commit run --all-files
-
Once your changes are ready to be submitted, make sure to push your changes to GitHub before creating a pull request.
-
If you need to update your code with the latest changes from the main Featuretools repo, you can do that by running the commands below, which will merge the latest changes from the Featuretools
main
branch into your current local branch. You may need to resolve merge conflicts if there are conflicts between your changes and the upstream changes. After the merge, you will need to push the updates to your forked repo after running these commands.git fetch upstream git merge upstream/main
-
Create a pull request to merge the changes from your forked repo branch into the Featuretools
main
branch. Creating the pull request will automatically run our continuous integration. -
If this is your first contribution, you will need to sign the Contributor License Agreement as directed.
-
Update the "Future Release" section of the release notes (
docs/source/release_notes.rst
) to include your pull request and add your github username to the list of contributors. Add a description of your PR to the subsection that most closely matches your contribution:- Enhancements: new features or additions to Featuretools.
- Fixes: things like bugfixes or adding more descriptive error messages.
- Changes: modifications to an existing part of Featuretools.
- Documentation Changes
- Testing Changes
Documentation or testing changes rarely warrant an individual release notes entry; the PR number can be added to their respective "Miscellaneous changes" entries.
-
We will review your changes, and you will most likely be asked to make additional changes before it is finally ready to merge. However, once it's reviewed by a maintainer of Featuretools, passes continuous integration, we will merge it, and you will have successfully contributed to Featuretools!
When reporting issues please include as much detail as possible about your operating system, Featuretools version and python version. Whenever possible, please also include a brief, self-contained code example that demonstrates the problem.