If you haven't already, sign the CLA. Common questions/answers are also listed on the CLA page.
This document covers how to contribute to an Okta Open Source project. These instructions assume you have a GitHub.com account, so if you don't have one, you will have to create one. Your proposed code changes will be published to your own fork of the Okta Python SDK project and you will submit a Pull Request for your changes to be added.
Lets get started!!!
In your browser, navigate to: Okta SDK Python
Fork the repository by clicking on the 'Fork' button on the top right hand side. The fork will happen and you will be taken to your own fork of the repository. Copy the Git repository URL by clicking on the clipboard next to the URL on the right hand side of the page under 'HTTPS clone URL'. You will paste this URL when doing the following git clone
command.
On your computer, follow these steps to setup a local repository for working on the Okta Python SDK:
$ git clone https://github.com/YOUR_ACCOUNT/okta-sdk-python.git
$ cd okta-sdk-python
$ git remote add upstream https://github.com/okta/okta-sdk-python.git
$ git checkout master
$ git fetch upstream
$ git rebase upstream/master
It is important that you create a new branch to make changes on and that you do not change the master
branch (other than to rebase in changes from upstream/master
). In this example I will assume you will be making your changes to a branch called feature_x
. This feature_x
branch will be created on your local repository and will be pushed to your forked repository on GitHub. Once this branch is on your fork you will create a Pull Request for the changes to be added to the Okta Python SDK project.
It is best practice to create a new branch each time you want to contribute to the project and only track the changes for that pull request in this branch.
$ git checkout master
$ git checkout -b feature_x
(make your changes)
$ git status
$ git add <files>
$ git commit -m "descriptive commit message for your changes"
The
-b
specifies that you want to create a new branch calledfeature_x
. You only specify-b
the first time you checkout because you are creating a new branch. Once thefeature_x
branch exists, you can later switch to it with onlygit checkout feature_x
.
Models and resource clients are auto-generated in accordance with specific openapi spec version https://github.com/okta/okta-management-openapi-spec. In order to make changes in models and/or resource clients you need to determine what is the root of changes:
- get specific openapi spec version (v2.7.1 in the following example):
cd openapi
npm install @okta/[email protected]
or copy file https://github.com/okta/okta-management-openapi-spec/blob/master/dist/spec.json
to openapi/node_modules/@okta/openapi/dist/spec.json
(in order to get specific version of a file use release tags or clone repo and checkout specific commit)
- re-generate okta-sdk-python (in openapi directory):
yarn build
-
edit needed templates under
openapi/templates
directory -
re-generate okta-sdk-python (in openapi directory):
yarn build
All tests must continue to pass when changes are made. pytest
is used as the testing framework for this SDK. Run the following to ensure your change hasn't broken anything.
> pytest
HTTP VCR recordings are used to optimize integration tests. To re-record a recording, use the following syntax. To re-record all recordings, no path should be provided.
> pytest <path/to/specific/test_case/> --record-mode=rewrite
It is important that you maintain an up-to-date master
branch in your local repository. This is done by rebasing in
the code changes from upstream/master
(the official Okta Python SDK project repository) into your local repository.
You will want to do this before you start working on a feature as well as right before you submit your changes as a pull request. I recommend you do this process periodically while you work to make sure you are working off the most recent project code.
This process will do the following:
- Checkout your local
master
branch - Synchronize your local
master
branch with theupstream/master
so you have all the latest changes from the project - Rebase the latest project code into your
feature_x
branch so it is up-to-date with the upstream code
$ git checkout master
$ git fetch upstream
$ git rebase upstream/master
$ git checkout feature_x
$ git rebase master
Now your
feature_x
branch is up-to-date with all the code inupstream/master
.
When you are happy with your changes and you are ready to contribute them, you will create a Pull Request on GitHub to do so. This is done by pushing your local changes to your forked repository (default remote name is origin
) and then initiating a pull request on GitHub.
IMPORTANT: Make sure you have rebased your
feature_x
branch to include the latest code fromupstream/master
> before you do this.
$ git push origin master
$ git push origin feature_x
Now that the feature_x
branch has been pushed to your GitHub repository, you can initiate the pull request.
To initiate the pull request, do the following:
- In your browser, navigate to your forked repository: https://github.com/YOUR_ACCOUNT/okta-sdk-python
- Click the new button called 'Compare & pull request' that showed up just above the main area in your forked repository
- Validate the pull request will be into the upstream
master
and will be from yourfeature_x
branch - Enter a detailed description of the work you have done and then click 'Send pull request'
If you are requested to make modifications to your proposed changes, make the changes locally on your feature_x
branch, re-push the feature_x
branch to your fork. The existing pull request should automatically pick up the change and update accordingly.
Once the feature_x
branch has been committed into the upstream/master
branch, your local feature_x
branch and
the origin/feature_x
branch are no longer needed. If you want to make additional changes, restart the process with a new branch.
IMPORTANT: Make sure that your changes are in
upstream/master
before you delete yourfeature_x
andorigin/feature_x
branches!
You can delete these deprecated branches with the following:
$ git checkout master
$ git branch -D feature_x
$ git push origin :feature_x