diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..00649b8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,26 @@ +--- +name: Bug Report +about: Create a report to help us improve +title: 'bug: ' +labels: bug +assignees: '' +--- + +## Description + +## Reproduction Steps + +## Expected Behavior + +## Environment + +- **OS:** +- **Version:** +- **Python/Node/Go Version (if applicable):** + +## Checklist + +- [ ] I have checked existing issues to avoid duplicates +- [ ] I have provided a clear description of the issue +- [ ] I have included steps to reproduce (if applicable) +- [ ] I have included relevant environment details diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index a75653c..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,170 +0,0 @@ -name: 🐛 Bug Report -description: Report a bug or unexpected behavior in the Itential Python SDK -title: "[BUG] " -labels: ["bug", "triage"] -assignees: [] - -body: - - type: markdown - attributes: - value: | - Thank you for taking the time to report a bug! Please fill out this template to help us reproduce and fix the issue quickly. - - - type: textarea - id: description - attributes: - label: Bug Description - description: A clear and concise description of what the bug is - placeholder: "The SDK fails to... / When I call... / The error occurs when..." - validations: - required: true - - - type: textarea - id: code - attributes: - label: Minimal Code Example - description: Provide a minimal code example that reproduces the issue (remove sensitive information) - render: python - placeholder: | - from ipsdk import platform_factory - - # Replace with your actual (non-sensitive) values - client = platform_factory( - host="https://example.com", - username="user", - password="pass" - ) - - # Code that reproduces the bug - result = client.get("/some/endpoint") - validations: - required: false - - - type: textarea - id: error - attributes: - label: Error Messages / Stack Trace - description: Include the complete error message and stack trace if available - render: shell - placeholder: | - Traceback (most recent call last): - File "example.py", line 10, in - result = client.get("/endpoint") - ... - SomeError: Error description here - validations: - required: false - - - type: dropdown - id: severity - attributes: - label: Bug Severity - description: How severe is this bug? - options: - - Low - Minor issue, workaround available - - Medium - Affects functionality, no workaround - - High - Blocks major functionality - - Critical - SDK is unusable, data loss, or security issue - validations: - required: true - - - type: input - id: sdk_version - attributes: - label: SDK Version - description: What version of the Itential Python SDK are you using? - placeholder: "0.4.0 (run: python -c 'import ipsdk; print(ipsdk.__version__)')" - validations: - required: true - - - type: input - id: python_version - attributes: - label: Python Version - description: What version of Python are you using? - placeholder: "3.11.5 (run: python --version)" - validations: - required: true - - - type: dropdown - id: os - attributes: - label: Operating System - description: What operating system are you using? - options: - - Linux (specify distribution in additional context) - - macOS - - Windows - - Other (specify in additional context) - validations: - required: true - - - type: textarea - id: environment - attributes: - label: Environment Details - description: Additional environment information - render: yaml - placeholder: | - # Package versions (run: pip list | grep -E "(httpx|ipsdk)") - ipsdk==0.4.0 - httpx==0.28.1 - - # Itential Platform/Gateway version (if known) - platform_version: "6.x" - gateway_version: "4.x" - - # Network/proxy setup (if relevant) - proxy: false - ssl_verification: true - validations: - required: false - - - type: dropdown - id: itential_target - attributes: - label: Target System - description: What Itential system are you connecting to? - options: - - Itential Platform - - Itential Automation Gateway - - Both - - Other/Unknown - validations: - required: true - - - type: textarea - id: logs - attributes: - label: Debug Logs - description: Include relevant debug logs (enable with `logger.set_level("DEBUG")`) - render: text - placeholder: | - DEBUG:ipsdk.connection:Making GET request to /endpoint - DEBUG:ipsdk.platform:Authentication successful - ERROR:ipsdk.connection:Request failed with status 500 - validations: - required: false - - - type: textarea - id: additional_context - attributes: - label: Additional Context - description: Add any other context about the problem (screenshots, network config, etc.) - placeholder: "This started happening after... / It only occurs when... / Related configuration..." - validations: - required: false - - - type: markdown - attributes: - value: | - --- - - **Security Notice:** If this bug has security implications, please consider reporting it privately first by emailing the maintainers instead of creating a public issue. - - **Note for Maintainers:** - - Verify reproduction steps and environment - - Check for regression from recent changes - - Consider impact on supported Python versions (3.8+) - - Review error handling and logging improvements - - Test fix across supported Itential Platform/Gateway versions diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..92500a4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,19 @@ +--- +name: New Feature +about: Suggest an idea for this project +title: 'feat: ' +labels: enhancement +assignees: '' +--- + +## Problem Statement + +## Proposed Solution + +## Alternatives Considered + +## Checklist + +- [ ] I have checked existing issues to avoid duplicates +- [ ] I have described the problem and solution clearly +- [ ] I have considered the scope and complexity diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 77bccb6..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: 🚀 Feature Request -description: Suggest a new feature or enhancement for the Itential Python SDK -title: "[FEATURE] " -labels: ["enhancement", "triage"] -assignees: [] - -body: - - type: markdown - attributes: - value: | - Thank you for taking the time to suggest a new feature! Please fill out this template to help us understand your request. - - - type: textarea - id: problem - attributes: - label: Problem Description - description: What problem would this feature solve? Is your feature request related to a problem? - placeholder: "I'm frustrated when... / It would be helpful if... / Currently there's no way to..." - validations: - required: true - - - type: textarea - id: solution - attributes: - label: Proposed Solution - description: Describe the solution you'd like to see implemented - placeholder: "I would like to be able to... / The SDK should provide... / A new method/class could..." - validations: - required: true - - - type: dropdown - id: priority - attributes: - label: Priority - description: How important is this feature to you? - options: - - Low - Nice to have - - Medium - Would improve my workflow - - High - Blocks my current development - - Critical - Essential for my use case - validations: - required: true - - - type: textarea - id: additional_context - attributes: - label: Additional Context - description: Add any other context, screenshots, links, or examples about the feature request - placeholder: "Links to Itential Platform documentation, related GitHub issues, external resources, etc." - validations: - required: false - - - type: markdown - attributes: - value: | - --- - - **Note for Maintainers:** - - Features should align with the SDK's core purpose of interfacing with Itential Platform and Gateway - - Consider backward compatibility and API design consistency - - Evaluate impact on dependencies and project complexity - - Check GPL-3.0-or-later license compatibility for any new dependencies diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..9665e89 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,31 @@ +## Description + + + +## Type of Change + + + +- [ ] Bug fix +- [ ] New feature +- [ ] Documentation +- [ ] Refactor +- [ ] Chore + +## Changes Made + + + +## Testing + + + +## Checklist + +- [ ] Code follows the project's style guidelines +- [ ] Self-review of code has been performed +- [ ] Code has been commented where necessary +- [ ] Commits follow conventional format (`type: subject`) +- [ ] No secrets or credentials committed +- [ ] Documentation has been updated accordingly +- [ ] PR has been labeled appropriately (`enhancement`, `bug`, `documentation`, `refactor`, `chore`) diff --git a/CLA.md b/CLA.md new file mode 100644 index 0000000..888ee5d --- /dev/null +++ b/CLA.md @@ -0,0 +1,64 @@ +# Contributor License Agreement + +Thank you for your interest in contributing to the ipsdk project (the "Project"). + +## Individual Contributor License Agreement + +By signing this Contributor License Agreement ("CLA"), you accept and agree to the following terms and conditions for your present and future contributions submitted to Itential, Inc. ("Itential"). Except for the license granted herein to Itential and recipients of software distributed by Itential, you reserve all right, title, and interest in and to your contributions. + +### 1. Definitions + +**"You"** (or **"Your"**) shall mean the copyright owner or legal entity authorized by the copyright owner that is making this Agreement with Itential. + +**"Contribution"** shall mean any original work of authorship, including any modifications or additions to an existing work, that is intentionally submitted by You to Itential for inclusion in, or documentation of, any of the products owned or managed by Itential (the "Work"). For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to Itential or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, Itential for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by You as "Not a Contribution." + +### 2. Grant of Copyright License + +Subject to the terms and conditions of this Agreement, You hereby grant to Itential and to recipients of software distributed by Itential a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Work, and to permit persons to whom the Work is furnished to do so. + +### 3. Grant of Patent License + +Subject to the terms and conditions of this Agreement, You hereby grant to Itential and to recipients of software distributed by Itential a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by You that are necessarily infringed by Your Contribution(s) alone or by combination of Your Contribution(s) with the Work to which such Contribution(s) was submitted. If any entity institutes patent litigation against You or any other entity (including a cross-claim or counterclaim in a lawsuit) alleging that your Contribution, or the Work to which you have contributed, constitutes direct or contributory patent infringement, then any patent licenses granted to that entity under this Agreement for that Contribution or Work shall terminate as of the date such litigation is filed. + +### 4. Representations + +You represent that: + +a) You are legally entitled to grant the above license. If your employer(s) has rights to intellectual property that you create that includes your Contributions, you represent that you have received permission to make Contributions on behalf of that employer, that your employer has waived such rights for your Contributions to Itential, or that your employer has executed a separate Corporate CLA with Itential. + +b) Each of Your Contributions is Your original creation (see section 7 for submissions on behalf of others). + +c) Your Contribution submissions include complete details of any third-party license or other restriction (including, but not limited to, related patents and trademarks) of which you are personally aware and which are associated with any part of Your Contributions. + +### 5. Support + +You are not expected to provide support for Your Contributions, except to the extent You desire to provide support. You may provide support for free, for a fee, or not at all. Unless required by applicable law or agreed to in writing, You provide Your Contributions on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. + +### 6. Third Party Contributions + +Should You wish to submit work that is not Your original creation, You may submit it to Itential separately from any Contribution, identifying the complete details of its source and of any license or other restriction (including, but not limited to, related patents, trademarks, and license agreements) of which you are personally aware, and conspicuously marking the work as "Submitted on behalf of a third-party: [named here]". + +### 7. Notification of Changes + +You agree to notify Itential of any facts or circumstances of which you become aware that would make these representations inaccurate in any respect. + +## How to Sign + +To sign this CLA, please comment on your pull request with the following statement: + +``` +I have read the CLA Document and I hereby sign the CLA +``` + +## Contact Information + +If you have questions about this CLA, please contact us at: +- Email: opensource@itential.com +- Website: https://itential.com + +--- + +**Project:** ipsdk +**Organization:** Itential, Inc. +**Date:** 2026-03-18 +**License:** GPL-3.0-or-later diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e4779da..748a733 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,12 +6,14 @@ Thank you for your interest in contributing to the Itential Python SDK! This gui - [Code of Conduct](#code-of-conduct) - [Getting Started](#getting-started) +- [Contributor License Agreement](#contributor-license-agreement) - [Development Setup](#development-setup) - [Development Workflow](#development-workflow) - [Code Standards](#code-standards) - [Testing](#testing) - [Documentation](#documentation) - [Submitting Changes](#submitting-changes) +- [Pull Request Labels](#pull-request-labels) - [Release Process](#release-process) ## Code of Conduct @@ -39,6 +41,23 @@ This project adheres to a code of conduct that promotes a welcoming and inclusiv git remote add upstream https://github.com/itential/ipsdk.git ``` +## Contributor License Agreement + +**All contributors must sign a Contributor License Agreement (CLA) before their contributions can be merged.** + +The CLA ensures that: +- You have the right to contribute the code +- Itential has the necessary rights to use and distribute your contributions +- The project remains legally compliant + +When you submit your first pull request, please comment with the following statement to sign the CLA: + +``` +I have read the CLA Document and I hereby sign the CLA +``` + +The full CLA text is available in [CLA.md](CLA.md). + ## Development Setup ### Install Dependencies @@ -69,6 +88,8 @@ This will run linting, formatting, and security checks before each commit. - `main` - Main development branch - `feature/your-feature` - Feature branches - `fix/issue-description` - Bug fix branches +- `chore/task-description` - Maintenance, CI, and dependency updates +- `docs/topic` - Documentation-only changes - `security/security-improvement` - Security-related changes ### Creating a Feature Branch @@ -335,6 +356,27 @@ Longer explanation if needed. ``` +## Pull Request Labels + +This project uses Release Drafter to automatically generate release notes. Please apply appropriate labels to your pull requests: + +### Change Type Labels +- `feature`, `enhancement` - New features and enhancements +- `fix`, `bug`, `bugfix` - Bug fixes and corrections +- `chore`, `dependencies`, `refactor` - Maintenance, dependency updates, and refactoring +- `documentation`, `docs` - Documentation changes +- `security` - Security fixes and improvements +- `breaking`, `breaking-change` - Breaking changes that require a major version bump + +### Version Impact Labels +- `major` - Breaking changes (increments major version) +- `minor` - New features (increments minor version) +- `patch` - Bug fixes and maintenance (increments patch version) + +### Special Labels +- `skip-changelog` - Exclude from release notes +- `duplicate`, `question`, `invalid`, `wontfix` - Issues that do not represent changes + ## Release Process ### Versioning